From 5e8feb64d6a3cf50360c066e4595e41021bd0f9c Mon Sep 17 00:00:00 2001 From: Craig Scott Date: Mon, 31 May 2021 16:40:54 +1000 Subject: Update to latest qml CMake API The new qml CMake API places a closer relationship between the backing target and the plugin target. Both are typically created together and they share a lot of common details. Instead of creating them in different parts of the source tree, they are now specified together. The src/imports area has effectively been absorbed into the other corresponding subdirectories below src with this change. Task-number: QTBUG-91621 Change-Id: I9bd32e9eb78c198ccc9db04e2829303cac323502 Reviewed-by: Fabian Kosmale --- src/CMakeLists.txt | 5 +- src/imports/CMakeLists.txt | 24 - src/imports/controls/CMakeLists.txt | 120 - src/imports/controls/basic/AbstractButton.qml | 47 - src/imports/controls/basic/Action.qml | 40 - src/imports/controls/basic/ActionGroup.qml | 40 - src/imports/controls/basic/ApplicationWindow.qml | 45 - src/imports/controls/basic/BusyIndicator.qml | 62 - src/imports/controls/basic/Button.qml | 79 - src/imports/controls/basic/ButtonGroup.qml | 40 - src/imports/controls/basic/CMakeLists.txt | 307 - src/imports/controls/basic/CheckBox.qml | 92 - src/imports/controls/basic/CheckDelegate.qml | 109 - src/imports/controls/basic/ComboBox.qml | 140 - src/imports/controls/basic/Container.qml | 47 - src/imports/controls/basic/Control.qml | 47 - src/imports/controls/basic/DelayButton.qml | 104 - src/imports/controls/basic/Dial.qml | 79 - src/imports/controls/basic/Dialog.qml | 85 - src/imports/controls/basic/DialogButtonBox.qml | 72 - src/imports/controls/basic/Drawer.qml | 78 - src/imports/controls/basic/Frame.qml | 55 - src/imports/controls/basic/GroupBox.qml | 73 - .../controls/basic/HorizontalHeaderView.qml | 67 - src/imports/controls/basic/ItemDelegate.qml | 76 - src/imports/controls/basic/Label.qml | 46 - src/imports/controls/basic/Menu.qml | 80 - src/imports/controls/basic/MenuBar.qml | 62 - src/imports/controls/basic/MenuBarItem.qml | 76 - src/imports/controls/basic/MenuItem.qml | 104 - src/imports/controls/basic/MenuSeparator.qml | 57 - src/imports/controls/basic/Page.qml | 56 - src/imports/controls/basic/PageIndicator.qml | 71 - src/imports/controls/basic/Pane.qml | 54 - src/imports/controls/basic/Popup.qml | 63 - src/imports/controls/basic/ProgressBar.qml | 66 - src/imports/controls/basic/RadioButton.qml | 85 - src/imports/controls/basic/RadioDelegate.qml | 102 - src/imports/controls/basic/RangeSlider.qml | 95 - src/imports/controls/basic/RoundButton.qml | 80 - src/imports/controls/basic/ScrollBar.qml | 75 - src/imports/controls/basic/ScrollIndicator.qml | 75 - src/imports/controls/basic/ScrollView.qml | 64 - src/imports/controls/basic/Slider.qml | 82 - src/imports/controls/basic/SpinBox.qml | 134 - src/imports/controls/basic/SplitView.qml | 54 - src/imports/controls/basic/StackView.qml | 66 - src/imports/controls/basic/SwipeDelegate.qml | 77 - src/imports/controls/basic/SwipeView.qml | 65 - src/imports/controls/basic/Switch.qml | 91 - src/imports/controls/basic/SwitchDelegate.qml | 108 - src/imports/controls/basic/TabBar.qml | 69 - src/imports/controls/basic/TabButton.qml | 72 - src/imports/controls/basic/TextArea.qml | 74 - src/imports/controls/basic/TextField.qml | 82 - src/imports/controls/basic/ToolBar.qml | 53 - src/imports/controls/basic/ToolButton.qml | 74 - src/imports/controls/basic/ToolSeparator.qml | 57 - src/imports/controls/basic/ToolTip.qml | 68 - src/imports/controls/basic/Tumbler.qml | 74 - src/imports/controls/basic/VerticalHeaderView.qml | 67 - src/imports/controls/basic/basic.pri | 66 - .../controls/basic/images/arrow-indicator.png | Bin 169 -> 0 bytes .../controls/basic/images/arrow-indicator@2x.png | Bin 225 -> 0 bytes .../controls/basic/images/arrow-indicator@3x.png | Bin 285 -> 0 bytes .../controls/basic/images/arrow-indicator@4x.png | Bin 352 -> 0 bytes src/imports/controls/basic/images/check.png | Bin 424 -> 0 bytes src/imports/controls/basic/images/check@2x.png | Bin 713 -> 0 bytes src/imports/controls/basic/images/check@3x.png | Bin 999 -> 0 bytes src/imports/controls/basic/images/check@4x.png | Bin 1188 -> 0 bytes .../controls/basic/images/dial-indicator.png | Bin 185 -> 0 bytes .../controls/basic/images/dial-indicator@2x.png | Bin 243 -> 0 bytes .../controls/basic/images/dial-indicator@3x.png | Bin 284 -> 0 bytes .../controls/basic/images/dial-indicator@4x.png | Bin 307 -> 0 bytes src/imports/controls/basic/images/double-arrow.png | Bin 303 -> 0 bytes .../controls/basic/images/double-arrow@2x.png | Bin 484 -> 0 bytes .../controls/basic/images/double-arrow@3x.png | Bin 673 -> 0 bytes .../controls/basic/images/double-arrow@4x.png | Bin 827 -> 0 bytes .../controls/basic/images/drop-indicator.png | Bin 157 -> 0 bytes .../controls/basic/images/drop-indicator@2x.png | Bin 226 -> 0 bytes .../controls/basic/images/drop-indicator@3x.png | Bin 297 -> 0 bytes .../controls/basic/images/drop-indicator@4x.png | Bin 376 -> 0 bytes src/imports/controls/basic/impl/CMakeLists.txt | 42 - .../basic/impl/qquickbasicbusyindicator.cpp | 223 - .../basic/impl/qquickbasicbusyindicator_p.h | 93 - .../controls/basic/impl/qquickbasicdial.cpp | 122 - .../controls/basic/impl/qquickbasicdial_p.h | 82 - .../controls/basic/impl/qquickbasicprogressbar.cpp | 280 - .../controls/basic/impl/qquickbasicprogressbar_p.h | 91 - .../impl/qtquickcontrols2basicstyleimplplugin.cpp | 61 - src/imports/controls/basic/qquickbasicstyle.cpp | 246 - src/imports/controls/basic/qquickbasicstyle_p.h | 151 - src/imports/controls/basic/qquickbasictheme.cpp | 89 - src/imports/controls/basic/qquickbasictheme_p.h | 65 - .../basic/qtquickcontrols2basicstyleplugin.cpp | 79 - .../basic/qtquickcontrols2basicstyleplugin.qrc | 24 - .../controls/designer/AbstractButtonSection.qml | 122 - .../controls/designer/BusyIndicatorSpecifics.qml | 74 - src/imports/controls/designer/ButtonSection.qml | 74 - src/imports/controls/designer/ButtonSpecifics.qml | 63 - .../controls/designer/CheckBoxSpecifics.qml | 64 - .../controls/designer/CheckDelegateSpecifics.qml | 68 - src/imports/controls/designer/CheckSection.qml | 68 - .../controls/designer/ComboBoxSpecifics.qml | 119 - src/imports/controls/designer/ContainerSection.qml | 59 - src/imports/controls/designer/ControlSection.qml | 114 - src/imports/controls/designer/ControlSpecifics.qml | 55 - .../controls/designer/DelayButtonSpecifics.qml | 81 - src/imports/controls/designer/DialSpecifics.qml | 172 - src/imports/controls/designer/FrameSpecifics.qml | 59 - .../controls/designer/GroupBoxSpecifics.qml | 77 - src/imports/controls/designer/InsetSection.qml | 119 - .../controls/designer/ItemDelegateSection.qml | 58 - .../controls/designer/ItemDelegateSpecifics.qml | 63 - src/imports/controls/designer/LabelSpecifics.qml | 86 - src/imports/controls/designer/PaddingSection.qml | 101 - .../controls/designer/PageIndicatorSpecifics.qml | 98 - src/imports/controls/designer/PageSpecifics.qml | 101 - src/imports/controls/designer/PaneSection.qml | 73 - src/imports/controls/designer/PaneSpecifics.qml | 59 - .../controls/designer/ProgressBarSpecifics.qml | 121 - .../controls/designer/RadioButtonSpecifics.qml | 59 - .../controls/designer/RadioDelegateSpecifics.qml | 63 - .../controls/designer/RangeSliderSpecifics.qml | 189 - .../controls/designer/RoundButtonSpecifics.qml | 84 - .../controls/designer/ScrollViewSpecifics.qml | 90 - src/imports/controls/designer/SliderSpecifics.qml | 180 - src/imports/controls/designer/SpinBoxSpecifics.qml | 142 - .../controls/designer/StackViewSpecifics.qml | 55 - .../controls/designer/SwipeDelegateSpecifics.qml | 63 - .../controls/designer/SwipeViewSpecifics.qml | 91 - .../controls/designer/SwitchDelegateSpecifics.qml | 59 - src/imports/controls/designer/SwitchSpecifics.qml | 59 - src/imports/controls/designer/TabBarSpecifics.qml | 107 - .../controls/designer/TabButtonSpecifics.qml | 59 - .../controls/designer/TextAreaSpecifics.qml | 104 - .../controls/designer/TextFieldSpecifics.qml | 101 - src/imports/controls/designer/ToolBarSpecifics.qml | 79 - .../controls/designer/ToolButtonSpecifics.qml | 63 - .../controls/designer/ToolSeparatorSpecifics.qml | 71 - src/imports/controls/designer/TumblerSpecifics.qml | 102 - src/imports/controls/designer/designer.pri | 52 - .../designer/images/busyindicator-icon.png | Bin 320 -> 0 bytes .../designer/images/busyindicator-icon16.png | Bin 229 -> 0 bytes .../designer/images/busyindicator-icon@2x.png | Bin 643 -> 0 bytes .../controls/designer/images/button-icon.png | Bin 162 -> 0 bytes .../controls/designer/images/button-icon16.png | Bin 145 -> 0 bytes .../controls/designer/images/button-icon@2x.png | Bin 259 -> 0 bytes .../controls/designer/images/checkbox-icon.png | Bin 258 -> 0 bytes .../controls/designer/images/checkbox-icon16.png | Bin 230 -> 0 bytes .../controls/designer/images/checkbox-icon@2x.png | Bin 336 -> 0 bytes .../controls/designer/images/combobox-icon.png | Bin 156 -> 0 bytes .../controls/designer/images/combobox-icon16.png | Bin 155 -> 0 bytes .../controls/designer/images/combobox-icon@2x.png | Bin 185 -> 0 bytes .../controls/designer/images/delaybutton-icon.png | Bin 189 -> 0 bytes .../designer/images/delaybutton-icon16.png | Bin 160 -> 0 bytes .../designer/images/delaybutton-icon@2x.png | Bin 286 -> 0 bytes src/imports/controls/designer/images/dial-icon.png | Bin 267 -> 0 bytes .../controls/designer/images/dial-icon16.png | Bin 243 -> 0 bytes .../controls/designer/images/dial-icon@2x.png | Bin 505 -> 0 bytes .../controls/designer/images/frame-icon.png | Bin 121 -> 0 bytes .../controls/designer/images/frame-icon16.png | Bin 117 -> 0 bytes .../controls/designer/images/frame-icon@2x.png | Bin 125 -> 0 bytes .../controls/designer/images/groupbox-icon.png | Bin 133 -> 0 bytes .../controls/designer/images/groupbox-icon16.png | Bin 125 -> 0 bytes .../controls/designer/images/groupbox-icon@2x.png | Bin 136 -> 0 bytes .../controls/designer/images/itemdelegate-icon.png | Bin 127 -> 0 bytes .../designer/images/itemdelegate-icon16.png | Bin 124 -> 0 bytes .../designer/images/itemdelegate-icon@2x.png | Bin 133 -> 0 bytes .../controls/designer/images/label-icon.png | Bin 206 -> 0 bytes .../controls/designer/images/label-icon16.png | Bin 182 -> 0 bytes .../controls/designer/images/label-icon@2x.png | Bin 284 -> 0 bytes src/imports/controls/designer/images/page-icon.png | Bin 190 -> 0 bytes .../controls/designer/images/page-icon16.png | Bin 148 -> 0 bytes .../controls/designer/images/page-icon@2x.png | Bin 195 -> 0 bytes .../designer/images/pageindicator-icon.png | Bin 179 -> 0 bytes .../designer/images/pageindicator-icon16.png | Bin 158 -> 0 bytes .../designer/images/pageindicator-icon@2x.png | Bin 207 -> 0 bytes src/imports/controls/designer/images/pane-icon.png | Bin 93 -> 0 bytes .../controls/designer/images/pane-icon16.png | Bin 92 -> 0 bytes .../controls/designer/images/pane-icon@2x.png | Bin 96 -> 0 bytes .../controls/designer/images/progressbar-icon.png | Bin 101 -> 0 bytes .../designer/images/progressbar-icon16.png | Bin 92 -> 0 bytes .../designer/images/progressbar-icon@2x.png | Bin 127 -> 0 bytes .../controls/designer/images/radiobutton-icon.png | Bin 279 -> 0 bytes .../designer/images/radiobutton-icon16.png | Bin 218 -> 0 bytes .../designer/images/radiobutton-icon@2x.png | Bin 482 -> 0 bytes .../controls/designer/images/rangeslider-icon.png | Bin 269 -> 0 bytes .../designer/images/rangeslider-icon16.png | Bin 231 -> 0 bytes .../designer/images/rangeslider-icon@2x.png | Bin 282 -> 0 bytes .../controls/designer/images/roundbutton-icon.png | Bin 229 -> 0 bytes .../designer/images/roundbutton-icon16.png | Bin 186 -> 0 bytes .../designer/images/roundbutton-icon@2x.png | Bin 381 -> 0 bytes .../controls/designer/images/scrollview-icon.png | Bin 110 -> 0 bytes .../controls/designer/images/scrollview-icon16.png | Bin 116 -> 0 bytes .../designer/images/scrollview-icon@2x.png | Bin 145 -> 0 bytes .../controls/designer/images/slider-icon.png | Bin 190 -> 0 bytes .../controls/designer/images/slider-icon16.png | Bin 156 -> 0 bytes .../controls/designer/images/slider-icon@2x.png | Bin 227 -> 0 bytes .../controls/designer/images/spinbox-icon.png | Bin 144 -> 0 bytes .../controls/designer/images/spinbox-icon16.png | Bin 151 -> 0 bytes .../controls/designer/images/spinbox-icon@2x.png | Bin 178 -> 0 bytes .../controls/designer/images/stackview-icon.png | Bin 162 -> 0 bytes .../controls/designer/images/stackview-icon16.png | Bin 151 -> 0 bytes .../controls/designer/images/stackview-icon@2x.png | Bin 167 -> 0 bytes .../controls/designer/images/swipeview-icon.png | Bin 163 -> 0 bytes .../controls/designer/images/swipeview-icon16.png | Bin 152 -> 0 bytes .../controls/designer/images/swipeview-icon@2x.png | Bin 184 -> 0 bytes .../controls/designer/images/switch-icon.png | Bin 205 -> 0 bytes .../controls/designer/images/switch-icon16.png | Bin 160 -> 0 bytes .../controls/designer/images/switch-icon@2x.png | Bin 314 -> 0 bytes .../controls/designer/images/textarea-icon.png | Bin 149 -> 0 bytes .../controls/designer/images/textarea-icon16.png | Bin 133 -> 0 bytes .../controls/designer/images/textarea-icon@2x.png | Bin 163 -> 0 bytes .../controls/designer/images/textfield-icon.png | Bin 154 -> 0 bytes .../controls/designer/images/textfield-icon16.png | Bin 147 -> 0 bytes .../controls/designer/images/textfield-icon@2x.png | Bin 172 -> 0 bytes .../controls/designer/images/toolbar-icon.png | Bin 131 -> 0 bytes .../controls/designer/images/toolbar-icon16.png | Bin 114 -> 0 bytes .../controls/designer/images/toolbar-icon@2x.png | Bin 140 -> 0 bytes .../controls/designer/images/toolbutton-icon.png | Bin 141 -> 0 bytes .../controls/designer/images/toolbutton-icon16.png | Bin 128 -> 0 bytes .../designer/images/toolbutton-icon@2x.png | Bin 158 -> 0 bytes .../designer/images/toolseparator-icon.png | Bin 111 -> 0 bytes .../designer/images/toolseparator-icon16.png | Bin 123 -> 0 bytes .../designer/images/toolseparator-icon@2x.png | Bin 131 -> 0 bytes .../controls/designer/images/tumbler-icon.png | Bin 132 -> 0 bytes .../controls/designer/images/tumbler-icon16.png | Bin 127 -> 0 bytes .../controls/designer/images/tumbler-icon@2x.png | Bin 153 -> 0 bytes .../controls/designer/qtquickcontrols2.metainfo | 522 -- src/imports/controls/doc/doc.pri | 6 - ...tquickcontrols2-applicationwindow-wireframe.png | Bin 6143 -> 0 bytes .../images/qtquickcontrols2-basic-thumbnail.png | Bin 4352 -> 0 bytes .../controls/doc/images/qtquickcontrols2-basic.png | Bin 10801 -> 0 bytes .../qtquickcontrols2-busyindicator-custom.png | Bin 944 -> 0 bytes .../doc/images/qtquickcontrols2-busyindicator.gif | Bin 17357 -> 0 bytes .../doc/images/qtquickcontrols2-busyindicator.png | Bin 900 -> 0 bytes .../doc/images/qtquickcontrols2-button-custom.png | Bin 1299 -> 0 bytes .../doc/images/qtquickcontrols2-button-flat.gif | Bin 2388 -> 0 bytes .../images/qtquickcontrols2-button-highlighted.gif | Bin 1856 -> 0 bytes .../images/qtquickcontrols2-button-icononly.png | Bin 434 -> 0 bytes .../qtquickcontrols2-button-textbesideicon.png | Bin 1315 -> 0 bytes .../images/qtquickcontrols2-button-textonly.png | Bin 1073 -> 0 bytes .../qtquickcontrols2-button-textundericon.png | Bin 1147 -> 0 bytes .../doc/images/qtquickcontrols2-button.gif | Bin 4140 -> 0 bytes .../images/qtquickcontrols2-checkbox-custom.png | Bin 1792 -> 0 bytes .../doc/images/qtquickcontrols2-checkbox-group.png | Bin 2950 -> 0 bytes .../images/qtquickcontrols2-checkbox-tristate.gif | Bin 8784 -> 0 bytes .../doc/images/qtquickcontrols2-checkbox.gif | Bin 6403 -> 0 bytes .../qtquickcontrols2-checkdelegate-custom.png | Bin 2179 -> 0 bytes .../qtquickcontrols2-checkdelegate-tristate.gif | Bin 10487 -> 0 bytes .../doc/images/qtquickcontrols2-checkdelegate.gif | Bin 15290 -> 0 bytes .../images/qtquickcontrols2-combobox-custom.png | Bin 924 -> 0 bytes .../images/qtquickcontrols2-combobox-delegate.png | Bin 989 -> 0 bytes .../doc/images/qtquickcontrols2-combobox-popup.png | Bin 989 -> 0 bytes .../doc/images/qtquickcontrols2-combobox.gif | Bin 7873 -> 0 bytes .../doc/images/qtquickcontrols2-control.png | Bin 47718 -> 0 bytes .../doc/images/qtquickcontrols2-control.svg | 936 --- .../images/qtquickcontrols2-customize-buttons.png | Bin 2542 -> 0 bytes .../images/qtquickcontrols2-delaybutton-custom.png | Bin 5112 -> 0 bytes .../doc/images/qtquickcontrols2-delaybutton.gif | Bin 12595 -> 0 bytes .../doc/images/qtquickcontrols2-dial-custom.png | Bin 2847 -> 0 bytes .../doc/images/qtquickcontrols2-dial-handle.png | Bin 4203 -> 0 bytes .../images/qtquickcontrols2-dial-inputMode.svgz | Bin 2753 -> 0 bytes .../doc/images/qtquickcontrols2-dial-inputmode.png | Bin 9151 -> 0 bytes .../doc/images/qtquickcontrols2-dial-no-wrap.gif | Bin 52372 -> 0 bytes .../doc/images/qtquickcontrols2-dial-wrap.gif | Bin 70792 -> 0 bytes .../controls/doc/images/qtquickcontrols2-dial.png | Bin 2603 -> 0 bytes .../qtquickcontrols2-dialogbuttonbox-attached.png | Bin 1489 -> 0 bytes .../images/qtquickcontrols2-dialogbuttonbox.png | Bin 1459 -> 0 bytes .../qtquickcontrols2-drawer-expanded-wireframe.png | Bin 2260 -> 0 bytes .../images/qtquickcontrols2-drawer-wireframe.png | Bin 1534 -> 0 bytes .../doc/images/qtquickcontrols2-drawer.gif | Bin 55780 -> 0 bytes .../doc/images/qtquickcontrols2-frame-custom.png | Bin 1930 -> 0 bytes .../controls/doc/images/qtquickcontrols2-frame.png | Bin 2912 -> 0 bytes .../images/qtquickcontrols2-fusion-palettes.png | Bin 11034 -> 0 bytes .../images/qtquickcontrols2-fusion-thumbnail.png | Bin 6275 -> 0 bytes .../doc/images/qtquickcontrols2-fusion-violet.png | Bin 3059 -> 0 bytes .../doc/images/qtquickcontrols2-fusion.png | Bin 9302 -> 0 bytes .../images/qtquickcontrols2-groupbox-checkable.png | Bin 5006 -> 0 bytes .../images/qtquickcontrols2-groupbox-custom.png | Bin 3046 -> 0 bytes .../doc/images/qtquickcontrols2-groupbox-label.png | Bin 1662 -> 0 bytes .../doc/images/qtquickcontrols2-groupbox.png | Bin 4442 -> 0 bytes .../images/qtquickcontrols2-imagine-9-patch-4x.png | Bin 4917 -> 0 bytes ...kcontrols2-imagine-9-patch-inset-boundaries.png | Bin 6237 -> 0 bytes .../qtquickcontrols2-imagine-9-patch-inset.png | Bin 1906 -> 0 bytes ...ckcontrols2-imagine-9-patch-resized-padding.png | Bin 20260 -> 0 bytes ...ntrols2-imagine-9-patch-resized-stretchable.png | Bin 16437 -> 0 bytes .../qtquickcontrols2-imagine-9-patch-size.png | Bin 6386 -> 0 bytes .../images/qtquickcontrols2-imagine-9-patch.svgz | Bin 7598 -> 0 bytes ...qtquickcontrols2-imagine-customization-dark.png | Bin 3001 -> 0 bytes .../qtquickcontrols2-imagine-customization.svgz | Bin 2215 -> 0 bytes .../images/qtquickcontrols2-imagine-thumbnail.png | Bin 4043 -> 0 bytes .../doc/images/qtquickcontrols2-imagine.png | Bin 7918 -> 0 bytes .../qtquickcontrols2-itemdelegate-custom.png | Bin 1358 -> 0 bytes .../doc/images/qtquickcontrols2-itemdelegate.gif | Bin 16287 -> 0 bytes .../doc/images/qtquickcontrols2-itemdelegate.png | Bin 5645 -> 0 bytes .../doc/images/qtquickcontrols2-label-custom.png | Bin 942 -> 0 bytes .../controls/doc/images/qtquickcontrols2-label.png | Bin 925 -> 0 bytes .../doc/images/qtquickcontrols2-macos-dark.png | Bin 23979 -> 0 bytes .../doc/images/qtquickcontrols2-macos-light.png | Bin 22318 -> 0 bytes .../images/qtquickcontrols2-macos-thumbnail.png | Bin 22504 -> 0 bytes .../images/qtquickcontrols2-material-accent.png | Bin 1291 -> 0 bytes .../qtquickcontrols2-material-attributes.png | Bin 7618 -> 0 bytes .../qtquickcontrols2-material-background.png | Bin 1444 -> 0 bytes .../doc/images/qtquickcontrols2-material-dark.png | Bin 10934 -> 0 bytes .../images/qtquickcontrols2-material-elevation.png | Bin 2566 -> 0 bytes .../qtquickcontrols2-material-foreground.png | Bin 1377 -> 0 bytes .../doc/images/qtquickcontrols2-material-light.png | Bin 11182 -> 0 bytes .../images/qtquickcontrols2-material-purple.png | Bin 3256 -> 0 bytes .../doc/images/qtquickcontrols2-material-theme.png | Bin 1451 -> 0 bytes .../images/qtquickcontrols2-material-thumbnail.png | Bin 10480 -> 0 bytes .../qtquickcontrols2-material-variant-dense.png | Bin 21059 -> 0 bytes .../qtquickcontrols2-material-variant-normal.png | Bin 22897 -> 0 bytes .../doc/images/qtquickcontrols2-menu-custom.png | Bin 7293 -> 0 bytes .../controls/doc/images/qtquickcontrols2-menu.gif | Bin 4683 -> 0 bytes .../controls/doc/images/qtquickcontrols2-menu.png | Bin 3629 -> 0 bytes .../doc/images/qtquickcontrols2-menubar-custom.png | Bin 2659 -> 0 bytes .../doc/images/qtquickcontrols2-menubar.png | Bin 8870 -> 0 bytes .../qtquickcontrols2-menuseparator-custom.png | Bin 4644 -> 0 bytes .../doc/images/qtquickcontrols2-menuseparator.png | Bin 4672 -> 0 bytes .../doc/images/qtquickcontrols2-page-wireframe.png | Bin 1795 -> 0 bytes .../qtquickcontrols2-pageindicator-custom.png | Bin 248 -> 0 bytes .../qtquickcontrols2-pageindicator-delegate.png | Bin 314 -> 0 bytes .../doc/images/qtquickcontrols2-pageindicator.png | Bin 248 -> 0 bytes .../doc/images/qtquickcontrols2-pane-custom.png | Bin 1674 -> 0 bytes .../controls/doc/images/qtquickcontrols2-pane.png | Bin 2473 -> 0 bytes .../doc/images/qtquickcontrols2-popup-custom.png | Bin 117 -> 0 bytes .../doc/images/qtquickcontrols2-popup-settings.png | Bin 10545 -> 0 bytes .../qtquickcontrols2-popup-transformorigin.png | Bin 7256 -> 0 bytes .../controls/doc/images/qtquickcontrols2-popup.png | Bin 62355 -> 0 bytes .../controls/doc/images/qtquickcontrols2-popup.svg | 712 --- .../images/qtquickcontrols2-progressbar-custom.png | Bin 165 -> 0 bytes .../qtquickcontrols2-progressbar-indeterminate.gif | Bin 5882 -> 0 bytes .../doc/images/qtquickcontrols2-progressbar.gif | Bin 2072 -> 0 bytes .../images/qtquickcontrols2-radiobutton-custom.png | Bin 2207 -> 0 bytes .../doc/images/qtquickcontrols2-radiobutton.gif | Bin 7993 -> 0 bytes .../qtquickcontrols2-radiodelegate-custom.png | Bin 2501 -> 0 bytes .../doc/images/qtquickcontrols2-radiodelegate.gif | Bin 16859 -> 0 bytes .../images/qtquickcontrols2-rangeslider-custom.png | Bin 585 -> 0 bytes .../doc/images/qtquickcontrols2-rangeslider.gif | Bin 24125 -> 0 bytes .../doc/images/qtquickcontrols2-roundbutton.png | Bin 662 -> 0 bytes .../images/qtquickcontrols2-scrollbar-custom.png | Bin 148 -> 0 bytes .../qtquickcontrols2-scrollbar-non-attached.png | Bin 4645 -> 0 bytes .../images/qtquickcontrols2-scrollbar-nosnap.gif | Bin 5271 -> 0 bytes .../qtquickcontrols2-scrollbar-snapalways.gif | Bin 4707 -> 0 bytes .../qtquickcontrols2-scrollbar-snaponrelease.gif | Bin 5646 -> 0 bytes .../doc/images/qtquickcontrols2-scrollbar.gif | Bin 32067 -> 0 bytes .../qtquickcontrols2-scrollindicator-custom.png | Bin 102 -> 0 bytes ...quickcontrols2-scrollindicator-non-attached.png | Bin 4468 -> 0 bytes .../images/qtquickcontrols2-scrollindicator.gif | Bin 42352 -> 0 bytes .../images/qtquickcontrols2-scrollview-custom.png | Bin 4423 -> 0 bytes .../qtquickcontrols2-scrollview-wireframe.png | Bin 705 -> 0 bytes .../doc/images/qtquickcontrols2-scrollview.png | Bin 4424 -> 0 bytes .../doc/images/qtquickcontrols2-slider-custom.png | Bin 454 -> 0 bytes .../doc/images/qtquickcontrols2-slider-handle.png | Bin 439 -> 0 bytes .../doc/images/qtquickcontrols2-slider-nosnap.gif | Bin 18138 -> 0 bytes .../images/qtquickcontrols2-slider-snapalways.gif | Bin 7201 -> 0 bytes .../qtquickcontrols2-slider-snaponrelease.gif | Bin 18377 -> 0 bytes .../doc/images/qtquickcontrols2-slider.gif | Bin 13697 -> 0 bytes .../doc/images/qtquickcontrols2-spinbox-custom.png | Bin 1006 -> 0 bytes .../doc/images/qtquickcontrols2-spinbox-double.png | Bin 737 -> 0 bytes .../doc/images/qtquickcontrols2-spinbox-down.png | Bin 784 -> 0 bytes .../images/qtquickcontrols2-spinbox-textual.png | Bin 1096 -> 0 bytes .../doc/images/qtquickcontrols2-spinbox-up.png | Bin 786 -> 0 bytes .../doc/images/qtquickcontrols2-spinbox.png | Bin 775 -> 0 bytes .../images/qtquickcontrols2-splitview-custom.png | Bin 125 -> 0 bytes .../images/qtquickcontrols2-stackview-custom.png | Bin 110 -> 0 bytes .../doc/images/qtquickcontrols2-stackview-pop.gif | Bin 23801 -> 0 bytes .../doc/images/qtquickcontrols2-stackview-push.gif | Bin 42790 -> 0 bytes .../images/qtquickcontrols2-stackview-replace.gif | Bin 28882 -> 0 bytes .../images/qtquickcontrols2-stackview-unwind.gif | Bin 23744 -> 0 bytes .../images/qtquickcontrols2-stackview-visible.png | Bin 512 -> 0 bytes .../qtquickcontrols2-stackview-wireframe.png | Bin 227 -> 0 bytes .../doc/images/qtquickcontrols2-styles.png | Bin 101053 -> 0 bytes .../qtquickcontrols2-swipedelegate-behind.gif | Bin 248344 -> 0 bytes .../qtquickcontrols2-swipedelegate-custom.png | Bin 1818 -> 0 bytes ...ickcontrols2-swipedelegate-leading-trailing.gif | Bin 132134 -> 0 bytes .../doc/images/qtquickcontrols2-swipedelegate.gif | Bin 123494 -> 0 bytes .../qtquickcontrols2-swipeview-indicator.png | Bin 301 -> 0 bytes .../qtquickcontrols2-swipeview-wireframe.png | Bin 1482 -> 0 bytes .../doc/images/qtquickcontrols2-swipeview.gif | Bin 35983 -> 0 bytes .../doc/images/qtquickcontrols2-switch-checked.png | Bin 1723 -> 0 bytes .../doc/images/qtquickcontrols2-switch-custom.png | Bin 1734 -> 0 bytes .../doc/images/qtquickcontrols2-switch.gif | Bin 3466 -> 0 bytes .../doc/images/qtquickcontrols2-switch.png | Bin 2042 -> 0 bytes .../qtquickcontrols2-switchdelegate-custom.png | Bin 2773 -> 0 bytes .../doc/images/qtquickcontrols2-switchdelegate.gif | Bin 38688 -> 0 bytes .../doc/images/qtquickcontrols2-tabbar-custom.png | Bin 2644 -> 0 bytes .../images/qtquickcontrols2-tabbar-explicit.png | Bin 2093 -> 0 bytes .../images/qtquickcontrols2-tabbar-flickable.png | Bin 2527 -> 0 bytes .../images/qtquickcontrols2-tabbar-wireframe.png | Bin 348 -> 0 bytes .../doc/images/qtquickcontrols2-tabbar.gif | Bin 8590 -> 0 bytes .../doc/images/qtquickcontrols2-tabbar.png | Bin 2897 -> 0 bytes .../doc/images/qtquickcontrols2-tabbutton.png | Bin 2646 -> 0 bytes .../images/qtquickcontrols2-textarea-custom.png | Bin 1320 -> 0 bytes .../qtquickcontrols2-textarea-scrollable.png | Bin 1580 -> 0 bytes .../doc/images/qtquickcontrols2-textarea.png | Bin 1968 -> 0 bytes .../images/qtquickcontrols2-textfield-custom.png | Bin 2083 -> 0 bytes .../images/qtquickcontrols2-textfield-disabled.png | Bin 1261 -> 0 bytes .../images/qtquickcontrols2-textfield-focused.png | Bin 1316 -> 0 bytes .../images/qtquickcontrols2-textfield-normal.png | Bin 1304 -> 0 bytes .../doc/images/qtquickcontrols2-textfield.png | Bin 1680 -> 0 bytes .../doc/images/qtquickcontrols2-toolbar-custom.png | Bin 1174 -> 0 bytes .../doc/images/qtquickcontrols2-toolbar.png | Bin 1008 -> 0 bytes .../images/qtquickcontrols2-toolbutton-custom.png | Bin 1398 -> 0 bytes .../doc/images/qtquickcontrols2-toolbutton.png | Bin 1226 -> 0 bytes .../qtquickcontrols2-toolseparator-custom.png | Bin 3586 -> 0 bytes .../doc/images/qtquickcontrols2-toolseparator.png | Bin 5381 -> 0 bytes .../doc/images/qtquickcontrols2-tooltip-delay.png | Bin 1144 -> 0 bytes .../doc/images/qtquickcontrols2-tooltip-hover.png | Bin 1110 -> 0 bytes .../qtquickcontrols2-tooltip-pressandhold.png | Bin 1110 -> 0 bytes .../doc/images/qtquickcontrols2-tooltip-slider.png | Bin 1261 -> 0 bytes .../doc/images/qtquickcontrols2-tooltip.png | Bin 5523 -> 0 bytes .../doc/images/qtquickcontrols2-tumbler-custom.png | Bin 1879 -> 0 bytes .../images/qtquickcontrols2-tumbler-delegate.png | Bin 929 -> 0 bytes .../doc/images/qtquickcontrols2-tumbler-wrap.gif | Bin 54328 -> 0 bytes .../doc/images/qtquickcontrols2-tumbler.png | Bin 1050 -> 0 bytes .../images/qtquickcontrols2-universal-accent.png | Bin 1058 -> 0 bytes .../qtquickcontrols2-universal-attributes.png | Bin 5298 -> 0 bytes .../qtquickcontrols2-universal-background.png | Bin 1161 -> 0 bytes .../images/qtquickcontrols2-universal-button.png | Bin 674 -> 0 bytes .../doc/images/qtquickcontrols2-universal-dark.png | Bin 10373 -> 0 bytes .../qtquickcontrols2-universal-foreground.png | Bin 985 -> 0 bytes .../images/qtquickcontrols2-universal-light.png | Bin 10846 -> 0 bytes .../images/qtquickcontrols2-universal-theme.png | Bin 1205 -> 0 bytes .../qtquickcontrols2-universal-thumbnail.png | Bin 8606 -> 0 bytes .../images/qtquickcontrols2-universal-violet.png | Bin 2894 -> 0 bytes .../images/qtquickcontrols2-windows-thumbnail.png | Bin 12394 -> 0 bytes .../doc/images/qtquickcontrols2-windows.png | Bin 17132 -> 0 bytes src/imports/controls/doc/manifest-meta.qdocconf | 31 - src/imports/controls/doc/qtquickcontrols.qdocconf | 104 - .../doc/snippets/qtquickcontrols2-action.qml | 56 - .../qtquickcontrols2-busyindicator-custom.qml | 88 - .../snippets/qtquickcontrols2-button-custom.qml | 55 - .../snippets/qtquickcontrols2-button-icononly.qml | 34 - .../qtquickcontrols2-button-textbesideicon.qml | 35 - .../snippets/qtquickcontrols2-button-textonly.qml | 34 - .../snippets/qtquickcontrols2-checkbox-custom.qml | 65 - .../snippets/qtquickcontrols2-checkbox-group.qml | 58 - .../qtquickcontrols2-checkdelegate-custom.qml | 74 - .../qtquickcontrols2-combobox-accepted.qml | 45 - .../snippets/qtquickcontrols2-combobox-custom.qml | 112 - .../qtquickcontrols2-combobox-valuerole.qml | 58 - .../qtquickcontrols2-delaybutton-custom.qml | 82 - .../doc/snippets/qtquickcontrols2-dial-custom.qml | 67 - .../doc/snippets/qtquickcontrols2-dialog-modal.qml | 41 - .../snippets/qtquickcontrols2-dialog-modeless.qml | 41 - .../doc/snippets/qtquickcontrols2-dialog.qml | 44 - .../qtquickcontrols2-dialogbuttonbox-attached.qml | 42 - .../snippets/qtquickcontrols2-dialogbuttonbox.qml | 38 - .../doc/snippets/qtquickcontrols2-frame-custom.qml | 43 - .../doc/snippets/qtquickcontrols2-frame.qml | 41 - .../qtquickcontrols2-groupbox-checkable.qml | 48 - .../snippets/qtquickcontrols2-groupbox-custom.qml | 57 - .../doc/snippets/qtquickcontrols2-groupbox.qml | 42 - .../qtquickcontrols2-headerview-simple.qml | 119 - .../qtquickcontrols2-itemdelegate-custom.qml | 59 - .../doc/snippets/qtquickcontrols2-itemdelegate.qml | 46 - .../doc/snippets/qtquickcontrols2-label-custom.qml | 36 - .../doc/snippets/qtquickcontrols2-label.qml | 35 - .../snippets/qtquickcontrols2-material-accent.qml | 43 - .../qtquickcontrols2-material-background.qml | 42 - .../qtquickcontrols2-material-elevation.qml | 51 - .../qtquickcontrols2-material-foreground.qml | 41 - .../snippets/qtquickcontrols2-material-theme.qml | 44 - .../snippets/qtquickcontrols2-material-variant.qml | 212 - .../doc/snippets/qtquickcontrols2-menu-custom.qml | 133 - .../snippets/qtquickcontrols2-menubar-custom.qml | 84 - .../doc/snippets/qtquickcontrols2-menubar.qml | 67 - .../qtquickcontrols2-menuseparator-custom.qml | 69 - .../snippets/qtquickcontrols2-menuseparator.qml | 60 - .../snippets/qtquickcontrols2-overlay-modal.qml | 55 - .../snippets/qtquickcontrols2-overlay-modeless.qml | 55 - .../doc/snippets/qtquickcontrols2-overview.cmake | 4 - .../qtquickcontrols2-pageindicator-custom.qml | 53 - .../qtquickcontrols2-pageindicator-interactive.qml | 58 - .../snippets/qtquickcontrols2-pageindicator.qml | 35 - .../doc/snippets/qtquickcontrols2-pane-custom.qml | 41 - .../doc/snippets/qtquickcontrols2-pane.qml | 41 - .../doc/snippets/qtquickcontrols2-popup-custom.qml | 53 - .../doc/snippets/qtquickcontrols2-popup.qml | 46 - .../qtquickcontrols2-progressbar-custom.qml | 56 - .../qtquickcontrols2-radiobutton-custom.qml | 65 - .../qtquickcontrols2-radiodelegate-custom.qml | 74 - .../qtquickcontrols2-rangeslider-custom.qml | 76 - .../doc/snippets/qtquickcontrols2-roundbutton.qml | 36 - .../snippets/qtquickcontrols2-scrollbar-active.qml | 46 - .../snippets/qtquickcontrols2-scrollbar-custom.qml | 46 - .../qtquickcontrols2-scrollbar-non-attached.qml | 80 - .../snippets/qtquickcontrols2-scrollbar-policy.qml | 38 - .../qtquickcontrols2-scrollindicator-active.qml | 46 - .../qtquickcontrols2-scrollindicator-custom.qml | 45 - ...quickcontrols2-scrollindicator-non-attached.qml | 84 - .../qtquickcontrols2-scrollview-custom.qml | 81 - .../qtquickcontrols2-scrollview-interactive.qml | 38 - .../qtquickcontrols2-scrollview-listview.qml | 61 - .../qtquickcontrols2-scrollview-policy.qml | 38 - .../doc/snippets/qtquickcontrols2-scrollview.qml | 60 - .../snippets/qtquickcontrols2-slider-custom.qml | 64 - .../snippets/qtquickcontrols2-spinbox-custom.qml | 96 - .../snippets/qtquickcontrols2-spinbox-double.qml | 56 - .../snippets/qtquickcontrols2-spinbox-textual.qml | 55 - .../doc/snippets/qtquickcontrols2-spinbox.qml | 35 - .../snippets/qtquickcontrols2-splitview-custom.qml | 57 - .../snippets/qtquickcontrols2-stackview-custom.qml | 53 - .../qtquickcontrols2-stackview-visible.qml | 76 - .../qtquickcontrols2-swipedelegate-custom.qml | 72 - .../qtquickcontrols2-swipedelegate-transition.qml | 37 - .../snippets/qtquickcontrols2-swipedelegate.qml | 82 - .../snippets/qtquickcontrols2-swipeview-custom.qml | 39 - .../qtquickcontrols2-swipeview-indicator.qml | 63 - .../snippets/qtquickcontrols2-switch-custom.qml | 64 - .../qtquickcontrols2-switchdelegate-custom.qml | 73 - .../snippets/qtquickcontrols2-tabbar-custom.qml | 49 - .../snippets/qtquickcontrols2-tabbar-explicit.qml | 52 - .../snippets/qtquickcontrols2-tabbar-flickable.qml | 50 - .../doc/snippets/qtquickcontrols2-tabbar.qml | 64 - .../doc/snippets/qtquickcontrols2-tabbutton.qml | 43 - .../snippets/qtquickcontrols2-textarea-custom.qml | 42 - .../qtquickcontrols2-textarea-scrollable.qml | 47 - .../snippets/qtquickcontrols2-textfield-custom.qml | 43 - .../qtquickcontrols2-textfield-disabled.qml | 35 - .../qtquickcontrols2-textfield-focused.qml | 35 - .../snippets/qtquickcontrols2-textfield-normal.qml | 34 - .../snippets/qtquickcontrols2-toolbar-custom.qml | 59 - .../doc/snippets/qtquickcontrols2-toolbar.qml | 62 - .../qtquickcontrols2-toolbutton-custom.qml | 55 - .../qtquickcontrols2-toolseparator-custom.qml | 69 - .../snippets/qtquickcontrols2-toolseparator.qml | 68 - .../snippets/qtquickcontrols2-tooltip-custom.qml | 48 - .../snippets/qtquickcontrols2-tooltip-hover.qml | 41 - .../qtquickcontrols2-tooltip-pressandhold.qml | 39 - .../snippets/qtquickcontrols2-tooltip-slider.qml | 53 - .../doc/snippets/qtquickcontrols2-tooltip.qml | 51 - .../snippets/qtquickcontrols2-tumbler-custom.qml | 78 - .../snippets/qtquickcontrols2-tumbler-listView.qml | 46 - .../snippets/qtquickcontrols2-tumbler-pathView.qml | 57 - .../qtquickcontrols2-tumbler-timePicker.qml | 86 - .../snippets/qtquickcontrols2-universal-accent.qml | 43 - .../qtquickcontrols2-universal-background.qml | 44 - .../qtquickcontrols2-universal-foreground.qml | 41 - .../snippets/qtquickcontrols2-universal-theme.qml | 44 - src/imports/controls/doc/src/external-pages.qdoc | 36 - .../includes/customize-button-background.qdocinc | 25 - .../doc/src/includes/inputmethodhints.qdocinc | 38 - .../src/includes/qquickcontrol-background.qdocinc | 13 - .../src/includes/qquickcontrol-focusreason.qdocinc | 15 - .../controls/doc/src/includes/qquickdial.qdocinc | 13 - .../controls/doc/src/includes/qquickicon.qdocinc | 50 - .../doc/src/includes/qquickimaginestyle.qdocinc | 57 - .../doc/src/includes/qquickmaterialstyle.qdocinc | 79 - .../includes/qquickoverlay-popup-parent.qdocinc | 20 - .../doc/src/includes/qquickpopup-padding.qdocinc | 10 - .../doc/src/includes/qquickstackview.qdocinc | 5 - .../qquickswipedelegate-interaction.qdocinc | 5 - .../controls/doc/src/includes/qquickswitch.qdocinc | 28 - .../doc/src/includes/qquickuniversalstyle.qdocinc | 53 - src/imports/controls/doc/src/qt6-changes.qdoc | 305 - .../controls/doc/src/qtquickcontrols2-basic.qdoc | 55 - .../controls/doc/src/qtquickcontrols2-buttons.qdoc | 191 - .../doc/src/qtquickcontrols2-configuration.qdoc | 204 - .../doc/src/qtquickcontrols2-containers.qdoc | 113 - .../doc/src/qtquickcontrols2-cppclasses.qdoc | 58 - .../doc/src/qtquickcontrols2-customize.qdoc | 986 ---- .../doc/src/qtquickcontrols2-delegates.qdoc | 79 - .../doc/src/qtquickcontrols2-deployment.qdoc | 97 - .../doc/src/qtquickcontrols2-environment.qdoc | 78 - .../doc/src/qtquickcontrols2-examples.qdoc | 37 - .../doc/src/qtquickcontrols2-fileselectors.qdoc | 140 - .../controls/doc/src/qtquickcontrols2-focus.qdoc | 48 - .../controls/doc/src/qtquickcontrols2-fusion.qdoc | 93 - .../doc/src/qtquickcontrols2-gettingstarted.qdoc | 86 - .../doc/src/qtquickcontrols2-guidelines.qdoc | 46 - .../controls/doc/src/qtquickcontrols2-icons.qdoc | 166 - .../controls/doc/src/qtquickcontrols2-imagine.qdoc | 2524 -------- .../controls/doc/src/qtquickcontrols2-index.qdoc | 204 - .../doc/src/qtquickcontrols2-indicators.qdoc | 83 - .../controls/doc/src/qtquickcontrols2-input.qdoc | 123 - .../controls/doc/src/qtquickcontrols2-macos.qdoc | 76 - .../doc/src/qtquickcontrols2-material.qdoc | 404 -- .../controls/doc/src/qtquickcontrols2-menus.qdoc | 68 - .../doc/src/qtquickcontrols2-navigation.qdoc | 70 - .../controls/doc/src/qtquickcontrols2-popups.qdoc | 99 - .../doc/src/qtquickcontrols2-qmltypes.qdoc | 130 - .../doc/src/qtquickcontrols2-separators.qdoc | 63 - .../controls/doc/src/qtquickcontrols2-styles.qdoc | 209 - .../doc/src/qtquickcontrols2-universal.qdoc | 288 - .../controls/doc/src/qtquickcontrols2-windows.qdoc | 74 - src/imports/controls/fusion/ApplicationWindow.qml | 47 - src/imports/controls/fusion/BusyIndicator.qml | 70 - src/imports/controls/fusion/Button.qml | 75 - src/imports/controls/fusion/CMakeLists.txt | 269 - src/imports/controls/fusion/CheckBox.qml | 71 - src/imports/controls/fusion/CheckDelegate.qml | 86 - src/imports/controls/fusion/ComboBox.qml | 174 - src/imports/controls/fusion/DelayButton.qml | 115 - src/imports/controls/fusion/Dial.qml | 73 - src/imports/controls/fusion/Dialog.qml | 99 - src/imports/controls/fusion/DialogButtonBox.qml | 73 - src/imports/controls/fusion/Drawer.qml | 88 - src/imports/controls/fusion/Frame.qml | 57 - src/imports/controls/fusion/GroupBox.qml | 76 - .../controls/fusion/HorizontalHeaderView.qml | 77 - src/imports/controls/fusion/ItemDelegate.qml | 76 - src/imports/controls/fusion/Label.qml | 48 - src/imports/controls/fusion/Menu.qml | 94 - src/imports/controls/fusion/MenuBar.qml | 73 - src/imports/controls/fusion/MenuBarItem.qml | 77 - src/imports/controls/fusion/MenuItem.qml | 102 - src/imports/controls/fusion/MenuSeparator.qml | 59 - src/imports/controls/fusion/Page.qml | 58 - src/imports/controls/fusion/PageIndicator.qml | 73 - src/imports/controls/fusion/Pane.qml | 56 - src/imports/controls/fusion/Popup.qml | 66 - src/imports/controls/fusion/ProgressBar.qml | 116 - src/imports/controls/fusion/RadioButton.qml | 71 - src/imports/controls/fusion/RadioDelegate.qml | 86 - src/imports/controls/fusion/RangeSlider.qml | 81 - src/imports/controls/fusion/RoundButton.qml | 98 - src/imports/controls/fusion/ScrollBar.qml | 77 - src/imports/controls/fusion/ScrollIndicator.qml | 77 - src/imports/controls/fusion/ScrollView.qml | 64 - src/imports/controls/fusion/Slider.qml | 67 - src/imports/controls/fusion/SpinBox.qml | 181 - src/imports/controls/fusion/SplitView.qml | 55 - src/imports/controls/fusion/SwipeDelegate.qml | 78 - src/imports/controls/fusion/Switch.qml | 71 - src/imports/controls/fusion/SwitchDelegate.qml | 85 - src/imports/controls/fusion/TabBar.qml | 79 - src/imports/controls/fusion/TabButton.qml | 96 - src/imports/controls/fusion/TextArea.qml | 76 - src/imports/controls/fusion/TextField.qml | 102 - src/imports/controls/fusion/ToolBar.qml | 82 - src/imports/controls/fusion/ToolButton.qml | 75 - src/imports/controls/fusion/ToolSeparator.qml | 66 - src/imports/controls/fusion/ToolTip.qml | 79 - src/imports/controls/fusion/Tumbler.qml | 76 - src/imports/controls/fusion/VerticalHeaderView.qml | 77 - src/imports/controls/fusion/fusion.pri | 58 - src/imports/controls/fusion/images/arrow.png | Bin 121 -> 0 bytes src/imports/controls/fusion/images/arrow.svg | 75 - src/imports/controls/fusion/images/arrow@2x.png | Bin 145 -> 0 bytes src/imports/controls/fusion/images/arrow@3x.png | Bin 165 -> 0 bytes src/imports/controls/fusion/images/arrow@4x.png | Bin 182 -> 0 bytes src/imports/controls/fusion/images/checkmark.png | Bin 181 -> 0 bytes src/imports/controls/fusion/images/checkmark.svg | 72 - .../controls/fusion/images/checkmark@2x.png | Bin 316 -> 0 bytes .../controls/fusion/images/checkmark@3x.png | Bin 420 -> 0 bytes .../controls/fusion/images/checkmark@4x.png | Bin 482 -> 0 bytes .../controls/fusion/images/progressmask.png | Bin 309 -> 0 bytes .../controls/fusion/images/progressmask.svg | 74 - .../controls/fusion/images/progressmask@2x.png | Bin 484 -> 0 bytes .../controls/fusion/images/progressmask@3x.png | Bin 558 -> 0 bytes .../controls/fusion/images/progressmask@4x.png | Bin 652 -> 0 bytes src/imports/controls/fusion/impl/ButtonPanel.qml | 76 - src/imports/controls/fusion/impl/CMakeLists.txt | 74 - .../controls/fusion/impl/CheckIndicator.qml | 91 - .../controls/fusion/impl/RadioIndicator.qml | 77 - src/imports/controls/fusion/impl/SliderGroove.qml | 93 - src/imports/controls/fusion/impl/SliderHandle.qml | 85 - .../controls/fusion/impl/SwitchIndicator.qml | 136 - .../fusion/impl/qquickfusionbusyindicator.cpp | 111 - .../fusion/impl/qquickfusionbusyindicator_p.h | 84 - .../controls/fusion/impl/qquickfusiondial.cpp | 139 - .../controls/fusion/impl/qquickfusiondial_p.h | 76 - .../controls/fusion/impl/qquickfusionknob.cpp | 88 - .../controls/fusion/impl/qquickfusionknob_p.h | 69 - .../impl/qtquickcontrols2fusionstyleimplplugin.cpp | 61 - src/imports/controls/fusion/qquickfusionstyle.cpp | 153 - src/imports/controls/fusion/qquickfusionstyle_p.h | 92 - src/imports/controls/fusion/qquickfusiontheme.cpp | 55 - src/imports/controls/fusion/qquickfusiontheme_p.h | 65 - .../fusion/qtquickcontrols2fusionstyle.qrc | 16 - .../fusion/qtquickcontrols2fusionstyleplugin.cpp | 80 - src/imports/controls/imagine/ApplicationWindow.qml | 57 - src/imports/controls/imagine/BusyIndicator.qml | 88 - src/imports/controls/imagine/Button.qml | 98 - src/imports/controls/imagine/CMakeLists.txt | 270 - src/imports/controls/imagine/CheckBox.qml | 106 - src/imports/controls/imagine/CheckDelegate.qml | 117 - src/imports/controls/imagine/ComboBox.qml | 173 - src/imports/controls/imagine/DelayButton.qml | 137 - src/imports/controls/imagine/Dial.qml | 105 - src/imports/controls/imagine/Dialog.qml | 116 - src/imports/controls/imagine/DialogButtonBox.qml | 84 - src/imports/controls/imagine/Drawer.qml | 96 - src/imports/controls/imagine/Frame.qml | 69 - src/imports/controls/imagine/GroupBox.qml | 99 - .../controls/imagine/HorizontalHeaderView.qml | 67 - src/imports/controls/imagine/ItemDelegate.qml | 93 - src/imports/controls/imagine/Label.qml | 63 - src/imports/controls/imagine/Menu.qml | 107 - src/imports/controls/imagine/MenuItem.qml | 137 - src/imports/controls/imagine/MenuSeparator.qml | 79 - src/imports/controls/imagine/Page.qml | 73 - src/imports/controls/imagine/PageIndicator.qml | 92 - src/imports/controls/imagine/Pane.qml | 69 - src/imports/controls/imagine/Popup.qml | 87 - src/imports/controls/imagine/ProgressBar.qml | 141 - src/imports/controls/imagine/RadioButton.qml | 104 - src/imports/controls/imagine/RadioDelegate.qml | 115 - src/imports/controls/imagine/RangeSlider.qml | 134 - src/imports/controls/imagine/RoundButton.qml | 97 - src/imports/controls/imagine/ScrollBar.qml | 119 - src/imports/controls/imagine/ScrollIndicator.qml | 111 - src/imports/controls/imagine/ScrollView.qml | 85 - src/imports/controls/imagine/Slider.qml | 120 - src/imports/controls/imagine/SpinBox.qml | 152 - src/imports/controls/imagine/SplitView.qml | 63 - src/imports/controls/imagine/StackView.qml | 91 - src/imports/controls/imagine/SwipeDelegate.qml | 95 - src/imports/controls/imagine/SwipeView.qml | 90 - src/imports/controls/imagine/Switch.qml | 134 - src/imports/controls/imagine/SwitchDelegate.qml | 146 - src/imports/controls/imagine/TabBar.qml | 87 - src/imports/controls/imagine/TabButton.qml | 91 - src/imports/controls/imagine/TextArea.qml | 96 - src/imports/controls/imagine/TextField.qml | 95 - src/imports/controls/imagine/ToolBar.qml | 71 - src/imports/controls/imagine/ToolButton.qml | 94 - src/imports/controls/imagine/ToolSeparator.qml | 83 - src/imports/controls/imagine/ToolTip.qml | 85 - src/imports/controls/imagine/Tumbler.qml | 93 - .../controls/imagine/VerticalHeaderView.qml | 67 - .../Contents/Sketch/9-patch-export.js | 24 - .../Contents/Sketch/manifest.json | 19 - src/imports/controls/imagine/design/imagine.sketch | Bin 164993 -> 0 bytes .../images/applicationwindow-background.png | Bin 67 -> 0 bytes .../images/applicationwindow-background@2x.png | Bin 75 -> 0 bytes .../images/applicationwindow-background@3x.png | Bin 77 -> 0 bytes .../images/applicationwindow-background@4x.png | Bin 78 -> 0 bytes .../images/applicationwindow-overlay-modal.png | Bin 70 -> 0 bytes .../images/applicationwindow-overlay-modal@2x.png | Bin 76 -> 0 bytes .../images/applicationwindow-overlay-modal@3x.png | Bin 78 -> 0 bytes .../images/applicationwindow-overlay-modal@4x.png | Bin 79 -> 0 bytes .../imagine/images/applicationwindow-overlay.png | Bin 70 -> 0 bytes .../images/applicationwindow-overlay@2x.png | Bin 76 -> 0 bytes .../images/applicationwindow-overlay@3x.png | Bin 78 -> 0 bytes .../images/applicationwindow-overlay@4x.png | Bin 79 -> 0 bytes .../imagine/images/busyindicator-animation.webp | Bin 30116 -> 0 bytes .../imagine/images/busyindicator-animation@2x.webp | Bin 56588 -> 0 bytes .../imagine/images/busyindicator-animation@3x.webp | Bin 77816 -> 0 bytes .../imagine/images/busyindicator-animation@4x.webp | Bin 103290 -> 0 bytes .../button-background-checked-disabled.9.png | Bin 185 -> 0 bytes .../button-background-checked-disabled@2x.9.png | Bin 258 -> 0 bytes .../button-background-checked-disabled@3x.9.png | Bin 339 -> 0 bytes .../button-background-checked-disabled@4x.9.png | Bin 441 -> 0 bytes .../images/button-background-checked-focused.9.png | Bin 185 -> 0 bytes .../button-background-checked-focused@2x.9.png | Bin 258 -> 0 bytes .../button-background-checked-focused@3x.9.png | Bin 339 -> 0 bytes .../button-background-checked-focused@4x.9.png | Bin 441 -> 0 bytes .../images/button-background-checked-hovered.9.png | Bin 185 -> 0 bytes .../button-background-checked-hovered@2x.9.png | Bin 258 -> 0 bytes .../button-background-checked-hovered@3x.9.png | Bin 339 -> 0 bytes .../button-background-checked-hovered@4x.9.png | Bin 441 -> 0 bytes .../imagine/images/button-background-checked.9.png | Bin 185 -> 0 bytes .../images/button-background-checked@2x.9.png | Bin 258 -> 0 bytes .../images/button-background-checked@3x.9.png | Bin 339 -> 0 bytes .../images/button-background-checked@4x.9.png | Bin 441 -> 0 bytes .../images/button-background-disabled.9.png | Bin 185 -> 0 bytes .../images/button-background-disabled@2x.9.png | Bin 258 -> 0 bytes .../images/button-background-disabled@3x.9.png | Bin 339 -> 0 bytes .../images/button-background-disabled@4x.9.png | Bin 441 -> 0 bytes .../button-background-flat-checked-pressed.9.png | Bin 185 -> 0 bytes ...button-background-flat-checked-pressed@2x.9.png | Bin 258 -> 0 bytes ...button-background-flat-checked-pressed@3x.9.png | Bin 339 -> 0 bytes ...button-background-flat-checked-pressed@4x.9.png | Bin 441 -> 0 bytes .../images/button-background-flat-checked.9.png | Bin 185 -> 0 bytes .../images/button-background-flat-checked@2x.9.png | Bin 258 -> 0 bytes .../images/button-background-flat-checked@3x.9.png | Bin 339 -> 0 bytes .../images/button-background-flat-checked@4x.9.png | Bin 441 -> 0 bytes .../images/button-background-flat-disabled.9.png | Bin 117 -> 0 bytes .../button-background-flat-disabled@2x.9.png | Bin 122 -> 0 bytes .../button-background-flat-disabled@3x.9.png | Bin 130 -> 0 bytes .../button-background-flat-disabled@4x.9.png | Bin 138 -> 0 bytes ...utton-background-flat-highlighted-checked.9.png | Bin 185 -> 0 bytes ...on-background-flat-highlighted-checked@2x.9.png | Bin 258 -> 0 bytes ...on-background-flat-highlighted-checked@3x.9.png | Bin 339 -> 0 bytes ...on-background-flat-highlighted-checked@4x.9.png | Bin 441 -> 0 bytes ...utton-background-flat-highlighted-pressed.9.png | Bin 185 -> 0 bytes ...on-background-flat-highlighted-pressed@2x.9.png | Bin 258 -> 0 bytes ...on-background-flat-highlighted-pressed@3x.9.png | Bin 339 -> 0 bytes ...on-background-flat-highlighted-pressed@4x.9.png | Bin 441 -> 0 bytes .../button-background-flat-highlighted.9.png | Bin 117 -> 0 bytes .../button-background-flat-highlighted@2x.9.png | Bin 122 -> 0 bytes .../button-background-flat-highlighted@3x.9.png | Bin 130 -> 0 bytes .../button-background-flat-highlighted@4x.9.png | Bin 138 -> 0 bytes .../images/button-background-flat-hovered.9.png | Bin 185 -> 0 bytes .../images/button-background-flat-hovered@2x.9.png | Bin 258 -> 0 bytes .../images/button-background-flat-hovered@3x.9.png | Bin 339 -> 0 bytes .../images/button-background-flat-hovered@4x.9.png | Bin 441 -> 0 bytes .../images/button-background-flat-pressed.9.png | Bin 185 -> 0 bytes .../images/button-background-flat-pressed@2x.9.png | Bin 258 -> 0 bytes .../images/button-background-flat-pressed@3x.9.png | Bin 339 -> 0 bytes .../images/button-background-flat-pressed@4x.9.png | Bin 441 -> 0 bytes .../imagine/images/button-background-flat.9.png | Bin 117 -> 0 bytes .../imagine/images/button-background-flat@2x.9.png | Bin 122 -> 0 bytes .../imagine/images/button-background-flat@3x.9.png | Bin 130 -> 0 bytes .../imagine/images/button-background-flat@4x.9.png | Bin 138 -> 0 bytes .../imagine/images/button-background-focused.9.png | Bin 185 -> 0 bytes .../images/button-background-focused@2x.9.png | Bin 258 -> 0 bytes .../images/button-background-focused@3x.9.png | Bin 339 -> 0 bytes .../images/button-background-focused@4x.9.png | Bin 441 -> 0 bytes .../button-background-highlighted-checked.9.png | Bin 185 -> 0 bytes .../button-background-highlighted-checked@2x.9.png | Bin 258 -> 0 bytes .../button-background-highlighted-checked@3x.9.png | Bin 339 -> 0 bytes .../button-background-highlighted-checked@4x.9.png | Bin 441 -> 0 bytes .../button-background-highlighted-disabled.9.png | Bin 185 -> 0 bytes ...button-background-highlighted-disabled@2x.9.png | Bin 258 -> 0 bytes ...button-background-highlighted-disabled@3x.9.png | Bin 339 -> 0 bytes ...button-background-highlighted-disabled@4x.9.png | Bin 441 -> 0 bytes .../button-background-highlighted-focused.9.png | Bin 185 -> 0 bytes .../button-background-highlighted-focused@2x.9.png | Bin 258 -> 0 bytes .../button-background-highlighted-focused@3x.9.png | Bin 339 -> 0 bytes .../button-background-highlighted-focused@4x.9.png | Bin 441 -> 0 bytes .../button-background-highlighted-hovered.9.png | Bin 185 -> 0 bytes .../button-background-highlighted-hovered@2x.9.png | Bin 258 -> 0 bytes .../button-background-highlighted-hovered@3x.9.png | Bin 339 -> 0 bytes .../button-background-highlighted-hovered@4x.9.png | Bin 441 -> 0 bytes .../button-background-highlighted-pressed.9.png | Bin 185 -> 0 bytes .../button-background-highlighted-pressed@2x.9.png | Bin 258 -> 0 bytes .../button-background-highlighted-pressed@3x.9.png | Bin 339 -> 0 bytes .../button-background-highlighted-pressed@4x.9.png | Bin 441 -> 0 bytes .../images/button-background-highlighted.9.png | Bin 185 -> 0 bytes .../images/button-background-highlighted@2x.9.png | Bin 258 -> 0 bytes .../images/button-background-highlighted@3x.9.png | Bin 339 -> 0 bytes .../images/button-background-highlighted@4x.9.png | Bin 441 -> 0 bytes .../imagine/images/button-background-hovered.9.png | Bin 185 -> 0 bytes .../images/button-background-hovered@2x.9.png | Bin 258 -> 0 bytes .../images/button-background-hovered@3x.9.png | Bin 339 -> 0 bytes .../images/button-background-hovered@4x.9.png | Bin 441 -> 0 bytes .../imagine/images/button-background-pressed.9.png | Bin 185 -> 0 bytes .../images/button-background-pressed@2x.9.png | Bin 258 -> 0 bytes .../images/button-background-pressed@3x.9.png | Bin 339 -> 0 bytes .../images/button-background-pressed@4x.9.png | Bin 441 -> 0 bytes .../imagine/images/button-background.9.png | Bin 185 -> 0 bytes .../imagine/images/button-background@2x.9.png | Bin 258 -> 0 bytes .../imagine/images/button-background@3x.9.png | Bin 339 -> 0 bytes .../imagine/images/button-background@4x.9.png | Bin 441 -> 0 bytes .../images/checkbox-indicator-checked-focused.png | Bin 271 -> 0 bytes .../checkbox-indicator-checked-focused@2x.png | Bin 468 -> 0 bytes .../checkbox-indicator-checked-focused@3x.png | Bin 599 -> 0 bytes .../checkbox-indicator-checked-focused@4x.png | Bin 815 -> 0 bytes .../images/checkbox-indicator-checked-hovered.png | Bin 271 -> 0 bytes .../checkbox-indicator-checked-hovered@2x.png | Bin 468 -> 0 bytes .../checkbox-indicator-checked-hovered@3x.png | Bin 599 -> 0 bytes .../checkbox-indicator-checked-hovered@4x.png | Bin 815 -> 0 bytes .../images/checkbox-indicator-checked-pressed.png | Bin 275 -> 0 bytes .../checkbox-indicator-checked-pressed@2x.png | Bin 501 -> 0 bytes .../checkbox-indicator-checked-pressed@3x.png | Bin 626 -> 0 bytes .../checkbox-indicator-checked-pressed@4x.png | Bin 848 -> 0 bytes .../imagine/images/checkbox-indicator-checked.png | Bin 275 -> 0 bytes .../images/checkbox-indicator-checked@2x.png | Bin 499 -> 0 bytes .../images/checkbox-indicator-checked@3x.png | Bin 625 -> 0 bytes .../images/checkbox-indicator-checked@4x.png | Bin 830 -> 0 bytes .../imagine/images/checkbox-indicator-disabled.png | Bin 121 -> 0 bytes .../images/checkbox-indicator-disabled@2x.png | Bin 156 -> 0 bytes .../images/checkbox-indicator-disabled@3x.png | Bin 192 -> 0 bytes .../images/checkbox-indicator-disabled@4x.png | Bin 228 -> 0 bytes .../imagine/images/checkbox-indicator-focused.png | Bin 121 -> 0 bytes .../images/checkbox-indicator-focused@2x.png | Bin 156 -> 0 bytes .../images/checkbox-indicator-focused@3x.png | Bin 192 -> 0 bytes .../images/checkbox-indicator-focused@4x.png | Bin 228 -> 0 bytes .../imagine/images/checkbox-indicator-hovered.png | Bin 121 -> 0 bytes .../images/checkbox-indicator-hovered@2x.png | Bin 156 -> 0 bytes .../images/checkbox-indicator-hovered@3x.png | Bin 192 -> 0 bytes .../images/checkbox-indicator-hovered@4x.png | Bin 228 -> 0 bytes ...heckbox-indicator-partially-checked-focused.png | Bin 131 -> 0 bytes ...kbox-indicator-partially-checked-focused@2x.png | Bin 164 -> 0 bytes ...kbox-indicator-partially-checked-focused@3x.png | Bin 202 -> 0 bytes ...kbox-indicator-partially-checked-focused@4x.png | Bin 243 -> 0 bytes ...heckbox-indicator-partially-checked-hovered.png | Bin 131 -> 0 bytes ...kbox-indicator-partially-checked-hovered@2x.png | Bin 164 -> 0 bytes ...kbox-indicator-partially-checked-hovered@3x.png | Bin 202 -> 0 bytes ...kbox-indicator-partially-checked-hovered@4x.png | Bin 243 -> 0 bytes ...heckbox-indicator-partially-checked-pressed.png | Bin 131 -> 0 bytes ...kbox-indicator-partially-checked-pressed@2x.png | Bin 164 -> 0 bytes ...kbox-indicator-partially-checked-pressed@3x.png | Bin 202 -> 0 bytes ...kbox-indicator-partially-checked-pressed@4x.png | Bin 243 -> 0 bytes .../checkbox-indicator-partially-checked.png | Bin 131 -> 0 bytes .../checkbox-indicator-partially-checked@2x.png | Bin 164 -> 0 bytes .../checkbox-indicator-partially-checked@3x.png | Bin 202 -> 0 bytes .../checkbox-indicator-partially-checked@4x.png | Bin 243 -> 0 bytes .../imagine/images/checkbox-indicator-pressed.png | Bin 121 -> 0 bytes .../images/checkbox-indicator-pressed@2x.png | Bin 156 -> 0 bytes .../images/checkbox-indicator-pressed@3x.png | Bin 192 -> 0 bytes .../images/checkbox-indicator-pressed@4x.png | Bin 228 -> 0 bytes .../controls/imagine/images/checkbox-indicator.png | Bin 121 -> 0 bytes .../imagine/images/checkbox-indicator@2x.png | Bin 156 -> 0 bytes .../imagine/images/checkbox-indicator@3x.png | Bin 192 -> 0 bytes .../imagine/images/checkbox-indicator@4x.png | Bin 228 -> 0 bytes .../images/checkdelegate-background-disabled.9.png | Bin 120 -> 0 bytes .../checkdelegate-background-disabled@2x.9.png | Bin 123 -> 0 bytes .../checkdelegate-background-disabled@3x.9.png | Bin 127 -> 0 bytes .../checkdelegate-background-disabled@4x.9.png | Bin 132 -> 0 bytes .../images/checkdelegate-background-focused.9.png | Bin 120 -> 0 bytes .../checkdelegate-background-focused@2x.9.png | Bin 123 -> 0 bytes .../checkdelegate-background-focused@3x.9.png | Bin 127 -> 0 bytes .../checkdelegate-background-focused@4x.9.png | Bin 132 -> 0 bytes .../checkdelegate-background-highlighted.9.png | Bin 120 -> 0 bytes .../checkdelegate-background-highlighted@2x.9.png | Bin 123 -> 0 bytes .../checkdelegate-background-highlighted@3x.9.png | Bin 127 -> 0 bytes .../checkdelegate-background-highlighted@4x.9.png | Bin 132 -> 0 bytes .../images/checkdelegate-background-hovered.9.png | Bin 120 -> 0 bytes .../checkdelegate-background-hovered@2x.9.png | Bin 123 -> 0 bytes .../checkdelegate-background-hovered@3x.9.png | Bin 127 -> 0 bytes .../checkdelegate-background-hovered@4x.9.png | Bin 132 -> 0 bytes .../images/checkdelegate-background-pressed.9.png | Bin 120 -> 0 bytes .../checkdelegate-background-pressed@2x.9.png | Bin 123 -> 0 bytes .../checkdelegate-background-pressed@3x.9.png | Bin 127 -> 0 bytes .../checkdelegate-background-pressed@4x.9.png | Bin 132 -> 0 bytes .../imagine/images/checkdelegate-background.9.png | Bin 120 -> 0 bytes .../images/checkdelegate-background@2x.9.png | Bin 123 -> 0 bytes .../images/checkdelegate-background@3x.9.png | Bin 127 -> 0 bytes .../images/checkdelegate-background@4x.9.png | Bin 132 -> 0 bytes .../checkdelegate-indicator-checked-focused.png | Bin 271 -> 0 bytes .../checkdelegate-indicator-checked-focused@2x.png | Bin 468 -> 0 bytes .../checkdelegate-indicator-checked-focused@3x.png | Bin 599 -> 0 bytes .../checkdelegate-indicator-checked-focused@4x.png | Bin 815 -> 0 bytes .../checkdelegate-indicator-checked-hovered.png | Bin 271 -> 0 bytes .../checkdelegate-indicator-checked-hovered@2x.png | Bin 468 -> 0 bytes .../checkdelegate-indicator-checked-hovered@3x.png | Bin 599 -> 0 bytes .../checkdelegate-indicator-checked-hovered@4x.png | Bin 815 -> 0 bytes .../checkdelegate-indicator-checked-pressed.png | Bin 275 -> 0 bytes .../checkdelegate-indicator-checked-pressed@2x.png | Bin 501 -> 0 bytes .../checkdelegate-indicator-checked-pressed@3x.png | Bin 626 -> 0 bytes .../checkdelegate-indicator-checked-pressed@4x.png | Bin 848 -> 0 bytes .../images/checkdelegate-indicator-checked.png | Bin 275 -> 0 bytes .../images/checkdelegate-indicator-checked@2x.png | Bin 499 -> 0 bytes .../images/checkdelegate-indicator-checked@3x.png | Bin 625 -> 0 bytes .../images/checkdelegate-indicator-checked@4x.png | Bin 830 -> 0 bytes .../images/checkdelegate-indicator-disabled.png | Bin 121 -> 0 bytes .../images/checkdelegate-indicator-disabled@2x.png | Bin 156 -> 0 bytes .../images/checkdelegate-indicator-disabled@3x.png | Bin 192 -> 0 bytes .../images/checkdelegate-indicator-disabled@4x.png | Bin 228 -> 0 bytes .../images/checkdelegate-indicator-focused.png | Bin 121 -> 0 bytes .../images/checkdelegate-indicator-focused@2x.png | Bin 156 -> 0 bytes .../images/checkdelegate-indicator-focused@3x.png | Bin 192 -> 0 bytes .../images/checkdelegate-indicator-focused@4x.png | Bin 228 -> 0 bytes .../images/checkdelegate-indicator-hovered.png | Bin 121 -> 0 bytes .../images/checkdelegate-indicator-hovered@2x.png | Bin 156 -> 0 bytes .../images/checkdelegate-indicator-hovered@3x.png | Bin 192 -> 0 bytes .../images/checkdelegate-indicator-hovered@4x.png | Bin 228 -> 0 bytes ...elegate-indicator-partially-checked-focused.png | Bin 131 -> 0 bytes ...gate-indicator-partially-checked-focused@2x.png | Bin 164 -> 0 bytes ...gate-indicator-partially-checked-focused@3x.png | Bin 202 -> 0 bytes ...gate-indicator-partially-checked-focused@4x.png | Bin 243 -> 0 bytes ...elegate-indicator-partially-checked-hovered.png | Bin 131 -> 0 bytes ...gate-indicator-partially-checked-hovered@2x.png | Bin 164 -> 0 bytes ...gate-indicator-partially-checked-hovered@3x.png | Bin 202 -> 0 bytes ...gate-indicator-partially-checked-hovered@4x.png | Bin 243 -> 0 bytes ...elegate-indicator-partially-checked-pressed.png | Bin 131 -> 0 bytes ...gate-indicator-partially-checked-pressed@2x.png | Bin 164 -> 0 bytes ...gate-indicator-partially-checked-pressed@3x.png | Bin 202 -> 0 bytes ...gate-indicator-partially-checked-pressed@4x.png | Bin 243 -> 0 bytes .../checkdelegate-indicator-partially-checked.png | Bin 131 -> 0 bytes ...heckdelegate-indicator-partially-checked@2x.png | Bin 164 -> 0 bytes ...heckdelegate-indicator-partially-checked@3x.png | Bin 202 -> 0 bytes ...heckdelegate-indicator-partially-checked@4x.png | Bin 243 -> 0 bytes .../images/checkdelegate-indicator-pressed.png | Bin 121 -> 0 bytes .../images/checkdelegate-indicator-pressed@2x.png | Bin 156 -> 0 bytes .../images/checkdelegate-indicator-pressed@3x.png | Bin 192 -> 0 bytes .../images/checkdelegate-indicator-pressed@4x.png | Bin 228 -> 0 bytes .../imagine/images/checkdelegate-indicator.png | Bin 121 -> 0 bytes .../imagine/images/checkdelegate-indicator@2x.png | Bin 156 -> 0 bytes .../imagine/images/checkdelegate-indicator@3x.png | Bin 192 -> 0 bytes .../imagine/images/checkdelegate-indicator@4x.png | Bin 228 -> 0 bytes .../images/combobox-background-disabled.9.png | Bin 197 -> 0 bytes .../images/combobox-background-disabled@2x.9.png | Bin 279 -> 0 bytes .../images/combobox-background-disabled@3x.9.png | Bin 387 -> 0 bytes .../images/combobox-background-disabled@4x.9.png | Bin 596 -> 0 bytes .../combobox-background-editable-disabled.9.png | Bin 197 -> 0 bytes .../combobox-background-editable-disabled@2x.9.png | Bin 279 -> 0 bytes .../combobox-background-editable-disabled@3x.9.png | Bin 387 -> 0 bytes .../combobox-background-editable-disabled@4x.9.png | Bin 596 -> 0 bytes .../combobox-background-editable-focused.9.png | Bin 213 -> 0 bytes .../combobox-background-editable-focused@2x.9.png | Bin 338 -> 0 bytes .../combobox-background-editable-focused@3x.9.png | Bin 549 -> 0 bytes .../combobox-background-editable-focused@4x.9.png | Bin 798 -> 0 bytes .../images/combobox-background-editable.9.png | Bin 213 -> 0 bytes .../images/combobox-background-editable@2x.9.png | Bin 338 -> 0 bytes .../images/combobox-background-editable@3x.9.png | Bin 549 -> 0 bytes .../images/combobox-background-editable@4x.9.png | Bin 798 -> 0 bytes .../images/combobox-background-focused.9.png | Bin 197 -> 0 bytes .../images/combobox-background-focused@2x.9.png | Bin 279 -> 0 bytes .../images/combobox-background-focused@3x.9.png | Bin 387 -> 0 bytes .../images/combobox-background-focused@4x.9.png | Bin 596 -> 0 bytes .../images/combobox-background-hovered.9.png | Bin 197 -> 0 bytes .../images/combobox-background-hovered@2x.9.png | Bin 279 -> 0 bytes .../images/combobox-background-hovered@3x.9.png | Bin 387 -> 0 bytes .../images/combobox-background-hovered@4x.9.png | Bin 596 -> 0 bytes .../imagine/images/combobox-background-open.9.png | Bin 197 -> 0 bytes .../images/combobox-background-open@2x.9.png | Bin 279 -> 0 bytes .../images/combobox-background-open@3x.9.png | Bin 387 -> 0 bytes .../images/combobox-background-open@4x.9.png | Bin 596 -> 0 bytes .../images/combobox-background-pressed.9.png | Bin 197 -> 0 bytes .../images/combobox-background-pressed@2x.9.png | Bin 279 -> 0 bytes .../images/combobox-background-pressed@3x.9.png | Bin 387 -> 0 bytes .../images/combobox-background-pressed@4x.9.png | Bin 596 -> 0 bytes .../imagine/images/combobox-background.9.png | Bin 197 -> 0 bytes .../imagine/images/combobox-background@2x.9.png | Bin 279 -> 0 bytes .../imagine/images/combobox-background@3x.9.png | Bin 387 -> 0 bytes .../imagine/images/combobox-background@4x.9.png | Bin 596 -> 0 bytes .../imagine/images/combobox-indicator-disabled.png | Bin 152 -> 0 bytes .../images/combobox-indicator-disabled@2x.png | Bin 157 -> 0 bytes .../images/combobox-indicator-disabled@3x.png | Bin 211 -> 0 bytes .../images/combobox-indicator-disabled@4x.png | Bin 201 -> 0 bytes .../combobox-indicator-editable-disabled.png | Bin 197 -> 0 bytes .../combobox-indicator-editable-disabled@2x.png | Bin 259 -> 0 bytes .../combobox-indicator-editable-disabled@3x.png | Bin 386 -> 0 bytes .../combobox-indicator-editable-disabled@4x.png | Bin 445 -> 0 bytes ...mbobox-indicator-editable-mirrored-disabled.png | Bin 193 -> 0 bytes ...box-indicator-editable-mirrored-disabled@2x.png | Bin 263 -> 0 bytes ...box-indicator-editable-mirrored-disabled@3x.png | Bin 394 -> 0 bytes ...box-indicator-editable-mirrored-disabled@4x.png | Bin 450 -> 0 bytes .../combobox-indicator-editable-mirrored.png | Bin 199 -> 0 bytes .../combobox-indicator-editable-mirrored@2x.png | Bin 269 -> 0 bytes .../combobox-indicator-editable-mirrored@3x.png | Bin 402 -> 0 bytes .../combobox-indicator-editable-mirrored@4x.png | Bin 456 -> 0 bytes .../imagine/images/combobox-indicator-editable.png | Bin 203 -> 0 bytes .../images/combobox-indicator-editable@2x.png | Bin 266 -> 0 bytes .../images/combobox-indicator-editable@3x.png | Bin 395 -> 0 bytes .../images/combobox-indicator-editable@4x.png | Bin 452 -> 0 bytes .../controls/imagine/images/combobox-indicator.png | Bin 160 -> 0 bytes .../imagine/images/combobox-indicator@2x.png | Bin 165 -> 0 bytes .../imagine/images/combobox-indicator@3x.png | Bin 230 -> 0 bytes .../imagine/images/combobox-indicator@4x.png | Bin 215 -> 0 bytes .../controls/imagine/images/combobox-popup.9.png | Bin 424 -> 0 bytes .../imagine/images/combobox-popup@2x.9.png | Bin 796 -> 0 bytes .../imagine/images/combobox-popup@3x.9.png | Bin 1212 -> 0 bytes .../imagine/images/combobox-popup@4x.9.png | Bin 1644 -> 0 bytes .../delaybutton-background-checked-focused.9.png | Bin 185 -> 0 bytes ...delaybutton-background-checked-focused@2x.9.png | Bin 258 -> 0 bytes ...delaybutton-background-checked-focused@3x.9.png | Bin 339 -> 0 bytes ...delaybutton-background-checked-focused@4x.9.png | Bin 441 -> 0 bytes .../delaybutton-background-checked-hovered.9.png | Bin 185 -> 0 bytes ...delaybutton-background-checked-hovered@2x.9.png | Bin 258 -> 0 bytes ...delaybutton-background-checked-hovered@3x.9.png | Bin 339 -> 0 bytes ...delaybutton-background-checked-hovered@4x.9.png | Bin 441 -> 0 bytes .../images/delaybutton-background-checked.9.png | Bin 185 -> 0 bytes .../images/delaybutton-background-checked@2x.9.png | Bin 258 -> 0 bytes .../images/delaybutton-background-checked@3x.9.png | Bin 339 -> 0 bytes .../images/delaybutton-background-checked@4x.9.png | Bin 441 -> 0 bytes .../delaybutton-background-disabled-checked.9.png | Bin 185 -> 0 bytes ...elaybutton-background-disabled-checked@2x.9.png | Bin 258 -> 0 bytes ...elaybutton-background-disabled-checked@3x.9.png | Bin 339 -> 0 bytes ...elaybutton-background-disabled-checked@4x.9.png | Bin 441 -> 0 bytes .../images/delaybutton-background-disabled.9.png | Bin 185 -> 0 bytes .../delaybutton-background-disabled@2x.9.png | Bin 258 -> 0 bytes .../delaybutton-background-disabled@3x.9.png | Bin 339 -> 0 bytes .../delaybutton-background-disabled@4x.9.png | Bin 441 -> 0 bytes .../images/delaybutton-background-focused.9.png | Bin 185 -> 0 bytes .../images/delaybutton-background-focused@2x.9.png | Bin 258 -> 0 bytes .../images/delaybutton-background-focused@3x.9.png | Bin 339 -> 0 bytes .../images/delaybutton-background-focused@4x.9.png | Bin 441 -> 0 bytes .../images/delaybutton-background-hovered.9.png | Bin 185 -> 0 bytes .../images/delaybutton-background-hovered@2x.9.png | Bin 258 -> 0 bytes .../images/delaybutton-background-hovered@3x.9.png | Bin 339 -> 0 bytes .../images/delaybutton-background-hovered@4x.9.png | Bin 441 -> 0 bytes .../images/delaybutton-background-pressed.9.png | Bin 185 -> 0 bytes .../images/delaybutton-background-pressed@2x.9.png | Bin 258 -> 0 bytes .../images/delaybutton-background-pressed@3x.9.png | Bin 339 -> 0 bytes .../images/delaybutton-background-pressed@4x.9.png | Bin 441 -> 0 bytes .../imagine/images/delaybutton-background.9.png | Bin 185 -> 0 bytes .../imagine/images/delaybutton-background@2x.9.png | Bin 258 -> 0 bytes .../imagine/images/delaybutton-background@3x.9.png | Bin 339 -> 0 bytes .../imagine/images/delaybutton-background@4x.9.png | Bin 441 -> 0 bytes .../controls/imagine/images/delaybutton-mask.9.png | Bin 185 -> 0 bytes .../imagine/images/delaybutton-mask@2x.9.png | Bin 258 -> 0 bytes .../imagine/images/delaybutton-mask@3x.9.png | Bin 339 -> 0 bytes .../imagine/images/delaybutton-mask@4x.9.png | Bin 441 -> 0 bytes .../images/delaybutton-progress-disabled.9.png | Bin 128 -> 0 bytes .../images/delaybutton-progress-disabled@2x.9.png | Bin 137 -> 0 bytes .../images/delaybutton-progress-disabled@3x.9.png | Bin 154 -> 0 bytes .../images/delaybutton-progress-disabled@4x.9.png | Bin 165 -> 0 bytes .../imagine/images/delaybutton-progress.9.png | Bin 128 -> 0 bytes .../imagine/images/delaybutton-progress@2x.9.png | Bin 137 -> 0 bytes .../imagine/images/delaybutton-progress@3x.9.png | Bin 154 -> 0 bytes .../imagine/images/delaybutton-progress@4x.9.png | Bin 165 -> 0 bytes .../imagine/images/dial-background-disabled.png | Bin 3098 -> 0 bytes .../imagine/images/dial-background-disabled@2x.png | Bin 5609 -> 0 bytes .../imagine/images/dial-background-disabled@3x.png | Bin 13029 -> 0 bytes .../imagine/images/dial-background-disabled@4x.png | Bin 18158 -> 0 bytes .../imagine/images/dial-background-focused.png | Bin 3098 -> 0 bytes .../imagine/images/dial-background-focused@2x.png | Bin 5609 -> 0 bytes .../imagine/images/dial-background-focused@3x.png | Bin 13382 -> 0 bytes .../imagine/images/dial-background-focused@4x.png | Bin 18762 -> 0 bytes .../controls/imagine/images/dial-background.png | Bin 3098 -> 0 bytes .../controls/imagine/images/dial-background@2x.png | Bin 5609 -> 0 bytes .../controls/imagine/images/dial-background@3x.png | Bin 13268 -> 0 bytes .../controls/imagine/images/dial-background@4x.png | Bin 18609 -> 0 bytes .../imagine/images/dial-handle-disabled.png | Bin 156 -> 0 bytes .../imagine/images/dial-handle-disabled@2x.png | Bin 176 -> 0 bytes .../imagine/images/dial-handle-disabled@3x.png | Bin 212 -> 0 bytes .../imagine/images/dial-handle-disabled@4x.png | Bin 231 -> 0 bytes .../imagine/images/dial-handle-focused-hovered.png | Bin 156 -> 0 bytes .../images/dial-handle-focused-hovered@2x.png | Bin 176 -> 0 bytes .../images/dial-handle-focused-hovered@3x.png | Bin 212 -> 0 bytes .../images/dial-handle-focused-hovered@4x.png | Bin 231 -> 0 bytes .../imagine/images/dial-handle-focused-pressed.png | Bin 156 -> 0 bytes .../images/dial-handle-focused-pressed@2x.png | Bin 176 -> 0 bytes .../images/dial-handle-focused-pressed@3x.png | Bin 212 -> 0 bytes .../images/dial-handle-focused-pressed@4x.png | Bin 231 -> 0 bytes .../imagine/images/dial-handle-focused.png | Bin 156 -> 0 bytes .../imagine/images/dial-handle-focused@2x.png | Bin 176 -> 0 bytes .../imagine/images/dial-handle-focused@3x.png | Bin 212 -> 0 bytes .../imagine/images/dial-handle-focused@4x.png | Bin 231 -> 0 bytes .../imagine/images/dial-handle-hovered.png | Bin 156 -> 0 bytes .../imagine/images/dial-handle-hovered@2x.png | Bin 176 -> 0 bytes .../imagine/images/dial-handle-hovered@3x.png | Bin 212 -> 0 bytes .../imagine/images/dial-handle-hovered@4x.png | Bin 231 -> 0 bytes .../imagine/images/dial-handle-pressed.png | Bin 156 -> 0 bytes .../imagine/images/dial-handle-pressed@2x.png | Bin 176 -> 0 bytes .../imagine/images/dial-handle-pressed@3x.png | Bin 212 -> 0 bytes .../imagine/images/dial-handle-pressed@4x.png | Bin 231 -> 0 bytes .../controls/imagine/images/dial-handle.png | Bin 156 -> 0 bytes .../controls/imagine/images/dial-handle@2x.png | Bin 176 -> 0 bytes .../controls/imagine/images/dial-handle@3x.png | Bin 212 -> 0 bytes .../controls/imagine/images/dial-handle@4x.png | Bin 231 -> 0 bytes .../imagine/images/dialog-background.9.png | Bin 426 -> 0 bytes .../imagine/images/dialog-background@2x.9.png | Bin 792 -> 0 bytes .../imagine/images/dialog-background@3x.9.png | Bin 1206 -> 0 bytes .../imagine/images/dialog-background@4x.9.png | Bin 1625 -> 0 bytes .../imagine/images/dialog-overlay-modal.png | Bin 70 -> 0 bytes .../imagine/images/dialog-overlay-modal@2x.png | Bin 76 -> 0 bytes .../imagine/images/dialog-overlay-modal@3x.png | Bin 78 -> 0 bytes .../imagine/images/dialog-overlay-modal@4x.png | Bin 79 -> 0 bytes .../controls/imagine/images/dialog-overlay.png | Bin 70 -> 0 bytes .../controls/imagine/images/dialog-overlay@2x.png | Bin 76 -> 0 bytes .../controls/imagine/images/dialog-overlay@3x.png | Bin 78 -> 0 bytes .../controls/imagine/images/dialog-overlay@4x.png | Bin 79 -> 0 bytes .../images/dialogbuttonbox-background.9.png | Bin 110 -> 0 bytes .../images/dialogbuttonbox-background@2x.9.png | Bin 118 -> 0 bytes .../images/dialogbuttonbox-background@3x.9.png | Bin 119 -> 0 bytes .../images/dialogbuttonbox-background@4x.9.png | Bin 119 -> 0 bytes .../imagine/images/drawer-background-bottom.9.png | Bin 224 -> 0 bytes .../images/drawer-background-bottom@2x.9.png | Bin 334 -> 0 bytes .../images/drawer-background-bottom@3x.9.png | Bin 443 -> 0 bytes .../images/drawer-background-bottom@4x.9.png | Bin 531 -> 0 bytes .../imagine/images/drawer-background-left.9.png | Bin 218 -> 0 bytes .../imagine/images/drawer-background-left@2x.9.png | Bin 321 -> 0 bytes .../imagine/images/drawer-background-left@3x.9.png | Bin 417 -> 0 bytes .../imagine/images/drawer-background-left@4x.9.png | Bin 532 -> 0 bytes .../imagine/images/drawer-background-right.9.png | Bin 229 -> 0 bytes .../images/drawer-background-right@2x.9.png | Bin 333 -> 0 bytes .../images/drawer-background-right@3x.9.png | Bin 433 -> 0 bytes .../images/drawer-background-right@4x.9.png | Bin 549 -> 0 bytes .../imagine/images/drawer-background-top.9.png | Bin 216 -> 0 bytes .../imagine/images/drawer-background-top@2x.9.png | Bin 325 -> 0 bytes .../imagine/images/drawer-background-top@3x.9.png | Bin 442 -> 0 bytes .../imagine/images/drawer-background-top@4x.9.png | Bin 533 -> 0 bytes .../imagine/images/drawer-overlay-modal.png | Bin 70 -> 0 bytes .../imagine/images/drawer-overlay-modal@2x.png | Bin 76 -> 0 bytes .../imagine/images/drawer-overlay-modal@3x.png | Bin 78 -> 0 bytes .../imagine/images/drawer-overlay-modal@4x.png | Bin 79 -> 0 bytes .../controls/imagine/images/drawer-overlay.png | Bin 70 -> 0 bytes .../controls/imagine/images/drawer-overlay@2x.png | Bin 76 -> 0 bytes .../controls/imagine/images/drawer-overlay@3x.png | Bin 78 -> 0 bytes .../controls/imagine/images/drawer-overlay@4x.png | Bin 79 -> 0 bytes .../controls/imagine/images/frame-background.9.png | Bin 190 -> 0 bytes .../imagine/images/frame-background@2x.9.png | Bin 281 -> 0 bytes .../imagine/images/frame-background@3x.9.png | Bin 379 -> 0 bytes .../imagine/images/frame-background@4x.9.png | Bin 477 -> 0 bytes .../imagine/images/groupbox-background.9.png | Bin 190 -> 0 bytes .../imagine/images/groupbox-background@2x.9.png | Bin 281 -> 0 bytes .../imagine/images/groupbox-background@3x.9.png | Bin 379 -> 0 bytes .../imagine/images/groupbox-background@4x.9.png | Bin 477 -> 0 bytes .../controls/imagine/images/groupbox-title.9.png | Bin 112 -> 0 bytes .../imagine/images/groupbox-title@2x.9.png | Bin 117 -> 0 bytes .../imagine/images/groupbox-title@3x.9.png | Bin 120 -> 0 bytes .../imagine/images/groupbox-title@4x.9.png | Bin 122 -> 0 bytes .../images/itemdelegate-background-disabled.9.png | Bin 120 -> 0 bytes .../itemdelegate-background-disabled@2x.9.png | Bin 123 -> 0 bytes .../itemdelegate-background-disabled@3x.9.png | Bin 127 -> 0 bytes .../itemdelegate-background-disabled@4x.9.png | Bin 132 -> 0 bytes .../images/itemdelegate-background-focused.9.png | Bin 120 -> 0 bytes .../itemdelegate-background-focused@2x.9.png | Bin 123 -> 0 bytes .../itemdelegate-background-focused@3x.9.png | Bin 127 -> 0 bytes .../itemdelegate-background-focused@4x.9.png | Bin 132 -> 0 bytes .../itemdelegate-background-highlighted.9.png | Bin 120 -> 0 bytes .../itemdelegate-background-highlighted@2x.9.png | Bin 123 -> 0 bytes .../itemdelegate-background-highlighted@3x.9.png | Bin 127 -> 0 bytes .../itemdelegate-background-highlighted@4x.9.png | Bin 132 -> 0 bytes .../images/itemdelegate-background-hovered.9.png | Bin 120 -> 0 bytes .../itemdelegate-background-hovered@2x.9.png | Bin 123 -> 0 bytes .../itemdelegate-background-hovered@3x.9.png | Bin 127 -> 0 bytes .../itemdelegate-background-hovered@4x.9.png | Bin 132 -> 0 bytes .../images/itemdelegate-background-pressed.9.png | Bin 120 -> 0 bytes .../itemdelegate-background-pressed@2x.9.png | Bin 123 -> 0 bytes .../itemdelegate-background-pressed@3x.9.png | Bin 127 -> 0 bytes .../itemdelegate-background-pressed@4x.9.png | Bin 132 -> 0 bytes .../imagine/images/itemdelegate-background.9.png | Bin 120 -> 0 bytes .../images/itemdelegate-background@2x.9.png | Bin 123 -> 0 bytes .../images/itemdelegate-background@3x.9.png | Bin 127 -> 0 bytes .../images/itemdelegate-background@4x.9.png | Bin 132 -> 0 bytes .../controls/imagine/images/menu-background.9.png | Bin 664 -> 0 bytes .../imagine/images/menu-background@2x.9.png | Bin 1324 -> 0 bytes .../imagine/images/menu-background@3x.9.png | Bin 2099 -> 0 bytes .../imagine/images/menu-background@4x.9.png | Bin 2958 -> 0 bytes .../imagine/images/menuitem-arrow-disabled.png | Bin 173 -> 0 bytes .../imagine/images/menuitem-arrow-disabled@2x.png | Bin 204 -> 0 bytes .../imagine/images/menuitem-arrow-disabled@3x.png | Bin 251 -> 0 bytes .../imagine/images/menuitem-arrow-disabled@4x.png | Bin 294 -> 0 bytes .../images/menuitem-arrow-mirrored-disabled.png | Bin 181 -> 0 bytes .../images/menuitem-arrow-mirrored-disabled@2x.png | Bin 212 -> 0 bytes .../images/menuitem-arrow-mirrored-disabled@3x.png | Bin 253 -> 0 bytes .../images/menuitem-arrow-mirrored-disabled@4x.png | Bin 301 -> 0 bytes .../imagine/images/menuitem-arrow-mirrored.png | Bin 181 -> 0 bytes .../imagine/images/menuitem-arrow-mirrored@2x.png | Bin 212 -> 0 bytes .../imagine/images/menuitem-arrow-mirrored@3x.png | Bin 253 -> 0 bytes .../imagine/images/menuitem-arrow-mirrored@4x.png | Bin 301 -> 0 bytes .../controls/imagine/images/menuitem-arrow.png | Bin 176 -> 0 bytes .../controls/imagine/images/menuitem-arrow@2x.png | Bin 204 -> 0 bytes .../controls/imagine/images/menuitem-arrow@3x.png | Bin 251 -> 0 bytes .../controls/imagine/images/menuitem-arrow@4x.png | Bin 294 -> 0 bytes .../images/menuitem-background-highlighted.9.png | Bin 120 -> 0 bytes .../menuitem-background-highlighted@2x.9.png | Bin 124 -> 0 bytes .../menuitem-background-highlighted@3x.9.png | Bin 128 -> 0 bytes .../menuitem-background-highlighted@4x.9.png | Bin 138 -> 0 bytes .../imagine/images/menuitem-background.9.png | Bin 115 -> 0 bytes .../imagine/images/menuitem-background@2x.9.png | Bin 118 -> 0 bytes .../imagine/images/menuitem-background@3x.9.png | Bin 119 -> 0 bytes .../imagine/images/menuitem-background@4x.9.png | Bin 124 -> 0 bytes .../images/menuitem-indicator-checked-focused.png | Bin 271 -> 0 bytes .../menuitem-indicator-checked-focused@2x.png | Bin 468 -> 0 bytes .../menuitem-indicator-checked-focused@3x.png | Bin 599 -> 0 bytes .../menuitem-indicator-checked-focused@4x.png | Bin 815 -> 0 bytes .../images/menuitem-indicator-checked-hovered.png | Bin 271 -> 0 bytes .../menuitem-indicator-checked-hovered@2x.png | Bin 468 -> 0 bytes .../menuitem-indicator-checked-hovered@3x.png | Bin 599 -> 0 bytes .../menuitem-indicator-checked-hovered@4x.png | Bin 815 -> 0 bytes .../images/menuitem-indicator-checked-pressed.png | Bin 275 -> 0 bytes .../menuitem-indicator-checked-pressed@2x.png | Bin 501 -> 0 bytes .../menuitem-indicator-checked-pressed@3x.png | Bin 626 -> 0 bytes .../menuitem-indicator-checked-pressed@4x.png | Bin 848 -> 0 bytes .../imagine/images/menuitem-indicator-checked.png | Bin 275 -> 0 bytes .../images/menuitem-indicator-checked@2x.png | Bin 499 -> 0 bytes .../images/menuitem-indicator-checked@3x.png | Bin 625 -> 0 bytes .../images/menuitem-indicator-checked@4x.png | Bin 830 -> 0 bytes .../imagine/images/menuitem-indicator-disabled.png | Bin 121 -> 0 bytes .../images/menuitem-indicator-disabled@2x.png | Bin 156 -> 0 bytes .../images/menuitem-indicator-disabled@3x.png | Bin 192 -> 0 bytes .../images/menuitem-indicator-disabled@4x.png | Bin 228 -> 0 bytes .../imagine/images/menuitem-indicator-focused.png | Bin 121 -> 0 bytes .../images/menuitem-indicator-focused@2x.png | Bin 156 -> 0 bytes .../images/menuitem-indicator-focused@3x.png | Bin 192 -> 0 bytes .../images/menuitem-indicator-focused@4x.png | Bin 228 -> 0 bytes .../imagine/images/menuitem-indicator-hovered.png | Bin 121 -> 0 bytes .../images/menuitem-indicator-hovered@2x.png | Bin 156 -> 0 bytes .../images/menuitem-indicator-hovered@3x.png | Bin 192 -> 0 bytes .../images/menuitem-indicator-hovered@4x.png | Bin 228 -> 0 bytes .../imagine/images/menuitem-indicator-pressed.png | Bin 121 -> 0 bytes .../images/menuitem-indicator-pressed@2x.png | Bin 156 -> 0 bytes .../images/menuitem-indicator-pressed@3x.png | Bin 192 -> 0 bytes .../images/menuitem-indicator-pressed@4x.png | Bin 228 -> 0 bytes .../controls/imagine/images/menuitem-indicator.png | Bin 121 -> 0 bytes .../imagine/images/menuitem-indicator@2x.png | Bin 156 -> 0 bytes .../imagine/images/menuitem-indicator@3x.png | Bin 192 -> 0 bytes .../imagine/images/menuitem-indicator@4x.png | Bin 228 -> 0 bytes .../imagine/images/menuseparator-separator.9.png | Bin 98 -> 0 bytes .../images/menuseparator-separator@2x.9.png | Bin 110 -> 0 bytes .../images/menuseparator-separator@3x.9.png | Bin 113 -> 0 bytes .../images/menuseparator-separator@4x.9.png | Bin 115 -> 0 bytes .../controls/imagine/images/page-background.png | Bin 67 -> 0 bytes .../controls/imagine/images/page-background@2x.png | Bin 75 -> 0 bytes .../controls/imagine/images/page-background@3x.png | Bin 77 -> 0 bytes .../controls/imagine/images/page-background@4x.png | Bin 78 -> 0 bytes .../images/pageindicator-delegate-current.png | Bin 135 -> 0 bytes .../images/pageindicator-delegate-current@2x.png | Bin 179 -> 0 bytes .../images/pageindicator-delegate-current@3x.png | Bin 220 -> 0 bytes .../images/pageindicator-delegate-current@4x.png | Bin 280 -> 0 bytes .../pageindicator-delegate-disabled-current.png | Bin 135 -> 0 bytes .../pageindicator-delegate-disabled-current@2x.png | Bin 179 -> 0 bytes .../pageindicator-delegate-disabled-current@3x.png | Bin 220 -> 0 bytes .../pageindicator-delegate-disabled-current@4x.png | Bin 280 -> 0 bytes .../images/pageindicator-delegate-disabled.png | Bin 135 -> 0 bytes .../images/pageindicator-delegate-disabled@2x.png | Bin 179 -> 0 bytes .../images/pageindicator-delegate-disabled@3x.png | Bin 220 -> 0 bytes .../images/pageindicator-delegate-disabled@4x.png | Bin 280 -> 0 bytes .../images/pageindicator-delegate-pressed.png | Bin 135 -> 0 bytes .../images/pageindicator-delegate-pressed@2x.png | Bin 179 -> 0 bytes .../images/pageindicator-delegate-pressed@3x.png | Bin 220 -> 0 bytes .../images/pageindicator-delegate-pressed@4x.png | Bin 280 -> 0 bytes .../imagine/images/pageindicator-delegate.png | Bin 135 -> 0 bytes .../imagine/images/pageindicator-delegate@2x.png | Bin 179 -> 0 bytes .../imagine/images/pageindicator-delegate@3x.png | Bin 220 -> 0 bytes .../imagine/images/pageindicator-delegate@4x.png | Bin 280 -> 0 bytes .../controls/imagine/images/pane-background.9.png | Bin 120 -> 0 bytes .../imagine/images/pane-background@2x.9.png | Bin 123 -> 0 bytes .../imagine/images/pane-background@3x.9.png | Bin 130 -> 0 bytes .../imagine/images/pane-background@4x.9.png | Bin 137 -> 0 bytes .../controls/imagine/images/popup-background.9.png | Bin 426 -> 0 bytes .../imagine/images/popup-background@2x.9.png | Bin 792 -> 0 bytes .../imagine/images/popup-background@3x.9.png | Bin 1206 -> 0 bytes .../imagine/images/popup-background@4x.9.png | Bin 1625 -> 0 bytes .../imagine/images/popup-overlay-modal.png | Bin 70 -> 0 bytes .../imagine/images/popup-overlay-modal@2x.png | Bin 76 -> 0 bytes .../imagine/images/popup-overlay-modal@3x.png | Bin 78 -> 0 bytes .../imagine/images/popup-overlay-modal@4x.png | Bin 79 -> 0 bytes .../controls/imagine/images/popup-overlay.png | Bin 70 -> 0 bytes .../controls/imagine/images/popup-overlay@2x.png | Bin 76 -> 0 bytes .../controls/imagine/images/popup-overlay@3x.png | Bin 78 -> 0 bytes .../controls/imagine/images/popup-overlay@4x.png | Bin 79 -> 0 bytes .../imagine/images/progressbar-animation.webp | Bin 4760 -> 0 bytes .../imagine/images/progressbar-animation@2x.webp | Bin 7932 -> 0 bytes .../imagine/images/progressbar-animation@3x.webp | Bin 8154 -> 0 bytes .../imagine/images/progressbar-animation@4x.webp | Bin 9646 -> 0 bytes .../imagine/images/progressbar-background.9.png | Bin 194 -> 0 bytes .../imagine/images/progressbar-background@2x.9.png | Bin 284 -> 0 bytes .../imagine/images/progressbar-background@3x.9.png | Bin 405 -> 0 bytes .../imagine/images/progressbar-background@4x.9.png | Bin 580 -> 0 bytes .../controls/imagine/images/progressbar-mask.9.png | Bin 166 -> 0 bytes .../imagine/images/progressbar-mask@2x.9.png | Bin 223 -> 0 bytes .../imagine/images/progressbar-mask@3x.9.png | Bin 293 -> 0 bytes .../imagine/images/progressbar-mask@4x.9.png | Bin 344 -> 0 bytes .../imagine/images/progressbar-progress.png | Bin 76 -> 0 bytes .../imagine/images/progressbar-progress@2x.png | Bin 81 -> 0 bytes .../imagine/images/progressbar-progress@3x.png | Bin 83 -> 0 bytes .../imagine/images/progressbar-progress@4x.png | Bin 83 -> 0 bytes .../radiobutton-indicator-checked-focused.png | Bin 269 -> 0 bytes .../radiobutton-indicator-checked-focused@2x.png | Bin 442 -> 0 bytes .../radiobutton-indicator-checked-focused@3x.png | Bin 643 -> 0 bytes .../radiobutton-indicator-checked-focused@4x.png | Bin 881 -> 0 bytes .../radiobutton-indicator-checked-hovered.png | Bin 269 -> 0 bytes .../radiobutton-indicator-checked-hovered@2x.png | Bin 442 -> 0 bytes .../radiobutton-indicator-checked-hovered@3x.png | Bin 643 -> 0 bytes .../radiobutton-indicator-checked-hovered@4x.png | Bin 881 -> 0 bytes .../radiobutton-indicator-checked-pressed.png | Bin 269 -> 0 bytes .../radiobutton-indicator-checked-pressed@2x.png | Bin 442 -> 0 bytes .../radiobutton-indicator-checked-pressed@3x.png | Bin 650 -> 0 bytes .../radiobutton-indicator-checked-pressed@4x.png | Bin 881 -> 0 bytes .../images/radiobutton-indicator-checked.png | Bin 264 -> 0 bytes .../images/radiobutton-indicator-checked@2x.png | Bin 442 -> 0 bytes .../images/radiobutton-indicator-checked@3x.png | Bin 650 -> 0 bytes .../images/radiobutton-indicator-checked@4x.png | Bin 881 -> 0 bytes .../images/radiobutton-indicator-disabled.png | Bin 213 -> 0 bytes .../images/radiobutton-indicator-disabled@2x.png | Bin 350 -> 0 bytes .../images/radiobutton-indicator-disabled@3x.png | Bin 490 -> 0 bytes .../images/radiobutton-indicator-disabled@4x.png | Bin 663 -> 0 bytes .../images/radiobutton-indicator-focused.png | Bin 213 -> 0 bytes .../images/radiobutton-indicator-focused@2x.png | Bin 350 -> 0 bytes .../images/radiobutton-indicator-focused@3x.png | Bin 490 -> 0 bytes .../images/radiobutton-indicator-focused@4x.png | Bin 663 -> 0 bytes .../images/radiobutton-indicator-hovered.png | Bin 213 -> 0 bytes .../images/radiobutton-indicator-hovered@2x.png | Bin 350 -> 0 bytes .../images/radiobutton-indicator-hovered@3x.png | Bin 490 -> 0 bytes .../images/radiobutton-indicator-hovered@4x.png | Bin 663 -> 0 bytes .../images/radiobutton-indicator-pressed.png | Bin 213 -> 0 bytes .../images/radiobutton-indicator-pressed@2x.png | Bin 350 -> 0 bytes .../images/radiobutton-indicator-pressed@3x.png | Bin 490 -> 0 bytes .../images/radiobutton-indicator-pressed@4x.png | Bin 663 -> 0 bytes .../imagine/images/radiobutton-indicator.png | Bin 213 -> 0 bytes .../imagine/images/radiobutton-indicator@2x.png | Bin 350 -> 0 bytes .../imagine/images/radiobutton-indicator@3x.png | Bin 490 -> 0 bytes .../imagine/images/radiobutton-indicator@4x.png | Bin 663 -> 0 bytes .../images/radiodelegate-background-disabled.9.png | Bin 120 -> 0 bytes .../radiodelegate-background-disabled@2x.9.png | Bin 123 -> 0 bytes .../radiodelegate-background-disabled@3x.9.png | Bin 127 -> 0 bytes .../radiodelegate-background-disabled@4x.9.png | Bin 132 -> 0 bytes .../images/radiodelegate-background-focused.9.png | Bin 120 -> 0 bytes .../radiodelegate-background-focused@2x.9.png | Bin 123 -> 0 bytes .../radiodelegate-background-focused@3x.9.png | Bin 127 -> 0 bytes .../radiodelegate-background-focused@4x.9.png | Bin 132 -> 0 bytes .../radiodelegate-background-highlighted.9.png | Bin 120 -> 0 bytes .../radiodelegate-background-highlighted@2x.9.png | Bin 123 -> 0 bytes .../radiodelegate-background-highlighted@3x.9.png | Bin 127 -> 0 bytes .../radiodelegate-background-highlighted@4x.9.png | Bin 132 -> 0 bytes .../images/radiodelegate-background-hovered.9.png | Bin 120 -> 0 bytes .../radiodelegate-background-hovered@2x.9.png | Bin 123 -> 0 bytes .../radiodelegate-background-hovered@3x.9.png | Bin 127 -> 0 bytes .../radiodelegate-background-hovered@4x.9.png | Bin 132 -> 0 bytes .../images/radiodelegate-background-pressed.9.png | Bin 120 -> 0 bytes .../radiodelegate-background-pressed@2x.9.png | Bin 123 -> 0 bytes .../radiodelegate-background-pressed@3x.9.png | Bin 127 -> 0 bytes .../radiodelegate-background-pressed@4x.9.png | Bin 132 -> 0 bytes .../imagine/images/radiodelegate-background.9.png | Bin 120 -> 0 bytes .../images/radiodelegate-background@2x.9.png | Bin 123 -> 0 bytes .../images/radiodelegate-background@3x.9.png | Bin 127 -> 0 bytes .../images/radiodelegate-background@4x.9.png | Bin 132 -> 0 bytes .../radiodelegate-indicator-checked-focused.png | Bin 269 -> 0 bytes .../radiodelegate-indicator-checked-focused@2x.png | Bin 442 -> 0 bytes .../radiodelegate-indicator-checked-focused@3x.png | Bin 643 -> 0 bytes .../radiodelegate-indicator-checked-focused@4x.png | Bin 881 -> 0 bytes .../radiodelegate-indicator-checked-hovered.png | Bin 269 -> 0 bytes .../radiodelegate-indicator-checked-hovered@2x.png | Bin 442 -> 0 bytes .../radiodelegate-indicator-checked-hovered@3x.png | Bin 643 -> 0 bytes .../radiodelegate-indicator-checked-hovered@4x.png | Bin 881 -> 0 bytes .../radiodelegate-indicator-checked-pressed.png | Bin 269 -> 0 bytes .../radiodelegate-indicator-checked-pressed@2x.png | Bin 442 -> 0 bytes .../radiodelegate-indicator-checked-pressed@3x.png | Bin 650 -> 0 bytes .../radiodelegate-indicator-checked-pressed@4x.png | Bin 881 -> 0 bytes .../images/radiodelegate-indicator-checked.png | Bin 264 -> 0 bytes .../images/radiodelegate-indicator-checked@2x.png | Bin 442 -> 0 bytes .../images/radiodelegate-indicator-checked@3x.png | Bin 650 -> 0 bytes .../images/radiodelegate-indicator-checked@4x.png | Bin 881 -> 0 bytes .../images/radiodelegate-indicator-disabled.png | Bin 213 -> 0 bytes .../images/radiodelegate-indicator-disabled@2x.png | Bin 350 -> 0 bytes .../images/radiodelegate-indicator-disabled@3x.png | Bin 490 -> 0 bytes .../images/radiodelegate-indicator-disabled@4x.png | Bin 663 -> 0 bytes .../images/radiodelegate-indicator-focused.png | Bin 213 -> 0 bytes .../images/radiodelegate-indicator-focused@2x.png | Bin 350 -> 0 bytes .../images/radiodelegate-indicator-focused@3x.png | Bin 490 -> 0 bytes .../images/radiodelegate-indicator-focused@4x.png | Bin 663 -> 0 bytes .../images/radiodelegate-indicator-hovered.png | Bin 213 -> 0 bytes .../images/radiodelegate-indicator-hovered@2x.png | Bin 350 -> 0 bytes .../images/radiodelegate-indicator-hovered@3x.png | Bin 490 -> 0 bytes .../images/radiodelegate-indicator-hovered@4x.png | Bin 663 -> 0 bytes .../images/radiodelegate-indicator-pressed.png | Bin 213 -> 0 bytes .../images/radiodelegate-indicator-pressed@2x.png | Bin 350 -> 0 bytes .../images/radiodelegate-indicator-pressed@3x.png | Bin 490 -> 0 bytes .../images/radiodelegate-indicator-pressed@4x.png | Bin 663 -> 0 bytes .../imagine/images/radiodelegate-indicator.png | Bin 213 -> 0 bytes .../imagine/images/radiodelegate-indicator@2x.png | Bin 350 -> 0 bytes .../imagine/images/radiodelegate-indicator@3x.png | Bin 490 -> 0 bytes .../imagine/images/radiodelegate-indicator@4x.png | Bin 663 -> 0 bytes .../images/rangeslider-background-horizontal.9.png | Bin 167 -> 0 bytes .../rangeslider-background-horizontal@2x.9.png | Bin 243 -> 0 bytes .../rangeslider-background-horizontal@3x.9.png | Bin 332 -> 0 bytes .../rangeslider-background-horizontal@4x.9.png | Bin 444 -> 0 bytes .../images/rangeslider-background-vertical.9.png | Bin 175 -> 0 bytes .../rangeslider-background-vertical@2x.9.png | Bin 252 -> 0 bytes .../rangeslider-background-vertical@3x.9.png | Bin 328 -> 0 bytes .../rangeslider-background-vertical@4x.9.png | Bin 464 -> 0 bytes .../imagine/images/rangeslider-handle-disabled.png | Bin 255 -> 0 bytes .../images/rangeslider-handle-disabled@2x.png | Bin 484 -> 0 bytes .../images/rangeslider-handle-disabled@3x.png | Bin 726 -> 0 bytes .../images/rangeslider-handle-disabled@4x.png | Bin 965 -> 0 bytes .../images/rangeslider-handle-focused-hovered.png | Bin 255 -> 0 bytes .../rangeslider-handle-focused-hovered@2x.png | Bin 519 -> 0 bytes .../rangeslider-handle-focused-hovered@3x.png | Bin 765 -> 0 bytes .../rangeslider-handle-focused-hovered@4x.png | Bin 990 -> 0 bytes .../images/rangeslider-handle-focused-pressed.png | Bin 255 -> 0 bytes .../rangeslider-handle-focused-pressed@2x.png | Bin 519 -> 0 bytes .../rangeslider-handle-focused-pressed@3x.png | Bin 765 -> 0 bytes .../rangeslider-handle-focused-pressed@4x.png | Bin 990 -> 0 bytes .../imagine/images/rangeslider-handle-focused.png | Bin 255 -> 0 bytes .../images/rangeslider-handle-focused@2x.png | Bin 519 -> 0 bytes .../images/rangeslider-handle-focused@3x.png | Bin 765 -> 0 bytes .../images/rangeslider-handle-focused@4x.png | Bin 998 -> 0 bytes .../imagine/images/rangeslider-handle-hovered.png | Bin 255 -> 0 bytes .../images/rangeslider-handle-hovered@2x.png | Bin 484 -> 0 bytes .../images/rangeslider-handle-hovered@3x.png | Bin 726 -> 0 bytes .../images/rangeslider-handle-hovered@4x.png | Bin 965 -> 0 bytes .../imagine/images/rangeslider-handle-pressed.png | Bin 255 -> 0 bytes .../images/rangeslider-handle-pressed@2x.png | Bin 484 -> 0 bytes .../images/rangeslider-handle-pressed@3x.png | Bin 726 -> 0 bytes .../images/rangeslider-handle-pressed@4x.png | Bin 965 -> 0 bytes .../controls/imagine/images/rangeslider-handle.png | Bin 255 -> 0 bytes .../imagine/images/rangeslider-handle@2x.png | Bin 487 -> 0 bytes .../imagine/images/rangeslider-handle@3x.png | Bin 728 -> 0 bytes .../imagine/images/rangeslider-handle@4x.png | Bin 976 -> 0 bytes .../rangeslider-progress-horizontal-disabled.9.png | Bin 144 -> 0 bytes ...ngeslider-progress-horizontal-disabled@2x.9.png | Bin 185 -> 0 bytes ...ngeslider-progress-horizontal-disabled@3x.9.png | Bin 228 -> 0 bytes ...ngeslider-progress-horizontal-disabled@4x.9.png | Bin 273 -> 0 bytes .../images/rangeslider-progress-horizontal.9.png | Bin 144 -> 0 bytes .../rangeslider-progress-horizontal@2x.9.png | Bin 185 -> 0 bytes .../rangeslider-progress-horizontal@3x.9.png | Bin 228 -> 0 bytes .../rangeslider-progress-horizontal@4x.9.png | Bin 273 -> 0 bytes .../rangeslider-progress-vertical-disabled.9.png | Bin 143 -> 0 bytes ...rangeslider-progress-vertical-disabled@2x.9.png | Bin 188 -> 0 bytes ...rangeslider-progress-vertical-disabled@3x.9.png | Bin 227 -> 0 bytes ...rangeslider-progress-vertical-disabled@4x.9.png | Bin 279 -> 0 bytes .../images/rangeslider-progress-vertical.9.png | Bin 143 -> 0 bytes .../images/rangeslider-progress-vertical@2x.9.png | Bin 188 -> 0 bytes .../images/rangeslider-progress-vertical@3x.9.png | Bin 227 -> 0 bytes .../images/rangeslider-progress-vertical@4x.9.png | Bin 279 -> 0 bytes .../roundbutton-background-checked-focused.png | Bin 350 -> 0 bytes .../roundbutton-background-checked-focused@2x.png | Bin 663 -> 0 bytes .../roundbutton-background-checked-focused@3x.png | Bin 922 -> 0 bytes .../roundbutton-background-checked-focused@4x.png | Bin 1290 -> 0 bytes .../roundbutton-background-checked-hovered.png | Bin 350 -> 0 bytes .../roundbutton-background-checked-hovered@2x.png | Bin 663 -> 0 bytes .../roundbutton-background-checked-hovered@3x.png | Bin 922 -> 0 bytes .../roundbutton-background-checked-hovered@4x.png | Bin 1290 -> 0 bytes .../images/roundbutton-background-checked.png | Bin 350 -> 0 bytes .../images/roundbutton-background-checked@2x.png | Bin 663 -> 0 bytes .../images/roundbutton-background-checked@3x.png | Bin 922 -> 0 bytes .../images/roundbutton-background-checked@4x.png | Bin 1290 -> 0 bytes .../roundbutton-background-disabled-checked.png | Bin 350 -> 0 bytes .../roundbutton-background-disabled-checked@2x.png | Bin 663 -> 0 bytes .../roundbutton-background-disabled-checked@3x.png | Bin 922 -> 0 bytes .../roundbutton-background-disabled-checked@4x.png | Bin 1290 -> 0 bytes .../images/roundbutton-background-disabled.png | Bin 350 -> 0 bytes .../images/roundbutton-background-disabled@2x.png | Bin 663 -> 0 bytes .../images/roundbutton-background-disabled@3x.png | Bin 922 -> 0 bytes .../images/roundbutton-background-disabled@4x.png | Bin 1290 -> 0 bytes .../images/roundbutton-background-focused.png | Bin 350 -> 0 bytes .../images/roundbutton-background-focused@2x.png | Bin 663 -> 0 bytes .../images/roundbutton-background-focused@3x.png | Bin 922 -> 0 bytes .../images/roundbutton-background-focused@4x.png | Bin 1290 -> 0 bytes .../roundbutton-background-highlighted-focused.png | Bin 350 -> 0 bytes ...undbutton-background-highlighted-focused@2x.png | Bin 663 -> 0 bytes ...undbutton-background-highlighted-focused@3x.png | Bin 922 -> 0 bytes ...undbutton-background-highlighted-focused@4x.png | Bin 1290 -> 0 bytes .../roundbutton-background-highlighted-hovered.png | Bin 350 -> 0 bytes ...undbutton-background-highlighted-hovered@2x.png | Bin 663 -> 0 bytes ...undbutton-background-highlighted-hovered@3x.png | Bin 922 -> 0 bytes ...undbutton-background-highlighted-hovered@4x.png | Bin 1290 -> 0 bytes .../roundbutton-background-highlighted-pressed.png | Bin 350 -> 0 bytes ...undbutton-background-highlighted-pressed@2x.png | Bin 663 -> 0 bytes ...undbutton-background-highlighted-pressed@3x.png | Bin 922 -> 0 bytes ...undbutton-background-highlighted-pressed@4x.png | Bin 1290 -> 0 bytes .../images/roundbutton-background-highlighted.png | Bin 350 -> 0 bytes .../roundbutton-background-highlighted@2x.png | Bin 663 -> 0 bytes .../roundbutton-background-highlighted@3x.png | Bin 922 -> 0 bytes .../roundbutton-background-highlighted@4x.png | Bin 1290 -> 0 bytes .../images/roundbutton-background-hovered.png | Bin 350 -> 0 bytes .../images/roundbutton-background-hovered@2x.png | Bin 663 -> 0 bytes .../images/roundbutton-background-hovered@3x.png | Bin 922 -> 0 bytes .../images/roundbutton-background-hovered@4x.png | Bin 1290 -> 0 bytes .../images/roundbutton-background-pressed.png | Bin 350 -> 0 bytes .../images/roundbutton-background-pressed@2x.png | Bin 663 -> 0 bytes .../images/roundbutton-background-pressed@3x.png | Bin 922 -> 0 bytes .../images/roundbutton-background-pressed@4x.png | Bin 1290 -> 0 bytes .../imagine/images/roundbutton-background.png | Bin 350 -> 0 bytes .../imagine/images/roundbutton-background@2x.png | Bin 663 -> 0 bytes .../imagine/images/roundbutton-background@3x.png | Bin 922 -> 0 bytes .../imagine/images/roundbutton-background@4x.png | Bin 1290 -> 0 bytes .../imagine/images/scrollbar-handle-disabled.png | Bin 79 -> 0 bytes .../images/scrollbar-handle-disabled@2x.png | Bin 80 -> 0 bytes .../images/scrollbar-handle-disabled@3x.png | Bin 81 -> 0 bytes .../images/scrollbar-handle-disabled@4x.png | Bin 83 -> 0 bytes .../scrollbar-handle-interactive-disabled.png | Bin 81 -> 0 bytes .../scrollbar-handle-interactive-disabled@2x.png | Bin 83 -> 0 bytes .../scrollbar-handle-interactive-disabled@3x.png | Bin 83 -> 0 bytes .../scrollbar-handle-interactive-disabled@4x.png | Bin 83 -> 0 bytes .../scrollbar-handle-interactive-hovered.png | Bin 81 -> 0 bytes .../scrollbar-handle-interactive-hovered@2x.png | Bin 83 -> 0 bytes .../scrollbar-handle-interactive-hovered@3x.png | Bin 83 -> 0 bytes .../scrollbar-handle-interactive-hovered@4x.png | Bin 83 -> 0 bytes .../scrollbar-handle-interactive-pressed.png | Bin 80 -> 0 bytes .../scrollbar-handle-interactive-pressed@2x.png | Bin 83 -> 0 bytes .../scrollbar-handle-interactive-pressed@3x.png | Bin 83 -> 0 bytes .../scrollbar-handle-interactive-pressed@4x.png | Bin 83 -> 0 bytes .../images/scrollbar-handle-interactive.png | Bin 81 -> 0 bytes .../images/scrollbar-handle-interactive@2x.png | Bin 83 -> 0 bytes .../images/scrollbar-handle-interactive@3x.png | Bin 83 -> 0 bytes .../images/scrollbar-handle-interactive@4x.png | Bin 83 -> 0 bytes .../controls/imagine/images/scrollbar-handle.png | Bin 79 -> 0 bytes .../imagine/images/scrollbar-handle@2x.png | Bin 80 -> 0 bytes .../imagine/images/scrollbar-handle@3x.png | Bin 81 -> 0 bytes .../imagine/images/scrollbar-handle@4x.png | Bin 83 -> 0 bytes .../imagine/images/scrollindicator-handle.png | Bin 79 -> 0 bytes .../imagine/images/scrollindicator-handle@2x.png | Bin 80 -> 0 bytes .../imagine/images/scrollindicator-handle@3x.png | Bin 81 -> 0 bytes .../imagine/images/scrollindicator-handle@4x.png | Bin 83 -> 0 bytes .../images/slider-background-horizontal.9.png | Bin 167 -> 0 bytes .../images/slider-background-horizontal@2x.9.png | Bin 243 -> 0 bytes .../images/slider-background-horizontal@3x.9.png | Bin 332 -> 0 bytes .../images/slider-background-horizontal@4x.9.png | Bin 444 -> 0 bytes .../images/slider-background-vertical.9.png | Bin 175 -> 0 bytes .../images/slider-background-vertical@2x.9.png | Bin 252 -> 0 bytes .../images/slider-background-vertical@3x.9.png | Bin 328 -> 0 bytes .../images/slider-background-vertical@4x.9.png | Bin 464 -> 0 bytes .../imagine/images/slider-handle-disabled.png | Bin 255 -> 0 bytes .../imagine/images/slider-handle-disabled@2x.png | Bin 484 -> 0 bytes .../imagine/images/slider-handle-disabled@3x.png | Bin 726 -> 0 bytes .../imagine/images/slider-handle-disabled@4x.png | Bin 965 -> 0 bytes .../images/slider-handle-focused-hovered.png | Bin 255 -> 0 bytes .../images/slider-handle-focused-hovered@2x.png | Bin 519 -> 0 bytes .../images/slider-handle-focused-hovered@3x.png | Bin 765 -> 0 bytes .../images/slider-handle-focused-hovered@4x.png | Bin 990 -> 0 bytes .../images/slider-handle-focused-pressed.png | Bin 255 -> 0 bytes .../images/slider-handle-focused-pressed@2x.png | Bin 519 -> 0 bytes .../images/slider-handle-focused-pressed@3x.png | Bin 765 -> 0 bytes .../images/slider-handle-focused-pressed@4x.png | Bin 990 -> 0 bytes .../imagine/images/slider-handle-focused.png | Bin 255 -> 0 bytes .../imagine/images/slider-handle-focused@2x.png | Bin 519 -> 0 bytes .../imagine/images/slider-handle-focused@3x.png | Bin 765 -> 0 bytes .../imagine/images/slider-handle-focused@4x.png | Bin 998 -> 0 bytes .../imagine/images/slider-handle-hovered.png | Bin 255 -> 0 bytes .../imagine/images/slider-handle-hovered@2x.png | Bin 484 -> 0 bytes .../imagine/images/slider-handle-hovered@3x.png | Bin 726 -> 0 bytes .../imagine/images/slider-handle-hovered@4x.png | Bin 965 -> 0 bytes .../imagine/images/slider-handle-pressed.png | Bin 255 -> 0 bytes .../imagine/images/slider-handle-pressed@2x.png | Bin 484 -> 0 bytes .../imagine/images/slider-handle-pressed@3x.png | Bin 726 -> 0 bytes .../imagine/images/slider-handle-pressed@4x.png | Bin 965 -> 0 bytes .../controls/imagine/images/slider-handle.png | Bin 255 -> 0 bytes .../controls/imagine/images/slider-handle@2x.png | Bin 487 -> 0 bytes .../controls/imagine/images/slider-handle@3x.png | Bin 728 -> 0 bytes .../controls/imagine/images/slider-handle@4x.png | Bin 976 -> 0 bytes .../slider-progress-horizontal-disabled.9.png | Bin 144 -> 0 bytes .../slider-progress-horizontal-disabled@2x.9.png | Bin 185 -> 0 bytes .../slider-progress-horizontal-disabled@3x.9.png | Bin 228 -> 0 bytes .../slider-progress-horizontal-disabled@4x.9.png | Bin 273 -> 0 bytes .../images/slider-progress-horizontal.9.png | Bin 144 -> 0 bytes .../images/slider-progress-horizontal@2x.9.png | Bin 185 -> 0 bytes .../images/slider-progress-horizontal@3x.9.png | Bin 228 -> 0 bytes .../images/slider-progress-horizontal@4x.9.png | Bin 273 -> 0 bytes .../images/slider-progress-vertical-disabled.9.png | Bin 143 -> 0 bytes .../slider-progress-vertical-disabled@2x.9.png | Bin 188 -> 0 bytes .../slider-progress-vertical-disabled@3x.9.png | Bin 227 -> 0 bytes .../slider-progress-vertical-disabled@4x.9.png | Bin 279 -> 0 bytes .../imagine/images/slider-progress-vertical.9.png | Bin 143 -> 0 bytes .../images/slider-progress-vertical@2x.9.png | Bin 188 -> 0 bytes .../images/slider-progress-vertical@3x.9.png | Bin 227 -> 0 bytes .../images/slider-progress-vertical@4x.9.png | Bin 279 -> 0 bytes .../images/spinbox-background-disabled.9.png | Bin 198 -> 0 bytes .../images/spinbox-background-disabled@2x.9.png | Bin 277 -> 0 bytes .../images/spinbox-background-disabled@3x.9.png | Bin 443 -> 0 bytes .../images/spinbox-background-disabled@4x.9.png | Bin 583 -> 0 bytes .../images/spinbox-background-editable.9.png | Bin 214 -> 0 bytes .../images/spinbox-background-editable@2x.9.png | Bin 337 -> 0 bytes .../images/spinbox-background-editable@3x.9.png | Bin 533 -> 0 bytes .../images/spinbox-background-editable@4x.9.png | Bin 784 -> 0 bytes .../images/spinbox-background-focused.9.png | Bin 214 -> 0 bytes .../images/spinbox-background-focused@2x.9.png | Bin 337 -> 0 bytes .../images/spinbox-background-focused@3x.9.png | Bin 533 -> 0 bytes .../images/spinbox-background-focused@4x.9.png | Bin 784 -> 0 bytes .../imagine/images/spinbox-background.9.png | Bin 214 -> 0 bytes .../imagine/images/spinbox-background@2x.9.png | Bin 337 -> 0 bytes .../imagine/images/spinbox-background@3x.9.png | Bin 539 -> 0 bytes .../imagine/images/spinbox-background@4x.9.png | Bin 767 -> 0 bytes .../images/spinbox-indicator-down-disabled.9.png | Bin 150 -> 0 bytes .../spinbox-indicator-down-disabled@2x.9.png | Bin 184 -> 0 bytes .../spinbox-indicator-down-disabled@3x.9.png | Bin 225 -> 0 bytes .../spinbox-indicator-down-disabled@4x.9.png | Bin 256 -> 0 bytes .../spinbox-indicator-down-editable-focused.9.png | Bin 150 -> 0 bytes ...pinbox-indicator-down-editable-focused@2x.9.png | Bin 184 -> 0 bytes ...pinbox-indicator-down-editable-focused@3x.9.png | Bin 225 -> 0 bytes ...pinbox-indicator-down-editable-focused@4x.9.png | Bin 256 -> 0 bytes .../spinbox-indicator-down-editable-hovered.9.png | Bin 150 -> 0 bytes ...pinbox-indicator-down-editable-hovered@2x.9.png | Bin 184 -> 0 bytes ...pinbox-indicator-down-editable-hovered@3x.9.png | Bin 225 -> 0 bytes ...pinbox-indicator-down-editable-hovered@4x.9.png | Bin 256 -> 0 bytes ...-indicator-down-editable-mirrored-focused.9.png | Bin 153 -> 0 bytes ...dicator-down-editable-mirrored-focused@2x.9.png | Bin 186 -> 0 bytes ...dicator-down-editable-mirrored-focused@3x.9.png | Bin 226 -> 0 bytes ...dicator-down-editable-mirrored-focused@4x.9.png | Bin 261 -> 0 bytes ...-indicator-down-editable-mirrored-hovered.9.png | Bin 153 -> 0 bytes ...dicator-down-editable-mirrored-hovered@2x.9.png | Bin 186 -> 0 bytes ...dicator-down-editable-mirrored-hovered@3x.9.png | Bin 226 -> 0 bytes ...dicator-down-editable-mirrored-hovered@4x.9.png | Bin 261 -> 0 bytes ...-indicator-down-editable-mirrored-pressed.9.png | Bin 153 -> 0 bytes ...dicator-down-editable-mirrored-pressed@2x.9.png | Bin 186 -> 0 bytes ...dicator-down-editable-mirrored-pressed@3x.9.png | Bin 226 -> 0 bytes ...dicator-down-editable-mirrored-pressed@4x.9.png | Bin 261 -> 0 bytes .../spinbox-indicator-down-editable-mirrored.9.png | Bin 153 -> 0 bytes ...inbox-indicator-down-editable-mirrored@2x.9.png | Bin 186 -> 0 bytes ...inbox-indicator-down-editable-mirrored@3x.9.png | Bin 226 -> 0 bytes ...inbox-indicator-down-editable-mirrored@4x.9.png | Bin 261 -> 0 bytes .../spinbox-indicator-down-editable-pressed.9.png | Bin 150 -> 0 bytes ...pinbox-indicator-down-editable-pressed@2x.9.png | Bin 184 -> 0 bytes ...pinbox-indicator-down-editable-pressed@3x.9.png | Bin 225 -> 0 bytes ...pinbox-indicator-down-editable-pressed@4x.9.png | Bin 256 -> 0 bytes .../images/spinbox-indicator-down-editable.9.png | Bin 150 -> 0 bytes .../spinbox-indicator-down-editable@2x.9.png | Bin 184 -> 0 bytes .../spinbox-indicator-down-editable@3x.9.png | Bin 225 -> 0 bytes .../spinbox-indicator-down-editable@4x.9.png | Bin 256 -> 0 bytes .../images/spinbox-indicator-down-focused.9.png | Bin 150 -> 0 bytes .../images/spinbox-indicator-down-focused@2x.9.png | Bin 184 -> 0 bytes .../images/spinbox-indicator-down-focused@3x.9.png | Bin 225 -> 0 bytes .../images/spinbox-indicator-down-focused@4x.9.png | Bin 256 -> 0 bytes .../images/spinbox-indicator-down-hovered.9.png | Bin 150 -> 0 bytes .../images/spinbox-indicator-down-hovered@2x.9.png | Bin 184 -> 0 bytes .../images/spinbox-indicator-down-hovered@3x.9.png | Bin 225 -> 0 bytes .../images/spinbox-indicator-down-hovered@4x.9.png | Bin 256 -> 0 bytes .../spinbox-indicator-down-mirrored-disabled.9.png | Bin 153 -> 0 bytes ...inbox-indicator-down-mirrored-disabled@2x.9.png | Bin 186 -> 0 bytes ...inbox-indicator-down-mirrored-disabled@3x.9.png | Bin 226 -> 0 bytes ...inbox-indicator-down-mirrored-disabled@4x.9.png | Bin 261 -> 0 bytes .../spinbox-indicator-down-mirrored-focused.9.png | Bin 153 -> 0 bytes ...pinbox-indicator-down-mirrored-focused@2x.9.png | Bin 186 -> 0 bytes ...pinbox-indicator-down-mirrored-focused@3x.9.png | Bin 226 -> 0 bytes ...pinbox-indicator-down-mirrored-focused@4x.9.png | Bin 261 -> 0 bytes .../spinbox-indicator-down-mirrored-hovered.9.png | Bin 153 -> 0 bytes ...pinbox-indicator-down-mirrored-hovered@2x.9.png | Bin 186 -> 0 bytes ...pinbox-indicator-down-mirrored-hovered@3x.9.png | Bin 226 -> 0 bytes ...pinbox-indicator-down-mirrored-hovered@4x.9.png | Bin 261 -> 0 bytes .../spinbox-indicator-down-mirrored-pressed.9.png | Bin 153 -> 0 bytes ...pinbox-indicator-down-mirrored-pressed@2x.9.png | Bin 186 -> 0 bytes ...pinbox-indicator-down-mirrored-pressed@3x.9.png | Bin 226 -> 0 bytes ...pinbox-indicator-down-mirrored-pressed@4x.9.png | Bin 261 -> 0 bytes .../images/spinbox-indicator-down-mirrored.9.png | Bin 153 -> 0 bytes .../spinbox-indicator-down-mirrored@2x.9.png | Bin 186 -> 0 bytes .../spinbox-indicator-down-mirrored@3x.9.png | Bin 226 -> 0 bytes .../spinbox-indicator-down-mirrored@4x.9.png | Bin 261 -> 0 bytes .../images/spinbox-indicator-down-pressed.9.png | Bin 150 -> 0 bytes .../images/spinbox-indicator-down-pressed@2x.9.png | Bin 184 -> 0 bytes .../images/spinbox-indicator-down-pressed@3x.9.png | Bin 225 -> 0 bytes .../images/spinbox-indicator-down-pressed@4x.9.png | Bin 256 -> 0 bytes .../imagine/images/spinbox-indicator-down.9.png | Bin 150 -> 0 bytes .../imagine/images/spinbox-indicator-down@2x.9.png | Bin 184 -> 0 bytes .../imagine/images/spinbox-indicator-down@3x.9.png | Bin 225 -> 0 bytes .../imagine/images/spinbox-indicator-down@4x.9.png | Bin 256 -> 0 bytes .../images/spinbox-indicator-up-disabled.9.png | Bin 160 -> 0 bytes .../images/spinbox-indicator-up-disabled@2x.9.png | Bin 191 -> 0 bytes .../images/spinbox-indicator-up-disabled@3x.9.png | Bin 235 -> 0 bytes .../images/spinbox-indicator-up-disabled@4x.9.png | Bin 269 -> 0 bytes .../spinbox-indicator-up-editable-focused.9.png | Bin 160 -> 0 bytes .../spinbox-indicator-up-editable-focused@2x.9.png | Bin 191 -> 0 bytes .../spinbox-indicator-up-editable-focused@3x.9.png | Bin 235 -> 0 bytes .../spinbox-indicator-up-editable-focused@4x.9.png | Bin 269 -> 0 bytes .../spinbox-indicator-up-editable-hovered.9.png | Bin 160 -> 0 bytes .../spinbox-indicator-up-editable-hovered@2x.9.png | Bin 191 -> 0 bytes .../spinbox-indicator-up-editable-hovered@3x.9.png | Bin 235 -> 0 bytes .../spinbox-indicator-up-editable-hovered@4x.9.png | Bin 269 -> 0 bytes ...ox-indicator-up-editable-mirrored-focused.9.png | Bin 157 -> 0 bytes ...indicator-up-editable-mirrored-focused@2x.9.png | Bin 189 -> 0 bytes ...indicator-up-editable-mirrored-focused@3x.9.png | Bin 232 -> 0 bytes ...indicator-up-editable-mirrored-focused@4x.9.png | Bin 265 -> 0 bytes ...ox-indicator-up-editable-mirrored-hovered.9.png | Bin 157 -> 0 bytes ...indicator-up-editable-mirrored-hovered@2x.9.png | Bin 189 -> 0 bytes ...indicator-up-editable-mirrored-hovered@3x.9.png | Bin 232 -> 0 bytes ...indicator-up-editable-mirrored-hovered@4x.9.png | Bin 265 -> 0 bytes ...ox-indicator-up-editable-mirrored-pressed.9.png | Bin 157 -> 0 bytes ...indicator-up-editable-mirrored-pressed@2x.9.png | Bin 189 -> 0 bytes ...indicator-up-editable-mirrored-pressed@3x.9.png | Bin 232 -> 0 bytes ...indicator-up-editable-mirrored-pressed@4x.9.png | Bin 265 -> 0 bytes .../spinbox-indicator-up-editable-mirrored.9.png | Bin 157 -> 0 bytes ...spinbox-indicator-up-editable-mirrored@2x.9.png | Bin 189 -> 0 bytes ...spinbox-indicator-up-editable-mirrored@3x.9.png | Bin 232 -> 0 bytes ...spinbox-indicator-up-editable-mirrored@4x.9.png | Bin 265 -> 0 bytes .../spinbox-indicator-up-editable-pressed.9.png | Bin 160 -> 0 bytes .../spinbox-indicator-up-editable-pressed@2x.9.png | Bin 191 -> 0 bytes .../spinbox-indicator-up-editable-pressed@3x.9.png | Bin 235 -> 0 bytes .../spinbox-indicator-up-editable-pressed@4x.9.png | Bin 269 -> 0 bytes .../images/spinbox-indicator-up-editable.9.png | Bin 160 -> 0 bytes .../images/spinbox-indicator-up-editable@2x.9.png | Bin 191 -> 0 bytes .../images/spinbox-indicator-up-editable@3x.9.png | Bin 235 -> 0 bytes .../images/spinbox-indicator-up-editable@4x.9.png | Bin 269 -> 0 bytes .../images/spinbox-indicator-up-focused.9.png | Bin 160 -> 0 bytes .../images/spinbox-indicator-up-focused@2x.9.png | Bin 191 -> 0 bytes .../images/spinbox-indicator-up-focused@3x.9.png | Bin 235 -> 0 bytes .../images/spinbox-indicator-up-focused@4x.9.png | Bin 269 -> 0 bytes .../images/spinbox-indicator-up-hovered.9.png | Bin 160 -> 0 bytes .../images/spinbox-indicator-up-hovered@2x.9.png | Bin 191 -> 0 bytes .../images/spinbox-indicator-up-hovered@3x.9.png | Bin 235 -> 0 bytes .../images/spinbox-indicator-up-hovered@4x.9.png | Bin 269 -> 0 bytes .../spinbox-indicator-up-mirrored-disabled.9.png | Bin 157 -> 0 bytes ...spinbox-indicator-up-mirrored-disabled@2x.9.png | Bin 189 -> 0 bytes ...spinbox-indicator-up-mirrored-disabled@3x.9.png | Bin 232 -> 0 bytes ...spinbox-indicator-up-mirrored-disabled@4x.9.png | Bin 265 -> 0 bytes .../spinbox-indicator-up-mirrored-focused.9.png | Bin 157 -> 0 bytes .../spinbox-indicator-up-mirrored-focused@2x.9.png | Bin 189 -> 0 bytes .../spinbox-indicator-up-mirrored-focused@3x.9.png | Bin 232 -> 0 bytes .../spinbox-indicator-up-mirrored-focused@4x.9.png | Bin 265 -> 0 bytes .../spinbox-indicator-up-mirrored-hovered.9.png | Bin 157 -> 0 bytes .../spinbox-indicator-up-mirrored-hovered@2x.9.png | Bin 189 -> 0 bytes .../spinbox-indicator-up-mirrored-hovered@3x.9.png | Bin 232 -> 0 bytes .../spinbox-indicator-up-mirrored-hovered@4x.9.png | Bin 265 -> 0 bytes .../spinbox-indicator-up-mirrored-pressed.9.png | Bin 157 -> 0 bytes .../spinbox-indicator-up-mirrored-pressed@2x.9.png | Bin 189 -> 0 bytes .../spinbox-indicator-up-mirrored-pressed@3x.9.png | Bin 232 -> 0 bytes .../spinbox-indicator-up-mirrored-pressed@4x.9.png | Bin 265 -> 0 bytes .../images/spinbox-indicator-up-mirrored.9.png | Bin 157 -> 0 bytes .../images/spinbox-indicator-up-mirrored@2x.9.png | Bin 189 -> 0 bytes .../images/spinbox-indicator-up-mirrored@3x.9.png | Bin 232 -> 0 bytes .../images/spinbox-indicator-up-mirrored@4x.9.png | Bin 265 -> 0 bytes .../images/spinbox-indicator-up-pressed.9.png | Bin 160 -> 0 bytes .../images/spinbox-indicator-up-pressed@2x.9.png | Bin 191 -> 0 bytes .../images/spinbox-indicator-up-pressed@3x.9.png | Bin 235 -> 0 bytes .../images/spinbox-indicator-up-pressed@4x.9.png | Bin 269 -> 0 bytes .../imagine/images/spinbox-indicator-up.9.png | Bin 160 -> 0 bytes .../imagine/images/spinbox-indicator-up@2x.9.png | Bin 191 -> 0 bytes .../imagine/images/spinbox-indicator-up@3x.9.png | Bin 235 -> 0 bytes .../imagine/images/spinbox-indicator-up@4x.9.png | Bin 269 -> 0 bytes .../imagine/images/splitview-handle-disabled.png | Bin 80 -> 0 bytes .../images/splitview-handle-disabled@2x.png | Bin 83 -> 0 bytes .../images/splitview-handle-disabled@3x.png | Bin 83 -> 0 bytes .../images/splitview-handle-disabled@4x.png | Bin 83 -> 0 bytes .../imagine/images/splitview-handle-hovered.png | Bin 80 -> 0 bytes .../imagine/images/splitview-handle-hovered@2x.png | Bin 83 -> 0 bytes .../imagine/images/splitview-handle-hovered@3x.png | Bin 83 -> 0 bytes .../imagine/images/splitview-handle-hovered@4x.png | Bin 83 -> 0 bytes .../imagine/images/splitview-handle-pressed.png | Bin 80 -> 0 bytes .../imagine/images/splitview-handle-pressed@2x.png | Bin 83 -> 0 bytes .../imagine/images/splitview-handle-pressed@3x.png | Bin 83 -> 0 bytes .../imagine/images/splitview-handle-pressed@4x.png | Bin 83 -> 0 bytes .../controls/imagine/images/splitview-handle.png | Bin 80 -> 0 bytes .../imagine/images/splitview-handle@2x.png | Bin 83 -> 0 bytes .../imagine/images/splitview-handle@3x.png | Bin 83 -> 0 bytes .../imagine/images/splitview-handle@4x.png | Bin 83 -> 0 bytes .../images/swipedelegate-background-disabled.9.png | Bin 120 -> 0 bytes .../swipedelegate-background-disabled@2x.9.png | Bin 123 -> 0 bytes .../swipedelegate-background-disabled@3x.9.png | Bin 127 -> 0 bytes .../swipedelegate-background-disabled@4x.9.png | Bin 132 -> 0 bytes .../images/swipedelegate-background-focused.9.png | Bin 120 -> 0 bytes .../swipedelegate-background-focused@2x.9.png | Bin 123 -> 0 bytes .../swipedelegate-background-focused@3x.9.png | Bin 127 -> 0 bytes .../swipedelegate-background-focused@4x.9.png | Bin 132 -> 0 bytes .../swipedelegate-background-highlighted.9.png | Bin 120 -> 0 bytes .../swipedelegate-background-highlighted@2x.9.png | Bin 123 -> 0 bytes .../swipedelegate-background-highlighted@3x.9.png | Bin 127 -> 0 bytes .../swipedelegate-background-highlighted@4x.9.png | Bin 132 -> 0 bytes .../images/swipedelegate-background-hovered.9.png | Bin 120 -> 0 bytes .../swipedelegate-background-hovered@2x.9.png | Bin 123 -> 0 bytes .../swipedelegate-background-hovered@3x.9.png | Bin 127 -> 0 bytes .../swipedelegate-background-hovered@4x.9.png | Bin 132 -> 0 bytes .../images/swipedelegate-background-pressed.9.png | Bin 120 -> 0 bytes .../swipedelegate-background-pressed@2x.9.png | Bin 123 -> 0 bytes .../swipedelegate-background-pressed@3x.9.png | Bin 127 -> 0 bytes .../swipedelegate-background-pressed@4x.9.png | Bin 132 -> 0 bytes .../imagine/images/swipedelegate-background.9.png | Bin 120 -> 0 bytes .../images/swipedelegate-background@2x.9.png | Bin 123 -> 0 bytes .../images/swipedelegate-background@3x.9.png | Bin 127 -> 0 bytes .../images/swipedelegate-background@4x.9.png | Bin 132 -> 0 bytes .../imagine/images/switch-handle-disabled.png | Bin 226 -> 0 bytes .../imagine/images/switch-handle-disabled@2x.png | Bin 368 -> 0 bytes .../imagine/images/switch-handle-disabled@3x.png | Bin 517 -> 0 bytes .../imagine/images/switch-handle-disabled@4x.png | Bin 699 -> 0 bytes .../imagine/images/switch-handle-pressed.png | Bin 226 -> 0 bytes .../imagine/images/switch-handle-pressed@2x.png | Bin 368 -> 0 bytes .../imagine/images/switch-handle-pressed@3x.png | Bin 517 -> 0 bytes .../imagine/images/switch-handle-pressed@4x.png | Bin 699 -> 0 bytes .../controls/imagine/images/switch-handle.png | Bin 226 -> 0 bytes .../controls/imagine/images/switch-handle@2x.png | Bin 368 -> 0 bytes .../controls/imagine/images/switch-handle@3x.png | Bin 517 -> 0 bytes .../controls/imagine/images/switch-handle@4x.png | Bin 699 -> 0 bytes .../images/switch-indicator-checked-focused.png | Bin 283 -> 0 bytes .../images/switch-indicator-checked-focused@2x.png | Bin 423 -> 0 bytes .../images/switch-indicator-checked-focused@3x.png | Bin 650 -> 0 bytes .../images/switch-indicator-checked-focused@4x.png | Bin 834 -> 0 bytes .../images/switch-indicator-checked-hovered.png | Bin 283 -> 0 bytes .../images/switch-indicator-checked-hovered@2x.png | Bin 423 -> 0 bytes .../images/switch-indicator-checked-hovered@3x.png | Bin 650 -> 0 bytes .../images/switch-indicator-checked-hovered@4x.png | Bin 834 -> 0 bytes .../images/switch-indicator-checked-pressed.png | Bin 283 -> 0 bytes .../images/switch-indicator-checked-pressed@2x.png | Bin 423 -> 0 bytes .../images/switch-indicator-checked-pressed@3x.png | Bin 650 -> 0 bytes .../images/switch-indicator-checked-pressed@4x.png | Bin 834 -> 0 bytes .../imagine/images/switch-indicator-checked.png | Bin 283 -> 0 bytes .../imagine/images/switch-indicator-checked@2x.png | Bin 423 -> 0 bytes .../imagine/images/switch-indicator-checked@3x.png | Bin 650 -> 0 bytes .../imagine/images/switch-indicator-checked@4x.png | Bin 834 -> 0 bytes .../imagine/images/switch-indicator-disabled.png | Bin 283 -> 0 bytes .../images/switch-indicator-disabled@2x.png | Bin 423 -> 0 bytes .../images/switch-indicator-disabled@3x.png | Bin 650 -> 0 bytes .../images/switch-indicator-disabled@4x.png | Bin 834 -> 0 bytes .../imagine/images/switch-indicator-focused.png | Bin 283 -> 0 bytes .../imagine/images/switch-indicator-focused@2x.png | Bin 423 -> 0 bytes .../imagine/images/switch-indicator-focused@3x.png | Bin 650 -> 0 bytes .../imagine/images/switch-indicator-focused@4x.png | Bin 834 -> 0 bytes .../imagine/images/switch-indicator-hovered.png | Bin 283 -> 0 bytes .../imagine/images/switch-indicator-hovered@2x.png | Bin 423 -> 0 bytes .../imagine/images/switch-indicator-hovered@3x.png | Bin 650 -> 0 bytes .../imagine/images/switch-indicator-hovered@4x.png | Bin 834 -> 0 bytes .../imagine/images/switch-indicator-pressed.png | Bin 283 -> 0 bytes .../imagine/images/switch-indicator-pressed@2x.png | Bin 423 -> 0 bytes .../imagine/images/switch-indicator-pressed@3x.png | Bin 650 -> 0 bytes .../imagine/images/switch-indicator-pressed@4x.png | Bin 834 -> 0 bytes .../controls/imagine/images/switch-indicator.png | Bin 283 -> 0 bytes .../imagine/images/switch-indicator@2x.png | Bin 423 -> 0 bytes .../imagine/images/switch-indicator@3x.png | Bin 650 -> 0 bytes .../imagine/images/switch-indicator@4x.png | Bin 834 -> 0 bytes .../switchdelegate-background-disabled.9.png | Bin 120 -> 0 bytes .../switchdelegate-background-disabled@2x.9.png | Bin 123 -> 0 bytes .../switchdelegate-background-disabled@3x.9.png | Bin 127 -> 0 bytes .../switchdelegate-background-disabled@4x.9.png | Bin 132 -> 0 bytes .../images/switchdelegate-background-focused.9.png | Bin 120 -> 0 bytes .../switchdelegate-background-focused@2x.9.png | Bin 123 -> 0 bytes .../switchdelegate-background-focused@3x.9.png | Bin 127 -> 0 bytes .../switchdelegate-background-focused@4x.9.png | Bin 132 -> 0 bytes .../images/switchdelegate-background-hovered.9.png | Bin 120 -> 0 bytes .../switchdelegate-background-hovered@2x.9.png | Bin 123 -> 0 bytes .../switchdelegate-background-hovered@3x.9.png | Bin 127 -> 0 bytes .../switchdelegate-background-hovered@4x.9.png | Bin 132 -> 0 bytes .../images/switchdelegate-background-pressed.9.png | Bin 120 -> 0 bytes .../switchdelegate-background-pressed@2x.9.png | Bin 123 -> 0 bytes .../switchdelegate-background-pressed@3x.9.png | Bin 127 -> 0 bytes .../switchdelegate-background-pressed@4x.9.png | Bin 132 -> 0 bytes .../imagine/images/switchdelegate-background.9.png | Bin 120 -> 0 bytes .../images/switchdelegate-background@2x.9.png | Bin 123 -> 0 bytes .../images/switchdelegate-background@3x.9.png | Bin 127 -> 0 bytes .../images/switchdelegate-background@4x.9.png | Bin 132 -> 0 bytes .../images/switchdelegate-handle-disabled.png | Bin 226 -> 0 bytes .../images/switchdelegate-handle-disabled@2x.png | Bin 368 -> 0 bytes .../images/switchdelegate-handle-disabled@3x.png | Bin 517 -> 0 bytes .../images/switchdelegate-handle-disabled@4x.png | Bin 699 -> 0 bytes .../images/switchdelegate-handle-pressed.png | Bin 226 -> 0 bytes .../images/switchdelegate-handle-pressed@2x.png | Bin 368 -> 0 bytes .../images/switchdelegate-handle-pressed@3x.png | Bin 517 -> 0 bytes .../images/switchdelegate-handle-pressed@4x.png | Bin 699 -> 0 bytes .../imagine/images/switchdelegate-handle.png | Bin 226 -> 0 bytes .../imagine/images/switchdelegate-handle@2x.png | Bin 368 -> 0 bytes .../imagine/images/switchdelegate-handle@3x.png | Bin 517 -> 0 bytes .../imagine/images/switchdelegate-handle@4x.png | Bin 699 -> 0 bytes .../switchdelegate-indicator-checked-focused.png | Bin 283 -> 0 bytes ...switchdelegate-indicator-checked-focused@2x.png | Bin 423 -> 0 bytes ...switchdelegate-indicator-checked-focused@3x.png | Bin 650 -> 0 bytes ...switchdelegate-indicator-checked-focused@4x.png | Bin 834 -> 0 bytes .../switchdelegate-indicator-checked-hovered.png | Bin 283 -> 0 bytes ...switchdelegate-indicator-checked-hovered@2x.png | Bin 423 -> 0 bytes ...switchdelegate-indicator-checked-hovered@3x.png | Bin 650 -> 0 bytes ...switchdelegate-indicator-checked-hovered@4x.png | Bin 834 -> 0 bytes .../switchdelegate-indicator-checked-pressed.png | Bin 283 -> 0 bytes ...switchdelegate-indicator-checked-pressed@2x.png | Bin 423 -> 0 bytes ...switchdelegate-indicator-checked-pressed@3x.png | Bin 650 -> 0 bytes ...switchdelegate-indicator-checked-pressed@4x.png | Bin 834 -> 0 bytes .../images/switchdelegate-indicator-checked.png | Bin 283 -> 0 bytes .../images/switchdelegate-indicator-checked@2x.png | Bin 423 -> 0 bytes .../images/switchdelegate-indicator-checked@3x.png | Bin 650 -> 0 bytes .../images/switchdelegate-indicator-checked@4x.png | Bin 834 -> 0 bytes .../images/switchdelegate-indicator-disabled.png | Bin 283 -> 0 bytes .../switchdelegate-indicator-disabled@2x.png | Bin 423 -> 0 bytes .../switchdelegate-indicator-disabled@3x.png | Bin 650 -> 0 bytes .../switchdelegate-indicator-disabled@4x.png | Bin 834 -> 0 bytes .../images/switchdelegate-indicator-focused.png | Bin 283 -> 0 bytes .../images/switchdelegate-indicator-focused@2x.png | Bin 423 -> 0 bytes .../images/switchdelegate-indicator-focused@3x.png | Bin 650 -> 0 bytes .../images/switchdelegate-indicator-focused@4x.png | Bin 834 -> 0 bytes .../images/switchdelegate-indicator-hovered.png | Bin 283 -> 0 bytes .../images/switchdelegate-indicator-hovered@2x.png | Bin 423 -> 0 bytes .../images/switchdelegate-indicator-hovered@3x.png | Bin 650 -> 0 bytes .../images/switchdelegate-indicator-hovered@4x.png | Bin 834 -> 0 bytes .../images/switchdelegate-indicator-pressed.png | Bin 283 -> 0 bytes .../images/switchdelegate-indicator-pressed@2x.png | Bin 423 -> 0 bytes .../images/switchdelegate-indicator-pressed@3x.png | Bin 650 -> 0 bytes .../images/switchdelegate-indicator-pressed@4x.png | Bin 834 -> 0 bytes .../imagine/images/switchdelegate-indicator.png | Bin 283 -> 0 bytes .../imagine/images/switchdelegate-indicator@2x.png | Bin 423 -> 0 bytes .../imagine/images/switchdelegate-indicator@3x.png | Bin 650 -> 0 bytes .../imagine/images/switchdelegate-indicator@4x.png | Bin 834 -> 0 bytes .../controls/imagine/images/tabbar-background.png | Bin 74 -> 0 bytes .../imagine/images/tabbar-background@2x.png | Bin 83 -> 0 bytes .../imagine/images/tabbar-background@3x.png | Bin 83 -> 0 bytes .../imagine/images/tabbar-background@4x.png | Bin 83 -> 0 bytes .../images/tabbutton-background-checked.9.png | Bin 127 -> 0 bytes .../images/tabbutton-background-checked@2x.9.png | Bin 137 -> 0 bytes .../images/tabbutton-background-checked@3x.9.png | Bin 153 -> 0 bytes .../images/tabbutton-background-checked@4x.9.png | Bin 169 -> 0 bytes .../tabbutton-background-disabled-checked.9.png | Bin 127 -> 0 bytes .../tabbutton-background-disabled-checked@2x.9.png | Bin 137 -> 0 bytes .../tabbutton-background-disabled-checked@3x.9.png | Bin 153 -> 0 bytes .../tabbutton-background-disabled-checked@4x.9.png | Bin 169 -> 0 bytes .../images/tabbutton-background-disabled.9.png | Bin 127 -> 0 bytes .../images/tabbutton-background-disabled@2x.9.png | Bin 137 -> 0 bytes .../images/tabbutton-background-disabled@3x.9.png | Bin 153 -> 0 bytes .../images/tabbutton-background-disabled@4x.9.png | Bin 169 -> 0 bytes .../images/tabbutton-background-hovered.9.png | Bin 127 -> 0 bytes .../images/tabbutton-background-hovered@2x.9.png | Bin 137 -> 0 bytes .../images/tabbutton-background-hovered@3x.9.png | Bin 153 -> 0 bytes .../images/tabbutton-background-hovered@4x.9.png | Bin 169 -> 0 bytes .../images/tabbutton-background-pressed.9.png | Bin 127 -> 0 bytes .../images/tabbutton-background-pressed@2x.9.png | Bin 137 -> 0 bytes .../images/tabbutton-background-pressed@3x.9.png | Bin 153 -> 0 bytes .../images/tabbutton-background-pressed@4x.9.png | Bin 169 -> 0 bytes .../imagine/images/tabbutton-background.9.png | Bin 127 -> 0 bytes .../imagine/images/tabbutton-background@2x.9.png | Bin 137 -> 0 bytes .../imagine/images/tabbutton-background@3x.9.png | Bin 153 -> 0 bytes .../imagine/images/tabbutton-background@4x.9.png | Bin 169 -> 0 bytes .../images/textarea-background-disabled.9.png | Bin 180 -> 0 bytes .../images/textarea-background-disabled@2x.9.png | Bin 242 -> 0 bytes .../images/textarea-background-disabled@3x.9.png | Bin 312 -> 0 bytes .../images/textarea-background-disabled@4x.9.png | Bin 390 -> 0 bytes .../images/textarea-background-focused.9.png | Bin 196 -> 0 bytes .../images/textarea-background-focused@2x.9.png | Bin 285 -> 0 bytes .../images/textarea-background-focused@3x.9.png | Bin 383 -> 0 bytes .../images/textarea-background-focused@4x.9.png | Bin 503 -> 0 bytes .../imagine/images/textarea-background.9.png | Bin 196 -> 0 bytes .../imagine/images/textarea-background@2x.9.png | Bin 285 -> 0 bytes .../imagine/images/textarea-background@3x.9.png | Bin 383 -> 0 bytes .../imagine/images/textarea-background@4x.9.png | Bin 503 -> 0 bytes .../images/textfield-background-disabled.9.png | Bin 188 -> 0 bytes .../images/textfield-background-disabled@2x.9.png | Bin 273 -> 0 bytes .../images/textfield-background-disabled@3x.9.png | Bin 355 -> 0 bytes .../images/textfield-background-disabled@4x.9.png | Bin 533 -> 0 bytes .../images/textfield-background-focused.9.png | Bin 205 -> 0 bytes .../images/textfield-background-focused@2x.9.png | Bin 314 -> 0 bytes .../images/textfield-background-focused@3x.9.png | Bin 495 -> 0 bytes .../images/textfield-background-focused@4x.9.png | Bin 712 -> 0 bytes .../imagine/images/textfield-background.9.png | Bin 205 -> 0 bytes .../imagine/images/textfield-background@2x.9.png | Bin 314 -> 0 bytes .../imagine/images/textfield-background@3x.9.png | Bin 495 -> 0 bytes .../imagine/images/textfield-background@4x.9.png | Bin 712 -> 0 bytes .../controls/imagine/images/toolbar-background.png | Bin 76 -> 0 bytes .../imagine/images/toolbar-background@2x.png | Bin 83 -> 0 bytes .../imagine/images/toolbar-background@3x.png | Bin 83 -> 0 bytes .../imagine/images/toolbar-background@4x.png | Bin 83 -> 0 bytes .../toolbutton-background-checked-focused.9.png | Bin 122 -> 0 bytes .../toolbutton-background-checked-focused@2x.9.png | Bin 127 -> 0 bytes .../toolbutton-background-checked-focused@3x.9.png | Bin 135 -> 0 bytes .../toolbutton-background-checked-focused@4x.9.png | Bin 149 -> 0 bytes .../toolbutton-background-checked-hovered.9.png | Bin 122 -> 0 bytes .../toolbutton-background-checked-hovered@2x.9.png | Bin 127 -> 0 bytes .../toolbutton-background-checked-hovered@3x.9.png | Bin 135 -> 0 bytes .../toolbutton-background-checked-hovered@4x.9.png | Bin 149 -> 0 bytes .../images/toolbutton-background-checked.9.png | Bin 122 -> 0 bytes .../images/toolbutton-background-checked@2x.9.png | Bin 127 -> 0 bytes .../images/toolbutton-background-checked@3x.9.png | Bin 135 -> 0 bytes .../images/toolbutton-background-checked@4x.9.png | Bin 149 -> 0 bytes .../toolbutton-background-disabled-checked.9.png | Bin 122 -> 0 bytes ...toolbutton-background-disabled-checked@2x.9.png | Bin 127 -> 0 bytes ...toolbutton-background-disabled-checked@3x.9.png | Bin 135 -> 0 bytes ...toolbutton-background-disabled-checked@4x.9.png | Bin 149 -> 0 bytes .../images/toolbutton-background-focused.9.png | Bin 122 -> 0 bytes .../images/toolbutton-background-focused@2x.9.png | Bin 127 -> 0 bytes .../images/toolbutton-background-focused@3x.9.png | Bin 135 -> 0 bytes .../images/toolbutton-background-focused@4x.9.png | Bin 149 -> 0 bytes .../images/toolbutton-background-hovered.9.png | Bin 122 -> 0 bytes .../images/toolbutton-background-hovered@2x.9.png | Bin 127 -> 0 bytes .../images/toolbutton-background-hovered@3x.9.png | Bin 135 -> 0 bytes .../images/toolbutton-background-hovered@4x.9.png | Bin 149 -> 0 bytes .../images/toolbutton-background-pressed.9.png | Bin 122 -> 0 bytes .../images/toolbutton-background-pressed@2x.9.png | Bin 127 -> 0 bytes .../images/toolbutton-background-pressed@3x.9.png | Bin 135 -> 0 bytes .../images/toolbutton-background-pressed@4x.9.png | Bin 149 -> 0 bytes .../imagine/images/toolbutton-background.9.png | Bin 122 -> 0 bytes .../imagine/images/toolbutton-background@2x.9.png | Bin 127 -> 0 bytes .../imagine/images/toolbutton-background@3x.9.png | Bin 135 -> 0 bytes .../imagine/images/toolbutton-background@4x.9.png | Bin 149 -> 0 bytes .../toolseparator-separator-horizontal.9.png | Bin 125 -> 0 bytes .../toolseparator-separator-horizontal@2x.9.png | Bin 135 -> 0 bytes .../toolseparator-separator-horizontal@3x.9.png | Bin 141 -> 0 bytes .../toolseparator-separator-horizontal@4x.9.png | Bin 151 -> 0 bytes .../images/toolseparator-separator-vertical.9.png | Bin 128 -> 0 bytes .../toolseparator-separator-vertical@2x.9.png | Bin 133 -> 0 bytes .../toolseparator-separator-vertical@3x.9.png | Bin 138 -> 0 bytes .../toolseparator-separator-vertical@4x.9.png | Bin 150 -> 0 bytes .../imagine/images/tooltip-background.9.png | Bin 195 -> 0 bytes .../imagine/images/tooltip-background@2x.9.png | Bin 264 -> 0 bytes .../imagine/images/tooltip-background@3x.9.png | Bin 346 -> 0 bytes .../imagine/images/tooltip-background@4x.9.png | Bin 415 -> 0 bytes src/imports/controls/imagine/imagine.pri | 58 - src/imports/controls/imagine/impl/CMakeLists.txt | 68 - src/imports/controls/imagine/impl/OpacityMask.qml | 68 - .../controls/imagine/impl/qquickimageselector.cpp | 338 -- .../controls/imagine/impl/qquickimageselector_p.h | 157 - .../controls/imagine/impl/qquickninepatchimage.cpp | 469 -- .../controls/imagine/impl/qquickninepatchimage_p.h | 108 - .../qtquickcontrols2imaginestyleimplplugin.cpp | 61 - .../impl/shaders/+glslcore/OpacityMask.frag | 13 - .../imagine/impl/shaders/+qsb/OpacityMask.frag | Bin 1409 -> 0 bytes .../controls/imagine/impl/shaders/OpacityMask.frag | 7 - .../imagine/impl/shaders/OpacityMask_rhi.frag | 17 - .../controls/imagine/impl/shaders/compile.bat | 40 - .../controls/imagine/qquickimaginestyle.cpp | 168 - .../controls/imagine/qquickimaginestyle_p.h | 97 - .../controls/imagine/qquickimaginetheme.cpp | 66 - .../controls/imagine/qquickimaginetheme_p.h | 65 - .../imagine/qtquickcontrols2imaginestyleplugin.cpp | 81 - src/imports/controls/macos/Button.qml | 43 - src/imports/controls/macos/CMakeLists.txt | 107 - src/imports/controls/macos/CheckBox.qml | 43 - src/imports/controls/macos/ComboBox.qml | 65 - src/imports/controls/macos/Dial.qml | 41 - src/imports/controls/macos/Frame.qml | 41 - src/imports/controls/macos/GroupBox.qml | 60 - src/imports/controls/macos/ProgressBar.qml | 41 - src/imports/controls/macos/RadioButton.qml | 43 - src/imports/controls/macos/ScrollBar.qml | 64 - src/imports/controls/macos/ScrollView.qml | 75 - src/imports/controls/macos/Slider.qml | 68 - src/imports/controls/macos/SpinBox.qml | 126 - src/imports/controls/macos/TextArea.qml | 41 - src/imports/controls/macos/TextField.qml | 43 - src/imports/controls/macos/macos.pri | 15 - .../macos/qtquickcontrols2macosstyleplugin.cpp | 75 - .../controls/material/ApplicationWindow.qml | 46 - src/imports/controls/material/BusyIndicator.qml | 61 - src/imports/controls/material/Button.qml | 117 - src/imports/controls/material/CMakeLists.txt | 282 - src/imports/controls/material/CheckBox.qml | 83 - src/imports/controls/material/CheckDelegate.qml | 97 - src/imports/controls/material/ComboBox.qml | 179 - src/imports/controls/material/DelayButton.qml | 116 - src/imports/controls/material/Dial.qml | 85 - src/imports/controls/material/Dialog.qml | 112 - src/imports/controls/material/DialogButtonBox.qml | 78 - src/imports/controls/material/Drawer.qml | 91 - src/imports/controls/material/Frame.qml | 63 - src/imports/controls/material/GroupBox.qml | 81 - .../controls/material/HorizontalHeaderView.qml | 68 - src/imports/controls/material/ItemDelegate.qml | 88 - .../controls/material/LICENSE_ANGULARJS.txt | 19 - src/imports/controls/material/Label.qml | 46 - src/imports/controls/material/Menu.qml | 107 - src/imports/controls/material/MenuBar.qml | 64 - src/imports/controls/material/MenuBarItem.qml | 88 - src/imports/controls/material/MenuItem.qml | 111 - src/imports/controls/material/MenuSeparator.qml | 56 - src/imports/controls/material/Page.qml | 56 - src/imports/controls/material/PageIndicator.qml | 71 - src/imports/controls/material/Pane.qml | 61 - src/imports/controls/material/Popup.qml | 85 - src/imports/controls/material/ProgressBar.qml | 67 - src/imports/controls/material/RadioButton.qml | 83 - src/imports/controls/material/RadioDelegate.qml | 97 - src/imports/controls/material/RangeSlider.qml | 92 - src/imports/controls/material/RoundButton.qml | 114 - src/imports/controls/material/ScrollBar.qml | 89 - src/imports/controls/material/ScrollIndicator.qml | 75 - src/imports/controls/material/ScrollView.qml | 64 - src/imports/controls/material/Slider.qml | 81 - src/imports/controls/material/SpinBox.qml | 156 - src/imports/controls/material/SplitView.qml | 73 - src/imports/controls/material/StackView.qml | 79 - src/imports/controls/material/SwipeDelegate.qml | 98 - src/imports/controls/material/SwipeView.qml | 66 - src/imports/controls/material/Switch.qml | 79 - src/imports/controls/material/SwitchDelegate.qml | 97 - src/imports/controls/material/TabBar.qml | 89 - src/imports/controls/material/TabButton.qml | 78 - src/imports/controls/material/TextArea.qml | 83 - src/imports/controls/material/TextField.qml | 85 - src/imports/controls/material/ToolBar.qml | 66 - src/imports/controls/material/ToolButton.qml | 86 - src/imports/controls/material/ToolSeparator.qml | 57 - src/imports/controls/material/ToolTip.qml | 83 - src/imports/controls/material/Tumbler.qml | 75 - .../controls/material/VerticalHeaderView.qml | 68 - .../controls/material/images/arrow-indicator.png | Bin 126 -> 0 bytes .../controls/material/images/arrow-indicator.svg | 56 - .../material/images/arrow-indicator@2x.png | Bin 152 -> 0 bytes .../material/images/arrow-indicator@3x.png | Bin 174 -> 0 bytes .../material/images/arrow-indicator@4x.png | Bin 172 -> 0 bytes src/imports/controls/material/images/check.png | Bin 631 -> 0 bytes src/imports/controls/material/images/check@2x.png | Bin 1273 -> 0 bytes src/imports/controls/material/images/check@3x.png | Bin 1829 -> 0 bytes src/imports/controls/material/images/check@4x.png | Bin 2241 -> 0 bytes .../controls/material/images/drop-indicator.png | Bin 125 -> 0 bytes .../controls/material/images/drop-indicator.svg | 5 - .../controls/material/images/drop-indicator@2x.png | Bin 158 -> 0 bytes .../controls/material/images/drop-indicator@3x.png | Bin 180 -> 0 bytes .../controls/material/images/drop-indicator@4x.png | Bin 202 -> 0 bytes src/imports/controls/material/impl/BoxShadow.qml | 70 - src/imports/controls/material/impl/CMakeLists.txt | 82 - .../controls/material/impl/CheckIndicator.qml | 120 - .../controls/material/impl/CursorDelegate.qml | 65 - .../controls/material/impl/ElevationEffect.qml | 279 - .../controls/material/impl/RadioIndicator.qml | 62 - .../controls/material/impl/RectangularGlow.qml | 240 - .../controls/material/impl/SliderHandle.qml | 76 - .../controls/material/impl/SwitchIndicator.qml | 81 - .../material/impl/qquickmaterialbusyindicator.cpp | 245 - .../material/impl/qquickmaterialbusyindicator_p.h | 88 - .../material/impl/qquickmaterialprogressbar.cpp | 245 - .../material/impl/qquickmaterialprogressbar_p.h | 91 - .../material/impl/qquickmaterialripple.cpp | 442 -- .../material/impl/qquickmaterialripple_p.h | 120 - .../qtquickcontrols2materialstyleimplplugin.cpp | 61 - src/imports/controls/material/material.pri | 60 - .../controls/material/qquickmaterialstyle.cpp | 1383 ----- .../controls/material/qquickmaterialstyle_p.h | 334 -- .../controls/material/qquickmaterialtheme.cpp | 113 - .../controls/material/qquickmaterialtheme_p.h | 65 - src/imports/controls/material/qt_attribution.json | 13 - .../qtquickcontrols2materialstyleplugin.cpp | 81 - .../qtquickcontrols2materialstyleplugin.qrc | 20 - .../shaders/+glslcore/RectangularGlow.frag | 25 - .../material/shaders/+hlsl/RectangularGlow.frag | 21 - .../material/shaders/+qsb/RectangularGlow.frag | Bin 2007 -> 0 bytes .../controls/material/shaders/RectangularGlow.frag | 19 - .../material/shaders/RectangularGlow_rhi.frag | 28 - src/imports/controls/material/shaders/compile.bat | 40 - src/imports/controls/qtquickcontrols2plugin.cpp | 167 - .../controls/universal/ApplicationWindow.qml | 54 - src/imports/controls/universal/BusyIndicator.qml | 60 - src/imports/controls/universal/Button.qml | 89 - src/imports/controls/universal/CMakeLists.txt | 278 - src/imports/controls/universal/CheckBox.qml | 74 - src/imports/controls/universal/CheckDelegate.qml | 96 - src/imports/controls/universal/ComboBox.qml | 158 - src/imports/controls/universal/DelayButton.qml | 94 - src/imports/controls/universal/Dial.qml | 86 - src/imports/controls/universal/Dialog.qml | 90 - src/imports/controls/universal/DialogButtonBox.qml | 75 - src/imports/controls/universal/Drawer.qml | 78 - src/imports/controls/universal/Frame.qml | 55 - src/imports/controls/universal/GroupBox.qml | 75 - .../controls/universal/HorizontalHeaderView.qml | 69 - src/imports/controls/universal/ItemDelegate.qml | 86 - src/imports/controls/universal/Label.qml | 47 - src/imports/controls/universal/Menu.qml | 82 - src/imports/controls/universal/MenuBar.qml | 63 - src/imports/controls/universal/MenuBarItem.qml | 90 - src/imports/controls/universal/MenuItem.qml | 114 - src/imports/controls/universal/MenuSeparator.qml | 62 - src/imports/controls/universal/Page.qml | 56 - src/imports/controls/universal/PageIndicator.qml | 69 - src/imports/controls/universal/Pane.qml | 54 - src/imports/controls/universal/Popup.qml | 64 - src/imports/controls/universal/ProgressBar.qml | 68 - src/imports/controls/universal/README.md | 9 - src/imports/controls/universal/RadioButton.qml | 74 - src/imports/controls/universal/RadioDelegate.qml | 96 - src/imports/controls/universal/RangeSlider.qml | 109 - src/imports/controls/universal/RoundButton.qml | 90 - src/imports/controls/universal/ScrollBar.qml | 93 - src/imports/controls/universal/ScrollIndicator.qml | 78 - src/imports/controls/universal/ScrollView.qml | 64 - src/imports/controls/universal/Slider.qml | 96 - src/imports/controls/universal/SpinBox.qml | 147 - src/imports/controls/universal/SplitView.qml | 55 - src/imports/controls/universal/StackView.qml | 76 - src/imports/controls/universal/SwipeDelegate.qml | 92 - src/imports/controls/universal/Switch.qml | 74 - src/imports/controls/universal/SwitchDelegate.qml | 96 - src/imports/controls/universal/TabBar.qml | 70 - src/imports/controls/universal/TabButton.qml | 69 - src/imports/controls/universal/TextArea.qml | 93 - src/imports/controls/universal/TextField.qml | 93 - src/imports/controls/universal/ToolBar.qml | 53 - src/imports/controls/universal/ToolButton.qml | 83 - src/imports/controls/universal/ToolSeparator.qml | 59 - src/imports/controls/universal/ToolTip.qml | 72 - src/imports/controls/universal/Tumbler.qml | 75 - .../controls/universal/VerticalHeaderView.qml | 69 - .../controls/universal/images/checkmark.png | Bin 222 -> 0 bytes .../controls/universal/images/checkmark@2x.png | Bin 346 -> 0 bytes .../controls/universal/images/checkmark@3x.png | Bin 796 -> 0 bytes .../controls/universal/images/checkmark@4x.png | Bin 613 -> 0 bytes .../controls/universal/images/downarrow.png | Bin 175 -> 0 bytes .../controls/universal/images/downarrow@2x.png | Bin 267 -> 0 bytes .../controls/universal/images/downarrow@3x.png | Bin 329 -> 0 bytes .../controls/universal/images/downarrow@4x.png | Bin 365 -> 0 bytes .../controls/universal/images/leftarrow.png | Bin 158 -> 0 bytes .../controls/universal/images/leftarrow@2x.png | Bin 222 -> 0 bytes .../controls/universal/images/leftarrow@3x.png | Bin 283 -> 0 bytes .../controls/universal/images/leftarrow@4x.png | Bin 315 -> 0 bytes .../controls/universal/images/rightarrow.png | Bin 152 -> 0 bytes .../controls/universal/images/rightarrow@2x.png | Bin 226 -> 0 bytes .../controls/universal/images/rightarrow@3x.png | Bin 258 -> 0 bytes .../controls/universal/images/rightarrow@4x.png | Bin 338 -> 0 bytes src/imports/controls/universal/impl/CMakeLists.txt | 62 - .../controls/universal/impl/CheckIndicator.qml | 81 - .../controls/universal/impl/RadioIndicator.qml | 80 - .../controls/universal/impl/SwitchIndicator.qml | 81 - .../impl/qquickuniversalbusyindicator.cpp | 251 - .../impl/qquickuniversalbusyindicator_p.h | 89 - .../impl/qquickuniversalfocusrectangle.cpp | 84 - .../impl/qquickuniversalfocusrectangle_p.h | 69 - .../universal/impl/qquickuniversalprogressbar.cpp | 338 -- .../universal/impl/qquickuniversalprogressbar_p.h | 91 - .../qtquickcontrols2universalstyleimplplugin.cpp | 61 - .../controls/universal/qquickuniversalstyle.cpp | 618 -- .../controls/universal/qquickuniversalstyle_p.h | 246 - .../controls/universal/qquickuniversaltheme.cpp | 70 - .../controls/universal/qquickuniversaltheme_p.h | 65 - .../qtquickcontrols2universalstyleplugin.cpp | 80 - .../qtquickcontrols2universalstyleplugin.qrc | 20 - src/imports/controls/universal/universal.pri | 59 - src/imports/controls/windows/Button.qml | 95 - src/imports/controls/windows/CMakeLists.txt | 103 - src/imports/controls/windows/CheckBox.qml | 107 - src/imports/controls/windows/ComboBox.qml | 130 - src/imports/controls/windows/Frame.qml | 41 - src/imports/controls/windows/GroupBox.qml | 41 - src/imports/controls/windows/ProgressBar.qml | 41 - src/imports/controls/windows/RadioButton.qml | 41 - src/imports/controls/windows/ScrollBar.qml | 128 - src/imports/controls/windows/ScrollView.qml | 67 - src/imports/controls/windows/Slider.qml | 41 - src/imports/controls/windows/SpinBox.qml | 124 - src/imports/controls/windows/TextArea.qml | 41 - src/imports/controls/windows/TextField.qml | 41 - .../windows/qtquickcontrols2windowsstyleplugin.cpp | 74 - src/imports/controls/windows/windows.pri | 14 - src/imports/controlsimpl/CMakeLists.txt | 37 - .../controlsimpl/qtquickcontrols2implplugin.cpp | 59 - src/imports/dialogs/CMakeLists.txt | 29 - .../doc/images/qtquickdialogs-filedialog-gtk.png | Bin 39560 -> 0 bytes .../doc/images/qtquickdialogs-fontdialog-gtk.png | Bin 32399 -> 0 bytes src/imports/dialogs/doc/qtquickdialogs.qdocconf | 40 - .../dialogs/doc/src/includes/fallback.qdocinc | 1 - src/imports/dialogs/qmldir | 3 - src/imports/dialogs/qtquickdialogsplugin.cpp | 60 - src/imports/nativestyle/CMakeLists.txt | 170 - src/imports/nativestyle/controls/DefaultButton.qml | 83 - .../nativestyle/controls/DefaultCheckBox.qml | 93 - .../nativestyle/controls/DefaultComboBox.qml | 129 - src/imports/nativestyle/controls/DefaultDial.qml | 60 - src/imports/nativestyle/controls/DefaultFrame.qml | 62 - .../nativestyle/controls/DefaultGroupBox.qml | 91 - .../nativestyle/controls/DefaultProgressBar.qml | 60 - .../nativestyle/controls/DefaultRadioButton.qml | 96 - .../nativestyle/controls/DefaultScrollBar.qml | 67 - src/imports/nativestyle/controls/DefaultSlider.qml | 74 - .../nativestyle/controls/DefaultSpinBox.qml | 109 - .../nativestyle/controls/DefaultTextArea.qml | 83 - .../nativestyle/controls/DefaultTextField.qml | 89 - src/imports/nativestyle/controls/controls.pri | 14 - src/imports/nativestyle/items/items.pri | 36 - src/imports/nativestyle/items/qquickstyleitem.cpp | 561 -- src/imports/nativestyle/items/qquickstyleitem.h | 311 - .../nativestyle/items/qquickstyleitembutton.cpp | 88 - .../nativestyle/items/qquickstyleitembutton.h | 60 - .../nativestyle/items/qquickstyleitemcheckbox.cpp | 89 - .../nativestyle/items/qquickstyleitemcheckbox.h | 60 - .../nativestyle/items/qquickstyleitemcombobox.cpp | 89 - .../nativestyle/items/qquickstyleitemcombobox.h | 60 - .../nativestyle/items/qquickstyleitemdial.cpp | 111 - .../nativestyle/items/qquickstyleitemdial.h | 60 - .../nativestyle/items/qquickstyleitemframe.cpp | 67 - .../nativestyle/items/qquickstyleitemframe.h | 56 - .../nativestyle/items/qquickstyleitemgroupbox.cpp | 100 - .../nativestyle/items/qquickstyleitemgroupbox.h | 70 - .../items/qquickstyleitemprogressbar.cpp | 114 - .../nativestyle/items/qquickstyleitemprogressbar.h | 61 - .../items/qquickstyleitemradiobutton.cpp | 83 - .../nativestyle/items/qquickstyleitemradiobutton.h | 60 - .../nativestyle/items/qquickstyleitemscrollbar.cpp | 151 - .../nativestyle/items/qquickstyleitemscrollbar.h | 74 - .../items/qquickstyleitemscrollviewcorner.cpp | 119 - .../items/qquickstyleitemscrollviewcorner.h | 56 - .../nativestyle/items/qquickstyleitemslider.cpp | 123 - .../nativestyle/items/qquickstyleitemslider.h | 72 - .../nativestyle/items/qquickstyleitemspinbox.cpp | 110 - .../nativestyle/items/qquickstyleitemspinbox.h | 73 - .../nativestyle/items/qquickstyleitemtextfield.cpp | 86 - .../nativestyle/items/qquickstyleitemtextfield.h | 60 - src/imports/nativestyle/qstyle/mac/mac.pri | 12 - .../nativestyle/qstyle/mac/qquickmacstyle_mac.mm | 6072 ------------------- .../nativestyle/qstyle/mac/qquickmacstyle_mac_p.h | 104 - .../qstyle/mac/qquickmacstyle_mac_p_p.h | 230 - .../nativestyle/qstyle/qquickcommonstyle.cpp | 6082 -------------------- src/imports/nativestyle/qstyle/qquickcommonstyle.h | 89 - .../nativestyle/qstyle/qquickcommonstyle_p.h | 109 - .../qstyle/qquickcommonstylepixmaps_p.h | 532 -- src/imports/nativestyle/qstyle/qquickdrawutil.cpp | 1145 ---- src/imports/nativestyle/qstyle/qquickdrawutil.h | 170 - .../nativestyle/qstyle/qquicknativestyle.cpp | 47 - src/imports/nativestyle/qstyle/qquicknativestyle.h | 69 - src/imports/nativestyle/qstyle/qquickstyle.cpp | 412 -- src/imports/nativestyle/qstyle/qquickstyle.h | 839 --- src/imports/nativestyle/qstyle/qquickstyle_p.h | 121 - .../nativestyle/qstyle/qquickstylehelper.cpp | 438 -- .../nativestyle/qstyle/qquickstylehelper_p.h | 99 - .../nativestyle/qstyle/qquickstyleoption.cpp | 652 --- src/imports/nativestyle/qstyle/qquickstyleoption.h | 795 --- src/imports/nativestyle/qstyle/qstyle.pri | 23 - .../qstyle/windows/qquickwindowsstyle.cpp | 2388 -------- .../qstyle/windows/qquickwindowsstyle_p.h | 111 - .../qstyle/windows/qquickwindowsstyle_p_p.h | 122 - .../qstyle/windows/qquickwindowsvistastyle.cpp | 2509 -------- .../qstyle/windows/qquickwindowsvistastyle_p.h | 109 - .../qstyle/windows/qquickwindowsvistastyle_p_p.h | 204 - .../qstyle/windows/qquickwindowsxpstyle.cpp | 4149 ------------- .../qstyle/windows/qquickwindowsxpstyle_p.h | 102 - .../qstyle/windows/qquickwindowsxpstyle_p_p.h | 348 -- src/imports/nativestyle/qstyle/windows/windows.pri | 18 - .../qtquickcontrols2nativestyleplugin.cpp | 164 - src/imports/nativestyle/util/FocusFrame.qml | 118 - src/imports/nativestyle/util/qquickmacfocusframe.h | 73 - .../nativestyle/util/qquickmacfocusframe.mm | 178 - src/imports/nativestyle/util/util.pri | 11 - src/imports/platform/CMakeLists.txt | 103 - .../doc/images/qtlabsplatform-colordialog-gtk.png | Bin 9786 -> 0 bytes .../doc/images/qtlabsplatform-filedialog-gtk.png | Bin 39560 -> 0 bytes .../doc/images/qtlabsplatform-folderdialog-gtk.png | Bin 40008 -> 0 bytes .../doc/images/qtlabsplatform-fontdialog-gtk.png | Bin 32399 -> 0 bytes .../platform/doc/images/qtlabsplatform-menu.png | Bin 3687 -> 0 bytes .../platform/doc/images/qtlabsplatform-menubar.png | Bin 60433 -> 0 bytes .../qtlabsplatform-messagedialog-android.png | Bin 3741 -> 0 bytes ...splatform-messagedialog-informative-android.png | Bin 6737 -> 0 bytes .../images/qtlabsplatform-systemtrayicon-menu.png | Bin 20550 -> 0 bytes .../qtlabsplatform-systemtrayicon-message.png | Bin 33060 -> 0 bytes .../doc/images/qtlabsplatform-systemtrayicon.png | Bin 16929 -> 0 bytes src/imports/platform/doc/qtlabsplatform.qdocconf | 41 - .../platform/doc/src/includes/widgets.qdocinc | 28 - src/imports/platform/doc/src/qt6-changes.qdoc | 57 - .../platform/doc/src/qtlabsplatform-index.qdoc | 54 - .../platform/doc/src/qtlabsplatform-qmltypes.qdoc | 58 - src/imports/platform/platform.pri | 39 - src/imports/platform/qquickplatformcolordialog.cpp | 206 - src/imports/platform/qquickplatformcolordialog_p.h | 98 - src/imports/platform/qquickplatformdialog.cpp | 411 -- src/imports/platform/qquickplatformdialog_p.h | 153 - src/imports/platform/qquickplatformfiledialog.cpp | 662 --- src/imports/platform/qquickplatformfiledialog_p.h | 197 - .../platform/qquickplatformfolderdialog.cpp | 280 - .../platform/qquickplatformfolderdialog_p.h | 110 - src/imports/platform/qquickplatformfontdialog.cpp | 208 - src/imports/platform/qquickplatformfontdialog_p.h | 98 - src/imports/platform/qquickplatformicon.cpp | 81 - src/imports/platform/qquickplatformicon_p.h | 86 - src/imports/platform/qquickplatformiconloader.cpp | 101 - src/imports/platform/qquickplatformiconloader_p.h | 86 - src/imports/platform/qquickplatformmenu.cpp | 895 --- src/imports/platform/qquickplatformmenu_p.h | 213 - src/imports/platform/qquickplatformmenubar.cpp | 333 -- src/imports/platform/qquickplatformmenubar_p.h | 120 - src/imports/platform/qquickplatformmenuitem.cpp | 641 --- src/imports/platform/qquickplatformmenuitem_p.h | 191 - .../platform/qquickplatformmenuitemgroup.cpp | 392 -- .../platform/qquickplatformmenuitemgroup_p.h | 123 - .../platform/qquickplatformmenuseparator.cpp | 65 - .../platform/qquickplatformmenuseparator_p.h | 67 - .../platform/qquickplatformmessagedialog.cpp | 382 -- .../platform/qquickplatformmessagedialog_p.h | 121 - .../platform/qquickplatformstandardpaths.cpp | 173 - .../platform/qquickplatformstandardpaths_p.h | 92 - .../platform/qquickplatformsystemtrayicon.cpp | 443 -- .../platform/qquickplatformsystemtrayicon_p.h | 145 - src/imports/platform/qtlabsplatformplugin.cpp | 117 - src/imports/platform/widgets/qwidgetplatform_p.h | 170 - .../widgets/qwidgetplatformcolordialog.cpp | 87 - .../widgets/qwidgetplatformcolordialog_p.h | 78 - .../platform/widgets/qwidgetplatformdialog.cpp | 58 - .../platform/widgets/qwidgetplatformdialog_p.h | 66 - .../platform/widgets/qwidgetplatformfiledialog.cpp | 140 - .../platform/widgets/qwidgetplatformfiledialog_p.h | 84 - .../platform/widgets/qwidgetplatformfontdialog.cpp | 87 - .../platform/widgets/qwidgetplatformfontdialog_p.h | 78 - .../platform/widgets/qwidgetplatformmenu.cpp | 183 - .../platform/widgets/qwidgetplatformmenu_p.h | 98 - .../platform/widgets/qwidgetplatformmenuitem.cpp | 125 - .../platform/widgets/qwidgetplatformmenuitem_p.h | 88 - .../widgets/qwidgetplatformmessagedialog.cpp | 87 - .../widgets/qwidgetplatformmessagedialog_p.h | 75 - .../widgets/qwidgetplatformsystemtrayicon.cpp | 118 - .../widgets/qwidgetplatformsystemtrayicon_p.h | 87 - src/imports/platform/widgets/widgets.pri | 56 - src/imports/templates/CMakeLists.txt | 35 - .../templates/doc/src/qtquicktemplates2-index.qdoc | 58 - .../doc/src/qtquicktemplates2-qmltypes.qdoc | 64 - src/imports/templates/qtquicktemplates2plugin.cpp | 106 - src/labs/CMakeLists.txt | 2 + src/labs/platform/CMakeLists.txt | 94 + .../doc/images/qtlabsplatform-colordialog-gtk.png | Bin 0 -> 9786 bytes .../doc/images/qtlabsplatform-filedialog-gtk.png | Bin 0 -> 39560 bytes .../doc/images/qtlabsplatform-folderdialog-gtk.png | Bin 0 -> 40008 bytes .../doc/images/qtlabsplatform-fontdialog-gtk.png | Bin 0 -> 32399 bytes .../platform/doc/images/qtlabsplatform-menu.png | Bin 0 -> 3687 bytes .../platform/doc/images/qtlabsplatform-menubar.png | Bin 0 -> 60433 bytes .../qtlabsplatform-messagedialog-android.png | Bin 0 -> 3741 bytes ...splatform-messagedialog-informative-android.png | Bin 0 -> 6737 bytes .../images/qtlabsplatform-systemtrayicon-menu.png | Bin 0 -> 20550 bytes .../qtlabsplatform-systemtrayicon-message.png | Bin 0 -> 33060 bytes .../doc/images/qtlabsplatform-systemtrayicon.png | Bin 0 -> 16929 bytes src/labs/platform/doc/qtlabsplatform.qdocconf | 41 + src/labs/platform/doc/src/includes/widgets.qdocinc | 28 + src/labs/platform/doc/src/qt6-changes.qdoc | 57 + .../platform/doc/src/qtlabsplatform-index.qdoc | 54 + .../platform/doc/src/qtlabsplatform-qmltypes.qdoc | 58 + src/labs/platform/platform.pri | 39 + src/labs/platform/qquickplatformcolordialog.cpp | 206 + src/labs/platform/qquickplatformcolordialog_p.h | 98 + src/labs/platform/qquickplatformdialog.cpp | 411 ++ src/labs/platform/qquickplatformdialog_p.h | 153 + src/labs/platform/qquickplatformfiledialog.cpp | 662 +++ src/labs/platform/qquickplatformfiledialog_p.h | 197 + src/labs/platform/qquickplatformfolderdialog.cpp | 280 + src/labs/platform/qquickplatformfolderdialog_p.h | 110 + src/labs/platform/qquickplatformfontdialog.cpp | 208 + src/labs/platform/qquickplatformfontdialog_p.h | 98 + src/labs/platform/qquickplatformicon.cpp | 81 + src/labs/platform/qquickplatformicon_p.h | 86 + src/labs/platform/qquickplatformiconloader.cpp | 101 + src/labs/platform/qquickplatformiconloader_p.h | 86 + src/labs/platform/qquickplatformmenu.cpp | 895 +++ src/labs/platform/qquickplatformmenu_p.h | 213 + src/labs/platform/qquickplatformmenubar.cpp | 333 ++ src/labs/platform/qquickplatformmenubar_p.h | 120 + src/labs/platform/qquickplatformmenuitem.cpp | 641 +++ src/labs/platform/qquickplatformmenuitem_p.h | 191 + src/labs/platform/qquickplatformmenuitemgroup.cpp | 392 ++ src/labs/platform/qquickplatformmenuitemgroup_p.h | 123 + src/labs/platform/qquickplatformmenuseparator.cpp | 65 + src/labs/platform/qquickplatformmenuseparator_p.h | 67 + src/labs/platform/qquickplatformmessagedialog.cpp | 382 ++ src/labs/platform/qquickplatformmessagedialog_p.h | 121 + src/labs/platform/qquickplatformstandardpaths.cpp | 173 + src/labs/platform/qquickplatformstandardpaths_p.h | 92 + src/labs/platform/qquickplatformsystemtrayicon.cpp | 443 ++ src/labs/platform/qquickplatformsystemtrayicon_p.h | 145 + src/labs/platform/qtlabsplatformplugin.cpp | 117 + src/labs/platform/widgets/qwidgetplatform_p.h | 170 + .../widgets/qwidgetplatformcolordialog.cpp | 87 + .../widgets/qwidgetplatformcolordialog_p.h | 78 + .../platform/widgets/qwidgetplatformdialog.cpp | 58 + .../platform/widgets/qwidgetplatformdialog_p.h | 66 + .../platform/widgets/qwidgetplatformfiledialog.cpp | 140 + .../platform/widgets/qwidgetplatformfiledialog_p.h | 84 + .../platform/widgets/qwidgetplatformfontdialog.cpp | 87 + .../platform/widgets/qwidgetplatformfontdialog_p.h | 78 + src/labs/platform/widgets/qwidgetplatformmenu.cpp | 183 + src/labs/platform/widgets/qwidgetplatformmenu_p.h | 98 + .../platform/widgets/qwidgetplatformmenuitem.cpp | 125 + .../platform/widgets/qwidgetplatformmenuitem_p.h | 88 + .../widgets/qwidgetplatformmessagedialog.cpp | 87 + .../widgets/qwidgetplatformmessagedialog_p.h | 75 + .../widgets/qwidgetplatformsystemtrayicon.cpp | 118 + .../widgets/qwidgetplatformsystemtrayicon_p.h | 87 + src/labs/platform/widgets/widgets.pri | 56 + src/quickcontrols2/CMakeLists.txt | 63 +- src/quickcontrols2/basic/AbstractButton.qml | 47 + src/quickcontrols2/basic/Action.qml | 40 + src/quickcontrols2/basic/ActionGroup.qml | 40 + src/quickcontrols2/basic/ApplicationWindow.qml | 45 + src/quickcontrols2/basic/BusyIndicator.qml | 62 + src/quickcontrols2/basic/Button.qml | 79 + src/quickcontrols2/basic/ButtonGroup.qml | 40 + src/quickcontrols2/basic/CMakeLists.txt | 297 + src/quickcontrols2/basic/CheckBox.qml | 92 + src/quickcontrols2/basic/CheckDelegate.qml | 109 + src/quickcontrols2/basic/ComboBox.qml | 140 + src/quickcontrols2/basic/Container.qml | 47 + src/quickcontrols2/basic/Control.qml | 47 + src/quickcontrols2/basic/DelayButton.qml | 104 + src/quickcontrols2/basic/Dial.qml | 79 + src/quickcontrols2/basic/Dialog.qml | 85 + src/quickcontrols2/basic/DialogButtonBox.qml | 72 + src/quickcontrols2/basic/Drawer.qml | 78 + src/quickcontrols2/basic/Frame.qml | 55 + src/quickcontrols2/basic/GroupBox.qml | 73 + src/quickcontrols2/basic/HorizontalHeaderView.qml | 67 + src/quickcontrols2/basic/ItemDelegate.qml | 76 + src/quickcontrols2/basic/Label.qml | 46 + src/quickcontrols2/basic/Menu.qml | 80 + src/quickcontrols2/basic/MenuBar.qml | 62 + src/quickcontrols2/basic/MenuBarItem.qml | 76 + src/quickcontrols2/basic/MenuItem.qml | 104 + src/quickcontrols2/basic/MenuSeparator.qml | 57 + src/quickcontrols2/basic/Page.qml | 56 + src/quickcontrols2/basic/PageIndicator.qml | 71 + src/quickcontrols2/basic/Pane.qml | 54 + src/quickcontrols2/basic/Popup.qml | 63 + src/quickcontrols2/basic/ProgressBar.qml | 66 + src/quickcontrols2/basic/RadioButton.qml | 85 + src/quickcontrols2/basic/RadioDelegate.qml | 102 + src/quickcontrols2/basic/RangeSlider.qml | 95 + src/quickcontrols2/basic/RoundButton.qml | 80 + src/quickcontrols2/basic/ScrollBar.qml | 75 + src/quickcontrols2/basic/ScrollIndicator.qml | 75 + src/quickcontrols2/basic/ScrollView.qml | 64 + src/quickcontrols2/basic/Slider.qml | 82 + src/quickcontrols2/basic/SpinBox.qml | 134 + src/quickcontrols2/basic/SplitView.qml | 54 + src/quickcontrols2/basic/StackView.qml | 66 + src/quickcontrols2/basic/SwipeDelegate.qml | 77 + src/quickcontrols2/basic/SwipeView.qml | 65 + src/quickcontrols2/basic/Switch.qml | 91 + src/quickcontrols2/basic/SwitchDelegate.qml | 108 + src/quickcontrols2/basic/TabBar.qml | 69 + src/quickcontrols2/basic/TabButton.qml | 72 + src/quickcontrols2/basic/TextArea.qml | 74 + src/quickcontrols2/basic/TextField.qml | 82 + src/quickcontrols2/basic/ToolBar.qml | 53 + src/quickcontrols2/basic/ToolButton.qml | 74 + src/quickcontrols2/basic/ToolSeparator.qml | 57 + src/quickcontrols2/basic/ToolTip.qml | 68 + src/quickcontrols2/basic/Tumbler.qml | 74 + src/quickcontrols2/basic/VerticalHeaderView.qml | 67 + src/quickcontrols2/basic/basic.pri | 66 + .../basic/images/arrow-indicator.png | Bin 0 -> 169 bytes .../basic/images/arrow-indicator@2x.png | Bin 0 -> 225 bytes .../basic/images/arrow-indicator@3x.png | Bin 0 -> 285 bytes .../basic/images/arrow-indicator@4x.png | Bin 0 -> 352 bytes src/quickcontrols2/basic/images/check.png | Bin 0 -> 424 bytes src/quickcontrols2/basic/images/check@2x.png | Bin 0 -> 713 bytes src/quickcontrols2/basic/images/check@3x.png | Bin 0 -> 999 bytes src/quickcontrols2/basic/images/check@4x.png | Bin 0 -> 1188 bytes src/quickcontrols2/basic/images/dial-indicator.png | Bin 0 -> 185 bytes .../basic/images/dial-indicator@2x.png | Bin 0 -> 243 bytes .../basic/images/dial-indicator@3x.png | Bin 0 -> 284 bytes .../basic/images/dial-indicator@4x.png | Bin 0 -> 307 bytes src/quickcontrols2/basic/images/double-arrow.png | Bin 0 -> 303 bytes .../basic/images/double-arrow@2x.png | Bin 0 -> 484 bytes .../basic/images/double-arrow@3x.png | Bin 0 -> 673 bytes .../basic/images/double-arrow@4x.png | Bin 0 -> 827 bytes src/quickcontrols2/basic/images/drop-indicator.png | Bin 0 -> 157 bytes .../basic/images/drop-indicator@2x.png | Bin 0 -> 226 bytes .../basic/images/drop-indicator@3x.png | Bin 0 -> 297 bytes .../basic/images/drop-indicator@4x.png | Bin 0 -> 376 bytes src/quickcontrols2/basic/impl/CMakeLists.txt | 30 + .../basic/impl/qquickbasicbusyindicator.cpp | 223 + .../basic/impl/qquickbasicbusyindicator_p.h | 93 + src/quickcontrols2/basic/impl/qquickbasicdial.cpp | 122 + src/quickcontrols2/basic/impl/qquickbasicdial_p.h | 82 + .../basic/impl/qquickbasicprogressbar.cpp | 280 + .../basic/impl/qquickbasicprogressbar_p.h | 91 + src/quickcontrols2/basic/qquickbasicstyle.cpp | 246 + src/quickcontrols2/basic/qquickbasicstyle_p.h | 151 + src/quickcontrols2/basic/qquickbasictheme.cpp | 89 + src/quickcontrols2/basic/qquickbasictheme_p.h | 65 + .../basic/qtquickcontrols2basicstyleplugin.cpp | 79 + .../basic/qtquickcontrols2basicstyleplugin.qrc | 24 + .../designer/AbstractButtonSection.qml | 122 + .../designer/BusyIndicatorSpecifics.qml | 74 + src/quickcontrols2/designer/ButtonSection.qml | 74 + src/quickcontrols2/designer/ButtonSpecifics.qml | 63 + src/quickcontrols2/designer/CMakeLists.txt | 61 + src/quickcontrols2/designer/CheckBoxSpecifics.qml | 64 + .../designer/CheckDelegateSpecifics.qml | 68 + src/quickcontrols2/designer/CheckSection.qml | 68 + src/quickcontrols2/designer/ComboBoxSpecifics.qml | 119 + src/quickcontrols2/designer/ContainerSection.qml | 59 + src/quickcontrols2/designer/ControlSection.qml | 114 + src/quickcontrols2/designer/ControlSpecifics.qml | 55 + .../designer/DelayButtonSpecifics.qml | 81 + src/quickcontrols2/designer/DialSpecifics.qml | 172 + src/quickcontrols2/designer/FrameSpecifics.qml | 59 + src/quickcontrols2/designer/GroupBoxSpecifics.qml | 77 + src/quickcontrols2/designer/InsetSection.qml | 119 + .../designer/ItemDelegateSection.qml | 58 + .../designer/ItemDelegateSpecifics.qml | 63 + src/quickcontrols2/designer/LabelSpecifics.qml | 86 + src/quickcontrols2/designer/PaddingSection.qml | 101 + .../designer/PageIndicatorSpecifics.qml | 98 + src/quickcontrols2/designer/PageSpecifics.qml | 101 + src/quickcontrols2/designer/PaneSection.qml | 73 + src/quickcontrols2/designer/PaneSpecifics.qml | 59 + .../designer/ProgressBarSpecifics.qml | 121 + .../designer/RadioButtonSpecifics.qml | 59 + .../designer/RadioDelegateSpecifics.qml | 63 + .../designer/RangeSliderSpecifics.qml | 189 + .../designer/RoundButtonSpecifics.qml | 84 + .../designer/ScrollViewSpecifics.qml | 90 + src/quickcontrols2/designer/SliderSpecifics.qml | 180 + src/quickcontrols2/designer/SpinBoxSpecifics.qml | 142 + src/quickcontrols2/designer/StackViewSpecifics.qml | 55 + .../designer/SwipeDelegateSpecifics.qml | 63 + src/quickcontrols2/designer/SwipeViewSpecifics.qml | 91 + .../designer/SwitchDelegateSpecifics.qml | 59 + src/quickcontrols2/designer/SwitchSpecifics.qml | 59 + src/quickcontrols2/designer/TabBarSpecifics.qml | 107 + src/quickcontrols2/designer/TabButtonSpecifics.qml | 59 + src/quickcontrols2/designer/TextAreaSpecifics.qml | 104 + src/quickcontrols2/designer/TextFieldSpecifics.qml | 101 + src/quickcontrols2/designer/ToolBarSpecifics.qml | 79 + .../designer/ToolButtonSpecifics.qml | 63 + .../designer/ToolSeparatorSpecifics.qml | 71 + src/quickcontrols2/designer/TumblerSpecifics.qml | 102 + src/quickcontrols2/designer/designer.pri | 52 + .../designer/images/busyindicator-icon.png | Bin 0 -> 320 bytes .../designer/images/busyindicator-icon16.png | Bin 0 -> 229 bytes .../designer/images/busyindicator-icon@2x.png | Bin 0 -> 643 bytes src/quickcontrols2/designer/images/button-icon.png | Bin 0 -> 162 bytes .../designer/images/button-icon16.png | Bin 0 -> 145 bytes .../designer/images/button-icon@2x.png | Bin 0 -> 259 bytes .../designer/images/checkbox-icon.png | Bin 0 -> 258 bytes .../designer/images/checkbox-icon16.png | Bin 0 -> 230 bytes .../designer/images/checkbox-icon@2x.png | Bin 0 -> 336 bytes .../designer/images/combobox-icon.png | Bin 0 -> 156 bytes .../designer/images/combobox-icon16.png | Bin 0 -> 155 bytes .../designer/images/combobox-icon@2x.png | Bin 0 -> 185 bytes .../designer/images/delaybutton-icon.png | Bin 0 -> 189 bytes .../designer/images/delaybutton-icon16.png | Bin 0 -> 160 bytes .../designer/images/delaybutton-icon@2x.png | Bin 0 -> 286 bytes src/quickcontrols2/designer/images/dial-icon.png | Bin 0 -> 267 bytes src/quickcontrols2/designer/images/dial-icon16.png | Bin 0 -> 243 bytes .../designer/images/dial-icon@2x.png | Bin 0 -> 505 bytes src/quickcontrols2/designer/images/frame-icon.png | Bin 0 -> 121 bytes .../designer/images/frame-icon16.png | Bin 0 -> 117 bytes .../designer/images/frame-icon@2x.png | Bin 0 -> 125 bytes .../designer/images/groupbox-icon.png | Bin 0 -> 133 bytes .../designer/images/groupbox-icon16.png | Bin 0 -> 125 bytes .../designer/images/groupbox-icon@2x.png | Bin 0 -> 136 bytes .../designer/images/itemdelegate-icon.png | Bin 0 -> 127 bytes .../designer/images/itemdelegate-icon16.png | Bin 0 -> 124 bytes .../designer/images/itemdelegate-icon@2x.png | Bin 0 -> 133 bytes src/quickcontrols2/designer/images/label-icon.png | Bin 0 -> 206 bytes .../designer/images/label-icon16.png | Bin 0 -> 182 bytes .../designer/images/label-icon@2x.png | Bin 0 -> 284 bytes src/quickcontrols2/designer/images/page-icon.png | Bin 0 -> 190 bytes src/quickcontrols2/designer/images/page-icon16.png | Bin 0 -> 148 bytes .../designer/images/page-icon@2x.png | Bin 0 -> 195 bytes .../designer/images/pageindicator-icon.png | Bin 0 -> 179 bytes .../designer/images/pageindicator-icon16.png | Bin 0 -> 158 bytes .../designer/images/pageindicator-icon@2x.png | Bin 0 -> 207 bytes src/quickcontrols2/designer/images/pane-icon.png | Bin 0 -> 93 bytes src/quickcontrols2/designer/images/pane-icon16.png | Bin 0 -> 92 bytes .../designer/images/pane-icon@2x.png | Bin 0 -> 96 bytes .../designer/images/progressbar-icon.png | Bin 0 -> 101 bytes .../designer/images/progressbar-icon16.png | Bin 0 -> 92 bytes .../designer/images/progressbar-icon@2x.png | Bin 0 -> 127 bytes .../designer/images/radiobutton-icon.png | Bin 0 -> 279 bytes .../designer/images/radiobutton-icon16.png | Bin 0 -> 218 bytes .../designer/images/radiobutton-icon@2x.png | Bin 0 -> 482 bytes .../designer/images/rangeslider-icon.png | Bin 0 -> 269 bytes .../designer/images/rangeslider-icon16.png | Bin 0 -> 231 bytes .../designer/images/rangeslider-icon@2x.png | Bin 0 -> 282 bytes .../designer/images/roundbutton-icon.png | Bin 0 -> 229 bytes .../designer/images/roundbutton-icon16.png | Bin 0 -> 186 bytes .../designer/images/roundbutton-icon@2x.png | Bin 0 -> 381 bytes .../designer/images/scrollview-icon.png | Bin 0 -> 110 bytes .../designer/images/scrollview-icon16.png | Bin 0 -> 116 bytes .../designer/images/scrollview-icon@2x.png | Bin 0 -> 145 bytes src/quickcontrols2/designer/images/slider-icon.png | Bin 0 -> 190 bytes .../designer/images/slider-icon16.png | Bin 0 -> 156 bytes .../designer/images/slider-icon@2x.png | Bin 0 -> 227 bytes .../designer/images/spinbox-icon.png | Bin 0 -> 144 bytes .../designer/images/spinbox-icon16.png | Bin 0 -> 151 bytes .../designer/images/spinbox-icon@2x.png | Bin 0 -> 178 bytes .../designer/images/stackview-icon.png | Bin 0 -> 162 bytes .../designer/images/stackview-icon16.png | Bin 0 -> 151 bytes .../designer/images/stackview-icon@2x.png | Bin 0 -> 167 bytes .../designer/images/swipeview-icon.png | Bin 0 -> 163 bytes .../designer/images/swipeview-icon16.png | Bin 0 -> 152 bytes .../designer/images/swipeview-icon@2x.png | Bin 0 -> 184 bytes src/quickcontrols2/designer/images/switch-icon.png | Bin 0 -> 205 bytes .../designer/images/switch-icon16.png | Bin 0 -> 160 bytes .../designer/images/switch-icon@2x.png | Bin 0 -> 314 bytes .../designer/images/textarea-icon.png | Bin 0 -> 149 bytes .../designer/images/textarea-icon16.png | Bin 0 -> 133 bytes .../designer/images/textarea-icon@2x.png | Bin 0 -> 163 bytes .../designer/images/textfield-icon.png | Bin 0 -> 154 bytes .../designer/images/textfield-icon16.png | Bin 0 -> 147 bytes .../designer/images/textfield-icon@2x.png | Bin 0 -> 172 bytes .../designer/images/toolbar-icon.png | Bin 0 -> 131 bytes .../designer/images/toolbar-icon16.png | Bin 0 -> 114 bytes .../designer/images/toolbar-icon@2x.png | Bin 0 -> 140 bytes .../designer/images/toolbutton-icon.png | Bin 0 -> 141 bytes .../designer/images/toolbutton-icon16.png | Bin 0 -> 128 bytes .../designer/images/toolbutton-icon@2x.png | Bin 0 -> 158 bytes .../designer/images/toolseparator-icon.png | Bin 0 -> 111 bytes .../designer/images/toolseparator-icon16.png | Bin 0 -> 123 bytes .../designer/images/toolseparator-icon@2x.png | Bin 0 -> 131 bytes .../designer/images/tumbler-icon.png | Bin 0 -> 132 bytes .../designer/images/tumbler-icon16.png | Bin 0 -> 127 bytes .../designer/images/tumbler-icon@2x.png | Bin 0 -> 153 bytes .../designer/qtquickcontrols2.metainfo | 522 ++ src/quickcontrols2/doc/doc.pri | 6 + ...tquickcontrols2-applicationwindow-wireframe.png | Bin 0 -> 6143 bytes .../images/qtquickcontrols2-basic-thumbnail.png | Bin 0 -> 4352 bytes .../doc/images/qtquickcontrols2-basic.png | Bin 0 -> 10801 bytes .../qtquickcontrols2-busyindicator-custom.png | Bin 0 -> 944 bytes .../doc/images/qtquickcontrols2-busyindicator.gif | Bin 0 -> 17357 bytes .../doc/images/qtquickcontrols2-busyindicator.png | Bin 0 -> 900 bytes .../doc/images/qtquickcontrols2-button-custom.png | Bin 0 -> 1299 bytes .../doc/images/qtquickcontrols2-button-flat.gif | Bin 0 -> 2388 bytes .../images/qtquickcontrols2-button-highlighted.gif | Bin 0 -> 1856 bytes .../images/qtquickcontrols2-button-icononly.png | Bin 0 -> 434 bytes .../qtquickcontrols2-button-textbesideicon.png | Bin 0 -> 1315 bytes .../images/qtquickcontrols2-button-textonly.png | Bin 0 -> 1073 bytes .../qtquickcontrols2-button-textundericon.png | Bin 0 -> 1147 bytes .../doc/images/qtquickcontrols2-button.gif | Bin 0 -> 4140 bytes .../images/qtquickcontrols2-checkbox-custom.png | Bin 0 -> 1792 bytes .../doc/images/qtquickcontrols2-checkbox-group.png | Bin 0 -> 2950 bytes .../images/qtquickcontrols2-checkbox-tristate.gif | Bin 0 -> 8784 bytes .../doc/images/qtquickcontrols2-checkbox.gif | Bin 0 -> 6403 bytes .../qtquickcontrols2-checkdelegate-custom.png | Bin 0 -> 2179 bytes .../qtquickcontrols2-checkdelegate-tristate.gif | Bin 0 -> 10487 bytes .../doc/images/qtquickcontrols2-checkdelegate.gif | Bin 0 -> 15290 bytes .../images/qtquickcontrols2-combobox-custom.png | Bin 0 -> 924 bytes .../images/qtquickcontrols2-combobox-delegate.png | Bin 0 -> 989 bytes .../doc/images/qtquickcontrols2-combobox-popup.png | Bin 0 -> 989 bytes .../doc/images/qtquickcontrols2-combobox.gif | Bin 0 -> 7873 bytes .../doc/images/qtquickcontrols2-control.png | Bin 0 -> 47718 bytes .../doc/images/qtquickcontrols2-control.svg | 936 +++ .../images/qtquickcontrols2-customize-buttons.png | Bin 0 -> 2542 bytes .../images/qtquickcontrols2-delaybutton-custom.png | Bin 0 -> 5112 bytes .../doc/images/qtquickcontrols2-delaybutton.gif | Bin 0 -> 12595 bytes .../doc/images/qtquickcontrols2-dial-custom.png | Bin 0 -> 2847 bytes .../doc/images/qtquickcontrols2-dial-handle.png | Bin 0 -> 4203 bytes .../images/qtquickcontrols2-dial-inputMode.svgz | Bin 0 -> 2753 bytes .../doc/images/qtquickcontrols2-dial-inputmode.png | Bin 0 -> 9151 bytes .../doc/images/qtquickcontrols2-dial-no-wrap.gif | Bin 0 -> 52372 bytes .../doc/images/qtquickcontrols2-dial-wrap.gif | Bin 0 -> 70792 bytes .../doc/images/qtquickcontrols2-dial.png | Bin 0 -> 2603 bytes .../qtquickcontrols2-dialogbuttonbox-attached.png | Bin 0 -> 1489 bytes .../images/qtquickcontrols2-dialogbuttonbox.png | Bin 0 -> 1459 bytes .../qtquickcontrols2-drawer-expanded-wireframe.png | Bin 0 -> 2260 bytes .../images/qtquickcontrols2-drawer-wireframe.png | Bin 0 -> 1534 bytes .../doc/images/qtquickcontrols2-drawer.gif | Bin 0 -> 55780 bytes .../doc/images/qtquickcontrols2-frame-custom.png | Bin 0 -> 1930 bytes .../doc/images/qtquickcontrols2-frame.png | Bin 0 -> 2912 bytes .../images/qtquickcontrols2-fusion-palettes.png | Bin 0 -> 11034 bytes .../images/qtquickcontrols2-fusion-thumbnail.png | Bin 0 -> 6275 bytes .../doc/images/qtquickcontrols2-fusion-violet.png | Bin 0 -> 3059 bytes .../doc/images/qtquickcontrols2-fusion.png | Bin 0 -> 9302 bytes .../images/qtquickcontrols2-groupbox-checkable.png | Bin 0 -> 5006 bytes .../images/qtquickcontrols2-groupbox-custom.png | Bin 0 -> 3046 bytes .../doc/images/qtquickcontrols2-groupbox-label.png | Bin 0 -> 1662 bytes .../doc/images/qtquickcontrols2-groupbox.png | Bin 0 -> 4442 bytes .../images/qtquickcontrols2-imagine-9-patch-4x.png | Bin 0 -> 4917 bytes ...kcontrols2-imagine-9-patch-inset-boundaries.png | Bin 0 -> 6237 bytes .../qtquickcontrols2-imagine-9-patch-inset.png | Bin 0 -> 1906 bytes ...ckcontrols2-imagine-9-patch-resized-padding.png | Bin 0 -> 20260 bytes ...ntrols2-imagine-9-patch-resized-stretchable.png | Bin 0 -> 16437 bytes .../qtquickcontrols2-imagine-9-patch-size.png | Bin 0 -> 6386 bytes .../images/qtquickcontrols2-imagine-9-patch.svgz | Bin 0 -> 7598 bytes ...qtquickcontrols2-imagine-customization-dark.png | Bin 0 -> 3001 bytes .../qtquickcontrols2-imagine-customization.svgz | Bin 0 -> 2215 bytes .../images/qtquickcontrols2-imagine-thumbnail.png | Bin 0 -> 4043 bytes .../doc/images/qtquickcontrols2-imagine.png | Bin 0 -> 7918 bytes .../qtquickcontrols2-itemdelegate-custom.png | Bin 0 -> 1358 bytes .../doc/images/qtquickcontrols2-itemdelegate.gif | Bin 0 -> 16287 bytes .../doc/images/qtquickcontrols2-itemdelegate.png | Bin 0 -> 5645 bytes .../doc/images/qtquickcontrols2-label-custom.png | Bin 0 -> 942 bytes .../doc/images/qtquickcontrols2-label.png | Bin 0 -> 925 bytes .../doc/images/qtquickcontrols2-macos-dark.png | Bin 0 -> 23979 bytes .../doc/images/qtquickcontrols2-macos-light.png | Bin 0 -> 22318 bytes .../images/qtquickcontrols2-macos-thumbnail.png | Bin 0 -> 22504 bytes .../images/qtquickcontrols2-material-accent.png | Bin 0 -> 1291 bytes .../qtquickcontrols2-material-attributes.png | Bin 0 -> 7618 bytes .../qtquickcontrols2-material-background.png | Bin 0 -> 1444 bytes .../doc/images/qtquickcontrols2-material-dark.png | Bin 0 -> 10934 bytes .../images/qtquickcontrols2-material-elevation.png | Bin 0 -> 2566 bytes .../qtquickcontrols2-material-foreground.png | Bin 0 -> 1377 bytes .../doc/images/qtquickcontrols2-material-light.png | Bin 0 -> 11182 bytes .../images/qtquickcontrols2-material-purple.png | Bin 0 -> 3256 bytes .../doc/images/qtquickcontrols2-material-theme.png | Bin 0 -> 1451 bytes .../images/qtquickcontrols2-material-thumbnail.png | Bin 0 -> 10480 bytes .../qtquickcontrols2-material-variant-dense.png | Bin 0 -> 21059 bytes .../qtquickcontrols2-material-variant-normal.png | Bin 0 -> 22897 bytes .../doc/images/qtquickcontrols2-menu-custom.png | Bin 0 -> 7293 bytes .../doc/images/qtquickcontrols2-menu.gif | Bin 0 -> 4683 bytes .../doc/images/qtquickcontrols2-menu.png | Bin 0 -> 3629 bytes .../doc/images/qtquickcontrols2-menubar-custom.png | Bin 0 -> 2659 bytes .../doc/images/qtquickcontrols2-menubar.png | Bin 0 -> 8870 bytes .../qtquickcontrols2-menuseparator-custom.png | Bin 0 -> 4644 bytes .../doc/images/qtquickcontrols2-menuseparator.png | Bin 0 -> 4672 bytes .../doc/images/qtquickcontrols2-page-wireframe.png | Bin 0 -> 1795 bytes .../qtquickcontrols2-pageindicator-custom.png | Bin 0 -> 248 bytes .../qtquickcontrols2-pageindicator-delegate.png | Bin 0 -> 314 bytes .../doc/images/qtquickcontrols2-pageindicator.png | Bin 0 -> 248 bytes .../doc/images/qtquickcontrols2-pane-custom.png | Bin 0 -> 1674 bytes .../doc/images/qtquickcontrols2-pane.png | Bin 0 -> 2473 bytes .../doc/images/qtquickcontrols2-popup-custom.png | Bin 0 -> 117 bytes .../doc/images/qtquickcontrols2-popup-settings.png | Bin 0 -> 10545 bytes .../qtquickcontrols2-popup-transformorigin.png | Bin 0 -> 7256 bytes .../doc/images/qtquickcontrols2-popup.png | Bin 0 -> 62355 bytes .../doc/images/qtquickcontrols2-popup.svg | 712 +++ .../images/qtquickcontrols2-progressbar-custom.png | Bin 0 -> 165 bytes .../qtquickcontrols2-progressbar-indeterminate.gif | Bin 0 -> 5882 bytes .../doc/images/qtquickcontrols2-progressbar.gif | Bin 0 -> 2072 bytes .../images/qtquickcontrols2-radiobutton-custom.png | Bin 0 -> 2207 bytes .../doc/images/qtquickcontrols2-radiobutton.gif | Bin 0 -> 7993 bytes .../qtquickcontrols2-radiodelegate-custom.png | Bin 0 -> 2501 bytes .../doc/images/qtquickcontrols2-radiodelegate.gif | Bin 0 -> 16859 bytes .../images/qtquickcontrols2-rangeslider-custom.png | Bin 0 -> 585 bytes .../doc/images/qtquickcontrols2-rangeslider.gif | Bin 0 -> 24125 bytes .../doc/images/qtquickcontrols2-roundbutton.png | Bin 0 -> 662 bytes .../images/qtquickcontrols2-scrollbar-custom.png | Bin 0 -> 148 bytes .../qtquickcontrols2-scrollbar-non-attached.png | Bin 0 -> 4645 bytes .../images/qtquickcontrols2-scrollbar-nosnap.gif | Bin 0 -> 5271 bytes .../qtquickcontrols2-scrollbar-snapalways.gif | Bin 0 -> 4707 bytes .../qtquickcontrols2-scrollbar-snaponrelease.gif | Bin 0 -> 5646 bytes .../doc/images/qtquickcontrols2-scrollbar.gif | Bin 0 -> 32067 bytes .../qtquickcontrols2-scrollindicator-custom.png | Bin 0 -> 102 bytes ...quickcontrols2-scrollindicator-non-attached.png | Bin 0 -> 4468 bytes .../images/qtquickcontrols2-scrollindicator.gif | Bin 0 -> 42352 bytes .../images/qtquickcontrols2-scrollview-custom.png | Bin 0 -> 4423 bytes .../qtquickcontrols2-scrollview-wireframe.png | Bin 0 -> 705 bytes .../doc/images/qtquickcontrols2-scrollview.png | Bin 0 -> 4424 bytes .../doc/images/qtquickcontrols2-slider-custom.png | Bin 0 -> 454 bytes .../doc/images/qtquickcontrols2-slider-handle.png | Bin 0 -> 439 bytes .../doc/images/qtquickcontrols2-slider-nosnap.gif | Bin 0 -> 18138 bytes .../images/qtquickcontrols2-slider-snapalways.gif | Bin 0 -> 7201 bytes .../qtquickcontrols2-slider-snaponrelease.gif | Bin 0 -> 18377 bytes .../doc/images/qtquickcontrols2-slider.gif | Bin 0 -> 13697 bytes .../doc/images/qtquickcontrols2-spinbox-custom.png | Bin 0 -> 1006 bytes .../doc/images/qtquickcontrols2-spinbox-double.png | Bin 0 -> 737 bytes .../doc/images/qtquickcontrols2-spinbox-down.png | Bin 0 -> 784 bytes .../images/qtquickcontrols2-spinbox-textual.png | Bin 0 -> 1096 bytes .../doc/images/qtquickcontrols2-spinbox-up.png | Bin 0 -> 786 bytes .../doc/images/qtquickcontrols2-spinbox.png | Bin 0 -> 775 bytes .../images/qtquickcontrols2-splitview-custom.png | Bin 0 -> 125 bytes .../images/qtquickcontrols2-stackview-custom.png | Bin 0 -> 110 bytes .../doc/images/qtquickcontrols2-stackview-pop.gif | Bin 0 -> 23801 bytes .../doc/images/qtquickcontrols2-stackview-push.gif | Bin 0 -> 42790 bytes .../images/qtquickcontrols2-stackview-replace.gif | Bin 0 -> 28882 bytes .../images/qtquickcontrols2-stackview-unwind.gif | Bin 0 -> 23744 bytes .../images/qtquickcontrols2-stackview-visible.png | Bin 0 -> 512 bytes .../qtquickcontrols2-stackview-wireframe.png | Bin 0 -> 227 bytes .../doc/images/qtquickcontrols2-styles.png | Bin 0 -> 101053 bytes .../qtquickcontrols2-swipedelegate-behind.gif | Bin 0 -> 248344 bytes .../qtquickcontrols2-swipedelegate-custom.png | Bin 0 -> 1818 bytes ...ickcontrols2-swipedelegate-leading-trailing.gif | Bin 0 -> 132134 bytes .../doc/images/qtquickcontrols2-swipedelegate.gif | Bin 0 -> 123494 bytes .../qtquickcontrols2-swipeview-indicator.png | Bin 0 -> 301 bytes .../qtquickcontrols2-swipeview-wireframe.png | Bin 0 -> 1482 bytes .../doc/images/qtquickcontrols2-swipeview.gif | Bin 0 -> 35983 bytes .../doc/images/qtquickcontrols2-switch-checked.png | Bin 0 -> 1723 bytes .../doc/images/qtquickcontrols2-switch-custom.png | Bin 0 -> 1734 bytes .../doc/images/qtquickcontrols2-switch.gif | Bin 0 -> 3466 bytes .../doc/images/qtquickcontrols2-switch.png | Bin 0 -> 2042 bytes .../qtquickcontrols2-switchdelegate-custom.png | Bin 0 -> 2773 bytes .../doc/images/qtquickcontrols2-switchdelegate.gif | Bin 0 -> 38688 bytes .../doc/images/qtquickcontrols2-tabbar-custom.png | Bin 0 -> 2644 bytes .../images/qtquickcontrols2-tabbar-explicit.png | Bin 0 -> 2093 bytes .../images/qtquickcontrols2-tabbar-flickable.png | Bin 0 -> 2527 bytes .../images/qtquickcontrols2-tabbar-wireframe.png | Bin 0 -> 348 bytes .../doc/images/qtquickcontrols2-tabbar.gif | Bin 0 -> 8590 bytes .../doc/images/qtquickcontrols2-tabbar.png | Bin 0 -> 2897 bytes .../doc/images/qtquickcontrols2-tabbutton.png | Bin 0 -> 2646 bytes .../images/qtquickcontrols2-textarea-custom.png | Bin 0 -> 1320 bytes .../qtquickcontrols2-textarea-scrollable.png | Bin 0 -> 1580 bytes .../doc/images/qtquickcontrols2-textarea.png | Bin 0 -> 1968 bytes .../images/qtquickcontrols2-textfield-custom.png | Bin 0 -> 2083 bytes .../images/qtquickcontrols2-textfield-disabled.png | Bin 0 -> 1261 bytes .../images/qtquickcontrols2-textfield-focused.png | Bin 0 -> 1316 bytes .../images/qtquickcontrols2-textfield-normal.png | Bin 0 -> 1304 bytes .../doc/images/qtquickcontrols2-textfield.png | Bin 0 -> 1680 bytes .../doc/images/qtquickcontrols2-toolbar-custom.png | Bin 0 -> 1174 bytes .../doc/images/qtquickcontrols2-toolbar.png | Bin 0 -> 1008 bytes .../images/qtquickcontrols2-toolbutton-custom.png | Bin 0 -> 1398 bytes .../doc/images/qtquickcontrols2-toolbutton.png | Bin 0 -> 1226 bytes .../qtquickcontrols2-toolseparator-custom.png | Bin 0 -> 3586 bytes .../doc/images/qtquickcontrols2-toolseparator.png | Bin 0 -> 5381 bytes .../doc/images/qtquickcontrols2-tooltip-delay.png | Bin 0 -> 1144 bytes .../doc/images/qtquickcontrols2-tooltip-hover.png | Bin 0 -> 1110 bytes .../qtquickcontrols2-tooltip-pressandhold.png | Bin 0 -> 1110 bytes .../doc/images/qtquickcontrols2-tooltip-slider.png | Bin 0 -> 1261 bytes .../doc/images/qtquickcontrols2-tooltip.png | Bin 0 -> 5523 bytes .../doc/images/qtquickcontrols2-tumbler-custom.png | Bin 0 -> 1879 bytes .../images/qtquickcontrols2-tumbler-delegate.png | Bin 0 -> 929 bytes .../doc/images/qtquickcontrols2-tumbler-wrap.gif | Bin 0 -> 54328 bytes .../doc/images/qtquickcontrols2-tumbler.png | Bin 0 -> 1050 bytes .../images/qtquickcontrols2-universal-accent.png | Bin 0 -> 1058 bytes .../qtquickcontrols2-universal-attributes.png | Bin 0 -> 5298 bytes .../qtquickcontrols2-universal-background.png | Bin 0 -> 1161 bytes .../images/qtquickcontrols2-universal-button.png | Bin 0 -> 674 bytes .../doc/images/qtquickcontrols2-universal-dark.png | Bin 0 -> 10373 bytes .../qtquickcontrols2-universal-foreground.png | Bin 0 -> 985 bytes .../images/qtquickcontrols2-universal-light.png | Bin 0 -> 10846 bytes .../images/qtquickcontrols2-universal-theme.png | Bin 0 -> 1205 bytes .../qtquickcontrols2-universal-thumbnail.png | Bin 0 -> 8606 bytes .../images/qtquickcontrols2-universal-violet.png | Bin 0 -> 2894 bytes .../images/qtquickcontrols2-windows-thumbnail.png | Bin 0 -> 12394 bytes .../doc/images/qtquickcontrols2-windows.png | Bin 0 -> 17132 bytes src/quickcontrols2/doc/manifest-meta.qdocconf | 31 + src/quickcontrols2/doc/qtquickcontrols.qdocconf | 104 + .../doc/snippets/qtquickcontrols2-action.qml | 56 + .../qtquickcontrols2-busyindicator-custom.qml | 88 + .../snippets/qtquickcontrols2-button-custom.qml | 55 + .../snippets/qtquickcontrols2-button-icononly.qml | 34 + .../qtquickcontrols2-button-textbesideicon.qml | 35 + .../snippets/qtquickcontrols2-button-textonly.qml | 34 + .../snippets/qtquickcontrols2-checkbox-custom.qml | 65 + .../snippets/qtquickcontrols2-checkbox-group.qml | 58 + .../qtquickcontrols2-checkdelegate-custom.qml | 74 + .../qtquickcontrols2-combobox-accepted.qml | 45 + .../snippets/qtquickcontrols2-combobox-custom.qml | 112 + .../qtquickcontrols2-combobox-valuerole.qml | 58 + .../qtquickcontrols2-delaybutton-custom.qml | 82 + .../doc/snippets/qtquickcontrols2-dial-custom.qml | 67 + .../doc/snippets/qtquickcontrols2-dialog-modal.qml | 41 + .../snippets/qtquickcontrols2-dialog-modeless.qml | 41 + .../doc/snippets/qtquickcontrols2-dialog.qml | 44 + .../qtquickcontrols2-dialogbuttonbox-attached.qml | 42 + .../snippets/qtquickcontrols2-dialogbuttonbox.qml | 38 + .../doc/snippets/qtquickcontrols2-frame-custom.qml | 43 + .../doc/snippets/qtquickcontrols2-frame.qml | 41 + .../qtquickcontrols2-groupbox-checkable.qml | 48 + .../snippets/qtquickcontrols2-groupbox-custom.qml | 57 + .../doc/snippets/qtquickcontrols2-groupbox.qml | 42 + .../qtquickcontrols2-headerview-simple.qml | 119 + .../qtquickcontrols2-itemdelegate-custom.qml | 59 + .../doc/snippets/qtquickcontrols2-itemdelegate.qml | 46 + .../doc/snippets/qtquickcontrols2-label-custom.qml | 36 + .../doc/snippets/qtquickcontrols2-label.qml | 35 + .../snippets/qtquickcontrols2-material-accent.qml | 43 + .../qtquickcontrols2-material-background.qml | 42 + .../qtquickcontrols2-material-elevation.qml | 51 + .../qtquickcontrols2-material-foreground.qml | 41 + .../snippets/qtquickcontrols2-material-theme.qml | 44 + .../snippets/qtquickcontrols2-material-variant.qml | 212 + .../doc/snippets/qtquickcontrols2-menu-custom.qml | 133 + .../snippets/qtquickcontrols2-menubar-custom.qml | 84 + .../doc/snippets/qtquickcontrols2-menubar.qml | 67 + .../qtquickcontrols2-menuseparator-custom.qml | 69 + .../snippets/qtquickcontrols2-menuseparator.qml | 60 + .../snippets/qtquickcontrols2-overlay-modal.qml | 55 + .../snippets/qtquickcontrols2-overlay-modeless.qml | 55 + .../doc/snippets/qtquickcontrols2-overview.cmake | 4 + .../qtquickcontrols2-pageindicator-custom.qml | 53 + .../qtquickcontrols2-pageindicator-interactive.qml | 58 + .../snippets/qtquickcontrols2-pageindicator.qml | 35 + .../doc/snippets/qtquickcontrols2-pane-custom.qml | 41 + .../doc/snippets/qtquickcontrols2-pane.qml | 41 + .../doc/snippets/qtquickcontrols2-popup-custom.qml | 53 + .../doc/snippets/qtquickcontrols2-popup.qml | 46 + .../qtquickcontrols2-progressbar-custom.qml | 56 + .../qtquickcontrols2-radiobutton-custom.qml | 65 + .../qtquickcontrols2-radiodelegate-custom.qml | 74 + .../qtquickcontrols2-rangeslider-custom.qml | 76 + .../doc/snippets/qtquickcontrols2-roundbutton.qml | 36 + .../snippets/qtquickcontrols2-scrollbar-active.qml | 46 + .../snippets/qtquickcontrols2-scrollbar-custom.qml | 46 + .../qtquickcontrols2-scrollbar-non-attached.qml | 80 + .../snippets/qtquickcontrols2-scrollbar-policy.qml | 38 + .../qtquickcontrols2-scrollindicator-active.qml | 46 + .../qtquickcontrols2-scrollindicator-custom.qml | 45 + ...quickcontrols2-scrollindicator-non-attached.qml | 84 + .../qtquickcontrols2-scrollview-custom.qml | 81 + .../qtquickcontrols2-scrollview-interactive.qml | 38 + .../qtquickcontrols2-scrollview-listview.qml | 61 + .../qtquickcontrols2-scrollview-policy.qml | 38 + .../doc/snippets/qtquickcontrols2-scrollview.qml | 60 + .../snippets/qtquickcontrols2-slider-custom.qml | 64 + .../snippets/qtquickcontrols2-spinbox-custom.qml | 96 + .../snippets/qtquickcontrols2-spinbox-double.qml | 56 + .../snippets/qtquickcontrols2-spinbox-textual.qml | 55 + .../doc/snippets/qtquickcontrols2-spinbox.qml | 35 + .../snippets/qtquickcontrols2-splitview-custom.qml | 57 + .../snippets/qtquickcontrols2-stackview-custom.qml | 53 + .../qtquickcontrols2-stackview-visible.qml | 76 + .../qtquickcontrols2-swipedelegate-custom.qml | 72 + .../qtquickcontrols2-swipedelegate-transition.qml | 37 + .../snippets/qtquickcontrols2-swipedelegate.qml | 82 + .../snippets/qtquickcontrols2-swipeview-custom.qml | 39 + .../qtquickcontrols2-swipeview-indicator.qml | 63 + .../snippets/qtquickcontrols2-switch-custom.qml | 64 + .../qtquickcontrols2-switchdelegate-custom.qml | 73 + .../snippets/qtquickcontrols2-tabbar-custom.qml | 49 + .../snippets/qtquickcontrols2-tabbar-explicit.qml | 52 + .../snippets/qtquickcontrols2-tabbar-flickable.qml | 50 + .../doc/snippets/qtquickcontrols2-tabbar.qml | 64 + .../doc/snippets/qtquickcontrols2-tabbutton.qml | 43 + .../snippets/qtquickcontrols2-textarea-custom.qml | 42 + .../qtquickcontrols2-textarea-scrollable.qml | 47 + .../snippets/qtquickcontrols2-textfield-custom.qml | 43 + .../qtquickcontrols2-textfield-disabled.qml | 35 + .../qtquickcontrols2-textfield-focused.qml | 35 + .../snippets/qtquickcontrols2-textfield-normal.qml | 34 + .../snippets/qtquickcontrols2-toolbar-custom.qml | 59 + .../doc/snippets/qtquickcontrols2-toolbar.qml | 62 + .../qtquickcontrols2-toolbutton-custom.qml | 55 + .../qtquickcontrols2-toolseparator-custom.qml | 69 + .../snippets/qtquickcontrols2-toolseparator.qml | 68 + .../snippets/qtquickcontrols2-tooltip-custom.qml | 48 + .../snippets/qtquickcontrols2-tooltip-hover.qml | 41 + .../qtquickcontrols2-tooltip-pressandhold.qml | 39 + .../snippets/qtquickcontrols2-tooltip-slider.qml | 53 + .../doc/snippets/qtquickcontrols2-tooltip.qml | 51 + .../snippets/qtquickcontrols2-tumbler-custom.qml | 78 + .../snippets/qtquickcontrols2-tumbler-listView.qml | 46 + .../snippets/qtquickcontrols2-tumbler-pathView.qml | 57 + .../qtquickcontrols2-tumbler-timePicker.qml | 86 + .../snippets/qtquickcontrols2-universal-accent.qml | 43 + .../qtquickcontrols2-universal-background.qml | 44 + .../qtquickcontrols2-universal-foreground.qml | 41 + .../snippets/qtquickcontrols2-universal-theme.qml | 44 + src/quickcontrols2/doc/src/external-pages.qdoc | 36 + .../includes/customize-button-background.qdocinc | 25 + .../doc/src/includes/inputmethodhints.qdocinc | 38 + .../src/includes/qquickcontrol-background.qdocinc | 13 + .../src/includes/qquickcontrol-focusreason.qdocinc | 15 + .../doc/src/includes/qquickdial.qdocinc | 13 + .../doc/src/includes/qquickicon.qdocinc | 50 + .../doc/src/includes/qquickimaginestyle.qdocinc | 57 + .../doc/src/includes/qquickmaterialstyle.qdocinc | 79 + .../includes/qquickoverlay-popup-parent.qdocinc | 20 + .../doc/src/includes/qquickpopup-padding.qdocinc | 10 + .../doc/src/includes/qquickstackview.qdocinc | 5 + .../qquickswipedelegate-interaction.qdocinc | 5 + .../doc/src/includes/qquickswitch.qdocinc | 28 + .../doc/src/includes/qquickuniversalstyle.qdocinc | 53 + src/quickcontrols2/doc/src/qt6-changes.qdoc | 305 + .../doc/src/qtquickcontrols2-basic.qdoc | 55 + .../doc/src/qtquickcontrols2-buttons.qdoc | 191 + .../doc/src/qtquickcontrols2-configuration.qdoc | 204 + .../doc/src/qtquickcontrols2-containers.qdoc | 113 + .../doc/src/qtquickcontrols2-cppclasses.qdoc | 58 + .../doc/src/qtquickcontrols2-customize.qdoc | 986 ++++ .../doc/src/qtquickcontrols2-delegates.qdoc | 79 + .../doc/src/qtquickcontrols2-deployment.qdoc | 97 + .../doc/src/qtquickcontrols2-environment.qdoc | 78 + .../doc/src/qtquickcontrols2-examples.qdoc | 37 + .../doc/src/qtquickcontrols2-fileselectors.qdoc | 140 + .../doc/src/qtquickcontrols2-focus.qdoc | 48 + .../doc/src/qtquickcontrols2-fusion.qdoc | 93 + .../doc/src/qtquickcontrols2-gettingstarted.qdoc | 86 + .../doc/src/qtquickcontrols2-guidelines.qdoc | 46 + .../doc/src/qtquickcontrols2-icons.qdoc | 166 + .../doc/src/qtquickcontrols2-imagine.qdoc | 2524 ++++++++ .../doc/src/qtquickcontrols2-index.qdoc | 204 + .../doc/src/qtquickcontrols2-indicators.qdoc | 83 + .../doc/src/qtquickcontrols2-input.qdoc | 123 + .../doc/src/qtquickcontrols2-macos.qdoc | 76 + .../doc/src/qtquickcontrols2-material.qdoc | 404 ++ .../doc/src/qtquickcontrols2-menus.qdoc | 68 + .../doc/src/qtquickcontrols2-navigation.qdoc | 70 + .../doc/src/qtquickcontrols2-popups.qdoc | 99 + .../doc/src/qtquickcontrols2-qmltypes.qdoc | 130 + .../doc/src/qtquickcontrols2-separators.qdoc | 63 + .../doc/src/qtquickcontrols2-styles.qdoc | 209 + .../doc/src/qtquickcontrols2-universal.qdoc | 288 + .../doc/src/qtquickcontrols2-windows.qdoc | 74 + src/quickcontrols2/fusion/ApplicationWindow.qml | 47 + src/quickcontrols2/fusion/BusyIndicator.qml | 70 + src/quickcontrols2/fusion/Button.qml | 75 + src/quickcontrols2/fusion/CMakeLists.txt | 254 + src/quickcontrols2/fusion/CheckBox.qml | 71 + src/quickcontrols2/fusion/CheckDelegate.qml | 86 + src/quickcontrols2/fusion/ComboBox.qml | 174 + src/quickcontrols2/fusion/DelayButton.qml | 115 + src/quickcontrols2/fusion/Dial.qml | 73 + src/quickcontrols2/fusion/Dialog.qml | 99 + src/quickcontrols2/fusion/DialogButtonBox.qml | 73 + src/quickcontrols2/fusion/Drawer.qml | 88 + src/quickcontrols2/fusion/Frame.qml | 57 + src/quickcontrols2/fusion/GroupBox.qml | 76 + src/quickcontrols2/fusion/HorizontalHeaderView.qml | 77 + src/quickcontrols2/fusion/ItemDelegate.qml | 76 + src/quickcontrols2/fusion/Label.qml | 48 + src/quickcontrols2/fusion/Menu.qml | 94 + src/quickcontrols2/fusion/MenuBar.qml | 73 + src/quickcontrols2/fusion/MenuBarItem.qml | 77 + src/quickcontrols2/fusion/MenuItem.qml | 102 + src/quickcontrols2/fusion/MenuSeparator.qml | 59 + src/quickcontrols2/fusion/Page.qml | 58 + src/quickcontrols2/fusion/PageIndicator.qml | 73 + src/quickcontrols2/fusion/Pane.qml | 56 + src/quickcontrols2/fusion/Popup.qml | 66 + src/quickcontrols2/fusion/ProgressBar.qml | 116 + src/quickcontrols2/fusion/RadioButton.qml | 71 + src/quickcontrols2/fusion/RadioDelegate.qml | 86 + src/quickcontrols2/fusion/RangeSlider.qml | 81 + src/quickcontrols2/fusion/RoundButton.qml | 98 + src/quickcontrols2/fusion/ScrollBar.qml | 77 + src/quickcontrols2/fusion/ScrollIndicator.qml | 77 + src/quickcontrols2/fusion/ScrollView.qml | 64 + src/quickcontrols2/fusion/Slider.qml | 67 + src/quickcontrols2/fusion/SpinBox.qml | 181 + src/quickcontrols2/fusion/SplitView.qml | 55 + src/quickcontrols2/fusion/SwipeDelegate.qml | 78 + src/quickcontrols2/fusion/Switch.qml | 71 + src/quickcontrols2/fusion/SwitchDelegate.qml | 85 + src/quickcontrols2/fusion/TabBar.qml | 79 + src/quickcontrols2/fusion/TabButton.qml | 96 + src/quickcontrols2/fusion/TextArea.qml | 76 + src/quickcontrols2/fusion/TextField.qml | 102 + src/quickcontrols2/fusion/ToolBar.qml | 82 + src/quickcontrols2/fusion/ToolButton.qml | 75 + src/quickcontrols2/fusion/ToolSeparator.qml | 66 + src/quickcontrols2/fusion/ToolTip.qml | 79 + src/quickcontrols2/fusion/Tumbler.qml | 76 + src/quickcontrols2/fusion/VerticalHeaderView.qml | 77 + src/quickcontrols2/fusion/fusion.pri | 58 + src/quickcontrols2/fusion/images/arrow.png | Bin 0 -> 121 bytes src/quickcontrols2/fusion/images/arrow.svg | 75 + src/quickcontrols2/fusion/images/arrow@2x.png | Bin 0 -> 145 bytes src/quickcontrols2/fusion/images/arrow@3x.png | Bin 0 -> 165 bytes src/quickcontrols2/fusion/images/arrow@4x.png | Bin 0 -> 182 bytes src/quickcontrols2/fusion/images/checkmark.png | Bin 0 -> 181 bytes src/quickcontrols2/fusion/images/checkmark.svg | 72 + src/quickcontrols2/fusion/images/checkmark@2x.png | Bin 0 -> 316 bytes src/quickcontrols2/fusion/images/checkmark@3x.png | Bin 0 -> 420 bytes src/quickcontrols2/fusion/images/checkmark@4x.png | Bin 0 -> 482 bytes src/quickcontrols2/fusion/images/progressmask.png | Bin 0 -> 309 bytes src/quickcontrols2/fusion/images/progressmask.svg | 74 + .../fusion/images/progressmask@2x.png | Bin 0 -> 484 bytes .../fusion/images/progressmask@3x.png | Bin 0 -> 558 bytes .../fusion/images/progressmask@4x.png | Bin 0 -> 652 bytes src/quickcontrols2/fusion/impl/ButtonPanel.qml | 76 + src/quickcontrols2/fusion/impl/CMakeLists.txt | 44 + src/quickcontrols2/fusion/impl/CheckIndicator.qml | 91 + src/quickcontrols2/fusion/impl/RadioIndicator.qml | 77 + src/quickcontrols2/fusion/impl/SliderGroove.qml | 93 + src/quickcontrols2/fusion/impl/SliderHandle.qml | 85 + src/quickcontrols2/fusion/impl/SwitchIndicator.qml | 136 + .../fusion/impl/qquickfusionbusyindicator.cpp | 111 + .../fusion/impl/qquickfusionbusyindicator_p.h | 84 + .../fusion/impl/qquickfusiondial.cpp | 139 + .../fusion/impl/qquickfusiondial_p.h | 76 + .../fusion/impl/qquickfusionknob.cpp | 88 + .../fusion/impl/qquickfusionknob_p.h | 69 + src/quickcontrols2/fusion/qquickfusionstyle.cpp | 153 + src/quickcontrols2/fusion/qquickfusionstyle_p.h | 92 + src/quickcontrols2/fusion/qquickfusiontheme.cpp | 55 + src/quickcontrols2/fusion/qquickfusiontheme_p.h | 65 + .../fusion/qtquickcontrols2fusionstyle.qrc | 16 + .../fusion/qtquickcontrols2fusionstyleplugin.cpp | 80 + src/quickcontrols2/imagine/ApplicationWindow.qml | 57 + src/quickcontrols2/imagine/BusyIndicator.qml | 88 + src/quickcontrols2/imagine/Button.qml | 98 + src/quickcontrols2/imagine/CMakeLists.txt | 260 + src/quickcontrols2/imagine/CheckBox.qml | 106 + src/quickcontrols2/imagine/CheckDelegate.qml | 117 + src/quickcontrols2/imagine/ComboBox.qml | 173 + src/quickcontrols2/imagine/DelayButton.qml | 137 + src/quickcontrols2/imagine/Dial.qml | 105 + src/quickcontrols2/imagine/Dialog.qml | 116 + src/quickcontrols2/imagine/DialogButtonBox.qml | 84 + src/quickcontrols2/imagine/Drawer.qml | 96 + src/quickcontrols2/imagine/Frame.qml | 69 + src/quickcontrols2/imagine/GroupBox.qml | 99 + .../imagine/HorizontalHeaderView.qml | 67 + src/quickcontrols2/imagine/ItemDelegate.qml | 93 + src/quickcontrols2/imagine/Label.qml | 63 + src/quickcontrols2/imagine/Menu.qml | 107 + src/quickcontrols2/imagine/MenuItem.qml | 137 + src/quickcontrols2/imagine/MenuSeparator.qml | 79 + src/quickcontrols2/imagine/Page.qml | 73 + src/quickcontrols2/imagine/PageIndicator.qml | 92 + src/quickcontrols2/imagine/Pane.qml | 69 + src/quickcontrols2/imagine/Popup.qml | 87 + src/quickcontrols2/imagine/ProgressBar.qml | 141 + src/quickcontrols2/imagine/RadioButton.qml | 104 + src/quickcontrols2/imagine/RadioDelegate.qml | 115 + src/quickcontrols2/imagine/RangeSlider.qml | 134 + src/quickcontrols2/imagine/RoundButton.qml | 97 + src/quickcontrols2/imagine/ScrollBar.qml | 119 + src/quickcontrols2/imagine/ScrollIndicator.qml | 111 + src/quickcontrols2/imagine/ScrollView.qml | 85 + src/quickcontrols2/imagine/Slider.qml | 120 + src/quickcontrols2/imagine/SpinBox.qml | 152 + src/quickcontrols2/imagine/SplitView.qml | 63 + src/quickcontrols2/imagine/StackView.qml | 91 + src/quickcontrols2/imagine/SwipeDelegate.qml | 95 + src/quickcontrols2/imagine/SwipeView.qml | 90 + src/quickcontrols2/imagine/Switch.qml | 134 + src/quickcontrols2/imagine/SwitchDelegate.qml | 146 + src/quickcontrols2/imagine/TabBar.qml | 87 + src/quickcontrols2/imagine/TabButton.qml | 91 + src/quickcontrols2/imagine/TextArea.qml | 96 + src/quickcontrols2/imagine/TextField.qml | 95 + src/quickcontrols2/imagine/ToolBar.qml | 71 + src/quickcontrols2/imagine/ToolButton.qml | 94 + src/quickcontrols2/imagine/ToolSeparator.qml | 83 + src/quickcontrols2/imagine/ToolTip.qml | 85 + src/quickcontrols2/imagine/Tumbler.qml | 93 + src/quickcontrols2/imagine/VerticalHeaderView.qml | 67 + .../Contents/Sketch/9-patch-export.js | 24 + .../Contents/Sketch/manifest.json | 19 + src/quickcontrols2/imagine/design/imagine.sketch | Bin 0 -> 164993 bytes .../images/applicationwindow-background.png | Bin 0 -> 67 bytes .../images/applicationwindow-background@2x.png | Bin 0 -> 75 bytes .../images/applicationwindow-background@3x.png | Bin 0 -> 77 bytes .../images/applicationwindow-background@4x.png | Bin 0 -> 78 bytes .../images/applicationwindow-overlay-modal.png | Bin 0 -> 70 bytes .../images/applicationwindow-overlay-modal@2x.png | Bin 0 -> 76 bytes .../images/applicationwindow-overlay-modal@3x.png | Bin 0 -> 78 bytes .../images/applicationwindow-overlay-modal@4x.png | Bin 0 -> 79 bytes .../imagine/images/applicationwindow-overlay.png | Bin 0 -> 70 bytes .../images/applicationwindow-overlay@2x.png | Bin 0 -> 76 bytes .../images/applicationwindow-overlay@3x.png | Bin 0 -> 78 bytes .../images/applicationwindow-overlay@4x.png | Bin 0 -> 79 bytes .../imagine/images/busyindicator-animation.webp | Bin 0 -> 30116 bytes .../imagine/images/busyindicator-animation@2x.webp | Bin 0 -> 56588 bytes .../imagine/images/busyindicator-animation@3x.webp | Bin 0 -> 77816 bytes .../imagine/images/busyindicator-animation@4x.webp | Bin 0 -> 103290 bytes .../button-background-checked-disabled.9.png | Bin 0 -> 185 bytes .../button-background-checked-disabled@2x.9.png | Bin 0 -> 258 bytes .../button-background-checked-disabled@3x.9.png | Bin 0 -> 339 bytes .../button-background-checked-disabled@4x.9.png | Bin 0 -> 441 bytes .../images/button-background-checked-focused.9.png | Bin 0 -> 185 bytes .../button-background-checked-focused@2x.9.png | Bin 0 -> 258 bytes .../button-background-checked-focused@3x.9.png | Bin 0 -> 339 bytes .../button-background-checked-focused@4x.9.png | Bin 0 -> 441 bytes .../images/button-background-checked-hovered.9.png | Bin 0 -> 185 bytes .../button-background-checked-hovered@2x.9.png | Bin 0 -> 258 bytes .../button-background-checked-hovered@3x.9.png | Bin 0 -> 339 bytes .../button-background-checked-hovered@4x.9.png | Bin 0 -> 441 bytes .../imagine/images/button-background-checked.9.png | Bin 0 -> 185 bytes .../images/button-background-checked@2x.9.png | Bin 0 -> 258 bytes .../images/button-background-checked@3x.9.png | Bin 0 -> 339 bytes .../images/button-background-checked@4x.9.png | Bin 0 -> 441 bytes .../images/button-background-disabled.9.png | Bin 0 -> 185 bytes .../images/button-background-disabled@2x.9.png | Bin 0 -> 258 bytes .../images/button-background-disabled@3x.9.png | Bin 0 -> 339 bytes .../images/button-background-disabled@4x.9.png | Bin 0 -> 441 bytes .../button-background-flat-checked-pressed.9.png | Bin 0 -> 185 bytes ...button-background-flat-checked-pressed@2x.9.png | Bin 0 -> 258 bytes ...button-background-flat-checked-pressed@3x.9.png | Bin 0 -> 339 bytes ...button-background-flat-checked-pressed@4x.9.png | Bin 0 -> 441 bytes .../images/button-background-flat-checked.9.png | Bin 0 -> 185 bytes .../images/button-background-flat-checked@2x.9.png | Bin 0 -> 258 bytes .../images/button-background-flat-checked@3x.9.png | Bin 0 -> 339 bytes .../images/button-background-flat-checked@4x.9.png | Bin 0 -> 441 bytes .../images/button-background-flat-disabled.9.png | Bin 0 -> 117 bytes .../button-background-flat-disabled@2x.9.png | Bin 0 -> 122 bytes .../button-background-flat-disabled@3x.9.png | Bin 0 -> 130 bytes .../button-background-flat-disabled@4x.9.png | Bin 0 -> 138 bytes ...utton-background-flat-highlighted-checked.9.png | Bin 0 -> 185 bytes ...on-background-flat-highlighted-checked@2x.9.png | Bin 0 -> 258 bytes ...on-background-flat-highlighted-checked@3x.9.png | Bin 0 -> 339 bytes ...on-background-flat-highlighted-checked@4x.9.png | Bin 0 -> 441 bytes ...utton-background-flat-highlighted-pressed.9.png | Bin 0 -> 185 bytes ...on-background-flat-highlighted-pressed@2x.9.png | Bin 0 -> 258 bytes ...on-background-flat-highlighted-pressed@3x.9.png | Bin 0 -> 339 bytes ...on-background-flat-highlighted-pressed@4x.9.png | Bin 0 -> 441 bytes .../button-background-flat-highlighted.9.png | Bin 0 -> 117 bytes .../button-background-flat-highlighted@2x.9.png | Bin 0 -> 122 bytes .../button-background-flat-highlighted@3x.9.png | Bin 0 -> 130 bytes .../button-background-flat-highlighted@4x.9.png | Bin 0 -> 138 bytes .../images/button-background-flat-hovered.9.png | Bin 0 -> 185 bytes .../images/button-background-flat-hovered@2x.9.png | Bin 0 -> 258 bytes .../images/button-background-flat-hovered@3x.9.png | Bin 0 -> 339 bytes .../images/button-background-flat-hovered@4x.9.png | Bin 0 -> 441 bytes .../images/button-background-flat-pressed.9.png | Bin 0 -> 185 bytes .../images/button-background-flat-pressed@2x.9.png | Bin 0 -> 258 bytes .../images/button-background-flat-pressed@3x.9.png | Bin 0 -> 339 bytes .../images/button-background-flat-pressed@4x.9.png | Bin 0 -> 441 bytes .../imagine/images/button-background-flat.9.png | Bin 0 -> 117 bytes .../imagine/images/button-background-flat@2x.9.png | Bin 0 -> 122 bytes .../imagine/images/button-background-flat@3x.9.png | Bin 0 -> 130 bytes .../imagine/images/button-background-flat@4x.9.png | Bin 0 -> 138 bytes .../imagine/images/button-background-focused.9.png | Bin 0 -> 185 bytes .../images/button-background-focused@2x.9.png | Bin 0 -> 258 bytes .../images/button-background-focused@3x.9.png | Bin 0 -> 339 bytes .../images/button-background-focused@4x.9.png | Bin 0 -> 441 bytes .../button-background-highlighted-checked.9.png | Bin 0 -> 185 bytes .../button-background-highlighted-checked@2x.9.png | Bin 0 -> 258 bytes .../button-background-highlighted-checked@3x.9.png | Bin 0 -> 339 bytes .../button-background-highlighted-checked@4x.9.png | Bin 0 -> 441 bytes .../button-background-highlighted-disabled.9.png | Bin 0 -> 185 bytes ...button-background-highlighted-disabled@2x.9.png | Bin 0 -> 258 bytes ...button-background-highlighted-disabled@3x.9.png | Bin 0 -> 339 bytes ...button-background-highlighted-disabled@4x.9.png | Bin 0 -> 441 bytes .../button-background-highlighted-focused.9.png | Bin 0 -> 185 bytes .../button-background-highlighted-focused@2x.9.png | Bin 0 -> 258 bytes .../button-background-highlighted-focused@3x.9.png | Bin 0 -> 339 bytes .../button-background-highlighted-focused@4x.9.png | Bin 0 -> 441 bytes .../button-background-highlighted-hovered.9.png | Bin 0 -> 185 bytes .../button-background-highlighted-hovered@2x.9.png | Bin 0 -> 258 bytes .../button-background-highlighted-hovered@3x.9.png | Bin 0 -> 339 bytes .../button-background-highlighted-hovered@4x.9.png | Bin 0 -> 441 bytes .../button-background-highlighted-pressed.9.png | Bin 0 -> 185 bytes .../button-background-highlighted-pressed@2x.9.png | Bin 0 -> 258 bytes .../button-background-highlighted-pressed@3x.9.png | Bin 0 -> 339 bytes .../button-background-highlighted-pressed@4x.9.png | Bin 0 -> 441 bytes .../images/button-background-highlighted.9.png | Bin 0 -> 185 bytes .../images/button-background-highlighted@2x.9.png | Bin 0 -> 258 bytes .../images/button-background-highlighted@3x.9.png | Bin 0 -> 339 bytes .../images/button-background-highlighted@4x.9.png | Bin 0 -> 441 bytes .../imagine/images/button-background-hovered.9.png | Bin 0 -> 185 bytes .../images/button-background-hovered@2x.9.png | Bin 0 -> 258 bytes .../images/button-background-hovered@3x.9.png | Bin 0 -> 339 bytes .../images/button-background-hovered@4x.9.png | Bin 0 -> 441 bytes .../imagine/images/button-background-pressed.9.png | Bin 0 -> 185 bytes .../images/button-background-pressed@2x.9.png | Bin 0 -> 258 bytes .../images/button-background-pressed@3x.9.png | Bin 0 -> 339 bytes .../images/button-background-pressed@4x.9.png | Bin 0 -> 441 bytes .../imagine/images/button-background.9.png | Bin 0 -> 185 bytes .../imagine/images/button-background@2x.9.png | Bin 0 -> 258 bytes .../imagine/images/button-background@3x.9.png | Bin 0 -> 339 bytes .../imagine/images/button-background@4x.9.png | Bin 0 -> 441 bytes .../images/checkbox-indicator-checked-focused.png | Bin 0 -> 271 bytes .../checkbox-indicator-checked-focused@2x.png | Bin 0 -> 468 bytes .../checkbox-indicator-checked-focused@3x.png | Bin 0 -> 599 bytes .../checkbox-indicator-checked-focused@4x.png | Bin 0 -> 815 bytes .../images/checkbox-indicator-checked-hovered.png | Bin 0 -> 271 bytes .../checkbox-indicator-checked-hovered@2x.png | Bin 0 -> 468 bytes .../checkbox-indicator-checked-hovered@3x.png | Bin 0 -> 599 bytes .../checkbox-indicator-checked-hovered@4x.png | Bin 0 -> 815 bytes .../images/checkbox-indicator-checked-pressed.png | Bin 0 -> 275 bytes .../checkbox-indicator-checked-pressed@2x.png | Bin 0 -> 501 bytes .../checkbox-indicator-checked-pressed@3x.png | Bin 0 -> 626 bytes .../checkbox-indicator-checked-pressed@4x.png | Bin 0 -> 848 bytes .../imagine/images/checkbox-indicator-checked.png | Bin 0 -> 275 bytes .../images/checkbox-indicator-checked@2x.png | Bin 0 -> 499 bytes .../images/checkbox-indicator-checked@3x.png | Bin 0 -> 625 bytes .../images/checkbox-indicator-checked@4x.png | Bin 0 -> 830 bytes .../imagine/images/checkbox-indicator-disabled.png | Bin 0 -> 121 bytes .../images/checkbox-indicator-disabled@2x.png | Bin 0 -> 156 bytes .../images/checkbox-indicator-disabled@3x.png | Bin 0 -> 192 bytes .../images/checkbox-indicator-disabled@4x.png | Bin 0 -> 228 bytes .../imagine/images/checkbox-indicator-focused.png | Bin 0 -> 121 bytes .../images/checkbox-indicator-focused@2x.png | Bin 0 -> 156 bytes .../images/checkbox-indicator-focused@3x.png | Bin 0 -> 192 bytes .../images/checkbox-indicator-focused@4x.png | Bin 0 -> 228 bytes .../imagine/images/checkbox-indicator-hovered.png | Bin 0 -> 121 bytes .../images/checkbox-indicator-hovered@2x.png | Bin 0 -> 156 bytes .../images/checkbox-indicator-hovered@3x.png | Bin 0 -> 192 bytes .../images/checkbox-indicator-hovered@4x.png | Bin 0 -> 228 bytes ...heckbox-indicator-partially-checked-focused.png | Bin 0 -> 131 bytes ...kbox-indicator-partially-checked-focused@2x.png | Bin 0 -> 164 bytes ...kbox-indicator-partially-checked-focused@3x.png | Bin 0 -> 202 bytes ...kbox-indicator-partially-checked-focused@4x.png | Bin 0 -> 243 bytes ...heckbox-indicator-partially-checked-hovered.png | Bin 0 -> 131 bytes ...kbox-indicator-partially-checked-hovered@2x.png | Bin 0 -> 164 bytes ...kbox-indicator-partially-checked-hovered@3x.png | Bin 0 -> 202 bytes ...kbox-indicator-partially-checked-hovered@4x.png | Bin 0 -> 243 bytes ...heckbox-indicator-partially-checked-pressed.png | Bin 0 -> 131 bytes ...kbox-indicator-partially-checked-pressed@2x.png | Bin 0 -> 164 bytes ...kbox-indicator-partially-checked-pressed@3x.png | Bin 0 -> 202 bytes ...kbox-indicator-partially-checked-pressed@4x.png | Bin 0 -> 243 bytes .../checkbox-indicator-partially-checked.png | Bin 0 -> 131 bytes .../checkbox-indicator-partially-checked@2x.png | Bin 0 -> 164 bytes .../checkbox-indicator-partially-checked@3x.png | Bin 0 -> 202 bytes .../checkbox-indicator-partially-checked@4x.png | Bin 0 -> 243 bytes .../imagine/images/checkbox-indicator-pressed.png | Bin 0 -> 121 bytes .../images/checkbox-indicator-pressed@2x.png | Bin 0 -> 156 bytes .../images/checkbox-indicator-pressed@3x.png | Bin 0 -> 192 bytes .../images/checkbox-indicator-pressed@4x.png | Bin 0 -> 228 bytes .../imagine/images/checkbox-indicator.png | Bin 0 -> 121 bytes .../imagine/images/checkbox-indicator@2x.png | Bin 0 -> 156 bytes .../imagine/images/checkbox-indicator@3x.png | Bin 0 -> 192 bytes .../imagine/images/checkbox-indicator@4x.png | Bin 0 -> 228 bytes .../images/checkdelegate-background-disabled.9.png | Bin 0 -> 120 bytes .../checkdelegate-background-disabled@2x.9.png | Bin 0 -> 123 bytes .../checkdelegate-background-disabled@3x.9.png | Bin 0 -> 127 bytes .../checkdelegate-background-disabled@4x.9.png | Bin 0 -> 132 bytes .../images/checkdelegate-background-focused.9.png | Bin 0 -> 120 bytes .../checkdelegate-background-focused@2x.9.png | Bin 0 -> 123 bytes .../checkdelegate-background-focused@3x.9.png | Bin 0 -> 127 bytes .../checkdelegate-background-focused@4x.9.png | Bin 0 -> 132 bytes .../checkdelegate-background-highlighted.9.png | Bin 0 -> 120 bytes .../checkdelegate-background-highlighted@2x.9.png | Bin 0 -> 123 bytes .../checkdelegate-background-highlighted@3x.9.png | Bin 0 -> 127 bytes .../checkdelegate-background-highlighted@4x.9.png | Bin 0 -> 132 bytes .../images/checkdelegate-background-hovered.9.png | Bin 0 -> 120 bytes .../checkdelegate-background-hovered@2x.9.png | Bin 0 -> 123 bytes .../checkdelegate-background-hovered@3x.9.png | Bin 0 -> 127 bytes .../checkdelegate-background-hovered@4x.9.png | Bin 0 -> 132 bytes .../images/checkdelegate-background-pressed.9.png | Bin 0 -> 120 bytes .../checkdelegate-background-pressed@2x.9.png | Bin 0 -> 123 bytes .../checkdelegate-background-pressed@3x.9.png | Bin 0 -> 127 bytes .../checkdelegate-background-pressed@4x.9.png | Bin 0 -> 132 bytes .../imagine/images/checkdelegate-background.9.png | Bin 0 -> 120 bytes .../images/checkdelegate-background@2x.9.png | Bin 0 -> 123 bytes .../images/checkdelegate-background@3x.9.png | Bin 0 -> 127 bytes .../images/checkdelegate-background@4x.9.png | Bin 0 -> 132 bytes .../checkdelegate-indicator-checked-focused.png | Bin 0 -> 271 bytes .../checkdelegate-indicator-checked-focused@2x.png | Bin 0 -> 468 bytes .../checkdelegate-indicator-checked-focused@3x.png | Bin 0 -> 599 bytes .../checkdelegate-indicator-checked-focused@4x.png | Bin 0 -> 815 bytes .../checkdelegate-indicator-checked-hovered.png | Bin 0 -> 271 bytes .../checkdelegate-indicator-checked-hovered@2x.png | Bin 0 -> 468 bytes .../checkdelegate-indicator-checked-hovered@3x.png | Bin 0 -> 599 bytes .../checkdelegate-indicator-checked-hovered@4x.png | Bin 0 -> 815 bytes .../checkdelegate-indicator-checked-pressed.png | Bin 0 -> 275 bytes .../checkdelegate-indicator-checked-pressed@2x.png | Bin 0 -> 501 bytes .../checkdelegate-indicator-checked-pressed@3x.png | Bin 0 -> 626 bytes .../checkdelegate-indicator-checked-pressed@4x.png | Bin 0 -> 848 bytes .../images/checkdelegate-indicator-checked.png | Bin 0 -> 275 bytes .../images/checkdelegate-indicator-checked@2x.png | Bin 0 -> 499 bytes .../images/checkdelegate-indicator-checked@3x.png | Bin 0 -> 625 bytes .../images/checkdelegate-indicator-checked@4x.png | Bin 0 -> 830 bytes .../images/checkdelegate-indicator-disabled.png | Bin 0 -> 121 bytes .../images/checkdelegate-indicator-disabled@2x.png | Bin 0 -> 156 bytes .../images/checkdelegate-indicator-disabled@3x.png | Bin 0 -> 192 bytes .../images/checkdelegate-indicator-disabled@4x.png | Bin 0 -> 228 bytes .../images/checkdelegate-indicator-focused.png | Bin 0 -> 121 bytes .../images/checkdelegate-indicator-focused@2x.png | Bin 0 -> 156 bytes .../images/checkdelegate-indicator-focused@3x.png | Bin 0 -> 192 bytes .../images/checkdelegate-indicator-focused@4x.png | Bin 0 -> 228 bytes .../images/checkdelegate-indicator-hovered.png | Bin 0 -> 121 bytes .../images/checkdelegate-indicator-hovered@2x.png | Bin 0 -> 156 bytes .../images/checkdelegate-indicator-hovered@3x.png | Bin 0 -> 192 bytes .../images/checkdelegate-indicator-hovered@4x.png | Bin 0 -> 228 bytes ...elegate-indicator-partially-checked-focused.png | Bin 0 -> 131 bytes ...gate-indicator-partially-checked-focused@2x.png | Bin 0 -> 164 bytes ...gate-indicator-partially-checked-focused@3x.png | Bin 0 -> 202 bytes ...gate-indicator-partially-checked-focused@4x.png | Bin 0 -> 243 bytes ...elegate-indicator-partially-checked-hovered.png | Bin 0 -> 131 bytes ...gate-indicator-partially-checked-hovered@2x.png | Bin 0 -> 164 bytes ...gate-indicator-partially-checked-hovered@3x.png | Bin 0 -> 202 bytes ...gate-indicator-partially-checked-hovered@4x.png | Bin 0 -> 243 bytes ...elegate-indicator-partially-checked-pressed.png | Bin 0 -> 131 bytes ...gate-indicator-partially-checked-pressed@2x.png | Bin 0 -> 164 bytes ...gate-indicator-partially-checked-pressed@3x.png | Bin 0 -> 202 bytes ...gate-indicator-partially-checked-pressed@4x.png | Bin 0 -> 243 bytes .../checkdelegate-indicator-partially-checked.png | Bin 0 -> 131 bytes ...heckdelegate-indicator-partially-checked@2x.png | Bin 0 -> 164 bytes ...heckdelegate-indicator-partially-checked@3x.png | Bin 0 -> 202 bytes ...heckdelegate-indicator-partially-checked@4x.png | Bin 0 -> 243 bytes .../images/checkdelegate-indicator-pressed.png | Bin 0 -> 121 bytes .../images/checkdelegate-indicator-pressed@2x.png | Bin 0 -> 156 bytes .../images/checkdelegate-indicator-pressed@3x.png | Bin 0 -> 192 bytes .../images/checkdelegate-indicator-pressed@4x.png | Bin 0 -> 228 bytes .../imagine/images/checkdelegate-indicator.png | Bin 0 -> 121 bytes .../imagine/images/checkdelegate-indicator@2x.png | Bin 0 -> 156 bytes .../imagine/images/checkdelegate-indicator@3x.png | Bin 0 -> 192 bytes .../imagine/images/checkdelegate-indicator@4x.png | Bin 0 -> 228 bytes .../images/combobox-background-disabled.9.png | Bin 0 -> 197 bytes .../images/combobox-background-disabled@2x.9.png | Bin 0 -> 279 bytes .../images/combobox-background-disabled@3x.9.png | Bin 0 -> 387 bytes .../images/combobox-background-disabled@4x.9.png | Bin 0 -> 596 bytes .../combobox-background-editable-disabled.9.png | Bin 0 -> 197 bytes .../combobox-background-editable-disabled@2x.9.png | Bin 0 -> 279 bytes .../combobox-background-editable-disabled@3x.9.png | Bin 0 -> 387 bytes .../combobox-background-editable-disabled@4x.9.png | Bin 0 -> 596 bytes .../combobox-background-editable-focused.9.png | Bin 0 -> 213 bytes .../combobox-background-editable-focused@2x.9.png | Bin 0 -> 338 bytes .../combobox-background-editable-focused@3x.9.png | Bin 0 -> 549 bytes .../combobox-background-editable-focused@4x.9.png | Bin 0 -> 798 bytes .../images/combobox-background-editable.9.png | Bin 0 -> 213 bytes .../images/combobox-background-editable@2x.9.png | Bin 0 -> 338 bytes .../images/combobox-background-editable@3x.9.png | Bin 0 -> 549 bytes .../images/combobox-background-editable@4x.9.png | Bin 0 -> 798 bytes .../images/combobox-background-focused.9.png | Bin 0 -> 197 bytes .../images/combobox-background-focused@2x.9.png | Bin 0 -> 279 bytes .../images/combobox-background-focused@3x.9.png | Bin 0 -> 387 bytes .../images/combobox-background-focused@4x.9.png | Bin 0 -> 596 bytes .../images/combobox-background-hovered.9.png | Bin 0 -> 197 bytes .../images/combobox-background-hovered@2x.9.png | Bin 0 -> 279 bytes .../images/combobox-background-hovered@3x.9.png | Bin 0 -> 387 bytes .../images/combobox-background-hovered@4x.9.png | Bin 0 -> 596 bytes .../imagine/images/combobox-background-open.9.png | Bin 0 -> 197 bytes .../images/combobox-background-open@2x.9.png | Bin 0 -> 279 bytes .../images/combobox-background-open@3x.9.png | Bin 0 -> 387 bytes .../images/combobox-background-open@4x.9.png | Bin 0 -> 596 bytes .../images/combobox-background-pressed.9.png | Bin 0 -> 197 bytes .../images/combobox-background-pressed@2x.9.png | Bin 0 -> 279 bytes .../images/combobox-background-pressed@3x.9.png | Bin 0 -> 387 bytes .../images/combobox-background-pressed@4x.9.png | Bin 0 -> 596 bytes .../imagine/images/combobox-background.9.png | Bin 0 -> 197 bytes .../imagine/images/combobox-background@2x.9.png | Bin 0 -> 279 bytes .../imagine/images/combobox-background@3x.9.png | Bin 0 -> 387 bytes .../imagine/images/combobox-background@4x.9.png | Bin 0 -> 596 bytes .../imagine/images/combobox-indicator-disabled.png | Bin 0 -> 152 bytes .../images/combobox-indicator-disabled@2x.png | Bin 0 -> 157 bytes .../images/combobox-indicator-disabled@3x.png | Bin 0 -> 211 bytes .../images/combobox-indicator-disabled@4x.png | Bin 0 -> 201 bytes .../combobox-indicator-editable-disabled.png | Bin 0 -> 197 bytes .../combobox-indicator-editable-disabled@2x.png | Bin 0 -> 259 bytes .../combobox-indicator-editable-disabled@3x.png | Bin 0 -> 386 bytes .../combobox-indicator-editable-disabled@4x.png | Bin 0 -> 445 bytes ...mbobox-indicator-editable-mirrored-disabled.png | Bin 0 -> 193 bytes ...box-indicator-editable-mirrored-disabled@2x.png | Bin 0 -> 263 bytes ...box-indicator-editable-mirrored-disabled@3x.png | Bin 0 -> 394 bytes ...box-indicator-editable-mirrored-disabled@4x.png | Bin 0 -> 450 bytes .../combobox-indicator-editable-mirrored.png | Bin 0 -> 199 bytes .../combobox-indicator-editable-mirrored@2x.png | Bin 0 -> 269 bytes .../combobox-indicator-editable-mirrored@3x.png | Bin 0 -> 402 bytes .../combobox-indicator-editable-mirrored@4x.png | Bin 0 -> 456 bytes .../imagine/images/combobox-indicator-editable.png | Bin 0 -> 203 bytes .../images/combobox-indicator-editable@2x.png | Bin 0 -> 266 bytes .../images/combobox-indicator-editable@3x.png | Bin 0 -> 395 bytes .../images/combobox-indicator-editable@4x.png | Bin 0 -> 452 bytes .../imagine/images/combobox-indicator.png | Bin 0 -> 160 bytes .../imagine/images/combobox-indicator@2x.png | Bin 0 -> 165 bytes .../imagine/images/combobox-indicator@3x.png | Bin 0 -> 230 bytes .../imagine/images/combobox-indicator@4x.png | Bin 0 -> 215 bytes .../imagine/images/combobox-popup.9.png | Bin 0 -> 424 bytes .../imagine/images/combobox-popup@2x.9.png | Bin 0 -> 796 bytes .../imagine/images/combobox-popup@3x.9.png | Bin 0 -> 1212 bytes .../imagine/images/combobox-popup@4x.9.png | Bin 0 -> 1644 bytes .../delaybutton-background-checked-focused.9.png | Bin 0 -> 185 bytes ...delaybutton-background-checked-focused@2x.9.png | Bin 0 -> 258 bytes ...delaybutton-background-checked-focused@3x.9.png | Bin 0 -> 339 bytes ...delaybutton-background-checked-focused@4x.9.png | Bin 0 -> 441 bytes .../delaybutton-background-checked-hovered.9.png | Bin 0 -> 185 bytes ...delaybutton-background-checked-hovered@2x.9.png | Bin 0 -> 258 bytes ...delaybutton-background-checked-hovered@3x.9.png | Bin 0 -> 339 bytes ...delaybutton-background-checked-hovered@4x.9.png | Bin 0 -> 441 bytes .../images/delaybutton-background-checked.9.png | Bin 0 -> 185 bytes .../images/delaybutton-background-checked@2x.9.png | Bin 0 -> 258 bytes .../images/delaybutton-background-checked@3x.9.png | Bin 0 -> 339 bytes .../images/delaybutton-background-checked@4x.9.png | Bin 0 -> 441 bytes .../delaybutton-background-disabled-checked.9.png | Bin 0 -> 185 bytes ...elaybutton-background-disabled-checked@2x.9.png | Bin 0 -> 258 bytes ...elaybutton-background-disabled-checked@3x.9.png | Bin 0 -> 339 bytes ...elaybutton-background-disabled-checked@4x.9.png | Bin 0 -> 441 bytes .../images/delaybutton-background-disabled.9.png | Bin 0 -> 185 bytes .../delaybutton-background-disabled@2x.9.png | Bin 0 -> 258 bytes .../delaybutton-background-disabled@3x.9.png | Bin 0 -> 339 bytes .../delaybutton-background-disabled@4x.9.png | Bin 0 -> 441 bytes .../images/delaybutton-background-focused.9.png | Bin 0 -> 185 bytes .../images/delaybutton-background-focused@2x.9.png | Bin 0 -> 258 bytes .../images/delaybutton-background-focused@3x.9.png | Bin 0 -> 339 bytes .../images/delaybutton-background-focused@4x.9.png | Bin 0 -> 441 bytes .../images/delaybutton-background-hovered.9.png | Bin 0 -> 185 bytes .../images/delaybutton-background-hovered@2x.9.png | Bin 0 -> 258 bytes .../images/delaybutton-background-hovered@3x.9.png | Bin 0 -> 339 bytes .../images/delaybutton-background-hovered@4x.9.png | Bin 0 -> 441 bytes .../images/delaybutton-background-pressed.9.png | Bin 0 -> 185 bytes .../images/delaybutton-background-pressed@2x.9.png | Bin 0 -> 258 bytes .../images/delaybutton-background-pressed@3x.9.png | Bin 0 -> 339 bytes .../images/delaybutton-background-pressed@4x.9.png | Bin 0 -> 441 bytes .../imagine/images/delaybutton-background.9.png | Bin 0 -> 185 bytes .../imagine/images/delaybutton-background@2x.9.png | Bin 0 -> 258 bytes .../imagine/images/delaybutton-background@3x.9.png | Bin 0 -> 339 bytes .../imagine/images/delaybutton-background@4x.9.png | Bin 0 -> 441 bytes .../imagine/images/delaybutton-mask.9.png | Bin 0 -> 185 bytes .../imagine/images/delaybutton-mask@2x.9.png | Bin 0 -> 258 bytes .../imagine/images/delaybutton-mask@3x.9.png | Bin 0 -> 339 bytes .../imagine/images/delaybutton-mask@4x.9.png | Bin 0 -> 441 bytes .../images/delaybutton-progress-disabled.9.png | Bin 0 -> 128 bytes .../images/delaybutton-progress-disabled@2x.9.png | Bin 0 -> 137 bytes .../images/delaybutton-progress-disabled@3x.9.png | Bin 0 -> 154 bytes .../images/delaybutton-progress-disabled@4x.9.png | Bin 0 -> 165 bytes .../imagine/images/delaybutton-progress.9.png | Bin 0 -> 128 bytes .../imagine/images/delaybutton-progress@2x.9.png | Bin 0 -> 137 bytes .../imagine/images/delaybutton-progress@3x.9.png | Bin 0 -> 154 bytes .../imagine/images/delaybutton-progress@4x.9.png | Bin 0 -> 165 bytes .../imagine/images/dial-background-disabled.png | Bin 0 -> 3098 bytes .../imagine/images/dial-background-disabled@2x.png | Bin 0 -> 5609 bytes .../imagine/images/dial-background-disabled@3x.png | Bin 0 -> 13029 bytes .../imagine/images/dial-background-disabled@4x.png | Bin 0 -> 18158 bytes .../imagine/images/dial-background-focused.png | Bin 0 -> 3098 bytes .../imagine/images/dial-background-focused@2x.png | Bin 0 -> 5609 bytes .../imagine/images/dial-background-focused@3x.png | Bin 0 -> 13382 bytes .../imagine/images/dial-background-focused@4x.png | Bin 0 -> 18762 bytes .../imagine/images/dial-background.png | Bin 0 -> 3098 bytes .../imagine/images/dial-background@2x.png | Bin 0 -> 5609 bytes .../imagine/images/dial-background@3x.png | Bin 0 -> 13268 bytes .../imagine/images/dial-background@4x.png | Bin 0 -> 18609 bytes .../imagine/images/dial-handle-disabled.png | Bin 0 -> 156 bytes .../imagine/images/dial-handle-disabled@2x.png | Bin 0 -> 176 bytes .../imagine/images/dial-handle-disabled@3x.png | Bin 0 -> 212 bytes .../imagine/images/dial-handle-disabled@4x.png | Bin 0 -> 231 bytes .../imagine/images/dial-handle-focused-hovered.png | Bin 0 -> 156 bytes .../images/dial-handle-focused-hovered@2x.png | Bin 0 -> 176 bytes .../images/dial-handle-focused-hovered@3x.png | Bin 0 -> 212 bytes .../images/dial-handle-focused-hovered@4x.png | Bin 0 -> 231 bytes .../imagine/images/dial-handle-focused-pressed.png | Bin 0 -> 156 bytes .../images/dial-handle-focused-pressed@2x.png | Bin 0 -> 176 bytes .../images/dial-handle-focused-pressed@3x.png | Bin 0 -> 212 bytes .../images/dial-handle-focused-pressed@4x.png | Bin 0 -> 231 bytes .../imagine/images/dial-handle-focused.png | Bin 0 -> 156 bytes .../imagine/images/dial-handle-focused@2x.png | Bin 0 -> 176 bytes .../imagine/images/dial-handle-focused@3x.png | Bin 0 -> 212 bytes .../imagine/images/dial-handle-focused@4x.png | Bin 0 -> 231 bytes .../imagine/images/dial-handle-hovered.png | Bin 0 -> 156 bytes .../imagine/images/dial-handle-hovered@2x.png | Bin 0 -> 176 bytes .../imagine/images/dial-handle-hovered@3x.png | Bin 0 -> 212 bytes .../imagine/images/dial-handle-hovered@4x.png | Bin 0 -> 231 bytes .../imagine/images/dial-handle-pressed.png | Bin 0 -> 156 bytes .../imagine/images/dial-handle-pressed@2x.png | Bin 0 -> 176 bytes .../imagine/images/dial-handle-pressed@3x.png | Bin 0 -> 212 bytes .../imagine/images/dial-handle-pressed@4x.png | Bin 0 -> 231 bytes src/quickcontrols2/imagine/images/dial-handle.png | Bin 0 -> 156 bytes .../imagine/images/dial-handle@2x.png | Bin 0 -> 176 bytes .../imagine/images/dial-handle@3x.png | Bin 0 -> 212 bytes .../imagine/images/dial-handle@4x.png | Bin 0 -> 231 bytes .../imagine/images/dialog-background.9.png | Bin 0 -> 426 bytes .../imagine/images/dialog-background@2x.9.png | Bin 0 -> 792 bytes .../imagine/images/dialog-background@3x.9.png | Bin 0 -> 1206 bytes .../imagine/images/dialog-background@4x.9.png | Bin 0 -> 1625 bytes .../imagine/images/dialog-overlay-modal.png | Bin 0 -> 70 bytes .../imagine/images/dialog-overlay-modal@2x.png | Bin 0 -> 76 bytes .../imagine/images/dialog-overlay-modal@3x.png | Bin 0 -> 78 bytes .../imagine/images/dialog-overlay-modal@4x.png | Bin 0 -> 79 bytes .../imagine/images/dialog-overlay.png | Bin 0 -> 70 bytes .../imagine/images/dialog-overlay@2x.png | Bin 0 -> 76 bytes .../imagine/images/dialog-overlay@3x.png | Bin 0 -> 78 bytes .../imagine/images/dialog-overlay@4x.png | Bin 0 -> 79 bytes .../images/dialogbuttonbox-background.9.png | Bin 0 -> 110 bytes .../images/dialogbuttonbox-background@2x.9.png | Bin 0 -> 118 bytes .../images/dialogbuttonbox-background@3x.9.png | Bin 0 -> 119 bytes .../images/dialogbuttonbox-background@4x.9.png | Bin 0 -> 119 bytes .../imagine/images/drawer-background-bottom.9.png | Bin 0 -> 224 bytes .../images/drawer-background-bottom@2x.9.png | Bin 0 -> 334 bytes .../images/drawer-background-bottom@3x.9.png | Bin 0 -> 443 bytes .../images/drawer-background-bottom@4x.9.png | Bin 0 -> 531 bytes .../imagine/images/drawer-background-left.9.png | Bin 0 -> 218 bytes .../imagine/images/drawer-background-left@2x.9.png | Bin 0 -> 321 bytes .../imagine/images/drawer-background-left@3x.9.png | Bin 0 -> 417 bytes .../imagine/images/drawer-background-left@4x.9.png | Bin 0 -> 532 bytes .../imagine/images/drawer-background-right.9.png | Bin 0 -> 229 bytes .../images/drawer-background-right@2x.9.png | Bin 0 -> 333 bytes .../images/drawer-background-right@3x.9.png | Bin 0 -> 433 bytes .../images/drawer-background-right@4x.9.png | Bin 0 -> 549 bytes .../imagine/images/drawer-background-top.9.png | Bin 0 -> 216 bytes .../imagine/images/drawer-background-top@2x.9.png | Bin 0 -> 325 bytes .../imagine/images/drawer-background-top@3x.9.png | Bin 0 -> 442 bytes .../imagine/images/drawer-background-top@4x.9.png | Bin 0 -> 533 bytes .../imagine/images/drawer-overlay-modal.png | Bin 0 -> 70 bytes .../imagine/images/drawer-overlay-modal@2x.png | Bin 0 -> 76 bytes .../imagine/images/drawer-overlay-modal@3x.png | Bin 0 -> 78 bytes .../imagine/images/drawer-overlay-modal@4x.png | Bin 0 -> 79 bytes .../imagine/images/drawer-overlay.png | Bin 0 -> 70 bytes .../imagine/images/drawer-overlay@2x.png | Bin 0 -> 76 bytes .../imagine/images/drawer-overlay@3x.png | Bin 0 -> 78 bytes .../imagine/images/drawer-overlay@4x.png | Bin 0 -> 79 bytes .../imagine/images/frame-background.9.png | Bin 0 -> 190 bytes .../imagine/images/frame-background@2x.9.png | Bin 0 -> 281 bytes .../imagine/images/frame-background@3x.9.png | Bin 0 -> 379 bytes .../imagine/images/frame-background@4x.9.png | Bin 0 -> 477 bytes .../imagine/images/groupbox-background.9.png | Bin 0 -> 190 bytes .../imagine/images/groupbox-background@2x.9.png | Bin 0 -> 281 bytes .../imagine/images/groupbox-background@3x.9.png | Bin 0 -> 379 bytes .../imagine/images/groupbox-background@4x.9.png | Bin 0 -> 477 bytes .../imagine/images/groupbox-title.9.png | Bin 0 -> 112 bytes .../imagine/images/groupbox-title@2x.9.png | Bin 0 -> 117 bytes .../imagine/images/groupbox-title@3x.9.png | Bin 0 -> 120 bytes .../imagine/images/groupbox-title@4x.9.png | Bin 0 -> 122 bytes .../images/itemdelegate-background-disabled.9.png | Bin 0 -> 120 bytes .../itemdelegate-background-disabled@2x.9.png | Bin 0 -> 123 bytes .../itemdelegate-background-disabled@3x.9.png | Bin 0 -> 127 bytes .../itemdelegate-background-disabled@4x.9.png | Bin 0 -> 132 bytes .../images/itemdelegate-background-focused.9.png | Bin 0 -> 120 bytes .../itemdelegate-background-focused@2x.9.png | Bin 0 -> 123 bytes .../itemdelegate-background-focused@3x.9.png | Bin 0 -> 127 bytes .../itemdelegate-background-focused@4x.9.png | Bin 0 -> 132 bytes .../itemdelegate-background-highlighted.9.png | Bin 0 -> 120 bytes .../itemdelegate-background-highlighted@2x.9.png | Bin 0 -> 123 bytes .../itemdelegate-background-highlighted@3x.9.png | Bin 0 -> 127 bytes .../itemdelegate-background-highlighted@4x.9.png | Bin 0 -> 132 bytes .../images/itemdelegate-background-hovered.9.png | Bin 0 -> 120 bytes .../itemdelegate-background-hovered@2x.9.png | Bin 0 -> 123 bytes .../itemdelegate-background-hovered@3x.9.png | Bin 0 -> 127 bytes .../itemdelegate-background-hovered@4x.9.png | Bin 0 -> 132 bytes .../images/itemdelegate-background-pressed.9.png | Bin 0 -> 120 bytes .../itemdelegate-background-pressed@2x.9.png | Bin 0 -> 123 bytes .../itemdelegate-background-pressed@3x.9.png | Bin 0 -> 127 bytes .../itemdelegate-background-pressed@4x.9.png | Bin 0 -> 132 bytes .../imagine/images/itemdelegate-background.9.png | Bin 0 -> 120 bytes .../images/itemdelegate-background@2x.9.png | Bin 0 -> 123 bytes .../images/itemdelegate-background@3x.9.png | Bin 0 -> 127 bytes .../images/itemdelegate-background@4x.9.png | Bin 0 -> 132 bytes .../imagine/images/menu-background.9.png | Bin 0 -> 664 bytes .../imagine/images/menu-background@2x.9.png | Bin 0 -> 1324 bytes .../imagine/images/menu-background@3x.9.png | Bin 0 -> 2099 bytes .../imagine/images/menu-background@4x.9.png | Bin 0 -> 2958 bytes .../imagine/images/menuitem-arrow-disabled.png | Bin 0 -> 173 bytes .../imagine/images/menuitem-arrow-disabled@2x.png | Bin 0 -> 204 bytes .../imagine/images/menuitem-arrow-disabled@3x.png | Bin 0 -> 251 bytes .../imagine/images/menuitem-arrow-disabled@4x.png | Bin 0 -> 294 bytes .../images/menuitem-arrow-mirrored-disabled.png | Bin 0 -> 181 bytes .../images/menuitem-arrow-mirrored-disabled@2x.png | Bin 0 -> 212 bytes .../images/menuitem-arrow-mirrored-disabled@3x.png | Bin 0 -> 253 bytes .../images/menuitem-arrow-mirrored-disabled@4x.png | Bin 0 -> 301 bytes .../imagine/images/menuitem-arrow-mirrored.png | Bin 0 -> 181 bytes .../imagine/images/menuitem-arrow-mirrored@2x.png | Bin 0 -> 212 bytes .../imagine/images/menuitem-arrow-mirrored@3x.png | Bin 0 -> 253 bytes .../imagine/images/menuitem-arrow-mirrored@4x.png | Bin 0 -> 301 bytes .../imagine/images/menuitem-arrow.png | Bin 0 -> 176 bytes .../imagine/images/menuitem-arrow@2x.png | Bin 0 -> 204 bytes .../imagine/images/menuitem-arrow@3x.png | Bin 0 -> 251 bytes .../imagine/images/menuitem-arrow@4x.png | Bin 0 -> 294 bytes .../images/menuitem-background-highlighted.9.png | Bin 0 -> 120 bytes .../menuitem-background-highlighted@2x.9.png | Bin 0 -> 124 bytes .../menuitem-background-highlighted@3x.9.png | Bin 0 -> 128 bytes .../menuitem-background-highlighted@4x.9.png | Bin 0 -> 138 bytes .../imagine/images/menuitem-background.9.png | Bin 0 -> 115 bytes .../imagine/images/menuitem-background@2x.9.png | Bin 0 -> 118 bytes .../imagine/images/menuitem-background@3x.9.png | Bin 0 -> 119 bytes .../imagine/images/menuitem-background@4x.9.png | Bin 0 -> 124 bytes .../images/menuitem-indicator-checked-focused.png | Bin 0 -> 271 bytes .../menuitem-indicator-checked-focused@2x.png | Bin 0 -> 468 bytes .../menuitem-indicator-checked-focused@3x.png | Bin 0 -> 599 bytes .../menuitem-indicator-checked-focused@4x.png | Bin 0 -> 815 bytes .../images/menuitem-indicator-checked-hovered.png | Bin 0 -> 271 bytes .../menuitem-indicator-checked-hovered@2x.png | Bin 0 -> 468 bytes .../menuitem-indicator-checked-hovered@3x.png | Bin 0 -> 599 bytes .../menuitem-indicator-checked-hovered@4x.png | Bin 0 -> 815 bytes .../images/menuitem-indicator-checked-pressed.png | Bin 0 -> 275 bytes .../menuitem-indicator-checked-pressed@2x.png | Bin 0 -> 501 bytes .../menuitem-indicator-checked-pressed@3x.png | Bin 0 -> 626 bytes .../menuitem-indicator-checked-pressed@4x.png | Bin 0 -> 848 bytes .../imagine/images/menuitem-indicator-checked.png | Bin 0 -> 275 bytes .../images/menuitem-indicator-checked@2x.png | Bin 0 -> 499 bytes .../images/menuitem-indicator-checked@3x.png | Bin 0 -> 625 bytes .../images/menuitem-indicator-checked@4x.png | Bin 0 -> 830 bytes .../imagine/images/menuitem-indicator-disabled.png | Bin 0 -> 121 bytes .../images/menuitem-indicator-disabled@2x.png | Bin 0 -> 156 bytes .../images/menuitem-indicator-disabled@3x.png | Bin 0 -> 192 bytes .../images/menuitem-indicator-disabled@4x.png | Bin 0 -> 228 bytes .../imagine/images/menuitem-indicator-focused.png | Bin 0 -> 121 bytes .../images/menuitem-indicator-focused@2x.png | Bin 0 -> 156 bytes .../images/menuitem-indicator-focused@3x.png | Bin 0 -> 192 bytes .../images/menuitem-indicator-focused@4x.png | Bin 0 -> 228 bytes .../imagine/images/menuitem-indicator-hovered.png | Bin 0 -> 121 bytes .../images/menuitem-indicator-hovered@2x.png | Bin 0 -> 156 bytes .../images/menuitem-indicator-hovered@3x.png | Bin 0 -> 192 bytes .../images/menuitem-indicator-hovered@4x.png | Bin 0 -> 228 bytes .../imagine/images/menuitem-indicator-pressed.png | Bin 0 -> 121 bytes .../images/menuitem-indicator-pressed@2x.png | Bin 0 -> 156 bytes .../images/menuitem-indicator-pressed@3x.png | Bin 0 -> 192 bytes .../images/menuitem-indicator-pressed@4x.png | Bin 0 -> 228 bytes .../imagine/images/menuitem-indicator.png | Bin 0 -> 121 bytes .../imagine/images/menuitem-indicator@2x.png | Bin 0 -> 156 bytes .../imagine/images/menuitem-indicator@3x.png | Bin 0 -> 192 bytes .../imagine/images/menuitem-indicator@4x.png | Bin 0 -> 228 bytes .../imagine/images/menuseparator-separator.9.png | Bin 0 -> 98 bytes .../images/menuseparator-separator@2x.9.png | Bin 0 -> 110 bytes .../images/menuseparator-separator@3x.9.png | Bin 0 -> 113 bytes .../images/menuseparator-separator@4x.9.png | Bin 0 -> 115 bytes .../imagine/images/page-background.png | Bin 0 -> 67 bytes .../imagine/images/page-background@2x.png | Bin 0 -> 75 bytes .../imagine/images/page-background@3x.png | Bin 0 -> 77 bytes .../imagine/images/page-background@4x.png | Bin 0 -> 78 bytes .../images/pageindicator-delegate-current.png | Bin 0 -> 135 bytes .../images/pageindicator-delegate-current@2x.png | Bin 0 -> 179 bytes .../images/pageindicator-delegate-current@3x.png | Bin 0 -> 220 bytes .../images/pageindicator-delegate-current@4x.png | Bin 0 -> 280 bytes .../pageindicator-delegate-disabled-current.png | Bin 0 -> 135 bytes .../pageindicator-delegate-disabled-current@2x.png | Bin 0 -> 179 bytes .../pageindicator-delegate-disabled-current@3x.png | Bin 0 -> 220 bytes .../pageindicator-delegate-disabled-current@4x.png | Bin 0 -> 280 bytes .../images/pageindicator-delegate-disabled.png | Bin 0 -> 135 bytes .../images/pageindicator-delegate-disabled@2x.png | Bin 0 -> 179 bytes .../images/pageindicator-delegate-disabled@3x.png | Bin 0 -> 220 bytes .../images/pageindicator-delegate-disabled@4x.png | Bin 0 -> 280 bytes .../images/pageindicator-delegate-pressed.png | Bin 0 -> 135 bytes .../images/pageindicator-delegate-pressed@2x.png | Bin 0 -> 179 bytes .../images/pageindicator-delegate-pressed@3x.png | Bin 0 -> 220 bytes .../images/pageindicator-delegate-pressed@4x.png | Bin 0 -> 280 bytes .../imagine/images/pageindicator-delegate.png | Bin 0 -> 135 bytes .../imagine/images/pageindicator-delegate@2x.png | Bin 0 -> 179 bytes .../imagine/images/pageindicator-delegate@3x.png | Bin 0 -> 220 bytes .../imagine/images/pageindicator-delegate@4x.png | Bin 0 -> 280 bytes .../imagine/images/pane-background.9.png | Bin 0 -> 120 bytes .../imagine/images/pane-background@2x.9.png | Bin 0 -> 123 bytes .../imagine/images/pane-background@3x.9.png | Bin 0 -> 130 bytes .../imagine/images/pane-background@4x.9.png | Bin 0 -> 137 bytes .../imagine/images/popup-background.9.png | Bin 0 -> 426 bytes .../imagine/images/popup-background@2x.9.png | Bin 0 -> 792 bytes .../imagine/images/popup-background@3x.9.png | Bin 0 -> 1206 bytes .../imagine/images/popup-background@4x.9.png | Bin 0 -> 1625 bytes .../imagine/images/popup-overlay-modal.png | Bin 0 -> 70 bytes .../imagine/images/popup-overlay-modal@2x.png | Bin 0 -> 76 bytes .../imagine/images/popup-overlay-modal@3x.png | Bin 0 -> 78 bytes .../imagine/images/popup-overlay-modal@4x.png | Bin 0 -> 79 bytes .../imagine/images/popup-overlay.png | Bin 0 -> 70 bytes .../imagine/images/popup-overlay@2x.png | Bin 0 -> 76 bytes .../imagine/images/popup-overlay@3x.png | Bin 0 -> 78 bytes .../imagine/images/popup-overlay@4x.png | Bin 0 -> 79 bytes .../imagine/images/progressbar-animation.webp | Bin 0 -> 4760 bytes .../imagine/images/progressbar-animation@2x.webp | Bin 0 -> 7932 bytes .../imagine/images/progressbar-animation@3x.webp | Bin 0 -> 8154 bytes .../imagine/images/progressbar-animation@4x.webp | Bin 0 -> 9646 bytes .../imagine/images/progressbar-background.9.png | Bin 0 -> 194 bytes .../imagine/images/progressbar-background@2x.9.png | Bin 0 -> 284 bytes .../imagine/images/progressbar-background@3x.9.png | Bin 0 -> 405 bytes .../imagine/images/progressbar-background@4x.9.png | Bin 0 -> 580 bytes .../imagine/images/progressbar-mask.9.png | Bin 0 -> 166 bytes .../imagine/images/progressbar-mask@2x.9.png | Bin 0 -> 223 bytes .../imagine/images/progressbar-mask@3x.9.png | Bin 0 -> 293 bytes .../imagine/images/progressbar-mask@4x.9.png | Bin 0 -> 344 bytes .../imagine/images/progressbar-progress.png | Bin 0 -> 76 bytes .../imagine/images/progressbar-progress@2x.png | Bin 0 -> 81 bytes .../imagine/images/progressbar-progress@3x.png | Bin 0 -> 83 bytes .../imagine/images/progressbar-progress@4x.png | Bin 0 -> 83 bytes .../radiobutton-indicator-checked-focused.png | Bin 0 -> 269 bytes .../radiobutton-indicator-checked-focused@2x.png | Bin 0 -> 442 bytes .../radiobutton-indicator-checked-focused@3x.png | Bin 0 -> 643 bytes .../radiobutton-indicator-checked-focused@4x.png | Bin 0 -> 881 bytes .../radiobutton-indicator-checked-hovered.png | Bin 0 -> 269 bytes .../radiobutton-indicator-checked-hovered@2x.png | Bin 0 -> 442 bytes .../radiobutton-indicator-checked-hovered@3x.png | Bin 0 -> 643 bytes .../radiobutton-indicator-checked-hovered@4x.png | Bin 0 -> 881 bytes .../radiobutton-indicator-checked-pressed.png | Bin 0 -> 269 bytes .../radiobutton-indicator-checked-pressed@2x.png | Bin 0 -> 442 bytes .../radiobutton-indicator-checked-pressed@3x.png | Bin 0 -> 650 bytes .../radiobutton-indicator-checked-pressed@4x.png | Bin 0 -> 881 bytes .../images/radiobutton-indicator-checked.png | Bin 0 -> 264 bytes .../images/radiobutton-indicator-checked@2x.png | Bin 0 -> 442 bytes .../images/radiobutton-indicator-checked@3x.png | Bin 0 -> 650 bytes .../images/radiobutton-indicator-checked@4x.png | Bin 0 -> 881 bytes .../images/radiobutton-indicator-disabled.png | Bin 0 -> 213 bytes .../images/radiobutton-indicator-disabled@2x.png | Bin 0 -> 350 bytes .../images/radiobutton-indicator-disabled@3x.png | Bin 0 -> 490 bytes .../images/radiobutton-indicator-disabled@4x.png | Bin 0 -> 663 bytes .../images/radiobutton-indicator-focused.png | Bin 0 -> 213 bytes .../images/radiobutton-indicator-focused@2x.png | Bin 0 -> 350 bytes .../images/radiobutton-indicator-focused@3x.png | Bin 0 -> 490 bytes .../images/radiobutton-indicator-focused@4x.png | Bin 0 -> 663 bytes .../images/radiobutton-indicator-hovered.png | Bin 0 -> 213 bytes .../images/radiobutton-indicator-hovered@2x.png | Bin 0 -> 350 bytes .../images/radiobutton-indicator-hovered@3x.png | Bin 0 -> 490 bytes .../images/radiobutton-indicator-hovered@4x.png | Bin 0 -> 663 bytes .../images/radiobutton-indicator-pressed.png | Bin 0 -> 213 bytes .../images/radiobutton-indicator-pressed@2x.png | Bin 0 -> 350 bytes .../images/radiobutton-indicator-pressed@3x.png | Bin 0 -> 490 bytes .../images/radiobutton-indicator-pressed@4x.png | Bin 0 -> 663 bytes .../imagine/images/radiobutton-indicator.png | Bin 0 -> 213 bytes .../imagine/images/radiobutton-indicator@2x.png | Bin 0 -> 350 bytes .../imagine/images/radiobutton-indicator@3x.png | Bin 0 -> 490 bytes .../imagine/images/radiobutton-indicator@4x.png | Bin 0 -> 663 bytes .../images/radiodelegate-background-disabled.9.png | Bin 0 -> 120 bytes .../radiodelegate-background-disabled@2x.9.png | Bin 0 -> 123 bytes .../radiodelegate-background-disabled@3x.9.png | Bin 0 -> 127 bytes .../radiodelegate-background-disabled@4x.9.png | Bin 0 -> 132 bytes .../images/radiodelegate-background-focused.9.png | Bin 0 -> 120 bytes .../radiodelegate-background-focused@2x.9.png | Bin 0 -> 123 bytes .../radiodelegate-background-focused@3x.9.png | Bin 0 -> 127 bytes .../radiodelegate-background-focused@4x.9.png | Bin 0 -> 132 bytes .../radiodelegate-background-highlighted.9.png | Bin 0 -> 120 bytes .../radiodelegate-background-highlighted@2x.9.png | Bin 0 -> 123 bytes .../radiodelegate-background-highlighted@3x.9.png | Bin 0 -> 127 bytes .../radiodelegate-background-highlighted@4x.9.png | Bin 0 -> 132 bytes .../images/radiodelegate-background-hovered.9.png | Bin 0 -> 120 bytes .../radiodelegate-background-hovered@2x.9.png | Bin 0 -> 123 bytes .../radiodelegate-background-hovered@3x.9.png | Bin 0 -> 127 bytes .../radiodelegate-background-hovered@4x.9.png | Bin 0 -> 132 bytes .../images/radiodelegate-background-pressed.9.png | Bin 0 -> 120 bytes .../radiodelegate-background-pressed@2x.9.png | Bin 0 -> 123 bytes .../radiodelegate-background-pressed@3x.9.png | Bin 0 -> 127 bytes .../radiodelegate-background-pressed@4x.9.png | Bin 0 -> 132 bytes .../imagine/images/radiodelegate-background.9.png | Bin 0 -> 120 bytes .../images/radiodelegate-background@2x.9.png | Bin 0 -> 123 bytes .../images/radiodelegate-background@3x.9.png | Bin 0 -> 127 bytes .../images/radiodelegate-background@4x.9.png | Bin 0 -> 132 bytes .../radiodelegate-indicator-checked-focused.png | Bin 0 -> 269 bytes .../radiodelegate-indicator-checked-focused@2x.png | Bin 0 -> 442 bytes .../radiodelegate-indicator-checked-focused@3x.png | Bin 0 -> 643 bytes .../radiodelegate-indicator-checked-focused@4x.png | Bin 0 -> 881 bytes .../radiodelegate-indicator-checked-hovered.png | Bin 0 -> 269 bytes .../radiodelegate-indicator-checked-hovered@2x.png | Bin 0 -> 442 bytes .../radiodelegate-indicator-checked-hovered@3x.png | Bin 0 -> 643 bytes .../radiodelegate-indicator-checked-hovered@4x.png | Bin 0 -> 881 bytes .../radiodelegate-indicator-checked-pressed.png | Bin 0 -> 269 bytes .../radiodelegate-indicator-checked-pressed@2x.png | Bin 0 -> 442 bytes .../radiodelegate-indicator-checked-pressed@3x.png | Bin 0 -> 650 bytes .../radiodelegate-indicator-checked-pressed@4x.png | Bin 0 -> 881 bytes .../images/radiodelegate-indicator-checked.png | Bin 0 -> 264 bytes .../images/radiodelegate-indicator-checked@2x.png | Bin 0 -> 442 bytes .../images/radiodelegate-indicator-checked@3x.png | Bin 0 -> 650 bytes .../images/radiodelegate-indicator-checked@4x.png | Bin 0 -> 881 bytes .../images/radiodelegate-indicator-disabled.png | Bin 0 -> 213 bytes .../images/radiodelegate-indicator-disabled@2x.png | Bin 0 -> 350 bytes .../images/radiodelegate-indicator-disabled@3x.png | Bin 0 -> 490 bytes .../images/radiodelegate-indicator-disabled@4x.png | Bin 0 -> 663 bytes .../images/radiodelegate-indicator-focused.png | Bin 0 -> 213 bytes .../images/radiodelegate-indicator-focused@2x.png | Bin 0 -> 350 bytes .../images/radiodelegate-indicator-focused@3x.png | Bin 0 -> 490 bytes .../images/radiodelegate-indicator-focused@4x.png | Bin 0 -> 663 bytes .../images/radiodelegate-indicator-hovered.png | Bin 0 -> 213 bytes .../images/radiodelegate-indicator-hovered@2x.png | Bin 0 -> 350 bytes .../images/radiodelegate-indicator-hovered@3x.png | Bin 0 -> 490 bytes .../images/radiodelegate-indicator-hovered@4x.png | Bin 0 -> 663 bytes .../images/radiodelegate-indicator-pressed.png | Bin 0 -> 213 bytes .../images/radiodelegate-indicator-pressed@2x.png | Bin 0 -> 350 bytes .../images/radiodelegate-indicator-pressed@3x.png | Bin 0 -> 490 bytes .../images/radiodelegate-indicator-pressed@4x.png | Bin 0 -> 663 bytes .../imagine/images/radiodelegate-indicator.png | Bin 0 -> 213 bytes .../imagine/images/radiodelegate-indicator@2x.png | Bin 0 -> 350 bytes .../imagine/images/radiodelegate-indicator@3x.png | Bin 0 -> 490 bytes .../imagine/images/radiodelegate-indicator@4x.png | Bin 0 -> 663 bytes .../images/rangeslider-background-horizontal.9.png | Bin 0 -> 167 bytes .../rangeslider-background-horizontal@2x.9.png | Bin 0 -> 243 bytes .../rangeslider-background-horizontal@3x.9.png | Bin 0 -> 332 bytes .../rangeslider-background-horizontal@4x.9.png | Bin 0 -> 444 bytes .../images/rangeslider-background-vertical.9.png | Bin 0 -> 175 bytes .../rangeslider-background-vertical@2x.9.png | Bin 0 -> 252 bytes .../rangeslider-background-vertical@3x.9.png | Bin 0 -> 328 bytes .../rangeslider-background-vertical@4x.9.png | Bin 0 -> 464 bytes .../imagine/images/rangeslider-handle-disabled.png | Bin 0 -> 255 bytes .../images/rangeslider-handle-disabled@2x.png | Bin 0 -> 484 bytes .../images/rangeslider-handle-disabled@3x.png | Bin 0 -> 726 bytes .../images/rangeslider-handle-disabled@4x.png | Bin 0 -> 965 bytes .../images/rangeslider-handle-focused-hovered.png | Bin 0 -> 255 bytes .../rangeslider-handle-focused-hovered@2x.png | Bin 0 -> 519 bytes .../rangeslider-handle-focused-hovered@3x.png | Bin 0 -> 765 bytes .../rangeslider-handle-focused-hovered@4x.png | Bin 0 -> 990 bytes .../images/rangeslider-handle-focused-pressed.png | Bin 0 -> 255 bytes .../rangeslider-handle-focused-pressed@2x.png | Bin 0 -> 519 bytes .../rangeslider-handle-focused-pressed@3x.png | Bin 0 -> 765 bytes .../rangeslider-handle-focused-pressed@4x.png | Bin 0 -> 990 bytes .../imagine/images/rangeslider-handle-focused.png | Bin 0 -> 255 bytes .../images/rangeslider-handle-focused@2x.png | Bin 0 -> 519 bytes .../images/rangeslider-handle-focused@3x.png | Bin 0 -> 765 bytes .../images/rangeslider-handle-focused@4x.png | Bin 0 -> 998 bytes .../imagine/images/rangeslider-handle-hovered.png | Bin 0 -> 255 bytes .../images/rangeslider-handle-hovered@2x.png | Bin 0 -> 484 bytes .../images/rangeslider-handle-hovered@3x.png | Bin 0 -> 726 bytes .../images/rangeslider-handle-hovered@4x.png | Bin 0 -> 965 bytes .../imagine/images/rangeslider-handle-pressed.png | Bin 0 -> 255 bytes .../images/rangeslider-handle-pressed@2x.png | Bin 0 -> 484 bytes .../images/rangeslider-handle-pressed@3x.png | Bin 0 -> 726 bytes .../images/rangeslider-handle-pressed@4x.png | Bin 0 -> 965 bytes .../imagine/images/rangeslider-handle.png | Bin 0 -> 255 bytes .../imagine/images/rangeslider-handle@2x.png | Bin 0 -> 487 bytes .../imagine/images/rangeslider-handle@3x.png | Bin 0 -> 728 bytes .../imagine/images/rangeslider-handle@4x.png | Bin 0 -> 976 bytes .../rangeslider-progress-horizontal-disabled.9.png | Bin 0 -> 144 bytes ...ngeslider-progress-horizontal-disabled@2x.9.png | Bin 0 -> 185 bytes ...ngeslider-progress-horizontal-disabled@3x.9.png | Bin 0 -> 228 bytes ...ngeslider-progress-horizontal-disabled@4x.9.png | Bin 0 -> 273 bytes .../images/rangeslider-progress-horizontal.9.png | Bin 0 -> 144 bytes .../rangeslider-progress-horizontal@2x.9.png | Bin 0 -> 185 bytes .../rangeslider-progress-horizontal@3x.9.png | Bin 0 -> 228 bytes .../rangeslider-progress-horizontal@4x.9.png | Bin 0 -> 273 bytes .../rangeslider-progress-vertical-disabled.9.png | Bin 0 -> 143 bytes ...rangeslider-progress-vertical-disabled@2x.9.png | Bin 0 -> 188 bytes ...rangeslider-progress-vertical-disabled@3x.9.png | Bin 0 -> 227 bytes ...rangeslider-progress-vertical-disabled@4x.9.png | Bin 0 -> 279 bytes .../images/rangeslider-progress-vertical.9.png | Bin 0 -> 143 bytes .../images/rangeslider-progress-vertical@2x.9.png | Bin 0 -> 188 bytes .../images/rangeslider-progress-vertical@3x.9.png | Bin 0 -> 227 bytes .../images/rangeslider-progress-vertical@4x.9.png | Bin 0 -> 279 bytes .../roundbutton-background-checked-focused.png | Bin 0 -> 350 bytes .../roundbutton-background-checked-focused@2x.png | Bin 0 -> 663 bytes .../roundbutton-background-checked-focused@3x.png | Bin 0 -> 922 bytes .../roundbutton-background-checked-focused@4x.png | Bin 0 -> 1290 bytes .../roundbutton-background-checked-hovered.png | Bin 0 -> 350 bytes .../roundbutton-background-checked-hovered@2x.png | Bin 0 -> 663 bytes .../roundbutton-background-checked-hovered@3x.png | Bin 0 -> 922 bytes .../roundbutton-background-checked-hovered@4x.png | Bin 0 -> 1290 bytes .../images/roundbutton-background-checked.png | Bin 0 -> 350 bytes .../images/roundbutton-background-checked@2x.png | Bin 0 -> 663 bytes .../images/roundbutton-background-checked@3x.png | Bin 0 -> 922 bytes .../images/roundbutton-background-checked@4x.png | Bin 0 -> 1290 bytes .../roundbutton-background-disabled-checked.png | Bin 0 -> 350 bytes .../roundbutton-background-disabled-checked@2x.png | Bin 0 -> 663 bytes .../roundbutton-background-disabled-checked@3x.png | Bin 0 -> 922 bytes .../roundbutton-background-disabled-checked@4x.png | Bin 0 -> 1290 bytes .../images/roundbutton-background-disabled.png | Bin 0 -> 350 bytes .../images/roundbutton-background-disabled@2x.png | Bin 0 -> 663 bytes .../images/roundbutton-background-disabled@3x.png | Bin 0 -> 922 bytes .../images/roundbutton-background-disabled@4x.png | Bin 0 -> 1290 bytes .../images/roundbutton-background-focused.png | Bin 0 -> 350 bytes .../images/roundbutton-background-focused@2x.png | Bin 0 -> 663 bytes .../images/roundbutton-background-focused@3x.png | Bin 0 -> 922 bytes .../images/roundbutton-background-focused@4x.png | Bin 0 -> 1290 bytes .../roundbutton-background-highlighted-focused.png | Bin 0 -> 350 bytes ...undbutton-background-highlighted-focused@2x.png | Bin 0 -> 663 bytes ...undbutton-background-highlighted-focused@3x.png | Bin 0 -> 922 bytes ...undbutton-background-highlighted-focused@4x.png | Bin 0 -> 1290 bytes .../roundbutton-background-highlighted-hovered.png | Bin 0 -> 350 bytes ...undbutton-background-highlighted-hovered@2x.png | Bin 0 -> 663 bytes ...undbutton-background-highlighted-hovered@3x.png | Bin 0 -> 922 bytes ...undbutton-background-highlighted-hovered@4x.png | Bin 0 -> 1290 bytes .../roundbutton-background-highlighted-pressed.png | Bin 0 -> 350 bytes ...undbutton-background-highlighted-pressed@2x.png | Bin 0 -> 663 bytes ...undbutton-background-highlighted-pressed@3x.png | Bin 0 -> 922 bytes ...undbutton-background-highlighted-pressed@4x.png | Bin 0 -> 1290 bytes .../images/roundbutton-background-highlighted.png | Bin 0 -> 350 bytes .../roundbutton-background-highlighted@2x.png | Bin 0 -> 663 bytes .../roundbutton-background-highlighted@3x.png | Bin 0 -> 922 bytes .../roundbutton-background-highlighted@4x.png | Bin 0 -> 1290 bytes .../images/roundbutton-background-hovered.png | Bin 0 -> 350 bytes .../images/roundbutton-background-hovered@2x.png | Bin 0 -> 663 bytes .../images/roundbutton-background-hovered@3x.png | Bin 0 -> 922 bytes .../images/roundbutton-background-hovered@4x.png | Bin 0 -> 1290 bytes .../images/roundbutton-background-pressed.png | Bin 0 -> 350 bytes .../images/roundbutton-background-pressed@2x.png | Bin 0 -> 663 bytes .../images/roundbutton-background-pressed@3x.png | Bin 0 -> 922 bytes .../images/roundbutton-background-pressed@4x.png | Bin 0 -> 1290 bytes .../imagine/images/roundbutton-background.png | Bin 0 -> 350 bytes .../imagine/images/roundbutton-background@2x.png | Bin 0 -> 663 bytes .../imagine/images/roundbutton-background@3x.png | Bin 0 -> 922 bytes .../imagine/images/roundbutton-background@4x.png | Bin 0 -> 1290 bytes .../imagine/images/scrollbar-handle-disabled.png | Bin 0 -> 79 bytes .../images/scrollbar-handle-disabled@2x.png | Bin 0 -> 80 bytes .../images/scrollbar-handle-disabled@3x.png | Bin 0 -> 81 bytes .../images/scrollbar-handle-disabled@4x.png | Bin 0 -> 83 bytes .../scrollbar-handle-interactive-disabled.png | Bin 0 -> 81 bytes .../scrollbar-handle-interactive-disabled@2x.png | Bin 0 -> 83 bytes .../scrollbar-handle-interactive-disabled@3x.png | Bin 0 -> 83 bytes .../scrollbar-handle-interactive-disabled@4x.png | Bin 0 -> 83 bytes .../scrollbar-handle-interactive-hovered.png | Bin 0 -> 81 bytes .../scrollbar-handle-interactive-hovered@2x.png | Bin 0 -> 83 bytes .../scrollbar-handle-interactive-hovered@3x.png | Bin 0 -> 83 bytes .../scrollbar-handle-interactive-hovered@4x.png | Bin 0 -> 83 bytes .../scrollbar-handle-interactive-pressed.png | Bin 0 -> 80 bytes .../scrollbar-handle-interactive-pressed@2x.png | Bin 0 -> 83 bytes .../scrollbar-handle-interactive-pressed@3x.png | Bin 0 -> 83 bytes .../scrollbar-handle-interactive-pressed@4x.png | Bin 0 -> 83 bytes .../images/scrollbar-handle-interactive.png | Bin 0 -> 81 bytes .../images/scrollbar-handle-interactive@2x.png | Bin 0 -> 83 bytes .../images/scrollbar-handle-interactive@3x.png | Bin 0 -> 83 bytes .../images/scrollbar-handle-interactive@4x.png | Bin 0 -> 83 bytes .../imagine/images/scrollbar-handle.png | Bin 0 -> 79 bytes .../imagine/images/scrollbar-handle@2x.png | Bin 0 -> 80 bytes .../imagine/images/scrollbar-handle@3x.png | Bin 0 -> 81 bytes .../imagine/images/scrollbar-handle@4x.png | Bin 0 -> 83 bytes .../imagine/images/scrollindicator-handle.png | Bin 0 -> 79 bytes .../imagine/images/scrollindicator-handle@2x.png | Bin 0 -> 80 bytes .../imagine/images/scrollindicator-handle@3x.png | Bin 0 -> 81 bytes .../imagine/images/scrollindicator-handle@4x.png | Bin 0 -> 83 bytes .../images/slider-background-horizontal.9.png | Bin 0 -> 167 bytes .../images/slider-background-horizontal@2x.9.png | Bin 0 -> 243 bytes .../images/slider-background-horizontal@3x.9.png | Bin 0 -> 332 bytes .../images/slider-background-horizontal@4x.9.png | Bin 0 -> 444 bytes .../images/slider-background-vertical.9.png | Bin 0 -> 175 bytes .../images/slider-background-vertical@2x.9.png | Bin 0 -> 252 bytes .../images/slider-background-vertical@3x.9.png | Bin 0 -> 328 bytes .../images/slider-background-vertical@4x.9.png | Bin 0 -> 464 bytes .../imagine/images/slider-handle-disabled.png | Bin 0 -> 255 bytes .../imagine/images/slider-handle-disabled@2x.png | Bin 0 -> 484 bytes .../imagine/images/slider-handle-disabled@3x.png | Bin 0 -> 726 bytes .../imagine/images/slider-handle-disabled@4x.png | Bin 0 -> 965 bytes .../images/slider-handle-focused-hovered.png | Bin 0 -> 255 bytes .../images/slider-handle-focused-hovered@2x.png | Bin 0 -> 519 bytes .../images/slider-handle-focused-hovered@3x.png | Bin 0 -> 765 bytes .../images/slider-handle-focused-hovered@4x.png | Bin 0 -> 990 bytes .../images/slider-handle-focused-pressed.png | Bin 0 -> 255 bytes .../images/slider-handle-focused-pressed@2x.png | Bin 0 -> 519 bytes .../images/slider-handle-focused-pressed@3x.png | Bin 0 -> 765 bytes .../images/slider-handle-focused-pressed@4x.png | Bin 0 -> 990 bytes .../imagine/images/slider-handle-focused.png | Bin 0 -> 255 bytes .../imagine/images/slider-handle-focused@2x.png | Bin 0 -> 519 bytes .../imagine/images/slider-handle-focused@3x.png | Bin 0 -> 765 bytes .../imagine/images/slider-handle-focused@4x.png | Bin 0 -> 998 bytes .../imagine/images/slider-handle-hovered.png | Bin 0 -> 255 bytes .../imagine/images/slider-handle-hovered@2x.png | Bin 0 -> 484 bytes .../imagine/images/slider-handle-hovered@3x.png | Bin 0 -> 726 bytes .../imagine/images/slider-handle-hovered@4x.png | Bin 0 -> 965 bytes .../imagine/images/slider-handle-pressed.png | Bin 0 -> 255 bytes .../imagine/images/slider-handle-pressed@2x.png | Bin 0 -> 484 bytes .../imagine/images/slider-handle-pressed@3x.png | Bin 0 -> 726 bytes .../imagine/images/slider-handle-pressed@4x.png | Bin 0 -> 965 bytes .../imagine/images/slider-handle.png | Bin 0 -> 255 bytes .../imagine/images/slider-handle@2x.png | Bin 0 -> 487 bytes .../imagine/images/slider-handle@3x.png | Bin 0 -> 728 bytes .../imagine/images/slider-handle@4x.png | Bin 0 -> 976 bytes .../slider-progress-horizontal-disabled.9.png | Bin 0 -> 144 bytes .../slider-progress-horizontal-disabled@2x.9.png | Bin 0 -> 185 bytes .../slider-progress-horizontal-disabled@3x.9.png | Bin 0 -> 228 bytes .../slider-progress-horizontal-disabled@4x.9.png | Bin 0 -> 273 bytes .../images/slider-progress-horizontal.9.png | Bin 0 -> 144 bytes .../images/slider-progress-horizontal@2x.9.png | Bin 0 -> 185 bytes .../images/slider-progress-horizontal@3x.9.png | Bin 0 -> 228 bytes .../images/slider-progress-horizontal@4x.9.png | Bin 0 -> 273 bytes .../images/slider-progress-vertical-disabled.9.png | Bin 0 -> 143 bytes .../slider-progress-vertical-disabled@2x.9.png | Bin 0 -> 188 bytes .../slider-progress-vertical-disabled@3x.9.png | Bin 0 -> 227 bytes .../slider-progress-vertical-disabled@4x.9.png | Bin 0 -> 279 bytes .../imagine/images/slider-progress-vertical.9.png | Bin 0 -> 143 bytes .../images/slider-progress-vertical@2x.9.png | Bin 0 -> 188 bytes .../images/slider-progress-vertical@3x.9.png | Bin 0 -> 227 bytes .../images/slider-progress-vertical@4x.9.png | Bin 0 -> 279 bytes .../images/spinbox-background-disabled.9.png | Bin 0 -> 198 bytes .../images/spinbox-background-disabled@2x.9.png | Bin 0 -> 277 bytes .../images/spinbox-background-disabled@3x.9.png | Bin 0 -> 443 bytes .../images/spinbox-background-disabled@4x.9.png | Bin 0 -> 583 bytes .../images/spinbox-background-editable.9.png | Bin 0 -> 214 bytes .../images/spinbox-background-editable@2x.9.png | Bin 0 -> 337 bytes .../images/spinbox-background-editable@3x.9.png | Bin 0 -> 533 bytes .../images/spinbox-background-editable@4x.9.png | Bin 0 -> 784 bytes .../images/spinbox-background-focused.9.png | Bin 0 -> 214 bytes .../images/spinbox-background-focused@2x.9.png | Bin 0 -> 337 bytes .../images/spinbox-background-focused@3x.9.png | Bin 0 -> 533 bytes .../images/spinbox-background-focused@4x.9.png | Bin 0 -> 784 bytes .../imagine/images/spinbox-background.9.png | Bin 0 -> 214 bytes .../imagine/images/spinbox-background@2x.9.png | Bin 0 -> 337 bytes .../imagine/images/spinbox-background@3x.9.png | Bin 0 -> 539 bytes .../imagine/images/spinbox-background@4x.9.png | Bin 0 -> 767 bytes .../images/spinbox-indicator-down-disabled.9.png | Bin 0 -> 150 bytes .../spinbox-indicator-down-disabled@2x.9.png | Bin 0 -> 184 bytes .../spinbox-indicator-down-disabled@3x.9.png | Bin 0 -> 225 bytes .../spinbox-indicator-down-disabled@4x.9.png | Bin 0 -> 256 bytes .../spinbox-indicator-down-editable-focused.9.png | Bin 0 -> 150 bytes ...pinbox-indicator-down-editable-focused@2x.9.png | Bin 0 -> 184 bytes ...pinbox-indicator-down-editable-focused@3x.9.png | Bin 0 -> 225 bytes ...pinbox-indicator-down-editable-focused@4x.9.png | Bin 0 -> 256 bytes .../spinbox-indicator-down-editable-hovered.9.png | Bin 0 -> 150 bytes ...pinbox-indicator-down-editable-hovered@2x.9.png | Bin 0 -> 184 bytes ...pinbox-indicator-down-editable-hovered@3x.9.png | Bin 0 -> 225 bytes ...pinbox-indicator-down-editable-hovered@4x.9.png | Bin 0 -> 256 bytes ...-indicator-down-editable-mirrored-focused.9.png | Bin 0 -> 153 bytes ...dicator-down-editable-mirrored-focused@2x.9.png | Bin 0 -> 186 bytes ...dicator-down-editable-mirrored-focused@3x.9.png | Bin 0 -> 226 bytes ...dicator-down-editable-mirrored-focused@4x.9.png | Bin 0 -> 261 bytes ...-indicator-down-editable-mirrored-hovered.9.png | Bin 0 -> 153 bytes ...dicator-down-editable-mirrored-hovered@2x.9.png | Bin 0 -> 186 bytes ...dicator-down-editable-mirrored-hovered@3x.9.png | Bin 0 -> 226 bytes ...dicator-down-editable-mirrored-hovered@4x.9.png | Bin 0 -> 261 bytes ...-indicator-down-editable-mirrored-pressed.9.png | Bin 0 -> 153 bytes ...dicator-down-editable-mirrored-pressed@2x.9.png | Bin 0 -> 186 bytes ...dicator-down-editable-mirrored-pressed@3x.9.png | Bin 0 -> 226 bytes ...dicator-down-editable-mirrored-pressed@4x.9.png | Bin 0 -> 261 bytes .../spinbox-indicator-down-editable-mirrored.9.png | Bin 0 -> 153 bytes ...inbox-indicator-down-editable-mirrored@2x.9.png | Bin 0 -> 186 bytes ...inbox-indicator-down-editable-mirrored@3x.9.png | Bin 0 -> 226 bytes ...inbox-indicator-down-editable-mirrored@4x.9.png | Bin 0 -> 261 bytes .../spinbox-indicator-down-editable-pressed.9.png | Bin 0 -> 150 bytes ...pinbox-indicator-down-editable-pressed@2x.9.png | Bin 0 -> 184 bytes ...pinbox-indicator-down-editable-pressed@3x.9.png | Bin 0 -> 225 bytes ...pinbox-indicator-down-editable-pressed@4x.9.png | Bin 0 -> 256 bytes .../images/spinbox-indicator-down-editable.9.png | Bin 0 -> 150 bytes .../spinbox-indicator-down-editable@2x.9.png | Bin 0 -> 184 bytes .../spinbox-indicator-down-editable@3x.9.png | Bin 0 -> 225 bytes .../spinbox-indicator-down-editable@4x.9.png | Bin 0 -> 256 bytes .../images/spinbox-indicator-down-focused.9.png | Bin 0 -> 150 bytes .../images/spinbox-indicator-down-focused@2x.9.png | Bin 0 -> 184 bytes .../images/spinbox-indicator-down-focused@3x.9.png | Bin 0 -> 225 bytes .../images/spinbox-indicator-down-focused@4x.9.png | Bin 0 -> 256 bytes .../images/spinbox-indicator-down-hovered.9.png | Bin 0 -> 150 bytes .../images/spinbox-indicator-down-hovered@2x.9.png | Bin 0 -> 184 bytes .../images/spinbox-indicator-down-hovered@3x.9.png | Bin 0 -> 225 bytes .../images/spinbox-indicator-down-hovered@4x.9.png | Bin 0 -> 256 bytes .../spinbox-indicator-down-mirrored-disabled.9.png | Bin 0 -> 153 bytes ...inbox-indicator-down-mirrored-disabled@2x.9.png | Bin 0 -> 186 bytes ...inbox-indicator-down-mirrored-disabled@3x.9.png | Bin 0 -> 226 bytes ...inbox-indicator-down-mirrored-disabled@4x.9.png | Bin 0 -> 261 bytes .../spinbox-indicator-down-mirrored-focused.9.png | Bin 0 -> 153 bytes ...pinbox-indicator-down-mirrored-focused@2x.9.png | Bin 0 -> 186 bytes ...pinbox-indicator-down-mirrored-focused@3x.9.png | Bin 0 -> 226 bytes ...pinbox-indicator-down-mirrored-focused@4x.9.png | Bin 0 -> 261 bytes .../spinbox-indicator-down-mirrored-hovered.9.png | Bin 0 -> 153 bytes ...pinbox-indicator-down-mirrored-hovered@2x.9.png | Bin 0 -> 186 bytes ...pinbox-indicator-down-mirrored-hovered@3x.9.png | Bin 0 -> 226 bytes ...pinbox-indicator-down-mirrored-hovered@4x.9.png | Bin 0 -> 261 bytes .../spinbox-indicator-down-mirrored-pressed.9.png | Bin 0 -> 153 bytes ...pinbox-indicator-down-mirrored-pressed@2x.9.png | Bin 0 -> 186 bytes ...pinbox-indicator-down-mirrored-pressed@3x.9.png | Bin 0 -> 226 bytes ...pinbox-indicator-down-mirrored-pressed@4x.9.png | Bin 0 -> 261 bytes .../images/spinbox-indicator-down-mirrored.9.png | Bin 0 -> 153 bytes .../spinbox-indicator-down-mirrored@2x.9.png | Bin 0 -> 186 bytes .../spinbox-indicator-down-mirrored@3x.9.png | Bin 0 -> 226 bytes .../spinbox-indicator-down-mirrored@4x.9.png | Bin 0 -> 261 bytes .../images/spinbox-indicator-down-pressed.9.png | Bin 0 -> 150 bytes .../images/spinbox-indicator-down-pressed@2x.9.png | Bin 0 -> 184 bytes .../images/spinbox-indicator-down-pressed@3x.9.png | Bin 0 -> 225 bytes .../images/spinbox-indicator-down-pressed@4x.9.png | Bin 0 -> 256 bytes .../imagine/images/spinbox-indicator-down.9.png | Bin 0 -> 150 bytes .../imagine/images/spinbox-indicator-down@2x.9.png | Bin 0 -> 184 bytes .../imagine/images/spinbox-indicator-down@3x.9.png | Bin 0 -> 225 bytes .../imagine/images/spinbox-indicator-down@4x.9.png | Bin 0 -> 256 bytes .../images/spinbox-indicator-up-disabled.9.png | Bin 0 -> 160 bytes .../images/spinbox-indicator-up-disabled@2x.9.png | Bin 0 -> 191 bytes .../images/spinbox-indicator-up-disabled@3x.9.png | Bin 0 -> 235 bytes .../images/spinbox-indicator-up-disabled@4x.9.png | Bin 0 -> 269 bytes .../spinbox-indicator-up-editable-focused.9.png | Bin 0 -> 160 bytes .../spinbox-indicator-up-editable-focused@2x.9.png | Bin 0 -> 191 bytes .../spinbox-indicator-up-editable-focused@3x.9.png | Bin 0 -> 235 bytes .../spinbox-indicator-up-editable-focused@4x.9.png | Bin 0 -> 269 bytes .../spinbox-indicator-up-editable-hovered.9.png | Bin 0 -> 160 bytes .../spinbox-indicator-up-editable-hovered@2x.9.png | Bin 0 -> 191 bytes .../spinbox-indicator-up-editable-hovered@3x.9.png | Bin 0 -> 235 bytes .../spinbox-indicator-up-editable-hovered@4x.9.png | Bin 0 -> 269 bytes ...ox-indicator-up-editable-mirrored-focused.9.png | Bin 0 -> 157 bytes ...indicator-up-editable-mirrored-focused@2x.9.png | Bin 0 -> 189 bytes ...indicator-up-editable-mirrored-focused@3x.9.png | Bin 0 -> 232 bytes ...indicator-up-editable-mirrored-focused@4x.9.png | Bin 0 -> 265 bytes ...ox-indicator-up-editable-mirrored-hovered.9.png | Bin 0 -> 157 bytes ...indicator-up-editable-mirrored-hovered@2x.9.png | Bin 0 -> 189 bytes ...indicator-up-editable-mirrored-hovered@3x.9.png | Bin 0 -> 232 bytes ...indicator-up-editable-mirrored-hovered@4x.9.png | Bin 0 -> 265 bytes ...ox-indicator-up-editable-mirrored-pressed.9.png | Bin 0 -> 157 bytes ...indicator-up-editable-mirrored-pressed@2x.9.png | Bin 0 -> 189 bytes ...indicator-up-editable-mirrored-pressed@3x.9.png | Bin 0 -> 232 bytes ...indicator-up-editable-mirrored-pressed@4x.9.png | Bin 0 -> 265 bytes .../spinbox-indicator-up-editable-mirrored.9.png | Bin 0 -> 157 bytes ...spinbox-indicator-up-editable-mirrored@2x.9.png | Bin 0 -> 189 bytes ...spinbox-indicator-up-editable-mirrored@3x.9.png | Bin 0 -> 232 bytes ...spinbox-indicator-up-editable-mirrored@4x.9.png | Bin 0 -> 265 bytes .../spinbox-indicator-up-editable-pressed.9.png | Bin 0 -> 160 bytes .../spinbox-indicator-up-editable-pressed@2x.9.png | Bin 0 -> 191 bytes .../spinbox-indicator-up-editable-pressed@3x.9.png | Bin 0 -> 235 bytes .../spinbox-indicator-up-editable-pressed@4x.9.png | Bin 0 -> 269 bytes .../images/spinbox-indicator-up-editable.9.png | Bin 0 -> 160 bytes .../images/spinbox-indicator-up-editable@2x.9.png | Bin 0 -> 191 bytes .../images/spinbox-indicator-up-editable@3x.9.png | Bin 0 -> 235 bytes .../images/spinbox-indicator-up-editable@4x.9.png | Bin 0 -> 269 bytes .../images/spinbox-indicator-up-focused.9.png | Bin 0 -> 160 bytes .../images/spinbox-indicator-up-focused@2x.9.png | Bin 0 -> 191 bytes .../images/spinbox-indicator-up-focused@3x.9.png | Bin 0 -> 235 bytes .../images/spinbox-indicator-up-focused@4x.9.png | Bin 0 -> 269 bytes .../images/spinbox-indicator-up-hovered.9.png | Bin 0 -> 160 bytes .../images/spinbox-indicator-up-hovered@2x.9.png | Bin 0 -> 191 bytes .../images/spinbox-indicator-up-hovered@3x.9.png | Bin 0 -> 235 bytes .../images/spinbox-indicator-up-hovered@4x.9.png | Bin 0 -> 269 bytes .../spinbox-indicator-up-mirrored-disabled.9.png | Bin 0 -> 157 bytes ...spinbox-indicator-up-mirrored-disabled@2x.9.png | Bin 0 -> 189 bytes ...spinbox-indicator-up-mirrored-disabled@3x.9.png | Bin 0 -> 232 bytes ...spinbox-indicator-up-mirrored-disabled@4x.9.png | Bin 0 -> 265 bytes .../spinbox-indicator-up-mirrored-focused.9.png | Bin 0 -> 157 bytes .../spinbox-indicator-up-mirrored-focused@2x.9.png | Bin 0 -> 189 bytes .../spinbox-indicator-up-mirrored-focused@3x.9.png | Bin 0 -> 232 bytes .../spinbox-indicator-up-mirrored-focused@4x.9.png | Bin 0 -> 265 bytes .../spinbox-indicator-up-mirrored-hovered.9.png | Bin 0 -> 157 bytes .../spinbox-indicator-up-mirrored-hovered@2x.9.png | Bin 0 -> 189 bytes .../spinbox-indicator-up-mirrored-hovered@3x.9.png | Bin 0 -> 232 bytes .../spinbox-indicator-up-mirrored-hovered@4x.9.png | Bin 0 -> 265 bytes .../spinbox-indicator-up-mirrored-pressed.9.png | Bin 0 -> 157 bytes .../spinbox-indicator-up-mirrored-pressed@2x.9.png | Bin 0 -> 189 bytes .../spinbox-indicator-up-mirrored-pressed@3x.9.png | Bin 0 -> 232 bytes .../spinbox-indicator-up-mirrored-pressed@4x.9.png | Bin 0 -> 265 bytes .../images/spinbox-indicator-up-mirrored.9.png | Bin 0 -> 157 bytes .../images/spinbox-indicator-up-mirrored@2x.9.png | Bin 0 -> 189 bytes .../images/spinbox-indicator-up-mirrored@3x.9.png | Bin 0 -> 232 bytes .../images/spinbox-indicator-up-mirrored@4x.9.png | Bin 0 -> 265 bytes .../images/spinbox-indicator-up-pressed.9.png | Bin 0 -> 160 bytes .../images/spinbox-indicator-up-pressed@2x.9.png | Bin 0 -> 191 bytes .../images/spinbox-indicator-up-pressed@3x.9.png | Bin 0 -> 235 bytes .../images/spinbox-indicator-up-pressed@4x.9.png | Bin 0 -> 269 bytes .../imagine/images/spinbox-indicator-up.9.png | Bin 0 -> 160 bytes .../imagine/images/spinbox-indicator-up@2x.9.png | Bin 0 -> 191 bytes .../imagine/images/spinbox-indicator-up@3x.9.png | Bin 0 -> 235 bytes .../imagine/images/spinbox-indicator-up@4x.9.png | Bin 0 -> 269 bytes .../imagine/images/splitview-handle-disabled.png | Bin 0 -> 80 bytes .../images/splitview-handle-disabled@2x.png | Bin 0 -> 83 bytes .../images/splitview-handle-disabled@3x.png | Bin 0 -> 83 bytes .../images/splitview-handle-disabled@4x.png | Bin 0 -> 83 bytes .../imagine/images/splitview-handle-hovered.png | Bin 0 -> 80 bytes .../imagine/images/splitview-handle-hovered@2x.png | Bin 0 -> 83 bytes .../imagine/images/splitview-handle-hovered@3x.png | Bin 0 -> 83 bytes .../imagine/images/splitview-handle-hovered@4x.png | Bin 0 -> 83 bytes .../imagine/images/splitview-handle-pressed.png | Bin 0 -> 80 bytes .../imagine/images/splitview-handle-pressed@2x.png | Bin 0 -> 83 bytes .../imagine/images/splitview-handle-pressed@3x.png | Bin 0 -> 83 bytes .../imagine/images/splitview-handle-pressed@4x.png | Bin 0 -> 83 bytes .../imagine/images/splitview-handle.png | Bin 0 -> 80 bytes .../imagine/images/splitview-handle@2x.png | Bin 0 -> 83 bytes .../imagine/images/splitview-handle@3x.png | Bin 0 -> 83 bytes .../imagine/images/splitview-handle@4x.png | Bin 0 -> 83 bytes .../images/swipedelegate-background-disabled.9.png | Bin 0 -> 120 bytes .../swipedelegate-background-disabled@2x.9.png | Bin 0 -> 123 bytes .../swipedelegate-background-disabled@3x.9.png | Bin 0 -> 127 bytes .../swipedelegate-background-disabled@4x.9.png | Bin 0 -> 132 bytes .../images/swipedelegate-background-focused.9.png | Bin 0 -> 120 bytes .../swipedelegate-background-focused@2x.9.png | Bin 0 -> 123 bytes .../swipedelegate-background-focused@3x.9.png | Bin 0 -> 127 bytes .../swipedelegate-background-focused@4x.9.png | Bin 0 -> 132 bytes .../swipedelegate-background-highlighted.9.png | Bin 0 -> 120 bytes .../swipedelegate-background-highlighted@2x.9.png | Bin 0 -> 123 bytes .../swipedelegate-background-highlighted@3x.9.png | Bin 0 -> 127 bytes .../swipedelegate-background-highlighted@4x.9.png | Bin 0 -> 132 bytes .../images/swipedelegate-background-hovered.9.png | Bin 0 -> 120 bytes .../swipedelegate-background-hovered@2x.9.png | Bin 0 -> 123 bytes .../swipedelegate-background-hovered@3x.9.png | Bin 0 -> 127 bytes .../swipedelegate-background-hovered@4x.9.png | Bin 0 -> 132 bytes .../images/swipedelegate-background-pressed.9.png | Bin 0 -> 120 bytes .../swipedelegate-background-pressed@2x.9.png | Bin 0 -> 123 bytes .../swipedelegate-background-pressed@3x.9.png | Bin 0 -> 127 bytes .../swipedelegate-background-pressed@4x.9.png | Bin 0 -> 132 bytes .../imagine/images/swipedelegate-background.9.png | Bin 0 -> 120 bytes .../images/swipedelegate-background@2x.9.png | Bin 0 -> 123 bytes .../images/swipedelegate-background@3x.9.png | Bin 0 -> 127 bytes .../images/swipedelegate-background@4x.9.png | Bin 0 -> 132 bytes .../imagine/images/switch-handle-disabled.png | Bin 0 -> 226 bytes .../imagine/images/switch-handle-disabled@2x.png | Bin 0 -> 368 bytes .../imagine/images/switch-handle-disabled@3x.png | Bin 0 -> 517 bytes .../imagine/images/switch-handle-disabled@4x.png | Bin 0 -> 699 bytes .../imagine/images/switch-handle-pressed.png | Bin 0 -> 226 bytes .../imagine/images/switch-handle-pressed@2x.png | Bin 0 -> 368 bytes .../imagine/images/switch-handle-pressed@3x.png | Bin 0 -> 517 bytes .../imagine/images/switch-handle-pressed@4x.png | Bin 0 -> 699 bytes .../imagine/images/switch-handle.png | Bin 0 -> 226 bytes .../imagine/images/switch-handle@2x.png | Bin 0 -> 368 bytes .../imagine/images/switch-handle@3x.png | Bin 0 -> 517 bytes .../imagine/images/switch-handle@4x.png | Bin 0 -> 699 bytes .../images/switch-indicator-checked-focused.png | Bin 0 -> 283 bytes .../images/switch-indicator-checked-focused@2x.png | Bin 0 -> 423 bytes .../images/switch-indicator-checked-focused@3x.png | Bin 0 -> 650 bytes .../images/switch-indicator-checked-focused@4x.png | Bin 0 -> 834 bytes .../images/switch-indicator-checked-hovered.png | Bin 0 -> 283 bytes .../images/switch-indicator-checked-hovered@2x.png | Bin 0 -> 423 bytes .../images/switch-indicator-checked-hovered@3x.png | Bin 0 -> 650 bytes .../images/switch-indicator-checked-hovered@4x.png | Bin 0 -> 834 bytes .../images/switch-indicator-checked-pressed.png | Bin 0 -> 283 bytes .../images/switch-indicator-checked-pressed@2x.png | Bin 0 -> 423 bytes .../images/switch-indicator-checked-pressed@3x.png | Bin 0 -> 650 bytes .../images/switch-indicator-checked-pressed@4x.png | Bin 0 -> 834 bytes .../imagine/images/switch-indicator-checked.png | Bin 0 -> 283 bytes .../imagine/images/switch-indicator-checked@2x.png | Bin 0 -> 423 bytes .../imagine/images/switch-indicator-checked@3x.png | Bin 0 -> 650 bytes .../imagine/images/switch-indicator-checked@4x.png | Bin 0 -> 834 bytes .../imagine/images/switch-indicator-disabled.png | Bin 0 -> 283 bytes .../images/switch-indicator-disabled@2x.png | Bin 0 -> 423 bytes .../images/switch-indicator-disabled@3x.png | Bin 0 -> 650 bytes .../images/switch-indicator-disabled@4x.png | Bin 0 -> 834 bytes .../imagine/images/switch-indicator-focused.png | Bin 0 -> 283 bytes .../imagine/images/switch-indicator-focused@2x.png | Bin 0 -> 423 bytes .../imagine/images/switch-indicator-focused@3x.png | Bin 0 -> 650 bytes .../imagine/images/switch-indicator-focused@4x.png | Bin 0 -> 834 bytes .../imagine/images/switch-indicator-hovered.png | Bin 0 -> 283 bytes .../imagine/images/switch-indicator-hovered@2x.png | Bin 0 -> 423 bytes .../imagine/images/switch-indicator-hovered@3x.png | Bin 0 -> 650 bytes .../imagine/images/switch-indicator-hovered@4x.png | Bin 0 -> 834 bytes .../imagine/images/switch-indicator-pressed.png | Bin 0 -> 283 bytes .../imagine/images/switch-indicator-pressed@2x.png | Bin 0 -> 423 bytes .../imagine/images/switch-indicator-pressed@3x.png | Bin 0 -> 650 bytes .../imagine/images/switch-indicator-pressed@4x.png | Bin 0 -> 834 bytes .../imagine/images/switch-indicator.png | Bin 0 -> 283 bytes .../imagine/images/switch-indicator@2x.png | Bin 0 -> 423 bytes .../imagine/images/switch-indicator@3x.png | Bin 0 -> 650 bytes .../imagine/images/switch-indicator@4x.png | Bin 0 -> 834 bytes .../switchdelegate-background-disabled.9.png | Bin 0 -> 120 bytes .../switchdelegate-background-disabled@2x.9.png | Bin 0 -> 123 bytes .../switchdelegate-background-disabled@3x.9.png | Bin 0 -> 127 bytes .../switchdelegate-background-disabled@4x.9.png | Bin 0 -> 132 bytes .../images/switchdelegate-background-focused.9.png | Bin 0 -> 120 bytes .../switchdelegate-background-focused@2x.9.png | Bin 0 -> 123 bytes .../switchdelegate-background-focused@3x.9.png | Bin 0 -> 127 bytes .../switchdelegate-background-focused@4x.9.png | Bin 0 -> 132 bytes .../images/switchdelegate-background-hovered.9.png | Bin 0 -> 120 bytes .../switchdelegate-background-hovered@2x.9.png | Bin 0 -> 123 bytes .../switchdelegate-background-hovered@3x.9.png | Bin 0 -> 127 bytes .../switchdelegate-background-hovered@4x.9.png | Bin 0 -> 132 bytes .../images/switchdelegate-background-pressed.9.png | Bin 0 -> 120 bytes .../switchdelegate-background-pressed@2x.9.png | Bin 0 -> 123 bytes .../switchdelegate-background-pressed@3x.9.png | Bin 0 -> 127 bytes .../switchdelegate-background-pressed@4x.9.png | Bin 0 -> 132 bytes .../imagine/images/switchdelegate-background.9.png | Bin 0 -> 120 bytes .../images/switchdelegate-background@2x.9.png | Bin 0 -> 123 bytes .../images/switchdelegate-background@3x.9.png | Bin 0 -> 127 bytes .../images/switchdelegate-background@4x.9.png | Bin 0 -> 132 bytes .../images/switchdelegate-handle-disabled.png | Bin 0 -> 226 bytes .../images/switchdelegate-handle-disabled@2x.png | Bin 0 -> 368 bytes .../images/switchdelegate-handle-disabled@3x.png | Bin 0 -> 517 bytes .../images/switchdelegate-handle-disabled@4x.png | Bin 0 -> 699 bytes .../images/switchdelegate-handle-pressed.png | Bin 0 -> 226 bytes .../images/switchdelegate-handle-pressed@2x.png | Bin 0 -> 368 bytes .../images/switchdelegate-handle-pressed@3x.png | Bin 0 -> 517 bytes .../images/switchdelegate-handle-pressed@4x.png | Bin 0 -> 699 bytes .../imagine/images/switchdelegate-handle.png | Bin 0 -> 226 bytes .../imagine/images/switchdelegate-handle@2x.png | Bin 0 -> 368 bytes .../imagine/images/switchdelegate-handle@3x.png | Bin 0 -> 517 bytes .../imagine/images/switchdelegate-handle@4x.png | Bin 0 -> 699 bytes .../switchdelegate-indicator-checked-focused.png | Bin 0 -> 283 bytes ...switchdelegate-indicator-checked-focused@2x.png | Bin 0 -> 423 bytes ...switchdelegate-indicator-checked-focused@3x.png | Bin 0 -> 650 bytes ...switchdelegate-indicator-checked-focused@4x.png | Bin 0 -> 834 bytes .../switchdelegate-indicator-checked-hovered.png | Bin 0 -> 283 bytes ...switchdelegate-indicator-checked-hovered@2x.png | Bin 0 -> 423 bytes ...switchdelegate-indicator-checked-hovered@3x.png | Bin 0 -> 650 bytes ...switchdelegate-indicator-checked-hovered@4x.png | Bin 0 -> 834 bytes .../switchdelegate-indicator-checked-pressed.png | Bin 0 -> 283 bytes ...switchdelegate-indicator-checked-pressed@2x.png | Bin 0 -> 423 bytes ...switchdelegate-indicator-checked-pressed@3x.png | Bin 0 -> 650 bytes ...switchdelegate-indicator-checked-pressed@4x.png | Bin 0 -> 834 bytes .../images/switchdelegate-indicator-checked.png | Bin 0 -> 283 bytes .../images/switchdelegate-indicator-checked@2x.png | Bin 0 -> 423 bytes .../images/switchdelegate-indicator-checked@3x.png | Bin 0 -> 650 bytes .../images/switchdelegate-indicator-checked@4x.png | Bin 0 -> 834 bytes .../images/switchdelegate-indicator-disabled.png | Bin 0 -> 283 bytes .../switchdelegate-indicator-disabled@2x.png | Bin 0 -> 423 bytes .../switchdelegate-indicator-disabled@3x.png | Bin 0 -> 650 bytes .../switchdelegate-indicator-disabled@4x.png | Bin 0 -> 834 bytes .../images/switchdelegate-indicator-focused.png | Bin 0 -> 283 bytes .../images/switchdelegate-indicator-focused@2x.png | Bin 0 -> 423 bytes .../images/switchdelegate-indicator-focused@3x.png | Bin 0 -> 650 bytes .../images/switchdelegate-indicator-focused@4x.png | Bin 0 -> 834 bytes .../images/switchdelegate-indicator-hovered.png | Bin 0 -> 283 bytes .../images/switchdelegate-indicator-hovered@2x.png | Bin 0 -> 423 bytes .../images/switchdelegate-indicator-hovered@3x.png | Bin 0 -> 650 bytes .../images/switchdelegate-indicator-hovered@4x.png | Bin 0 -> 834 bytes .../images/switchdelegate-indicator-pressed.png | Bin 0 -> 283 bytes .../images/switchdelegate-indicator-pressed@2x.png | Bin 0 -> 423 bytes .../images/switchdelegate-indicator-pressed@3x.png | Bin 0 -> 650 bytes .../images/switchdelegate-indicator-pressed@4x.png | Bin 0 -> 834 bytes .../imagine/images/switchdelegate-indicator.png | Bin 0 -> 283 bytes .../imagine/images/switchdelegate-indicator@2x.png | Bin 0 -> 423 bytes .../imagine/images/switchdelegate-indicator@3x.png | Bin 0 -> 650 bytes .../imagine/images/switchdelegate-indicator@4x.png | Bin 0 -> 834 bytes .../imagine/images/tabbar-background.png | Bin 0 -> 74 bytes .../imagine/images/tabbar-background@2x.png | Bin 0 -> 83 bytes .../imagine/images/tabbar-background@3x.png | Bin 0 -> 83 bytes .../imagine/images/tabbar-background@4x.png | Bin 0 -> 83 bytes .../images/tabbutton-background-checked.9.png | Bin 0 -> 127 bytes .../images/tabbutton-background-checked@2x.9.png | Bin 0 -> 137 bytes .../images/tabbutton-background-checked@3x.9.png | Bin 0 -> 153 bytes .../images/tabbutton-background-checked@4x.9.png | Bin 0 -> 169 bytes .../tabbutton-background-disabled-checked.9.png | Bin 0 -> 127 bytes .../tabbutton-background-disabled-checked@2x.9.png | Bin 0 -> 137 bytes .../tabbutton-background-disabled-checked@3x.9.png | Bin 0 -> 153 bytes .../tabbutton-background-disabled-checked@4x.9.png | Bin 0 -> 169 bytes .../images/tabbutton-background-disabled.9.png | Bin 0 -> 127 bytes .../images/tabbutton-background-disabled@2x.9.png | Bin 0 -> 137 bytes .../images/tabbutton-background-disabled@3x.9.png | Bin 0 -> 153 bytes .../images/tabbutton-background-disabled@4x.9.png | Bin 0 -> 169 bytes .../images/tabbutton-background-hovered.9.png | Bin 0 -> 127 bytes .../images/tabbutton-background-hovered@2x.9.png | Bin 0 -> 137 bytes .../images/tabbutton-background-hovered@3x.9.png | Bin 0 -> 153 bytes .../images/tabbutton-background-hovered@4x.9.png | Bin 0 -> 169 bytes .../images/tabbutton-background-pressed.9.png | Bin 0 -> 127 bytes .../images/tabbutton-background-pressed@2x.9.png | Bin 0 -> 137 bytes .../images/tabbutton-background-pressed@3x.9.png | Bin 0 -> 153 bytes .../images/tabbutton-background-pressed@4x.9.png | Bin 0 -> 169 bytes .../imagine/images/tabbutton-background.9.png | Bin 0 -> 127 bytes .../imagine/images/tabbutton-background@2x.9.png | Bin 0 -> 137 bytes .../imagine/images/tabbutton-background@3x.9.png | Bin 0 -> 153 bytes .../imagine/images/tabbutton-background@4x.9.png | Bin 0 -> 169 bytes .../images/textarea-background-disabled.9.png | Bin 0 -> 180 bytes .../images/textarea-background-disabled@2x.9.png | Bin 0 -> 242 bytes .../images/textarea-background-disabled@3x.9.png | Bin 0 -> 312 bytes .../images/textarea-background-disabled@4x.9.png | Bin 0 -> 390 bytes .../images/textarea-background-focused.9.png | Bin 0 -> 196 bytes .../images/textarea-background-focused@2x.9.png | Bin 0 -> 285 bytes .../images/textarea-background-focused@3x.9.png | Bin 0 -> 383 bytes .../images/textarea-background-focused@4x.9.png | Bin 0 -> 503 bytes .../imagine/images/textarea-background.9.png | Bin 0 -> 196 bytes .../imagine/images/textarea-background@2x.9.png | Bin 0 -> 285 bytes .../imagine/images/textarea-background@3x.9.png | Bin 0 -> 383 bytes .../imagine/images/textarea-background@4x.9.png | Bin 0 -> 503 bytes .../images/textfield-background-disabled.9.png | Bin 0 -> 188 bytes .../images/textfield-background-disabled@2x.9.png | Bin 0 -> 273 bytes .../images/textfield-background-disabled@3x.9.png | Bin 0 -> 355 bytes .../images/textfield-background-disabled@4x.9.png | Bin 0 -> 533 bytes .../images/textfield-background-focused.9.png | Bin 0 -> 205 bytes .../images/textfield-background-focused@2x.9.png | Bin 0 -> 314 bytes .../images/textfield-background-focused@3x.9.png | Bin 0 -> 495 bytes .../images/textfield-background-focused@4x.9.png | Bin 0 -> 712 bytes .../imagine/images/textfield-background.9.png | Bin 0 -> 205 bytes .../imagine/images/textfield-background@2x.9.png | Bin 0 -> 314 bytes .../imagine/images/textfield-background@3x.9.png | Bin 0 -> 495 bytes .../imagine/images/textfield-background@4x.9.png | Bin 0 -> 712 bytes .../imagine/images/toolbar-background.png | Bin 0 -> 76 bytes .../imagine/images/toolbar-background@2x.png | Bin 0 -> 83 bytes .../imagine/images/toolbar-background@3x.png | Bin 0 -> 83 bytes .../imagine/images/toolbar-background@4x.png | Bin 0 -> 83 bytes .../toolbutton-background-checked-focused.9.png | Bin 0 -> 122 bytes .../toolbutton-background-checked-focused@2x.9.png | Bin 0 -> 127 bytes .../toolbutton-background-checked-focused@3x.9.png | Bin 0 -> 135 bytes .../toolbutton-background-checked-focused@4x.9.png | Bin 0 -> 149 bytes .../toolbutton-background-checked-hovered.9.png | Bin 0 -> 122 bytes .../toolbutton-background-checked-hovered@2x.9.png | Bin 0 -> 127 bytes .../toolbutton-background-checked-hovered@3x.9.png | Bin 0 -> 135 bytes .../toolbutton-background-checked-hovered@4x.9.png | Bin 0 -> 149 bytes .../images/toolbutton-background-checked.9.png | Bin 0 -> 122 bytes .../images/toolbutton-background-checked@2x.9.png | Bin 0 -> 127 bytes .../images/toolbutton-background-checked@3x.9.png | Bin 0 -> 135 bytes .../images/toolbutton-background-checked@4x.9.png | Bin 0 -> 149 bytes .../toolbutton-background-disabled-checked.9.png | Bin 0 -> 122 bytes ...toolbutton-background-disabled-checked@2x.9.png | Bin 0 -> 127 bytes ...toolbutton-background-disabled-checked@3x.9.png | Bin 0 -> 135 bytes ...toolbutton-background-disabled-checked@4x.9.png | Bin 0 -> 149 bytes .../images/toolbutton-background-focused.9.png | Bin 0 -> 122 bytes .../images/toolbutton-background-focused@2x.9.png | Bin 0 -> 127 bytes .../images/toolbutton-background-focused@3x.9.png | Bin 0 -> 135 bytes .../images/toolbutton-background-focused@4x.9.png | Bin 0 -> 149 bytes .../images/toolbutton-background-hovered.9.png | Bin 0 -> 122 bytes .../images/toolbutton-background-hovered@2x.9.png | Bin 0 -> 127 bytes .../images/toolbutton-background-hovered@3x.9.png | Bin 0 -> 135 bytes .../images/toolbutton-background-hovered@4x.9.png | Bin 0 -> 149 bytes .../images/toolbutton-background-pressed.9.png | Bin 0 -> 122 bytes .../images/toolbutton-background-pressed@2x.9.png | Bin 0 -> 127 bytes .../images/toolbutton-background-pressed@3x.9.png | Bin 0 -> 135 bytes .../images/toolbutton-background-pressed@4x.9.png | Bin 0 -> 149 bytes .../imagine/images/toolbutton-background.9.png | Bin 0 -> 122 bytes .../imagine/images/toolbutton-background@2x.9.png | Bin 0 -> 127 bytes .../imagine/images/toolbutton-background@3x.9.png | Bin 0 -> 135 bytes .../imagine/images/toolbutton-background@4x.9.png | Bin 0 -> 149 bytes .../toolseparator-separator-horizontal.9.png | Bin 0 -> 125 bytes .../toolseparator-separator-horizontal@2x.9.png | Bin 0 -> 135 bytes .../toolseparator-separator-horizontal@3x.9.png | Bin 0 -> 141 bytes .../toolseparator-separator-horizontal@4x.9.png | Bin 0 -> 151 bytes .../images/toolseparator-separator-vertical.9.png | Bin 0 -> 128 bytes .../toolseparator-separator-vertical@2x.9.png | Bin 0 -> 133 bytes .../toolseparator-separator-vertical@3x.9.png | Bin 0 -> 138 bytes .../toolseparator-separator-vertical@4x.9.png | Bin 0 -> 150 bytes .../imagine/images/tooltip-background.9.png | Bin 0 -> 195 bytes .../imagine/images/tooltip-background@2x.9.png | Bin 0 -> 264 bytes .../imagine/images/tooltip-background@3x.9.png | Bin 0 -> 346 bytes .../imagine/images/tooltip-background@4x.9.png | Bin 0 -> 415 bytes src/quickcontrols2/imagine/imagine.pri | 58 + src/quickcontrols2/imagine/impl/CMakeLists.txt | 52 + src/quickcontrols2/imagine/impl/OpacityMask.qml | 68 + .../imagine/impl/qquickimageselector.cpp | 338 ++ .../imagine/impl/qquickimageselector_p.h | 157 + .../imagine/impl/qquickninepatchimage.cpp | 469 ++ .../imagine/impl/qquickninepatchimage_p.h | 108 + .../impl/shaders/+glslcore/OpacityMask.frag | 13 + .../imagine/impl/shaders/+qsb/OpacityMask.frag | Bin 0 -> 1409 bytes .../imagine/impl/shaders/OpacityMask.frag | 7 + .../imagine/impl/shaders/OpacityMask_rhi.frag | 17 + .../imagine/impl/shaders/compile.bat | 40 + src/quickcontrols2/imagine/qquickimaginestyle.cpp | 168 + src/quickcontrols2/imagine/qquickimaginestyle_p.h | 97 + src/quickcontrols2/imagine/qquickimaginetheme.cpp | 66 + src/quickcontrols2/imagine/qquickimaginetheme_p.h | 65 + .../imagine/qtquickcontrols2imaginestyleplugin.cpp | 81 + src/quickcontrols2/macos/Button.qml | 43 + src/quickcontrols2/macos/CMakeLists.txt | 56 + src/quickcontrols2/macos/CheckBox.qml | 43 + src/quickcontrols2/macos/ComboBox.qml | 65 + src/quickcontrols2/macos/Dial.qml | 41 + src/quickcontrols2/macos/Frame.qml | 41 + src/quickcontrols2/macos/GroupBox.qml | 60 + src/quickcontrols2/macos/ProgressBar.qml | 41 + src/quickcontrols2/macos/RadioButton.qml | 43 + src/quickcontrols2/macos/ScrollBar.qml | 64 + src/quickcontrols2/macos/ScrollView.qml | 75 + src/quickcontrols2/macos/Slider.qml | 68 + src/quickcontrols2/macos/SpinBox.qml | 126 + src/quickcontrols2/macos/TextArea.qml | 41 + src/quickcontrols2/macos/TextField.qml | 43 + src/quickcontrols2/macos/macos.pri | 15 + .../macos/qtquickcontrols2macosstyleplugin.cpp | 75 + src/quickcontrols2/material/ApplicationWindow.qml | 46 + src/quickcontrols2/material/BusyIndicator.qml | 61 + src/quickcontrols2/material/Button.qml | 117 + src/quickcontrols2/material/CMakeLists.txt | 267 + src/quickcontrols2/material/CheckBox.qml | 83 + src/quickcontrols2/material/CheckDelegate.qml | 97 + src/quickcontrols2/material/ComboBox.qml | 179 + src/quickcontrols2/material/DelayButton.qml | 116 + src/quickcontrols2/material/Dial.qml | 85 + src/quickcontrols2/material/Dialog.qml | 112 + src/quickcontrols2/material/DialogButtonBox.qml | 78 + src/quickcontrols2/material/Drawer.qml | 91 + src/quickcontrols2/material/Frame.qml | 63 + src/quickcontrols2/material/GroupBox.qml | 81 + .../material/HorizontalHeaderView.qml | 68 + src/quickcontrols2/material/ItemDelegate.qml | 88 + src/quickcontrols2/material/LICENSE_ANGULARJS.txt | 19 + src/quickcontrols2/material/Label.qml | 46 + src/quickcontrols2/material/Menu.qml | 107 + src/quickcontrols2/material/MenuBar.qml | 64 + src/quickcontrols2/material/MenuBarItem.qml | 88 + src/quickcontrols2/material/MenuItem.qml | 111 + src/quickcontrols2/material/MenuSeparator.qml | 56 + src/quickcontrols2/material/Page.qml | 56 + src/quickcontrols2/material/PageIndicator.qml | 71 + src/quickcontrols2/material/Pane.qml | 61 + src/quickcontrols2/material/Popup.qml | 85 + src/quickcontrols2/material/ProgressBar.qml | 67 + src/quickcontrols2/material/RadioButton.qml | 83 + src/quickcontrols2/material/RadioDelegate.qml | 97 + src/quickcontrols2/material/RangeSlider.qml | 92 + src/quickcontrols2/material/RoundButton.qml | 114 + src/quickcontrols2/material/ScrollBar.qml | 89 + src/quickcontrols2/material/ScrollIndicator.qml | 75 + src/quickcontrols2/material/ScrollView.qml | 64 + src/quickcontrols2/material/Slider.qml | 81 + src/quickcontrols2/material/SpinBox.qml | 156 + src/quickcontrols2/material/SplitView.qml | 73 + src/quickcontrols2/material/StackView.qml | 79 + src/quickcontrols2/material/SwipeDelegate.qml | 98 + src/quickcontrols2/material/SwipeView.qml | 66 + src/quickcontrols2/material/Switch.qml | 79 + src/quickcontrols2/material/SwitchDelegate.qml | 97 + src/quickcontrols2/material/TabBar.qml | 89 + src/quickcontrols2/material/TabButton.qml | 78 + src/quickcontrols2/material/TextArea.qml | 83 + src/quickcontrols2/material/TextField.qml | 85 + src/quickcontrols2/material/ToolBar.qml | 66 + src/quickcontrols2/material/ToolButton.qml | 86 + src/quickcontrols2/material/ToolSeparator.qml | 57 + src/quickcontrols2/material/ToolTip.qml | 83 + src/quickcontrols2/material/Tumbler.qml | 75 + src/quickcontrols2/material/VerticalHeaderView.qml | 68 + .../material/images/arrow-indicator.png | Bin 0 -> 126 bytes .../material/images/arrow-indicator.svg | 56 + .../material/images/arrow-indicator@2x.png | Bin 0 -> 152 bytes .../material/images/arrow-indicator@3x.png | Bin 0 -> 174 bytes .../material/images/arrow-indicator@4x.png | Bin 0 -> 172 bytes src/quickcontrols2/material/images/check.png | Bin 0 -> 631 bytes src/quickcontrols2/material/images/check@2x.png | Bin 0 -> 1273 bytes src/quickcontrols2/material/images/check@3x.png | Bin 0 -> 1829 bytes src/quickcontrols2/material/images/check@4x.png | Bin 0 -> 2241 bytes .../material/images/drop-indicator.png | Bin 0 -> 125 bytes .../material/images/drop-indicator.svg | 5 + .../material/images/drop-indicator@2x.png | Bin 0 -> 158 bytes .../material/images/drop-indicator@3x.png | Bin 0 -> 180 bytes .../material/images/drop-indicator@4x.png | Bin 0 -> 202 bytes src/quickcontrols2/material/impl/BoxShadow.qml | 70 + src/quickcontrols2/material/impl/CMakeLists.txt | 46 + .../material/impl/CheckIndicator.qml | 120 + .../material/impl/CursorDelegate.qml | 65 + .../material/impl/ElevationEffect.qml | 279 + .../material/impl/RadioIndicator.qml | 62 + .../material/impl/RectangularGlow.qml | 240 + src/quickcontrols2/material/impl/SliderHandle.qml | 76 + .../material/impl/SwitchIndicator.qml | 81 + .../material/impl/qquickmaterialbusyindicator.cpp | 245 + .../material/impl/qquickmaterialbusyindicator_p.h | 88 + .../material/impl/qquickmaterialprogressbar.cpp | 245 + .../material/impl/qquickmaterialprogressbar_p.h | 91 + .../material/impl/qquickmaterialripple.cpp | 442 ++ .../material/impl/qquickmaterialripple_p.h | 120 + src/quickcontrols2/material/material.pri | 60 + .../material/qquickmaterialstyle.cpp | 1383 +++++ .../material/qquickmaterialstyle_p.h | 334 ++ .../material/qquickmaterialtheme.cpp | 113 + .../material/qquickmaterialtheme_p.h | 65 + src/quickcontrols2/material/qt_attribution.json | 13 + .../qtquickcontrols2materialstyleplugin.cpp | 81 + .../qtquickcontrols2materialstyleplugin.qrc | 20 + .../shaders/+glslcore/RectangularGlow.frag | 25 + .../material/shaders/+hlsl/RectangularGlow.frag | 21 + .../material/shaders/+qsb/RectangularGlow.frag | Bin 0 -> 2007 bytes .../material/shaders/RectangularGlow.frag | 19 + .../material/shaders/RectangularGlow_rhi.frag | 28 + src/quickcontrols2/material/shaders/compile.bat | 40 + src/quickcontrols2/qtquickcontrols2plugin.cpp | 167 + src/quickcontrols2/universal/ApplicationWindow.qml | 54 + src/quickcontrols2/universal/BusyIndicator.qml | 60 + src/quickcontrols2/universal/Button.qml | 89 + src/quickcontrols2/universal/CMakeLists.txt | 263 + src/quickcontrols2/universal/CheckBox.qml | 74 + src/quickcontrols2/universal/CheckDelegate.qml | 96 + src/quickcontrols2/universal/ComboBox.qml | 158 + src/quickcontrols2/universal/DelayButton.qml | 94 + src/quickcontrols2/universal/Dial.qml | 86 + src/quickcontrols2/universal/Dialog.qml | 90 + src/quickcontrols2/universal/DialogButtonBox.qml | 75 + src/quickcontrols2/universal/Drawer.qml | 78 + src/quickcontrols2/universal/Frame.qml | 55 + src/quickcontrols2/universal/GroupBox.qml | 75 + .../universal/HorizontalHeaderView.qml | 69 + src/quickcontrols2/universal/ItemDelegate.qml | 86 + src/quickcontrols2/universal/Label.qml | 47 + src/quickcontrols2/universal/Menu.qml | 82 + src/quickcontrols2/universal/MenuBar.qml | 63 + src/quickcontrols2/universal/MenuBarItem.qml | 90 + src/quickcontrols2/universal/MenuItem.qml | 114 + src/quickcontrols2/universal/MenuSeparator.qml | 62 + src/quickcontrols2/universal/Page.qml | 56 + src/quickcontrols2/universal/PageIndicator.qml | 69 + src/quickcontrols2/universal/Pane.qml | 54 + src/quickcontrols2/universal/Popup.qml | 64 + src/quickcontrols2/universal/ProgressBar.qml | 68 + src/quickcontrols2/universal/README.md | 9 + src/quickcontrols2/universal/RadioButton.qml | 74 + src/quickcontrols2/universal/RadioDelegate.qml | 96 + src/quickcontrols2/universal/RangeSlider.qml | 109 + src/quickcontrols2/universal/RoundButton.qml | 90 + src/quickcontrols2/universal/ScrollBar.qml | 93 + src/quickcontrols2/universal/ScrollIndicator.qml | 78 + src/quickcontrols2/universal/ScrollView.qml | 64 + src/quickcontrols2/universal/Slider.qml | 96 + src/quickcontrols2/universal/SpinBox.qml | 147 + src/quickcontrols2/universal/SplitView.qml | 55 + src/quickcontrols2/universal/StackView.qml | 76 + src/quickcontrols2/universal/SwipeDelegate.qml | 92 + src/quickcontrols2/universal/Switch.qml | 74 + src/quickcontrols2/universal/SwitchDelegate.qml | 96 + src/quickcontrols2/universal/TabBar.qml | 70 + src/quickcontrols2/universal/TabButton.qml | 69 + src/quickcontrols2/universal/TextArea.qml | 93 + src/quickcontrols2/universal/TextField.qml | 93 + src/quickcontrols2/universal/ToolBar.qml | 53 + src/quickcontrols2/universal/ToolButton.qml | 83 + src/quickcontrols2/universal/ToolSeparator.qml | 59 + src/quickcontrols2/universal/ToolTip.qml | 72 + src/quickcontrols2/universal/Tumbler.qml | 75 + .../universal/VerticalHeaderView.qml | 69 + src/quickcontrols2/universal/images/checkmark.png | Bin 0 -> 222 bytes .../universal/images/checkmark@2x.png | Bin 0 -> 346 bytes .../universal/images/checkmark@3x.png | Bin 0 -> 796 bytes .../universal/images/checkmark@4x.png | Bin 0 -> 613 bytes src/quickcontrols2/universal/images/downarrow.png | Bin 0 -> 175 bytes .../universal/images/downarrow@2x.png | Bin 0 -> 267 bytes .../universal/images/downarrow@3x.png | Bin 0 -> 329 bytes .../universal/images/downarrow@4x.png | Bin 0 -> 365 bytes src/quickcontrols2/universal/images/leftarrow.png | Bin 0 -> 158 bytes .../universal/images/leftarrow@2x.png | Bin 0 -> 222 bytes .../universal/images/leftarrow@3x.png | Bin 0 -> 283 bytes .../universal/images/leftarrow@4x.png | Bin 0 -> 315 bytes src/quickcontrols2/universal/images/rightarrow.png | Bin 0 -> 152 bytes .../universal/images/rightarrow@2x.png | Bin 0 -> 226 bytes .../universal/images/rightarrow@3x.png | Bin 0 -> 258 bytes .../universal/images/rightarrow@4x.png | Bin 0 -> 338 bytes src/quickcontrols2/universal/impl/CMakeLists.txt | 41 + .../universal/impl/CheckIndicator.qml | 81 + .../universal/impl/RadioIndicator.qml | 80 + .../universal/impl/SwitchIndicator.qml | 81 + .../impl/qquickuniversalbusyindicator.cpp | 251 + .../impl/qquickuniversalbusyindicator_p.h | 89 + .../impl/qquickuniversalfocusrectangle.cpp | 84 + .../impl/qquickuniversalfocusrectangle_p.h | 69 + .../universal/impl/qquickuniversalprogressbar.cpp | 338 ++ .../universal/impl/qquickuniversalprogressbar_p.h | 91 + .../universal/qquickuniversalstyle.cpp | 618 ++ .../universal/qquickuniversalstyle_p.h | 246 + .../universal/qquickuniversaltheme.cpp | 70 + .../universal/qquickuniversaltheme_p.h | 65 + .../qtquickcontrols2universalstyleplugin.cpp | 80 + .../qtquickcontrols2universalstyleplugin.qrc | 20 + src/quickcontrols2/universal/universal.pri | 59 + src/quickcontrols2/windows/Button.qml | 95 + src/quickcontrols2/windows/CMakeLists.txt | 55 + src/quickcontrols2/windows/CheckBox.qml | 107 + src/quickcontrols2/windows/ComboBox.qml | 130 + src/quickcontrols2/windows/Frame.qml | 41 + src/quickcontrols2/windows/GroupBox.qml | 41 + src/quickcontrols2/windows/ProgressBar.qml | 41 + src/quickcontrols2/windows/RadioButton.qml | 41 + src/quickcontrols2/windows/ScrollBar.qml | 128 + src/quickcontrols2/windows/ScrollView.qml | 67 + src/quickcontrols2/windows/Slider.qml | 41 + src/quickcontrols2/windows/SpinBox.qml | 124 + src/quickcontrols2/windows/TextArea.qml | 41 + src/quickcontrols2/windows/TextField.qml | 41 + .../windows/qtquickcontrols2windowsstyleplugin.cpp | 74 + src/quickcontrols2/windows/windows.pri | 14 + src/quickcontrols2impl/CMakeLists.txt | 30 +- src/quickdialogs2/quickdialogs2/CMakeLists.txt | 19 +- .../doc/images/qtquickdialogs-filedialog-gtk.png | Bin 0 -> 39560 bytes .../doc/images/qtquickdialogs-fontdialog-gtk.png | Bin 0 -> 32399 bytes .../quickdialogs2/doc/qtquickdialogs.qdocconf | 40 + .../doc/src/includes/fallback.qdocinc | 1 + .../quickdialogs2quickimpl/CMakeLists.txt | 68 +- src/quicknativestyle/CMakeLists.txt | 110 + src/quicknativestyle/controls/DefaultButton.qml | 83 + src/quicknativestyle/controls/DefaultCheckBox.qml | 93 + src/quicknativestyle/controls/DefaultComboBox.qml | 129 + src/quicknativestyle/controls/DefaultDial.qml | 60 + src/quicknativestyle/controls/DefaultFrame.qml | 62 + src/quicknativestyle/controls/DefaultGroupBox.qml | 91 + .../controls/DefaultProgressBar.qml | 60 + .../controls/DefaultRadioButton.qml | 96 + src/quicknativestyle/controls/DefaultScrollBar.qml | 67 + src/quicknativestyle/controls/DefaultSlider.qml | 74 + src/quicknativestyle/controls/DefaultSpinBox.qml | 109 + src/quicknativestyle/controls/DefaultTextArea.qml | 83 + src/quicknativestyle/controls/DefaultTextField.qml | 89 + src/quicknativestyle/controls/controls.pri | 14 + src/quicknativestyle/items/items.pri | 36 + src/quicknativestyle/items/qquickstyleitem.cpp | 561 ++ src/quicknativestyle/items/qquickstyleitem.h | 311 + .../items/qquickstyleitembutton.cpp | 88 + src/quicknativestyle/items/qquickstyleitembutton.h | 60 + .../items/qquickstyleitemcheckbox.cpp | 89 + .../items/qquickstyleitemcheckbox.h | 60 + .../items/qquickstyleitemcombobox.cpp | 89 + .../items/qquickstyleitemcombobox.h | 60 + src/quicknativestyle/items/qquickstyleitemdial.cpp | 111 + src/quicknativestyle/items/qquickstyleitemdial.h | 60 + .../items/qquickstyleitemframe.cpp | 67 + src/quicknativestyle/items/qquickstyleitemframe.h | 56 + .../items/qquickstyleitemgroupbox.cpp | 100 + .../items/qquickstyleitemgroupbox.h | 70 + .../items/qquickstyleitemprogressbar.cpp | 114 + .../items/qquickstyleitemprogressbar.h | 61 + .../items/qquickstyleitemradiobutton.cpp | 83 + .../items/qquickstyleitemradiobutton.h | 60 + .../items/qquickstyleitemscrollbar.cpp | 151 + .../items/qquickstyleitemscrollbar.h | 74 + .../items/qquickstyleitemscrollviewcorner.cpp | 119 + .../items/qquickstyleitemscrollviewcorner.h | 56 + .../items/qquickstyleitemslider.cpp | 123 + src/quicknativestyle/items/qquickstyleitemslider.h | 72 + .../items/qquickstyleitemspinbox.cpp | 110 + .../items/qquickstyleitemspinbox.h | 73 + .../items/qquickstyleitemtextfield.cpp | 86 + .../items/qquickstyleitemtextfield.h | 60 + src/quicknativestyle/qstyle/mac/mac.pri | 12 + .../qstyle/mac/qquickmacstyle_mac.mm | 6072 +++++++++++++++++++ .../qstyle/mac/qquickmacstyle_mac_p.h | 104 + .../qstyle/mac/qquickmacstyle_mac_p_p.h | 230 + src/quicknativestyle/qstyle/qquickcommonstyle.cpp | 6082 ++++++++++++++++++++ src/quicknativestyle/qstyle/qquickcommonstyle.h | 89 + src/quicknativestyle/qstyle/qquickcommonstyle_p.h | 109 + .../qstyle/qquickcommonstylepixmaps_p.h | 532 ++ src/quicknativestyle/qstyle/qquickdrawutil.cpp | 1145 ++++ src/quicknativestyle/qstyle/qquickdrawutil.h | 170 + src/quicknativestyle/qstyle/qquicknativestyle.cpp | 47 + src/quicknativestyle/qstyle/qquicknativestyle.h | 69 + src/quicknativestyle/qstyle/qquickstyle.cpp | 412 ++ src/quicknativestyle/qstyle/qquickstyle.h | 839 +++ src/quicknativestyle/qstyle/qquickstyle_p.h | 121 + src/quicknativestyle/qstyle/qquickstylehelper.cpp | 438 ++ src/quicknativestyle/qstyle/qquickstylehelper_p.h | 99 + src/quicknativestyle/qstyle/qquickstyleoption.cpp | 652 +++ src/quicknativestyle/qstyle/qquickstyleoption.h | 795 +++ src/quicknativestyle/qstyle/qstyle.pri | 23 + .../qstyle/windows/qquickwindowsstyle.cpp | 2388 ++++++++ .../qstyle/windows/qquickwindowsstyle_p.h | 111 + .../qstyle/windows/qquickwindowsstyle_p_p.h | 122 + .../qstyle/windows/qquickwindowsvistastyle.cpp | 2509 ++++++++ .../qstyle/windows/qquickwindowsvistastyle_p.h | 109 + .../qstyle/windows/qquickwindowsvistastyle_p_p.h | 204 + .../qstyle/windows/qquickwindowsxpstyle.cpp | 4149 +++++++++++++ .../qstyle/windows/qquickwindowsxpstyle_p.h | 102 + .../qstyle/windows/qquickwindowsxpstyle_p_p.h | 348 ++ src/quicknativestyle/qstyle/windows/windows.pri | 18 + .../qtquickcontrols2nativestyleplugin.cpp | 164 + src/quicknativestyle/util/FocusFrame.qml | 118 + src/quicknativestyle/util/qquickmacfocusframe.h | 73 + src/quicknativestyle/util/qquickmacfocusframe.mm | 181 + src/quicknativestyle/util/util.pri | 11 + src/quicktemplates2/CMakeLists.txt | 35 +- .../doc/src/qtquicktemplates2-index.qdoc | 58 + .../doc/src/qtquicktemplates2-qmltypes.qdoc | 64 + src/quicktemplates2/qtquicktemplates2plugin.cpp | 106 + tests/auto/accessibility/CMakeLists.txt | 2 +- tests/auto/cursor/CMakeLists.txt | 2 +- tests/auto/customization/CMakeLists.txt | 2 +- .../dialogs/qquickfiledialogimpl/CMakeLists.txt | 2 +- tests/auto/focus/CMakeLists.txt | 2 +- tests/auto/font/CMakeLists.txt | 2 +- tests/auto/palette/CMakeLists.txt | 2 +- tests/auto/qquickapplicationwindow/CMakeLists.txt | 2 +- tests/auto/qquickcontrol/CMakeLists.txt | 2 +- tests/auto/qquickdrawer/CMakeLists.txt | 2 +- tests/auto/qquickheaderview/CMakeLists.txt | 2 +- tests/auto/qquickiconimage/CMakeLists.txt | 2 +- tests/auto/qquickiconlabel/CMakeLists.txt | 2 +- tests/auto/qquickmaterialstyleconf/CMakeLists.txt | 2 +- tests/auto/qquickmenu/CMakeLists.txt | 2 +- tests/auto/qquickmenubar/CMakeLists.txt | 2 +- tests/auto/qquickninepatchimage/CMakeLists.txt | 2 +- tests/auto/qquickpopup/CMakeLists.txt | 2 +- tests/auto/qquickstyle/CMakeLists.txt | 2 +- tests/auto/qquickuniversalstyleconf/CMakeLists.txt | 2 +- tests/auto/sanity/CMakeLists.txt | 2 +- tests/auto/sanity/tst_sanity.cpp | 8 +- tests/auto/shared/util.pri | 2 +- tests/auto/shared/visualtestutil.h | 1 + tests/auto/snippets/CMakeLists.txt | 2 +- tests/auto/styleimports/CMakeLists.txt | 2 +- .../styleimportscompiletimematerial/CMakeLists.txt | 2 +- .../styleimportscompiletimeqmlonly/CMakeLists.txt | 2 +- tests/auto/translation/CMakeLists.txt | 2 +- tests/benchmarks/creationtime/CMakeLists.txt | 2 +- tests/benchmarks/creationtime/tst_creationtime.cpp | 10 +- tests/benchmarks/objectcount/CMakeLists.txt | 2 +- tests/benchmarks/objectcount/tst_objectcount.cpp | 10 +- 4846 files changed, 100193 insertions(+), 101148 deletions(-) delete mode 100644 src/imports/CMakeLists.txt delete mode 100644 src/imports/controls/CMakeLists.txt delete mode 100644 src/imports/controls/basic/AbstractButton.qml delete mode 100644 src/imports/controls/basic/Action.qml delete mode 100644 src/imports/controls/basic/ActionGroup.qml delete mode 100644 src/imports/controls/basic/ApplicationWindow.qml delete mode 100644 src/imports/controls/basic/BusyIndicator.qml delete mode 100644 src/imports/controls/basic/Button.qml delete mode 100644 src/imports/controls/basic/ButtonGroup.qml delete mode 100644 src/imports/controls/basic/CMakeLists.txt delete mode 100644 src/imports/controls/basic/CheckBox.qml delete mode 100644 src/imports/controls/basic/CheckDelegate.qml delete mode 100644 src/imports/controls/basic/ComboBox.qml delete mode 100644 src/imports/controls/basic/Container.qml delete mode 100644 src/imports/controls/basic/Control.qml delete mode 100644 src/imports/controls/basic/DelayButton.qml delete mode 100644 src/imports/controls/basic/Dial.qml delete mode 100644 src/imports/controls/basic/Dialog.qml delete mode 100644 src/imports/controls/basic/DialogButtonBox.qml delete mode 100644 src/imports/controls/basic/Drawer.qml delete mode 100644 src/imports/controls/basic/Frame.qml delete mode 100644 src/imports/controls/basic/GroupBox.qml delete mode 100644 src/imports/controls/basic/HorizontalHeaderView.qml delete mode 100644 src/imports/controls/basic/ItemDelegate.qml delete mode 100644 src/imports/controls/basic/Label.qml delete mode 100644 src/imports/controls/basic/Menu.qml delete mode 100644 src/imports/controls/basic/MenuBar.qml delete mode 100644 src/imports/controls/basic/MenuBarItem.qml delete mode 100644 src/imports/controls/basic/MenuItem.qml delete mode 100644 src/imports/controls/basic/MenuSeparator.qml delete mode 100644 src/imports/controls/basic/Page.qml delete mode 100644 src/imports/controls/basic/PageIndicator.qml delete mode 100644 src/imports/controls/basic/Pane.qml delete mode 100644 src/imports/controls/basic/Popup.qml delete mode 100644 src/imports/controls/basic/ProgressBar.qml delete mode 100644 src/imports/controls/basic/RadioButton.qml delete mode 100644 src/imports/controls/basic/RadioDelegate.qml delete mode 100644 src/imports/controls/basic/RangeSlider.qml delete mode 100644 src/imports/controls/basic/RoundButton.qml delete mode 100644 src/imports/controls/basic/ScrollBar.qml delete mode 100644 src/imports/controls/basic/ScrollIndicator.qml delete mode 100644 src/imports/controls/basic/ScrollView.qml delete mode 100644 src/imports/controls/basic/Slider.qml delete mode 100644 src/imports/controls/basic/SpinBox.qml delete mode 100644 src/imports/controls/basic/SplitView.qml delete mode 100644 src/imports/controls/basic/StackView.qml delete mode 100644 src/imports/controls/basic/SwipeDelegate.qml delete mode 100644 src/imports/controls/basic/SwipeView.qml delete mode 100644 src/imports/controls/basic/Switch.qml delete mode 100644 src/imports/controls/basic/SwitchDelegate.qml delete mode 100644 src/imports/controls/basic/TabBar.qml delete mode 100644 src/imports/controls/basic/TabButton.qml delete mode 100644 src/imports/controls/basic/TextArea.qml delete mode 100644 src/imports/controls/basic/TextField.qml delete mode 100644 src/imports/controls/basic/ToolBar.qml delete mode 100644 src/imports/controls/basic/ToolButton.qml delete mode 100644 src/imports/controls/basic/ToolSeparator.qml delete mode 100644 src/imports/controls/basic/ToolTip.qml delete mode 100644 src/imports/controls/basic/Tumbler.qml delete mode 100644 src/imports/controls/basic/VerticalHeaderView.qml delete mode 100644 src/imports/controls/basic/basic.pri delete mode 100644 src/imports/controls/basic/images/arrow-indicator.png delete mode 100644 src/imports/controls/basic/images/arrow-indicator@2x.png delete mode 100644 src/imports/controls/basic/images/arrow-indicator@3x.png delete mode 100644 src/imports/controls/basic/images/arrow-indicator@4x.png delete mode 100644 src/imports/controls/basic/images/check.png delete mode 100644 src/imports/controls/basic/images/check@2x.png delete mode 100644 src/imports/controls/basic/images/check@3x.png delete mode 100644 src/imports/controls/basic/images/check@4x.png delete mode 100644 src/imports/controls/basic/images/dial-indicator.png delete mode 100644 src/imports/controls/basic/images/dial-indicator@2x.png delete mode 100644 src/imports/controls/basic/images/dial-indicator@3x.png delete mode 100644 src/imports/controls/basic/images/dial-indicator@4x.png delete mode 100644 src/imports/controls/basic/images/double-arrow.png delete mode 100644 src/imports/controls/basic/images/double-arrow@2x.png delete mode 100644 src/imports/controls/basic/images/double-arrow@3x.png delete mode 100644 src/imports/controls/basic/images/double-arrow@4x.png delete mode 100644 src/imports/controls/basic/images/drop-indicator.png delete mode 100644 src/imports/controls/basic/images/drop-indicator@2x.png delete mode 100644 src/imports/controls/basic/images/drop-indicator@3x.png delete mode 100644 src/imports/controls/basic/images/drop-indicator@4x.png delete mode 100644 src/imports/controls/basic/impl/CMakeLists.txt delete mode 100644 src/imports/controls/basic/impl/qquickbasicbusyindicator.cpp delete mode 100644 src/imports/controls/basic/impl/qquickbasicbusyindicator_p.h delete mode 100644 src/imports/controls/basic/impl/qquickbasicdial.cpp delete mode 100644 src/imports/controls/basic/impl/qquickbasicdial_p.h delete mode 100644 src/imports/controls/basic/impl/qquickbasicprogressbar.cpp delete mode 100644 src/imports/controls/basic/impl/qquickbasicprogressbar_p.h delete mode 100644 src/imports/controls/basic/impl/qtquickcontrols2basicstyleimplplugin.cpp delete mode 100644 src/imports/controls/basic/qquickbasicstyle.cpp delete mode 100644 src/imports/controls/basic/qquickbasicstyle_p.h delete mode 100644 src/imports/controls/basic/qquickbasictheme.cpp delete mode 100644 src/imports/controls/basic/qquickbasictheme_p.h delete mode 100644 src/imports/controls/basic/qtquickcontrols2basicstyleplugin.cpp delete mode 100644 src/imports/controls/basic/qtquickcontrols2basicstyleplugin.qrc delete mode 100644 src/imports/controls/designer/AbstractButtonSection.qml delete mode 100644 src/imports/controls/designer/BusyIndicatorSpecifics.qml delete mode 100644 src/imports/controls/designer/ButtonSection.qml delete mode 100644 src/imports/controls/designer/ButtonSpecifics.qml delete mode 100644 src/imports/controls/designer/CheckBoxSpecifics.qml delete mode 100644 src/imports/controls/designer/CheckDelegateSpecifics.qml delete mode 100644 src/imports/controls/designer/CheckSection.qml delete mode 100644 src/imports/controls/designer/ComboBoxSpecifics.qml delete mode 100644 src/imports/controls/designer/ContainerSection.qml delete mode 100644 src/imports/controls/designer/ControlSection.qml delete mode 100644 src/imports/controls/designer/ControlSpecifics.qml delete mode 100644 src/imports/controls/designer/DelayButtonSpecifics.qml delete mode 100644 src/imports/controls/designer/DialSpecifics.qml delete mode 100644 src/imports/controls/designer/FrameSpecifics.qml delete mode 100644 src/imports/controls/designer/GroupBoxSpecifics.qml delete mode 100644 src/imports/controls/designer/InsetSection.qml delete mode 100644 src/imports/controls/designer/ItemDelegateSection.qml delete mode 100644 src/imports/controls/designer/ItemDelegateSpecifics.qml delete mode 100644 src/imports/controls/designer/LabelSpecifics.qml delete mode 100644 src/imports/controls/designer/PaddingSection.qml delete mode 100644 src/imports/controls/designer/PageIndicatorSpecifics.qml delete mode 100644 src/imports/controls/designer/PageSpecifics.qml delete mode 100644 src/imports/controls/designer/PaneSection.qml delete mode 100644 src/imports/controls/designer/PaneSpecifics.qml delete mode 100644 src/imports/controls/designer/ProgressBarSpecifics.qml delete mode 100644 src/imports/controls/designer/RadioButtonSpecifics.qml delete mode 100644 src/imports/controls/designer/RadioDelegateSpecifics.qml delete mode 100644 src/imports/controls/designer/RangeSliderSpecifics.qml delete mode 100644 src/imports/controls/designer/RoundButtonSpecifics.qml delete mode 100644 src/imports/controls/designer/ScrollViewSpecifics.qml delete mode 100644 src/imports/controls/designer/SliderSpecifics.qml delete mode 100644 src/imports/controls/designer/SpinBoxSpecifics.qml delete mode 100644 src/imports/controls/designer/StackViewSpecifics.qml delete mode 100644 src/imports/controls/designer/SwipeDelegateSpecifics.qml delete mode 100644 src/imports/controls/designer/SwipeViewSpecifics.qml delete mode 100644 src/imports/controls/designer/SwitchDelegateSpecifics.qml delete mode 100644 src/imports/controls/designer/SwitchSpecifics.qml delete mode 100644 src/imports/controls/designer/TabBarSpecifics.qml delete mode 100644 src/imports/controls/designer/TabButtonSpecifics.qml delete mode 100644 src/imports/controls/designer/TextAreaSpecifics.qml delete mode 100644 src/imports/controls/designer/TextFieldSpecifics.qml delete mode 100644 src/imports/controls/designer/ToolBarSpecifics.qml delete mode 100644 src/imports/controls/designer/ToolButtonSpecifics.qml delete mode 100644 src/imports/controls/designer/ToolSeparatorSpecifics.qml delete mode 100644 src/imports/controls/designer/TumblerSpecifics.qml delete mode 100644 src/imports/controls/designer/designer.pri delete mode 100644 src/imports/controls/designer/images/busyindicator-icon.png delete mode 100644 src/imports/controls/designer/images/busyindicator-icon16.png delete mode 100644 src/imports/controls/designer/images/busyindicator-icon@2x.png delete mode 100644 src/imports/controls/designer/images/button-icon.png delete mode 100644 src/imports/controls/designer/images/button-icon16.png delete mode 100644 src/imports/controls/designer/images/button-icon@2x.png delete mode 100644 src/imports/controls/designer/images/checkbox-icon.png delete mode 100644 src/imports/controls/designer/images/checkbox-icon16.png delete mode 100644 src/imports/controls/designer/images/checkbox-icon@2x.png delete mode 100644 src/imports/controls/designer/images/combobox-icon.png delete mode 100644 src/imports/controls/designer/images/combobox-icon16.png delete mode 100644 src/imports/controls/designer/images/combobox-icon@2x.png delete mode 100644 src/imports/controls/designer/images/delaybutton-icon.png delete mode 100644 src/imports/controls/designer/images/delaybutton-icon16.png delete mode 100644 src/imports/controls/designer/images/delaybutton-icon@2x.png delete mode 100644 src/imports/controls/designer/images/dial-icon.png delete mode 100644 src/imports/controls/designer/images/dial-icon16.png delete mode 100644 src/imports/controls/designer/images/dial-icon@2x.png delete mode 100644 src/imports/controls/designer/images/frame-icon.png delete mode 100644 src/imports/controls/designer/images/frame-icon16.png delete mode 100644 src/imports/controls/designer/images/frame-icon@2x.png delete mode 100644 src/imports/controls/designer/images/groupbox-icon.png delete mode 100644 src/imports/controls/designer/images/groupbox-icon16.png delete mode 100644 src/imports/controls/designer/images/groupbox-icon@2x.png delete mode 100644 src/imports/controls/designer/images/itemdelegate-icon.png delete mode 100644 src/imports/controls/designer/images/itemdelegate-icon16.png delete mode 100644 src/imports/controls/designer/images/itemdelegate-icon@2x.png delete mode 100644 src/imports/controls/designer/images/label-icon.png delete mode 100644 src/imports/controls/designer/images/label-icon16.png delete mode 100644 src/imports/controls/designer/images/label-icon@2x.png delete mode 100644 src/imports/controls/designer/images/page-icon.png delete mode 100644 src/imports/controls/designer/images/page-icon16.png delete mode 100644 src/imports/controls/designer/images/page-icon@2x.png delete mode 100644 src/imports/controls/designer/images/pageindicator-icon.png delete mode 100644 src/imports/controls/designer/images/pageindicator-icon16.png delete mode 100644 src/imports/controls/designer/images/pageindicator-icon@2x.png delete mode 100644 src/imports/controls/designer/images/pane-icon.png delete mode 100644 src/imports/controls/designer/images/pane-icon16.png delete mode 100644 src/imports/controls/designer/images/pane-icon@2x.png delete mode 100644 src/imports/controls/designer/images/progressbar-icon.png delete mode 100644 src/imports/controls/designer/images/progressbar-icon16.png delete mode 100644 src/imports/controls/designer/images/progressbar-icon@2x.png delete mode 100644 src/imports/controls/designer/images/radiobutton-icon.png delete mode 100644 src/imports/controls/designer/images/radiobutton-icon16.png delete mode 100644 src/imports/controls/designer/images/radiobutton-icon@2x.png delete mode 100644 src/imports/controls/designer/images/rangeslider-icon.png delete mode 100644 src/imports/controls/designer/images/rangeslider-icon16.png delete mode 100644 src/imports/controls/designer/images/rangeslider-icon@2x.png delete mode 100644 src/imports/controls/designer/images/roundbutton-icon.png delete mode 100644 src/imports/controls/designer/images/roundbutton-icon16.png delete mode 100644 src/imports/controls/designer/images/roundbutton-icon@2x.png delete mode 100644 src/imports/controls/designer/images/scrollview-icon.png delete mode 100644 src/imports/controls/designer/images/scrollview-icon16.png delete mode 100644 src/imports/controls/designer/images/scrollview-icon@2x.png delete mode 100644 src/imports/controls/designer/images/slider-icon.png delete mode 100644 src/imports/controls/designer/images/slider-icon16.png delete mode 100644 src/imports/controls/designer/images/slider-icon@2x.png delete mode 100644 src/imports/controls/designer/images/spinbox-icon.png delete mode 100644 src/imports/controls/designer/images/spinbox-icon16.png delete mode 100644 src/imports/controls/designer/images/spinbox-icon@2x.png delete mode 100644 src/imports/controls/designer/images/stackview-icon.png delete mode 100644 src/imports/controls/designer/images/stackview-icon16.png delete mode 100644 src/imports/controls/designer/images/stackview-icon@2x.png delete mode 100644 src/imports/controls/designer/images/swipeview-icon.png delete mode 100644 src/imports/controls/designer/images/swipeview-icon16.png delete mode 100644 src/imports/controls/designer/images/swipeview-icon@2x.png delete mode 100644 src/imports/controls/designer/images/switch-icon.png delete mode 100644 src/imports/controls/designer/images/switch-icon16.png delete mode 100644 src/imports/controls/designer/images/switch-icon@2x.png delete mode 100644 src/imports/controls/designer/images/textarea-icon.png delete mode 100644 src/imports/controls/designer/images/textarea-icon16.png delete mode 100644 src/imports/controls/designer/images/textarea-icon@2x.png delete mode 100644 src/imports/controls/designer/images/textfield-icon.png delete mode 100644 src/imports/controls/designer/images/textfield-icon16.png delete mode 100644 src/imports/controls/designer/images/textfield-icon@2x.png delete mode 100644 src/imports/controls/designer/images/toolbar-icon.png delete mode 100644 src/imports/controls/designer/images/toolbar-icon16.png delete mode 100644 src/imports/controls/designer/images/toolbar-icon@2x.png delete mode 100644 src/imports/controls/designer/images/toolbutton-icon.png delete mode 100644 src/imports/controls/designer/images/toolbutton-icon16.png delete mode 100644 src/imports/controls/designer/images/toolbutton-icon@2x.png delete mode 100644 src/imports/controls/designer/images/toolseparator-icon.png delete mode 100644 src/imports/controls/designer/images/toolseparator-icon16.png delete mode 100644 src/imports/controls/designer/images/toolseparator-icon@2x.png delete mode 100644 src/imports/controls/designer/images/tumbler-icon.png delete mode 100644 src/imports/controls/designer/images/tumbler-icon16.png delete mode 100644 src/imports/controls/designer/images/tumbler-icon@2x.png delete mode 100644 src/imports/controls/designer/qtquickcontrols2.metainfo delete mode 100644 src/imports/controls/doc/doc.pri delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-applicationwindow-wireframe.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-basic-thumbnail.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-basic.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-busyindicator-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-busyindicator.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-busyindicator.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-button-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-button-flat.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-button-highlighted.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-button-icononly.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-button-textbesideicon.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-button-textonly.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-button-textundericon.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-button.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-checkbox-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-checkbox-group.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-checkbox-tristate.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-checkbox.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-checkdelegate-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-checkdelegate-tristate.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-checkdelegate.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-combobox-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-combobox-delegate.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-combobox-popup.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-combobox.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-control.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-control.svg delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-customize-buttons.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-delaybutton-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-delaybutton.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-dial-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-dial-handle.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-dial-inputMode.svgz delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-dial-inputmode.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-dial-no-wrap.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-dial-wrap.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-dial.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-dialogbuttonbox-attached.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-dialogbuttonbox.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-drawer-expanded-wireframe.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-drawer-wireframe.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-drawer.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-frame-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-frame.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-fusion-palettes.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-fusion-thumbnail.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-fusion-violet.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-fusion.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-groupbox-checkable.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-groupbox-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-groupbox-label.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-groupbox.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-4x.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-inset-boundaries.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-inset.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-resized-padding.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-resized-stretchable.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-size.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch.svgz delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-imagine-customization-dark.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-imagine-customization.svgz delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-imagine-thumbnail.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-imagine.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-itemdelegate-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-itemdelegate.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-itemdelegate.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-label-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-label.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-macos-dark.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-macos-light.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-macos-thumbnail.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-material-accent.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-material-attributes.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-material-background.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-material-dark.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-material-elevation.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-material-foreground.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-material-light.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-material-purple.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-material-theme.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-material-thumbnail.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-material-variant-dense.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-material-variant-normal.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-menu-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-menu.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-menu.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-menubar-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-menubar.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-menuseparator-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-menuseparator.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-page-wireframe.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-pageindicator-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-pageindicator-delegate.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-pageindicator.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-pane-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-pane.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-popup-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-popup-settings.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-popup-transformorigin.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-popup.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-popup.svg delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-progressbar-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-progressbar-indeterminate.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-progressbar.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-radiobutton-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-radiobutton.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-radiodelegate-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-radiodelegate.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-rangeslider-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-rangeslider.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-roundbutton.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-scrollbar-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-scrollbar-non-attached.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-scrollbar-nosnap.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-scrollbar-snapalways.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-scrollbar-snaponrelease.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-scrollbar.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-scrollindicator-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-scrollindicator-non-attached.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-scrollindicator.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-scrollview-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-scrollview-wireframe.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-scrollview.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-slider-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-slider-handle.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-slider-nosnap.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-slider-snapalways.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-slider-snaponrelease.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-slider.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-spinbox-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-spinbox-double.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-spinbox-down.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-spinbox-textual.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-spinbox-up.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-spinbox.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-splitview-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-stackview-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-stackview-pop.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-stackview-push.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-stackview-replace.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-stackview-unwind.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-stackview-visible.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-stackview-wireframe.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-styles.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-swipedelegate-behind.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-swipedelegate-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-swipedelegate-leading-trailing.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-swipedelegate.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-swipeview-indicator.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-swipeview-wireframe.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-swipeview.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-switch-checked.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-switch-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-switch.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-switch.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-switchdelegate-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-switchdelegate.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-tabbar-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-tabbar-explicit.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-tabbar-flickable.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-tabbar-wireframe.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-tabbar.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-tabbar.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-tabbutton.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-textarea-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-textarea-scrollable.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-textarea.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-textfield-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-textfield-disabled.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-textfield-focused.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-textfield-normal.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-textfield.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-toolbar-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-toolbar.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-toolbutton-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-toolbutton.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-toolseparator-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-toolseparator.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-tooltip-delay.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-tooltip-hover.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-tooltip-pressandhold.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-tooltip-slider.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-tooltip.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-tumbler-custom.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-tumbler-delegate.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-tumbler-wrap.gif delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-tumbler.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-universal-accent.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-universal-attributes.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-universal-background.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-universal-button.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-universal-dark.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-universal-foreground.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-universal-light.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-universal-theme.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-universal-thumbnail.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-universal-violet.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-windows-thumbnail.png delete mode 100644 src/imports/controls/doc/images/qtquickcontrols2-windows.png delete mode 100644 src/imports/controls/doc/manifest-meta.qdocconf delete mode 100644 src/imports/controls/doc/qtquickcontrols.qdocconf delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-action.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-busyindicator-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-button-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-button-icononly.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-button-textbesideicon.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-button-textonly.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-checkbox-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-checkbox-group.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-checkdelegate-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-combobox-accepted.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-combobox-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-combobox-valuerole.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-delaybutton-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-dial-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-dialog-modal.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-dialog-modeless.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-dialog.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-dialogbuttonbox-attached.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-dialogbuttonbox.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-frame-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-frame.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-groupbox-checkable.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-groupbox-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-groupbox.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-headerview-simple.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-itemdelegate-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-itemdelegate.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-label-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-label.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-material-accent.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-material-background.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-material-elevation.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-material-foreground.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-material-theme.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-material-variant.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-menu-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-menubar-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-menubar.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-menuseparator-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-menuseparator.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-overlay-modal.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-overlay-modeless.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-overview.cmake delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-pageindicator-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-pageindicator-interactive.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-pageindicator.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-pane-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-pane.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-popup-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-popup.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-progressbar-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-radiobutton-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-radiodelegate-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-rangeslider-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-roundbutton.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-scrollbar-active.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-scrollbar-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-scrollbar-non-attached.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-scrollbar-policy.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-scrollindicator-active.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-scrollindicator-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-scrollindicator-non-attached.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-scrollview-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-scrollview-interactive.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-scrollview-listview.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-scrollview-policy.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-scrollview.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-slider-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-spinbox-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-spinbox-double.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-spinbox-textual.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-spinbox.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-splitview-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-stackview-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-stackview-visible.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-swipedelegate-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-swipedelegate-transition.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-swipedelegate.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-swipeview-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-swipeview-indicator.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-switch-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-switchdelegate-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-tabbar-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-tabbar-explicit.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-tabbar-flickable.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-tabbar.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-tabbutton.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-textarea-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-textarea-scrollable.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-textfield-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-textfield-disabled.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-textfield-focused.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-textfield-normal.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-toolbar-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-toolbar.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-toolbutton-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-toolseparator-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-toolseparator.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-tooltip-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-tooltip-hover.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-tooltip-pressandhold.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-tooltip-slider.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-tooltip.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-tumbler-custom.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-tumbler-listView.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-tumbler-pathView.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-tumbler-timePicker.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-universal-accent.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-universal-background.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-universal-foreground.qml delete mode 100644 src/imports/controls/doc/snippets/qtquickcontrols2-universal-theme.qml delete mode 100644 src/imports/controls/doc/src/external-pages.qdoc delete mode 100644 src/imports/controls/doc/src/includes/customize-button-background.qdocinc delete mode 100644 src/imports/controls/doc/src/includes/inputmethodhints.qdocinc delete mode 100644 src/imports/controls/doc/src/includes/qquickcontrol-background.qdocinc delete mode 100644 src/imports/controls/doc/src/includes/qquickcontrol-focusreason.qdocinc delete mode 100644 src/imports/controls/doc/src/includes/qquickdial.qdocinc delete mode 100644 src/imports/controls/doc/src/includes/qquickicon.qdocinc delete mode 100644 src/imports/controls/doc/src/includes/qquickimaginestyle.qdocinc delete mode 100644 src/imports/controls/doc/src/includes/qquickmaterialstyle.qdocinc delete mode 100644 src/imports/controls/doc/src/includes/qquickoverlay-popup-parent.qdocinc delete mode 100644 src/imports/controls/doc/src/includes/qquickpopup-padding.qdocinc delete mode 100644 src/imports/controls/doc/src/includes/qquickstackview.qdocinc delete mode 100644 src/imports/controls/doc/src/includes/qquickswipedelegate-interaction.qdocinc delete mode 100644 src/imports/controls/doc/src/includes/qquickswitch.qdocinc delete mode 100644 src/imports/controls/doc/src/includes/qquickuniversalstyle.qdocinc delete mode 100644 src/imports/controls/doc/src/qt6-changes.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-basic.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-buttons.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-configuration.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-containers.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-cppclasses.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-customize.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-delegates.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-deployment.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-environment.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-examples.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-fileselectors.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-focus.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-fusion.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-gettingstarted.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-guidelines.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-icons.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-imagine.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-index.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-indicators.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-input.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-macos.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-material.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-menus.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-navigation.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-popups.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-qmltypes.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-separators.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-styles.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-universal.qdoc delete mode 100644 src/imports/controls/doc/src/qtquickcontrols2-windows.qdoc delete mode 100644 src/imports/controls/fusion/ApplicationWindow.qml delete mode 100644 src/imports/controls/fusion/BusyIndicator.qml delete mode 100644 src/imports/controls/fusion/Button.qml delete mode 100644 src/imports/controls/fusion/CMakeLists.txt delete mode 100644 src/imports/controls/fusion/CheckBox.qml delete mode 100644 src/imports/controls/fusion/CheckDelegate.qml delete mode 100644 src/imports/controls/fusion/ComboBox.qml delete mode 100644 src/imports/controls/fusion/DelayButton.qml delete mode 100644 src/imports/controls/fusion/Dial.qml delete mode 100644 src/imports/controls/fusion/Dialog.qml delete mode 100644 src/imports/controls/fusion/DialogButtonBox.qml delete mode 100644 src/imports/controls/fusion/Drawer.qml delete mode 100644 src/imports/controls/fusion/Frame.qml delete mode 100644 src/imports/controls/fusion/GroupBox.qml delete mode 100644 src/imports/controls/fusion/HorizontalHeaderView.qml delete mode 100644 src/imports/controls/fusion/ItemDelegate.qml delete mode 100644 src/imports/controls/fusion/Label.qml delete mode 100644 src/imports/controls/fusion/Menu.qml delete mode 100644 src/imports/controls/fusion/MenuBar.qml delete mode 100644 src/imports/controls/fusion/MenuBarItem.qml delete mode 100644 src/imports/controls/fusion/MenuItem.qml delete mode 100644 src/imports/controls/fusion/MenuSeparator.qml delete mode 100644 src/imports/controls/fusion/Page.qml delete mode 100644 src/imports/controls/fusion/PageIndicator.qml delete mode 100644 src/imports/controls/fusion/Pane.qml delete mode 100644 src/imports/controls/fusion/Popup.qml delete mode 100644 src/imports/controls/fusion/ProgressBar.qml delete mode 100644 src/imports/controls/fusion/RadioButton.qml delete mode 100644 src/imports/controls/fusion/RadioDelegate.qml delete mode 100644 src/imports/controls/fusion/RangeSlider.qml delete mode 100644 src/imports/controls/fusion/RoundButton.qml delete mode 100644 src/imports/controls/fusion/ScrollBar.qml delete mode 100644 src/imports/controls/fusion/ScrollIndicator.qml delete mode 100644 src/imports/controls/fusion/ScrollView.qml delete mode 100644 src/imports/controls/fusion/Slider.qml delete mode 100644 src/imports/controls/fusion/SpinBox.qml delete mode 100644 src/imports/controls/fusion/SplitView.qml delete mode 100644 src/imports/controls/fusion/SwipeDelegate.qml delete mode 100644 src/imports/controls/fusion/Switch.qml delete mode 100644 src/imports/controls/fusion/SwitchDelegate.qml delete mode 100644 src/imports/controls/fusion/TabBar.qml delete mode 100644 src/imports/controls/fusion/TabButton.qml delete mode 100644 src/imports/controls/fusion/TextArea.qml delete mode 100644 src/imports/controls/fusion/TextField.qml delete mode 100644 src/imports/controls/fusion/ToolBar.qml delete mode 100644 src/imports/controls/fusion/ToolButton.qml delete mode 100644 src/imports/controls/fusion/ToolSeparator.qml delete mode 100644 src/imports/controls/fusion/ToolTip.qml delete mode 100644 src/imports/controls/fusion/Tumbler.qml delete mode 100644 src/imports/controls/fusion/VerticalHeaderView.qml delete mode 100644 src/imports/controls/fusion/fusion.pri delete mode 100644 src/imports/controls/fusion/images/arrow.png delete mode 100644 src/imports/controls/fusion/images/arrow.svg delete mode 100644 src/imports/controls/fusion/images/arrow@2x.png delete mode 100644 src/imports/controls/fusion/images/arrow@3x.png delete mode 100644 src/imports/controls/fusion/images/arrow@4x.png delete mode 100644 src/imports/controls/fusion/images/checkmark.png delete mode 100644 src/imports/controls/fusion/images/checkmark.svg delete mode 100644 src/imports/controls/fusion/images/checkmark@2x.png delete mode 100644 src/imports/controls/fusion/images/checkmark@3x.png delete mode 100644 src/imports/controls/fusion/images/checkmark@4x.png delete mode 100644 src/imports/controls/fusion/images/progressmask.png delete mode 100644 src/imports/controls/fusion/images/progressmask.svg delete mode 100644 src/imports/controls/fusion/images/progressmask@2x.png delete mode 100644 src/imports/controls/fusion/images/progressmask@3x.png delete mode 100644 src/imports/controls/fusion/images/progressmask@4x.png delete mode 100644 src/imports/controls/fusion/impl/ButtonPanel.qml delete mode 100644 src/imports/controls/fusion/impl/CMakeLists.txt delete mode 100644 src/imports/controls/fusion/impl/CheckIndicator.qml delete mode 100644 src/imports/controls/fusion/impl/RadioIndicator.qml delete mode 100644 src/imports/controls/fusion/impl/SliderGroove.qml delete mode 100644 src/imports/controls/fusion/impl/SliderHandle.qml delete mode 100644 src/imports/controls/fusion/impl/SwitchIndicator.qml delete mode 100644 src/imports/controls/fusion/impl/qquickfusionbusyindicator.cpp delete mode 100644 src/imports/controls/fusion/impl/qquickfusionbusyindicator_p.h delete mode 100644 src/imports/controls/fusion/impl/qquickfusiondial.cpp delete mode 100644 src/imports/controls/fusion/impl/qquickfusiondial_p.h delete mode 100644 src/imports/controls/fusion/impl/qquickfusionknob.cpp delete mode 100644 src/imports/controls/fusion/impl/qquickfusionknob_p.h delete mode 100644 src/imports/controls/fusion/impl/qtquickcontrols2fusionstyleimplplugin.cpp delete mode 100644 src/imports/controls/fusion/qquickfusionstyle.cpp delete mode 100644 src/imports/controls/fusion/qquickfusionstyle_p.h delete mode 100644 src/imports/controls/fusion/qquickfusiontheme.cpp delete mode 100644 src/imports/controls/fusion/qquickfusiontheme_p.h delete mode 100644 src/imports/controls/fusion/qtquickcontrols2fusionstyle.qrc delete mode 100644 src/imports/controls/fusion/qtquickcontrols2fusionstyleplugin.cpp delete mode 100644 src/imports/controls/imagine/ApplicationWindow.qml delete mode 100644 src/imports/controls/imagine/BusyIndicator.qml delete mode 100644 src/imports/controls/imagine/Button.qml delete mode 100644 src/imports/controls/imagine/CMakeLists.txt delete mode 100644 src/imports/controls/imagine/CheckBox.qml delete mode 100644 src/imports/controls/imagine/CheckDelegate.qml delete mode 100644 src/imports/controls/imagine/ComboBox.qml delete mode 100644 src/imports/controls/imagine/DelayButton.qml delete mode 100644 src/imports/controls/imagine/Dial.qml delete mode 100644 src/imports/controls/imagine/Dialog.qml delete mode 100644 src/imports/controls/imagine/DialogButtonBox.qml delete mode 100644 src/imports/controls/imagine/Drawer.qml delete mode 100644 src/imports/controls/imagine/Frame.qml delete mode 100644 src/imports/controls/imagine/GroupBox.qml delete mode 100644 src/imports/controls/imagine/HorizontalHeaderView.qml delete mode 100644 src/imports/controls/imagine/ItemDelegate.qml delete mode 100644 src/imports/controls/imagine/Label.qml delete mode 100644 src/imports/controls/imagine/Menu.qml delete mode 100644 src/imports/controls/imagine/MenuItem.qml delete mode 100644 src/imports/controls/imagine/MenuSeparator.qml delete mode 100644 src/imports/controls/imagine/Page.qml delete mode 100644 src/imports/controls/imagine/PageIndicator.qml delete mode 100644 src/imports/controls/imagine/Pane.qml delete mode 100644 src/imports/controls/imagine/Popup.qml delete mode 100644 src/imports/controls/imagine/ProgressBar.qml delete mode 100644 src/imports/controls/imagine/RadioButton.qml delete mode 100644 src/imports/controls/imagine/RadioDelegate.qml delete mode 100644 src/imports/controls/imagine/RangeSlider.qml delete mode 100644 src/imports/controls/imagine/RoundButton.qml delete mode 100644 src/imports/controls/imagine/ScrollBar.qml delete mode 100644 src/imports/controls/imagine/ScrollIndicator.qml delete mode 100644 src/imports/controls/imagine/ScrollView.qml delete mode 100644 src/imports/controls/imagine/Slider.qml delete mode 100644 src/imports/controls/imagine/SpinBox.qml delete mode 100644 src/imports/controls/imagine/SplitView.qml delete mode 100644 src/imports/controls/imagine/StackView.qml delete mode 100644 src/imports/controls/imagine/SwipeDelegate.qml delete mode 100644 src/imports/controls/imagine/SwipeView.qml delete mode 100644 src/imports/controls/imagine/Switch.qml delete mode 100644 src/imports/controls/imagine/SwitchDelegate.qml delete mode 100644 src/imports/controls/imagine/TabBar.qml delete mode 100644 src/imports/controls/imagine/TabButton.qml delete mode 100644 src/imports/controls/imagine/TextArea.qml delete mode 100644 src/imports/controls/imagine/TextField.qml delete mode 100644 src/imports/controls/imagine/ToolBar.qml delete mode 100644 src/imports/controls/imagine/ToolButton.qml delete mode 100644 src/imports/controls/imagine/ToolSeparator.qml delete mode 100644 src/imports/controls/imagine/ToolTip.qml delete mode 100644 src/imports/controls/imagine/Tumbler.qml delete mode 100644 src/imports/controls/imagine/VerticalHeaderView.qml delete mode 100644 src/imports/controls/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/9-patch-export.js delete mode 100644 src/imports/controls/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/manifest.json delete mode 100644 src/imports/controls/imagine/design/imagine.sketch delete mode 100644 src/imports/controls/imagine/images/applicationwindow-background.png delete mode 100644 src/imports/controls/imagine/images/applicationwindow-background@2x.png delete mode 100644 src/imports/controls/imagine/images/applicationwindow-background@3x.png delete mode 100644 src/imports/controls/imagine/images/applicationwindow-background@4x.png delete mode 100644 src/imports/controls/imagine/images/applicationwindow-overlay-modal.png delete mode 100644 src/imports/controls/imagine/images/applicationwindow-overlay-modal@2x.png delete mode 100644 src/imports/controls/imagine/images/applicationwindow-overlay-modal@3x.png delete mode 100644 src/imports/controls/imagine/images/applicationwindow-overlay-modal@4x.png delete mode 100644 src/imports/controls/imagine/images/applicationwindow-overlay.png delete mode 100644 src/imports/controls/imagine/images/applicationwindow-overlay@2x.png delete mode 100644 src/imports/controls/imagine/images/applicationwindow-overlay@3x.png delete mode 100644 src/imports/controls/imagine/images/applicationwindow-overlay@4x.png delete mode 100644 src/imports/controls/imagine/images/busyindicator-animation.webp delete mode 100644 src/imports/controls/imagine/images/busyindicator-animation@2x.webp delete mode 100644 src/imports/controls/imagine/images/busyindicator-animation@3x.webp delete mode 100644 src/imports/controls/imagine/images/busyindicator-animation@4x.webp delete mode 100644 src/imports/controls/imagine/images/button-background-checked-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-checked-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-checked-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-checked-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-checked-focused.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-checked-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-checked-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-checked-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-checked-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-checked-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-checked-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-checked-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-checked.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-checked@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-checked@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-checked@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-checked-pressed.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-checked-pressed@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-checked-pressed@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-checked-pressed@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-checked.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-checked@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-checked@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-checked@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-highlighted-checked.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-highlighted-checked@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-highlighted-checked@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-highlighted-checked@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-highlighted-pressed.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-highlighted-pressed@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-highlighted-pressed@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-highlighted-pressed@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-highlighted.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-highlighted@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-highlighted@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-highlighted@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-pressed.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-pressed@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-pressed@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat-pressed@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-flat@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-focused.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted-checked.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted-checked@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted-checked@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted-checked@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted-focused.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted-pressed.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted-pressed@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted-pressed@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted-pressed@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-highlighted@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-pressed.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-pressed@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-pressed@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background-pressed@4x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background.9.png delete mode 100644 src/imports/controls/imagine/images/button-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/button-background@4x.9.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-checked-focused.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-checked-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-checked-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-checked-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-checked-hovered.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-checked-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-checked-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-checked-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-checked-pressed.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-checked-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-checked-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-checked-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-checked.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-checked@2x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-checked@3x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-checked@4x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-disabled.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-focused.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-hovered.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-partially-checked-focused.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-partially-checked-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-partially-checked-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-partially-checked-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-partially-checked-hovered.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-partially-checked-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-partially-checked-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-partially-checked-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-partially-checked-pressed.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-partially-checked-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-partially-checked-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-partially-checked-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-partially-checked.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-partially-checked@2x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-partially-checked@3x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-partially-checked@4x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-pressed.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator@2x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator@3x.png delete mode 100644 src/imports/controls/imagine/images/checkbox-indicator@4x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background-focused.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background-highlighted.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background-highlighted@2x.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background-highlighted@3x.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background-highlighted@4x.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background-pressed.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background-pressed@2x.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background-pressed@3x.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background-pressed@4x.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-background@4x.9.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-checked-focused.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-checked-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-checked-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-checked-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-checked-hovered.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-checked-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-checked-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-checked-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-checked-pressed.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-checked-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-checked-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-checked-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-checked.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-checked@2x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-checked@3x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-checked@4x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-disabled.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-focused.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-hovered.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-focused.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-hovered.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-pressed.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked@2x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked@3x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked@4x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-pressed.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator@2x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator@3x.png delete mode 100644 src/imports/controls/imagine/images/checkdelegate-indicator@4x.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-editable-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-editable-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-editable-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-editable-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-editable-focused.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-editable-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-editable-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-editable-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-editable.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-editable@2x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-editable@3x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-editable@4x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-focused.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-open.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-open@2x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-open@3x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-open@4x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-pressed.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-pressed@2x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-pressed@3x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background-pressed@4x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-background@4x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator-disabled.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator-editable-disabled.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator-editable-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator-editable-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator-editable-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator-editable-mirrored-disabled.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator-editable-mirrored-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator-editable-mirrored-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator-editable-mirrored-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator-editable-mirrored.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator-editable-mirrored@2x.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator-editable-mirrored@3x.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator-editable-mirrored@4x.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator-editable.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator-editable@2x.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator-editable@3x.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator-editable@4x.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator@2x.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator@3x.png delete mode 100644 src/imports/controls/imagine/images/combobox-indicator@4x.png delete mode 100644 src/imports/controls/imagine/images/combobox-popup.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-popup@2x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-popup@3x.9.png delete mode 100644 src/imports/controls/imagine/images/combobox-popup@4x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-checked-focused.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-checked-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-checked-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-checked-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-checked-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-checked-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-checked-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-checked-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-checked.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-checked@2x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-checked@3x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-checked@4x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-disabled-checked.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-disabled-checked@2x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-disabled-checked@3x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-disabled-checked@4x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-focused.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-pressed.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-pressed@2x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-pressed@3x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background-pressed@4x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-background@4x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-mask.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-mask@2x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-mask@3x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-mask@4x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-progress-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-progress-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-progress-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-progress-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-progress.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-progress@2x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-progress@3x.9.png delete mode 100644 src/imports/controls/imagine/images/delaybutton-progress@4x.9.png delete mode 100644 src/imports/controls/imagine/images/dial-background-disabled.png delete mode 100644 src/imports/controls/imagine/images/dial-background-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/dial-background-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/dial-background-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/dial-background-focused.png delete mode 100644 src/imports/controls/imagine/images/dial-background-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/dial-background-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/dial-background-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/dial-background.png delete mode 100644 src/imports/controls/imagine/images/dial-background@2x.png delete mode 100644 src/imports/controls/imagine/images/dial-background@3x.png delete mode 100644 src/imports/controls/imagine/images/dial-background@4x.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-disabled.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-focused-hovered.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-focused-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-focused-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-focused-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-focused-pressed.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-focused-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-focused-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-focused-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-focused.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-hovered.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-pressed.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/dial-handle-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/dial-handle.png delete mode 100644 src/imports/controls/imagine/images/dial-handle@2x.png delete mode 100644 src/imports/controls/imagine/images/dial-handle@3x.png delete mode 100644 src/imports/controls/imagine/images/dial-handle@4x.png delete mode 100644 src/imports/controls/imagine/images/dialog-background.9.png delete mode 100644 src/imports/controls/imagine/images/dialog-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/dialog-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/dialog-background@4x.9.png delete mode 100644 src/imports/controls/imagine/images/dialog-overlay-modal.png delete mode 100644 src/imports/controls/imagine/images/dialog-overlay-modal@2x.png delete mode 100644 src/imports/controls/imagine/images/dialog-overlay-modal@3x.png delete mode 100644 src/imports/controls/imagine/images/dialog-overlay-modal@4x.png delete mode 100644 src/imports/controls/imagine/images/dialog-overlay.png delete mode 100644 src/imports/controls/imagine/images/dialog-overlay@2x.png delete mode 100644 src/imports/controls/imagine/images/dialog-overlay@3x.png delete mode 100644 src/imports/controls/imagine/images/dialog-overlay@4x.png delete mode 100644 src/imports/controls/imagine/images/dialogbuttonbox-background.9.png delete mode 100644 src/imports/controls/imagine/images/dialogbuttonbox-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/dialogbuttonbox-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/dialogbuttonbox-background@4x.9.png delete mode 100644 src/imports/controls/imagine/images/drawer-background-bottom.9.png delete mode 100644 src/imports/controls/imagine/images/drawer-background-bottom@2x.9.png delete mode 100644 src/imports/controls/imagine/images/drawer-background-bottom@3x.9.png delete mode 100644 src/imports/controls/imagine/images/drawer-background-bottom@4x.9.png delete mode 100644 src/imports/controls/imagine/images/drawer-background-left.9.png delete mode 100644 src/imports/controls/imagine/images/drawer-background-left@2x.9.png delete mode 100644 src/imports/controls/imagine/images/drawer-background-left@3x.9.png delete mode 100644 src/imports/controls/imagine/images/drawer-background-left@4x.9.png delete mode 100644 src/imports/controls/imagine/images/drawer-background-right.9.png delete mode 100644 src/imports/controls/imagine/images/drawer-background-right@2x.9.png delete mode 100644 src/imports/controls/imagine/images/drawer-background-right@3x.9.png delete mode 100644 src/imports/controls/imagine/images/drawer-background-right@4x.9.png delete mode 100644 src/imports/controls/imagine/images/drawer-background-top.9.png delete mode 100644 src/imports/controls/imagine/images/drawer-background-top@2x.9.png delete mode 100644 src/imports/controls/imagine/images/drawer-background-top@3x.9.png delete mode 100644 src/imports/controls/imagine/images/drawer-background-top@4x.9.png delete mode 100644 src/imports/controls/imagine/images/drawer-overlay-modal.png delete mode 100644 src/imports/controls/imagine/images/drawer-overlay-modal@2x.png delete mode 100644 src/imports/controls/imagine/images/drawer-overlay-modal@3x.png delete mode 100644 src/imports/controls/imagine/images/drawer-overlay-modal@4x.png delete mode 100644 src/imports/controls/imagine/images/drawer-overlay.png delete mode 100644 src/imports/controls/imagine/images/drawer-overlay@2x.png delete mode 100644 src/imports/controls/imagine/images/drawer-overlay@3x.png delete mode 100644 src/imports/controls/imagine/images/drawer-overlay@4x.png delete mode 100644 src/imports/controls/imagine/images/frame-background.9.png delete mode 100644 src/imports/controls/imagine/images/frame-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/frame-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/frame-background@4x.9.png delete mode 100644 src/imports/controls/imagine/images/groupbox-background.9.png delete mode 100644 src/imports/controls/imagine/images/groupbox-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/groupbox-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/groupbox-background@4x.9.png delete mode 100644 src/imports/controls/imagine/images/groupbox-title.9.png delete mode 100644 src/imports/controls/imagine/images/groupbox-title@2x.9.png delete mode 100644 src/imports/controls/imagine/images/groupbox-title@3x.9.png delete mode 100644 src/imports/controls/imagine/images/groupbox-title@4x.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background-focused.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background-highlighted.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background-highlighted@2x.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background-highlighted@3x.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background-highlighted@4x.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background-pressed.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background-pressed@2x.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background-pressed@3x.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background-pressed@4x.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/itemdelegate-background@4x.9.png delete mode 100644 src/imports/controls/imagine/images/menu-background.9.png delete mode 100644 src/imports/controls/imagine/images/menu-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/menu-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/menu-background@4x.9.png delete mode 100644 src/imports/controls/imagine/images/menuitem-arrow-disabled.png delete mode 100644 src/imports/controls/imagine/images/menuitem-arrow-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-arrow-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-arrow-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-arrow-mirrored-disabled.png delete mode 100644 src/imports/controls/imagine/images/menuitem-arrow-mirrored-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-arrow-mirrored-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-arrow-mirrored-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-arrow-mirrored.png delete mode 100644 src/imports/controls/imagine/images/menuitem-arrow-mirrored@2x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-arrow-mirrored@3x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-arrow-mirrored@4x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-arrow.png delete mode 100644 src/imports/controls/imagine/images/menuitem-arrow@2x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-arrow@3x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-arrow@4x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-background-highlighted.9.png delete mode 100644 src/imports/controls/imagine/images/menuitem-background-highlighted@2x.9.png delete mode 100644 src/imports/controls/imagine/images/menuitem-background-highlighted@3x.9.png delete mode 100644 src/imports/controls/imagine/images/menuitem-background-highlighted@4x.9.png delete mode 100644 src/imports/controls/imagine/images/menuitem-background.9.png delete mode 100644 src/imports/controls/imagine/images/menuitem-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/menuitem-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/menuitem-background@4x.9.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-checked-focused.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-checked-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-checked-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-checked-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-checked-hovered.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-checked-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-checked-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-checked-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-checked-pressed.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-checked-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-checked-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-checked-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-checked.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-checked@2x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-checked@3x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-checked@4x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-disabled.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-focused.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-hovered.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-pressed.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator@2x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator@3x.png delete mode 100644 src/imports/controls/imagine/images/menuitem-indicator@4x.png delete mode 100644 src/imports/controls/imagine/images/menuseparator-separator.9.png delete mode 100644 src/imports/controls/imagine/images/menuseparator-separator@2x.9.png delete mode 100644 src/imports/controls/imagine/images/menuseparator-separator@3x.9.png delete mode 100644 src/imports/controls/imagine/images/menuseparator-separator@4x.9.png delete mode 100644 src/imports/controls/imagine/images/page-background.png delete mode 100644 src/imports/controls/imagine/images/page-background@2x.png delete mode 100644 src/imports/controls/imagine/images/page-background@3x.png delete mode 100644 src/imports/controls/imagine/images/page-background@4x.png delete mode 100644 src/imports/controls/imagine/images/pageindicator-delegate-current.png delete mode 100644 src/imports/controls/imagine/images/pageindicator-delegate-current@2x.png delete mode 100644 src/imports/controls/imagine/images/pageindicator-delegate-current@3x.png delete mode 100644 src/imports/controls/imagine/images/pageindicator-delegate-current@4x.png delete mode 100644 src/imports/controls/imagine/images/pageindicator-delegate-disabled-current.png delete mode 100644 src/imports/controls/imagine/images/pageindicator-delegate-disabled-current@2x.png delete mode 100644 src/imports/controls/imagine/images/pageindicator-delegate-disabled-current@3x.png delete mode 100644 src/imports/controls/imagine/images/pageindicator-delegate-disabled-current@4x.png delete mode 100644 src/imports/controls/imagine/images/pageindicator-delegate-disabled.png delete mode 100644 src/imports/controls/imagine/images/pageindicator-delegate-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/pageindicator-delegate-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/pageindicator-delegate-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/pageindicator-delegate-pressed.png delete mode 100644 src/imports/controls/imagine/images/pageindicator-delegate-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/pageindicator-delegate-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/pageindicator-delegate-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/pageindicator-delegate.png delete mode 100644 src/imports/controls/imagine/images/pageindicator-delegate@2x.png delete mode 100644 src/imports/controls/imagine/images/pageindicator-delegate@3x.png delete mode 100644 src/imports/controls/imagine/images/pageindicator-delegate@4x.png delete mode 100644 src/imports/controls/imagine/images/pane-background.9.png delete mode 100644 src/imports/controls/imagine/images/pane-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/pane-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/pane-background@4x.9.png delete mode 100644 src/imports/controls/imagine/images/popup-background.9.png delete mode 100644 src/imports/controls/imagine/images/popup-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/popup-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/popup-background@4x.9.png delete mode 100644 src/imports/controls/imagine/images/popup-overlay-modal.png delete mode 100644 src/imports/controls/imagine/images/popup-overlay-modal@2x.png delete mode 100644 src/imports/controls/imagine/images/popup-overlay-modal@3x.png delete mode 100644 src/imports/controls/imagine/images/popup-overlay-modal@4x.png delete mode 100644 src/imports/controls/imagine/images/popup-overlay.png delete mode 100644 src/imports/controls/imagine/images/popup-overlay@2x.png delete mode 100644 src/imports/controls/imagine/images/popup-overlay@3x.png delete mode 100644 src/imports/controls/imagine/images/popup-overlay@4x.png delete mode 100644 src/imports/controls/imagine/images/progressbar-animation.webp delete mode 100644 src/imports/controls/imagine/images/progressbar-animation@2x.webp delete mode 100644 src/imports/controls/imagine/images/progressbar-animation@3x.webp delete mode 100644 src/imports/controls/imagine/images/progressbar-animation@4x.webp delete mode 100644 src/imports/controls/imagine/images/progressbar-background.9.png delete mode 100644 src/imports/controls/imagine/images/progressbar-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/progressbar-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/progressbar-background@4x.9.png delete mode 100644 src/imports/controls/imagine/images/progressbar-mask.9.png delete mode 100644 src/imports/controls/imagine/images/progressbar-mask@2x.9.png delete mode 100644 src/imports/controls/imagine/images/progressbar-mask@3x.9.png delete mode 100644 src/imports/controls/imagine/images/progressbar-mask@4x.9.png delete mode 100644 src/imports/controls/imagine/images/progressbar-progress.png delete mode 100644 src/imports/controls/imagine/images/progressbar-progress@2x.png delete mode 100644 src/imports/controls/imagine/images/progressbar-progress@3x.png delete mode 100644 src/imports/controls/imagine/images/progressbar-progress@4x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-checked-focused.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-checked-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-checked-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-checked-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-checked-hovered.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-checked-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-checked-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-checked-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-checked-pressed.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-checked-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-checked-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-checked-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-checked.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-checked@2x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-checked@3x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-checked@4x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-disabled.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-focused.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-hovered.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-pressed.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator@2x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator@3x.png delete mode 100644 src/imports/controls/imagine/images/radiobutton-indicator@4x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background-focused.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background-highlighted.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background-highlighted@2x.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background-highlighted@3x.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background-highlighted@4x.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background-pressed.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background-pressed@2x.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background-pressed@3x.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background-pressed@4x.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-background@4x.9.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-checked-focused.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-checked-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-checked-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-checked-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-checked-hovered.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-checked-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-checked-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-checked-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-checked-pressed.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-checked-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-checked-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-checked-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-checked.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-checked@2x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-checked@3x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-checked@4x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-disabled.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-focused.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-hovered.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-pressed.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator@2x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator@3x.png delete mode 100644 src/imports/controls/imagine/images/radiodelegate-indicator@4x.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-background-horizontal.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-background-horizontal@2x.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-background-horizontal@3x.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-background-horizontal@4x.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-background-vertical.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-background-vertical@2x.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-background-vertical@3x.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-background-vertical@4x.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-disabled.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-focused-hovered.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-focused-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-focused-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-focused-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-focused-pressed.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-focused-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-focused-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-focused-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-focused.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-hovered.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-pressed.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle@2x.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle@3x.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-handle@4x.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-progress-horizontal-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-progress-horizontal-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-progress-horizontal-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-progress-horizontal-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-progress-horizontal.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-progress-horizontal@2x.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-progress-horizontal@3x.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-progress-horizontal@4x.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-progress-vertical-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-progress-vertical-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-progress-vertical-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-progress-vertical-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-progress-vertical.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-progress-vertical@2x.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-progress-vertical@3x.9.png delete mode 100644 src/imports/controls/imagine/images/rangeslider-progress-vertical@4x.9.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-checked-focused.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-checked-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-checked-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-checked-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-checked-hovered.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-checked-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-checked-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-checked-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-checked.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-checked@2x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-checked@3x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-checked@4x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-disabled-checked.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-disabled-checked@2x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-disabled-checked@3x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-disabled-checked@4x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-disabled.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-focused.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-highlighted-focused.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-highlighted-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-highlighted-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-highlighted-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-highlighted-hovered.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-highlighted-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-highlighted-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-highlighted-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-highlighted-pressed.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-highlighted-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-highlighted-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-highlighted-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-highlighted.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-highlighted@2x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-highlighted@3x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-highlighted@4x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-hovered.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-pressed.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background@2x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background@3x.png delete mode 100644 src/imports/controls/imagine/images/roundbutton-background@4x.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle-disabled.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle-interactive-disabled.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle-interactive-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle-interactive-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle-interactive-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle-interactive-hovered.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle-interactive-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle-interactive-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle-interactive-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle-interactive-pressed.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle-interactive-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle-interactive-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle-interactive-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle-interactive.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle-interactive@2x.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle-interactive@3x.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle-interactive@4x.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle@2x.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle@3x.png delete mode 100644 src/imports/controls/imagine/images/scrollbar-handle@4x.png delete mode 100644 src/imports/controls/imagine/images/scrollindicator-handle.png delete mode 100644 src/imports/controls/imagine/images/scrollindicator-handle@2x.png delete mode 100644 src/imports/controls/imagine/images/scrollindicator-handle@3x.png delete mode 100644 src/imports/controls/imagine/images/scrollindicator-handle@4x.png delete mode 100644 src/imports/controls/imagine/images/slider-background-horizontal.9.png delete mode 100644 src/imports/controls/imagine/images/slider-background-horizontal@2x.9.png delete mode 100644 src/imports/controls/imagine/images/slider-background-horizontal@3x.9.png delete mode 100644 src/imports/controls/imagine/images/slider-background-horizontal@4x.9.png delete mode 100644 src/imports/controls/imagine/images/slider-background-vertical.9.png delete mode 100644 src/imports/controls/imagine/images/slider-background-vertical@2x.9.png delete mode 100644 src/imports/controls/imagine/images/slider-background-vertical@3x.9.png delete mode 100644 src/imports/controls/imagine/images/slider-background-vertical@4x.9.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-disabled.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-focused-hovered.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-focused-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-focused-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-focused-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-focused-pressed.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-focused-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-focused-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-focused-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-focused.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-hovered.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-pressed.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/slider-handle-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/slider-handle.png delete mode 100644 src/imports/controls/imagine/images/slider-handle@2x.png delete mode 100644 src/imports/controls/imagine/images/slider-handle@3x.png delete mode 100644 src/imports/controls/imagine/images/slider-handle@4x.png delete mode 100644 src/imports/controls/imagine/images/slider-progress-horizontal-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/slider-progress-horizontal-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/slider-progress-horizontal-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/slider-progress-horizontal-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/slider-progress-horizontal.9.png delete mode 100644 src/imports/controls/imagine/images/slider-progress-horizontal@2x.9.png delete mode 100644 src/imports/controls/imagine/images/slider-progress-horizontal@3x.9.png delete mode 100644 src/imports/controls/imagine/images/slider-progress-horizontal@4x.9.png delete mode 100644 src/imports/controls/imagine/images/slider-progress-vertical-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/slider-progress-vertical-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/slider-progress-vertical-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/slider-progress-vertical-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/slider-progress-vertical.9.png delete mode 100644 src/imports/controls/imagine/images/slider-progress-vertical@2x.9.png delete mode 100644 src/imports/controls/imagine/images/slider-progress-vertical@3x.9.png delete mode 100644 src/imports/controls/imagine/images/slider-progress-vertical@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-background-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-background-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-background-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-background-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-background-editable.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-background-editable@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-background-editable@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-background-editable@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-background-focused.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-background-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-background-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-background-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-background.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-background@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-focused.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-focused.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-pressed.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-pressed.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-pressed@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-pressed@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable-pressed@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-editable@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-focused.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-focused.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-pressed.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-pressed@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-pressed@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-pressed@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-mirrored.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-mirrored@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-mirrored@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-mirrored@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-pressed.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-pressed@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-pressed@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down-pressed@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-down@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-focused.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-focused.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-pressed.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-pressed.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-pressed@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-pressed@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable-pressed@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-editable@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-focused.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-focused.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-pressed.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-pressed@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-pressed@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-pressed@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-mirrored.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-mirrored@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-mirrored@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-mirrored@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-pressed.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-pressed@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-pressed@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up-pressed@4x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up@2x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up@3x.9.png delete mode 100644 src/imports/controls/imagine/images/spinbox-indicator-up@4x.9.png delete mode 100644 src/imports/controls/imagine/images/splitview-handle-disabled.png delete mode 100644 src/imports/controls/imagine/images/splitview-handle-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/splitview-handle-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/splitview-handle-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/splitview-handle-hovered.png delete mode 100644 src/imports/controls/imagine/images/splitview-handle-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/splitview-handle-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/splitview-handle-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/splitview-handle-pressed.png delete mode 100644 src/imports/controls/imagine/images/splitview-handle-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/splitview-handle-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/splitview-handle-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/splitview-handle.png delete mode 100644 src/imports/controls/imagine/images/splitview-handle@2x.png delete mode 100644 src/imports/controls/imagine/images/splitview-handle@3x.png delete mode 100644 src/imports/controls/imagine/images/splitview-handle@4x.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background-focused.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background-highlighted.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background-highlighted@2x.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background-highlighted@3x.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background-highlighted@4x.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background-pressed.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background-pressed@2x.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background-pressed@3x.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background-pressed@4x.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/swipedelegate-background@4x.9.png delete mode 100644 src/imports/controls/imagine/images/switch-handle-disabled.png delete mode 100644 src/imports/controls/imagine/images/switch-handle-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/switch-handle-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/switch-handle-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/switch-handle-pressed.png delete mode 100644 src/imports/controls/imagine/images/switch-handle-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/switch-handle-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/switch-handle-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/switch-handle.png delete mode 100644 src/imports/controls/imagine/images/switch-handle@2x.png delete mode 100644 src/imports/controls/imagine/images/switch-handle@3x.png delete mode 100644 src/imports/controls/imagine/images/switch-handle@4x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-checked-focused.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-checked-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-checked-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-checked-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-checked-hovered.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-checked-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-checked-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-checked-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-checked-pressed.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-checked-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-checked-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-checked-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-checked.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-checked@2x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-checked@3x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-checked@4x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-disabled.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-focused.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-hovered.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-pressed.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator@2x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator@3x.png delete mode 100644 src/imports/controls/imagine/images/switch-indicator@4x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-background-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-background-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-background-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-background-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-background-focused.9.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-background-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-background-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-background-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-background-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-background-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-background-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-background-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-background-pressed.9.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-background-pressed@2x.9.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-background-pressed@3x.9.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-background-pressed@4x.9.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-background.9.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-background@4x.9.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-handle-disabled.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-handle-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-handle-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-handle-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-handle-pressed.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-handle-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-handle-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-handle-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-handle.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-handle@2x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-handle@3x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-handle@4x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-checked-focused.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-checked-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-checked-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-checked-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-checked-hovered.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-checked-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-checked-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-checked-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-checked-pressed.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-checked-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-checked-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-checked-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-checked.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-checked@2x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-checked@3x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-checked@4x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-disabled.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-disabled@2x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-disabled@3x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-disabled@4x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-focused.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-focused@2x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-focused@3x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-focused@4x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-hovered.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-hovered@2x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-hovered@3x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-hovered@4x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-pressed.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-pressed@2x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-pressed@3x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator-pressed@4x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator@2x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator@3x.png delete mode 100644 src/imports/controls/imagine/images/switchdelegate-indicator@4x.png delete mode 100644 src/imports/controls/imagine/images/tabbar-background.png delete mode 100644 src/imports/controls/imagine/images/tabbar-background@2x.png delete mode 100644 src/imports/controls/imagine/images/tabbar-background@3x.png delete mode 100644 src/imports/controls/imagine/images/tabbar-background@4x.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background-checked.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background-checked@2x.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background-checked@3x.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background-checked@4x.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background-disabled-checked.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background-disabled-checked@2x.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background-disabled-checked@3x.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background-disabled-checked@4x.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background-pressed.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background-pressed@2x.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background-pressed@3x.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background-pressed@4x.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/tabbutton-background@4x.9.png delete mode 100644 src/imports/controls/imagine/images/textarea-background-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/textarea-background-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/textarea-background-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/textarea-background-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/textarea-background-focused.9.png delete mode 100644 src/imports/controls/imagine/images/textarea-background-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/textarea-background-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/textarea-background-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/textarea-background.9.png delete mode 100644 src/imports/controls/imagine/images/textarea-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/textarea-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/textarea-background@4x.9.png delete mode 100644 src/imports/controls/imagine/images/textfield-background-disabled.9.png delete mode 100644 src/imports/controls/imagine/images/textfield-background-disabled@2x.9.png delete mode 100644 src/imports/controls/imagine/images/textfield-background-disabled@3x.9.png delete mode 100644 src/imports/controls/imagine/images/textfield-background-disabled@4x.9.png delete mode 100644 src/imports/controls/imagine/images/textfield-background-focused.9.png delete mode 100644 src/imports/controls/imagine/images/textfield-background-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/textfield-background-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/textfield-background-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/textfield-background.9.png delete mode 100644 src/imports/controls/imagine/images/textfield-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/textfield-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/textfield-background@4x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbar-background.png delete mode 100644 src/imports/controls/imagine/images/toolbar-background@2x.png delete mode 100644 src/imports/controls/imagine/images/toolbar-background@3x.png delete mode 100644 src/imports/controls/imagine/images/toolbar-background@4x.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-checked-focused.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-checked-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-checked-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-checked-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-checked-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-checked-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-checked-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-checked-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-checked.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-checked@2x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-checked@3x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-checked@4x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-disabled-checked.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-disabled-checked@2x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-disabled-checked@3x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-disabled-checked@4x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-focused.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-focused@2x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-focused@3x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-focused@4x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-hovered.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-hovered@2x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-hovered@3x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-hovered@4x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-pressed.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-pressed@2x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-pressed@3x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background-pressed@4x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/toolbutton-background@4x.9.png delete mode 100644 src/imports/controls/imagine/images/toolseparator-separator-horizontal.9.png delete mode 100644 src/imports/controls/imagine/images/toolseparator-separator-horizontal@2x.9.png delete mode 100644 src/imports/controls/imagine/images/toolseparator-separator-horizontal@3x.9.png delete mode 100644 src/imports/controls/imagine/images/toolseparator-separator-horizontal@4x.9.png delete mode 100644 src/imports/controls/imagine/images/toolseparator-separator-vertical.9.png delete mode 100644 src/imports/controls/imagine/images/toolseparator-separator-vertical@2x.9.png delete mode 100644 src/imports/controls/imagine/images/toolseparator-separator-vertical@3x.9.png delete mode 100644 src/imports/controls/imagine/images/toolseparator-separator-vertical@4x.9.png delete mode 100644 src/imports/controls/imagine/images/tooltip-background.9.png delete mode 100644 src/imports/controls/imagine/images/tooltip-background@2x.9.png delete mode 100644 src/imports/controls/imagine/images/tooltip-background@3x.9.png delete mode 100644 src/imports/controls/imagine/images/tooltip-background@4x.9.png delete mode 100644 src/imports/controls/imagine/imagine.pri delete mode 100644 src/imports/controls/imagine/impl/CMakeLists.txt delete mode 100644 src/imports/controls/imagine/impl/OpacityMask.qml delete mode 100644 src/imports/controls/imagine/impl/qquickimageselector.cpp delete mode 100644 src/imports/controls/imagine/impl/qquickimageselector_p.h delete mode 100644 src/imports/controls/imagine/impl/qquickninepatchimage.cpp delete mode 100644 src/imports/controls/imagine/impl/qquickninepatchimage_p.h delete mode 100644 src/imports/controls/imagine/impl/qtquickcontrols2imaginestyleimplplugin.cpp delete mode 100644 src/imports/controls/imagine/impl/shaders/+glslcore/OpacityMask.frag delete mode 100644 src/imports/controls/imagine/impl/shaders/+qsb/OpacityMask.frag delete mode 100644 src/imports/controls/imagine/impl/shaders/OpacityMask.frag delete mode 100644 src/imports/controls/imagine/impl/shaders/OpacityMask_rhi.frag delete mode 100644 src/imports/controls/imagine/impl/shaders/compile.bat delete mode 100644 src/imports/controls/imagine/qquickimaginestyle.cpp delete mode 100644 src/imports/controls/imagine/qquickimaginestyle_p.h delete mode 100644 src/imports/controls/imagine/qquickimaginetheme.cpp delete mode 100644 src/imports/controls/imagine/qquickimaginetheme_p.h delete mode 100644 src/imports/controls/imagine/qtquickcontrols2imaginestyleplugin.cpp delete mode 100644 src/imports/controls/macos/Button.qml delete mode 100644 src/imports/controls/macos/CMakeLists.txt delete mode 100644 src/imports/controls/macos/CheckBox.qml delete mode 100644 src/imports/controls/macos/ComboBox.qml delete mode 100644 src/imports/controls/macos/Dial.qml delete mode 100644 src/imports/controls/macos/Frame.qml delete mode 100644 src/imports/controls/macos/GroupBox.qml delete mode 100644 src/imports/controls/macos/ProgressBar.qml delete mode 100644 src/imports/controls/macos/RadioButton.qml delete mode 100644 src/imports/controls/macos/ScrollBar.qml delete mode 100644 src/imports/controls/macos/ScrollView.qml delete mode 100644 src/imports/controls/macos/Slider.qml delete mode 100644 src/imports/controls/macos/SpinBox.qml delete mode 100644 src/imports/controls/macos/TextArea.qml delete mode 100644 src/imports/controls/macos/TextField.qml delete mode 100644 src/imports/controls/macos/macos.pri delete mode 100644 src/imports/controls/macos/qtquickcontrols2macosstyleplugin.cpp delete mode 100644 src/imports/controls/material/ApplicationWindow.qml delete mode 100644 src/imports/controls/material/BusyIndicator.qml delete mode 100644 src/imports/controls/material/Button.qml delete mode 100644 src/imports/controls/material/CMakeLists.txt delete mode 100644 src/imports/controls/material/CheckBox.qml delete mode 100644 src/imports/controls/material/CheckDelegate.qml delete mode 100644 src/imports/controls/material/ComboBox.qml delete mode 100644 src/imports/controls/material/DelayButton.qml delete mode 100644 src/imports/controls/material/Dial.qml delete mode 100644 src/imports/controls/material/Dialog.qml delete mode 100644 src/imports/controls/material/DialogButtonBox.qml delete mode 100644 src/imports/controls/material/Drawer.qml delete mode 100644 src/imports/controls/material/Frame.qml delete mode 100644 src/imports/controls/material/GroupBox.qml delete mode 100644 src/imports/controls/material/HorizontalHeaderView.qml delete mode 100644 src/imports/controls/material/ItemDelegate.qml delete mode 100644 src/imports/controls/material/LICENSE_ANGULARJS.txt delete mode 100644 src/imports/controls/material/Label.qml delete mode 100644 src/imports/controls/material/Menu.qml delete mode 100644 src/imports/controls/material/MenuBar.qml delete mode 100644 src/imports/controls/material/MenuBarItem.qml delete mode 100644 src/imports/controls/material/MenuItem.qml delete mode 100644 src/imports/controls/material/MenuSeparator.qml delete mode 100644 src/imports/controls/material/Page.qml delete mode 100644 src/imports/controls/material/PageIndicator.qml delete mode 100644 src/imports/controls/material/Pane.qml delete mode 100644 src/imports/controls/material/Popup.qml delete mode 100644 src/imports/controls/material/ProgressBar.qml delete mode 100644 src/imports/controls/material/RadioButton.qml delete mode 100644 src/imports/controls/material/RadioDelegate.qml delete mode 100644 src/imports/controls/material/RangeSlider.qml delete mode 100644 src/imports/controls/material/RoundButton.qml delete mode 100644 src/imports/controls/material/ScrollBar.qml delete mode 100644 src/imports/controls/material/ScrollIndicator.qml delete mode 100644 src/imports/controls/material/ScrollView.qml delete mode 100644 src/imports/controls/material/Slider.qml delete mode 100644 src/imports/controls/material/SpinBox.qml delete mode 100644 src/imports/controls/material/SplitView.qml delete mode 100644 src/imports/controls/material/StackView.qml delete mode 100644 src/imports/controls/material/SwipeDelegate.qml delete mode 100644 src/imports/controls/material/SwipeView.qml delete mode 100644 src/imports/controls/material/Switch.qml delete mode 100644 src/imports/controls/material/SwitchDelegate.qml delete mode 100644 src/imports/controls/material/TabBar.qml delete mode 100644 src/imports/controls/material/TabButton.qml delete mode 100644 src/imports/controls/material/TextArea.qml delete mode 100644 src/imports/controls/material/TextField.qml delete mode 100644 src/imports/controls/material/ToolBar.qml delete mode 100644 src/imports/controls/material/ToolButton.qml delete mode 100644 src/imports/controls/material/ToolSeparator.qml delete mode 100644 src/imports/controls/material/ToolTip.qml delete mode 100644 src/imports/controls/material/Tumbler.qml delete mode 100644 src/imports/controls/material/VerticalHeaderView.qml delete mode 100644 src/imports/controls/material/images/arrow-indicator.png delete mode 100644 src/imports/controls/material/images/arrow-indicator.svg delete mode 100644 src/imports/controls/material/images/arrow-indicator@2x.png delete mode 100644 src/imports/controls/material/images/arrow-indicator@3x.png delete mode 100644 src/imports/controls/material/images/arrow-indicator@4x.png delete mode 100644 src/imports/controls/material/images/check.png delete mode 100644 src/imports/controls/material/images/check@2x.png delete mode 100644 src/imports/controls/material/images/check@3x.png delete mode 100644 src/imports/controls/material/images/check@4x.png delete mode 100644 src/imports/controls/material/images/drop-indicator.png delete mode 100644 src/imports/controls/material/images/drop-indicator.svg delete mode 100644 src/imports/controls/material/images/drop-indicator@2x.png delete mode 100644 src/imports/controls/material/images/drop-indicator@3x.png delete mode 100644 src/imports/controls/material/images/drop-indicator@4x.png delete mode 100644 src/imports/controls/material/impl/BoxShadow.qml delete mode 100644 src/imports/controls/material/impl/CMakeLists.txt delete mode 100644 src/imports/controls/material/impl/CheckIndicator.qml delete mode 100644 src/imports/controls/material/impl/CursorDelegate.qml delete mode 100644 src/imports/controls/material/impl/ElevationEffect.qml delete mode 100644 src/imports/controls/material/impl/RadioIndicator.qml delete mode 100644 src/imports/controls/material/impl/RectangularGlow.qml delete mode 100644 src/imports/controls/material/impl/SliderHandle.qml delete mode 100644 src/imports/controls/material/impl/SwitchIndicator.qml delete mode 100644 src/imports/controls/material/impl/qquickmaterialbusyindicator.cpp delete mode 100644 src/imports/controls/material/impl/qquickmaterialbusyindicator_p.h delete mode 100644 src/imports/controls/material/impl/qquickmaterialprogressbar.cpp delete mode 100644 src/imports/controls/material/impl/qquickmaterialprogressbar_p.h delete mode 100644 src/imports/controls/material/impl/qquickmaterialripple.cpp delete mode 100644 src/imports/controls/material/impl/qquickmaterialripple_p.h delete mode 100644 src/imports/controls/material/impl/qtquickcontrols2materialstyleimplplugin.cpp delete mode 100644 src/imports/controls/material/material.pri delete mode 100644 src/imports/controls/material/qquickmaterialstyle.cpp delete mode 100644 src/imports/controls/material/qquickmaterialstyle_p.h delete mode 100644 src/imports/controls/material/qquickmaterialtheme.cpp delete mode 100644 src/imports/controls/material/qquickmaterialtheme_p.h delete mode 100644 src/imports/controls/material/qt_attribution.json delete mode 100644 src/imports/controls/material/qtquickcontrols2materialstyleplugin.cpp delete mode 100644 src/imports/controls/material/qtquickcontrols2materialstyleplugin.qrc delete mode 100644 src/imports/controls/material/shaders/+glslcore/RectangularGlow.frag delete mode 100644 src/imports/controls/material/shaders/+hlsl/RectangularGlow.frag delete mode 100644 src/imports/controls/material/shaders/+qsb/RectangularGlow.frag delete mode 100644 src/imports/controls/material/shaders/RectangularGlow.frag delete mode 100644 src/imports/controls/material/shaders/RectangularGlow_rhi.frag delete mode 100644 src/imports/controls/material/shaders/compile.bat delete mode 100644 src/imports/controls/qtquickcontrols2plugin.cpp delete mode 100644 src/imports/controls/universal/ApplicationWindow.qml delete mode 100644 src/imports/controls/universal/BusyIndicator.qml delete mode 100644 src/imports/controls/universal/Button.qml delete mode 100644 src/imports/controls/universal/CMakeLists.txt delete mode 100644 src/imports/controls/universal/CheckBox.qml delete mode 100644 src/imports/controls/universal/CheckDelegate.qml delete mode 100644 src/imports/controls/universal/ComboBox.qml delete mode 100644 src/imports/controls/universal/DelayButton.qml delete mode 100644 src/imports/controls/universal/Dial.qml delete mode 100644 src/imports/controls/universal/Dialog.qml delete mode 100644 src/imports/controls/universal/DialogButtonBox.qml delete mode 100644 src/imports/controls/universal/Drawer.qml delete mode 100644 src/imports/controls/universal/Frame.qml delete mode 100644 src/imports/controls/universal/GroupBox.qml delete mode 100644 src/imports/controls/universal/HorizontalHeaderView.qml delete mode 100644 src/imports/controls/universal/ItemDelegate.qml delete mode 100644 src/imports/controls/universal/Label.qml delete mode 100644 src/imports/controls/universal/Menu.qml delete mode 100644 src/imports/controls/universal/MenuBar.qml delete mode 100644 src/imports/controls/universal/MenuBarItem.qml delete mode 100644 src/imports/controls/universal/MenuItem.qml delete mode 100644 src/imports/controls/universal/MenuSeparator.qml delete mode 100644 src/imports/controls/universal/Page.qml delete mode 100644 src/imports/controls/universal/PageIndicator.qml delete mode 100644 src/imports/controls/universal/Pane.qml delete mode 100644 src/imports/controls/universal/Popup.qml delete mode 100644 src/imports/controls/universal/ProgressBar.qml delete mode 100644 src/imports/controls/universal/README.md delete mode 100644 src/imports/controls/universal/RadioButton.qml delete mode 100644 src/imports/controls/universal/RadioDelegate.qml delete mode 100644 src/imports/controls/universal/RangeSlider.qml delete mode 100644 src/imports/controls/universal/RoundButton.qml delete mode 100644 src/imports/controls/universal/ScrollBar.qml delete mode 100644 src/imports/controls/universal/ScrollIndicator.qml delete mode 100644 src/imports/controls/universal/ScrollView.qml delete mode 100644 src/imports/controls/universal/Slider.qml delete mode 100644 src/imports/controls/universal/SpinBox.qml delete mode 100644 src/imports/controls/universal/SplitView.qml delete mode 100644 src/imports/controls/universal/StackView.qml delete mode 100644 src/imports/controls/universal/SwipeDelegate.qml delete mode 100644 src/imports/controls/universal/Switch.qml delete mode 100644 src/imports/controls/universal/SwitchDelegate.qml delete mode 100644 src/imports/controls/universal/TabBar.qml delete mode 100644 src/imports/controls/universal/TabButton.qml delete mode 100644 src/imports/controls/universal/TextArea.qml delete mode 100644 src/imports/controls/universal/TextField.qml delete mode 100644 src/imports/controls/universal/ToolBar.qml delete mode 100644 src/imports/controls/universal/ToolButton.qml delete mode 100644 src/imports/controls/universal/ToolSeparator.qml delete mode 100644 src/imports/controls/universal/ToolTip.qml delete mode 100644 src/imports/controls/universal/Tumbler.qml delete mode 100644 src/imports/controls/universal/VerticalHeaderView.qml delete mode 100644 src/imports/controls/universal/images/checkmark.png delete mode 100644 src/imports/controls/universal/images/checkmark@2x.png delete mode 100644 src/imports/controls/universal/images/checkmark@3x.png delete mode 100644 src/imports/controls/universal/images/checkmark@4x.png delete mode 100644 src/imports/controls/universal/images/downarrow.png delete mode 100644 src/imports/controls/universal/images/downarrow@2x.png delete mode 100644 src/imports/controls/universal/images/downarrow@3x.png delete mode 100644 src/imports/controls/universal/images/downarrow@4x.png delete mode 100644 src/imports/controls/universal/images/leftarrow.png delete mode 100644 src/imports/controls/universal/images/leftarrow@2x.png delete mode 100644 src/imports/controls/universal/images/leftarrow@3x.png delete mode 100644 src/imports/controls/universal/images/leftarrow@4x.png delete mode 100644 src/imports/controls/universal/images/rightarrow.png delete mode 100644 src/imports/controls/universal/images/rightarrow@2x.png delete mode 100644 src/imports/controls/universal/images/rightarrow@3x.png delete mode 100644 src/imports/controls/universal/images/rightarrow@4x.png delete mode 100644 src/imports/controls/universal/impl/CMakeLists.txt delete mode 100644 src/imports/controls/universal/impl/CheckIndicator.qml delete mode 100644 src/imports/controls/universal/impl/RadioIndicator.qml delete mode 100644 src/imports/controls/universal/impl/SwitchIndicator.qml delete mode 100644 src/imports/controls/universal/impl/qquickuniversalbusyindicator.cpp delete mode 100644 src/imports/controls/universal/impl/qquickuniversalbusyindicator_p.h delete mode 100644 src/imports/controls/universal/impl/qquickuniversalfocusrectangle.cpp delete mode 100644 src/imports/controls/universal/impl/qquickuniversalfocusrectangle_p.h delete mode 100644 src/imports/controls/universal/impl/qquickuniversalprogressbar.cpp delete mode 100644 src/imports/controls/universal/impl/qquickuniversalprogressbar_p.h delete mode 100644 src/imports/controls/universal/impl/qtquickcontrols2universalstyleimplplugin.cpp delete mode 100644 src/imports/controls/universal/qquickuniversalstyle.cpp delete mode 100644 src/imports/controls/universal/qquickuniversalstyle_p.h delete mode 100644 src/imports/controls/universal/qquickuniversaltheme.cpp delete mode 100644 src/imports/controls/universal/qquickuniversaltheme_p.h delete mode 100644 src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp delete mode 100644 src/imports/controls/universal/qtquickcontrols2universalstyleplugin.qrc delete mode 100644 src/imports/controls/universal/universal.pri delete mode 100644 src/imports/controls/windows/Button.qml delete mode 100644 src/imports/controls/windows/CMakeLists.txt delete mode 100644 src/imports/controls/windows/CheckBox.qml delete mode 100644 src/imports/controls/windows/ComboBox.qml delete mode 100644 src/imports/controls/windows/Frame.qml delete mode 100644 src/imports/controls/windows/GroupBox.qml delete mode 100644 src/imports/controls/windows/ProgressBar.qml delete mode 100644 src/imports/controls/windows/RadioButton.qml delete mode 100644 src/imports/controls/windows/ScrollBar.qml delete mode 100644 src/imports/controls/windows/ScrollView.qml delete mode 100644 src/imports/controls/windows/Slider.qml delete mode 100644 src/imports/controls/windows/SpinBox.qml delete mode 100644 src/imports/controls/windows/TextArea.qml delete mode 100644 src/imports/controls/windows/TextField.qml delete mode 100644 src/imports/controls/windows/qtquickcontrols2windowsstyleplugin.cpp delete mode 100644 src/imports/controls/windows/windows.pri delete mode 100644 src/imports/controlsimpl/CMakeLists.txt delete mode 100644 src/imports/controlsimpl/qtquickcontrols2implplugin.cpp delete mode 100644 src/imports/dialogs/CMakeLists.txt delete mode 100644 src/imports/dialogs/doc/images/qtquickdialogs-filedialog-gtk.png delete mode 100644 src/imports/dialogs/doc/images/qtquickdialogs-fontdialog-gtk.png delete mode 100644 src/imports/dialogs/doc/qtquickdialogs.qdocconf delete mode 100644 src/imports/dialogs/doc/src/includes/fallback.qdocinc delete mode 100644 src/imports/dialogs/qmldir delete mode 100644 src/imports/dialogs/qtquickdialogsplugin.cpp delete mode 100644 src/imports/nativestyle/CMakeLists.txt delete mode 100644 src/imports/nativestyle/controls/DefaultButton.qml delete mode 100644 src/imports/nativestyle/controls/DefaultCheckBox.qml delete mode 100644 src/imports/nativestyle/controls/DefaultComboBox.qml delete mode 100644 src/imports/nativestyle/controls/DefaultDial.qml delete mode 100644 src/imports/nativestyle/controls/DefaultFrame.qml delete mode 100644 src/imports/nativestyle/controls/DefaultGroupBox.qml delete mode 100644 src/imports/nativestyle/controls/DefaultProgressBar.qml delete mode 100644 src/imports/nativestyle/controls/DefaultRadioButton.qml delete mode 100644 src/imports/nativestyle/controls/DefaultScrollBar.qml delete mode 100644 src/imports/nativestyle/controls/DefaultSlider.qml delete mode 100644 src/imports/nativestyle/controls/DefaultSpinBox.qml delete mode 100644 src/imports/nativestyle/controls/DefaultTextArea.qml delete mode 100644 src/imports/nativestyle/controls/DefaultTextField.qml delete mode 100644 src/imports/nativestyle/controls/controls.pri delete mode 100644 src/imports/nativestyle/items/items.pri delete mode 100644 src/imports/nativestyle/items/qquickstyleitem.cpp delete mode 100644 src/imports/nativestyle/items/qquickstyleitem.h delete mode 100644 src/imports/nativestyle/items/qquickstyleitembutton.cpp delete mode 100644 src/imports/nativestyle/items/qquickstyleitembutton.h delete mode 100644 src/imports/nativestyle/items/qquickstyleitemcheckbox.cpp delete mode 100644 src/imports/nativestyle/items/qquickstyleitemcheckbox.h delete mode 100644 src/imports/nativestyle/items/qquickstyleitemcombobox.cpp delete mode 100644 src/imports/nativestyle/items/qquickstyleitemcombobox.h delete mode 100644 src/imports/nativestyle/items/qquickstyleitemdial.cpp delete mode 100644 src/imports/nativestyle/items/qquickstyleitemdial.h delete mode 100644 src/imports/nativestyle/items/qquickstyleitemframe.cpp delete mode 100644 src/imports/nativestyle/items/qquickstyleitemframe.h delete mode 100644 src/imports/nativestyle/items/qquickstyleitemgroupbox.cpp delete mode 100644 src/imports/nativestyle/items/qquickstyleitemgroupbox.h delete mode 100644 src/imports/nativestyle/items/qquickstyleitemprogressbar.cpp delete mode 100644 src/imports/nativestyle/items/qquickstyleitemprogressbar.h delete mode 100644 src/imports/nativestyle/items/qquickstyleitemradiobutton.cpp delete mode 100644 src/imports/nativestyle/items/qquickstyleitemradiobutton.h delete mode 100644 src/imports/nativestyle/items/qquickstyleitemscrollbar.cpp delete mode 100644 src/imports/nativestyle/items/qquickstyleitemscrollbar.h delete mode 100644 src/imports/nativestyle/items/qquickstyleitemscrollviewcorner.cpp delete mode 100644 src/imports/nativestyle/items/qquickstyleitemscrollviewcorner.h delete mode 100644 src/imports/nativestyle/items/qquickstyleitemslider.cpp delete mode 100644 src/imports/nativestyle/items/qquickstyleitemslider.h delete mode 100644 src/imports/nativestyle/items/qquickstyleitemspinbox.cpp delete mode 100644 src/imports/nativestyle/items/qquickstyleitemspinbox.h delete mode 100644 src/imports/nativestyle/items/qquickstyleitemtextfield.cpp delete mode 100644 src/imports/nativestyle/items/qquickstyleitemtextfield.h delete mode 100644 src/imports/nativestyle/qstyle/mac/mac.pri delete mode 100644 src/imports/nativestyle/qstyle/mac/qquickmacstyle_mac.mm delete mode 100644 src/imports/nativestyle/qstyle/mac/qquickmacstyle_mac_p.h delete mode 100644 src/imports/nativestyle/qstyle/mac/qquickmacstyle_mac_p_p.h delete mode 100644 src/imports/nativestyle/qstyle/qquickcommonstyle.cpp delete mode 100644 src/imports/nativestyle/qstyle/qquickcommonstyle.h delete mode 100644 src/imports/nativestyle/qstyle/qquickcommonstyle_p.h delete mode 100644 src/imports/nativestyle/qstyle/qquickcommonstylepixmaps_p.h delete mode 100644 src/imports/nativestyle/qstyle/qquickdrawutil.cpp delete mode 100644 src/imports/nativestyle/qstyle/qquickdrawutil.h delete mode 100644 src/imports/nativestyle/qstyle/qquicknativestyle.cpp delete mode 100644 src/imports/nativestyle/qstyle/qquicknativestyle.h delete mode 100644 src/imports/nativestyle/qstyle/qquickstyle.cpp delete mode 100644 src/imports/nativestyle/qstyle/qquickstyle.h delete mode 100644 src/imports/nativestyle/qstyle/qquickstyle_p.h delete mode 100644 src/imports/nativestyle/qstyle/qquickstylehelper.cpp delete mode 100644 src/imports/nativestyle/qstyle/qquickstylehelper_p.h delete mode 100644 src/imports/nativestyle/qstyle/qquickstyleoption.cpp delete mode 100644 src/imports/nativestyle/qstyle/qquickstyleoption.h delete mode 100644 src/imports/nativestyle/qstyle/qstyle.pri delete mode 100644 src/imports/nativestyle/qstyle/windows/qquickwindowsstyle.cpp delete mode 100644 src/imports/nativestyle/qstyle/windows/qquickwindowsstyle_p.h delete mode 100644 src/imports/nativestyle/qstyle/windows/qquickwindowsstyle_p_p.h delete mode 100644 src/imports/nativestyle/qstyle/windows/qquickwindowsvistastyle.cpp delete mode 100644 src/imports/nativestyle/qstyle/windows/qquickwindowsvistastyle_p.h delete mode 100644 src/imports/nativestyle/qstyle/windows/qquickwindowsvistastyle_p_p.h delete mode 100644 src/imports/nativestyle/qstyle/windows/qquickwindowsxpstyle.cpp delete mode 100644 src/imports/nativestyle/qstyle/windows/qquickwindowsxpstyle_p.h delete mode 100644 src/imports/nativestyle/qstyle/windows/qquickwindowsxpstyle_p_p.h delete mode 100644 src/imports/nativestyle/qstyle/windows/windows.pri delete mode 100644 src/imports/nativestyle/qtquickcontrols2nativestyleplugin.cpp delete mode 100644 src/imports/nativestyle/util/FocusFrame.qml delete mode 100644 src/imports/nativestyle/util/qquickmacfocusframe.h delete mode 100644 src/imports/nativestyle/util/qquickmacfocusframe.mm delete mode 100644 src/imports/nativestyle/util/util.pri delete mode 100644 src/imports/platform/CMakeLists.txt delete mode 100644 src/imports/platform/doc/images/qtlabsplatform-colordialog-gtk.png delete mode 100644 src/imports/platform/doc/images/qtlabsplatform-filedialog-gtk.png delete mode 100644 src/imports/platform/doc/images/qtlabsplatform-folderdialog-gtk.png delete mode 100644 src/imports/platform/doc/images/qtlabsplatform-fontdialog-gtk.png delete mode 100644 src/imports/platform/doc/images/qtlabsplatform-menu.png delete mode 100644 src/imports/platform/doc/images/qtlabsplatform-menubar.png delete mode 100644 src/imports/platform/doc/images/qtlabsplatform-messagedialog-android.png delete mode 100644 src/imports/platform/doc/images/qtlabsplatform-messagedialog-informative-android.png delete mode 100644 src/imports/platform/doc/images/qtlabsplatform-systemtrayicon-menu.png delete mode 100644 src/imports/platform/doc/images/qtlabsplatform-systemtrayicon-message.png delete mode 100644 src/imports/platform/doc/images/qtlabsplatform-systemtrayicon.png delete mode 100644 src/imports/platform/doc/qtlabsplatform.qdocconf delete mode 100644 src/imports/platform/doc/src/includes/widgets.qdocinc delete mode 100644 src/imports/platform/doc/src/qt6-changes.qdoc delete mode 100644 src/imports/platform/doc/src/qtlabsplatform-index.qdoc delete mode 100644 src/imports/platform/doc/src/qtlabsplatform-qmltypes.qdoc delete mode 100644 src/imports/platform/platform.pri delete mode 100644 src/imports/platform/qquickplatformcolordialog.cpp delete mode 100644 src/imports/platform/qquickplatformcolordialog_p.h delete mode 100644 src/imports/platform/qquickplatformdialog.cpp delete mode 100644 src/imports/platform/qquickplatformdialog_p.h delete mode 100644 src/imports/platform/qquickplatformfiledialog.cpp delete mode 100644 src/imports/platform/qquickplatformfiledialog_p.h delete mode 100644 src/imports/platform/qquickplatformfolderdialog.cpp delete mode 100644 src/imports/platform/qquickplatformfolderdialog_p.h delete mode 100644 src/imports/platform/qquickplatformfontdialog.cpp delete mode 100644 src/imports/platform/qquickplatformfontdialog_p.h delete mode 100644 src/imports/platform/qquickplatformicon.cpp delete mode 100644 src/imports/platform/qquickplatformicon_p.h delete mode 100644 src/imports/platform/qquickplatformiconloader.cpp delete mode 100644 src/imports/platform/qquickplatformiconloader_p.h delete mode 100644 src/imports/platform/qquickplatformmenu.cpp delete mode 100644 src/imports/platform/qquickplatformmenu_p.h delete mode 100644 src/imports/platform/qquickplatformmenubar.cpp delete mode 100644 src/imports/platform/qquickplatformmenubar_p.h delete mode 100644 src/imports/platform/qquickplatformmenuitem.cpp delete mode 100644 src/imports/platform/qquickplatformmenuitem_p.h delete mode 100644 src/imports/platform/qquickplatformmenuitemgroup.cpp delete mode 100644 src/imports/platform/qquickplatformmenuitemgroup_p.h delete mode 100644 src/imports/platform/qquickplatformmenuseparator.cpp delete mode 100644 src/imports/platform/qquickplatformmenuseparator_p.h delete mode 100644 src/imports/platform/qquickplatformmessagedialog.cpp delete mode 100644 src/imports/platform/qquickplatformmessagedialog_p.h delete mode 100644 src/imports/platform/qquickplatformstandardpaths.cpp delete mode 100644 src/imports/platform/qquickplatformstandardpaths_p.h delete mode 100644 src/imports/platform/qquickplatformsystemtrayicon.cpp delete mode 100644 src/imports/platform/qquickplatformsystemtrayicon_p.h delete mode 100644 src/imports/platform/qtlabsplatformplugin.cpp delete mode 100644 src/imports/platform/widgets/qwidgetplatform_p.h delete mode 100644 src/imports/platform/widgets/qwidgetplatformcolordialog.cpp delete mode 100644 src/imports/platform/widgets/qwidgetplatformcolordialog_p.h delete mode 100644 src/imports/platform/widgets/qwidgetplatformdialog.cpp delete mode 100644 src/imports/platform/widgets/qwidgetplatformdialog_p.h delete mode 100644 src/imports/platform/widgets/qwidgetplatformfiledialog.cpp delete mode 100644 src/imports/platform/widgets/qwidgetplatformfiledialog_p.h delete mode 100644 src/imports/platform/widgets/qwidgetplatformfontdialog.cpp delete mode 100644 src/imports/platform/widgets/qwidgetplatformfontdialog_p.h delete mode 100644 src/imports/platform/widgets/qwidgetplatformmenu.cpp delete mode 100644 src/imports/platform/widgets/qwidgetplatformmenu_p.h delete mode 100644 src/imports/platform/widgets/qwidgetplatformmenuitem.cpp delete mode 100644 src/imports/platform/widgets/qwidgetplatformmenuitem_p.h delete mode 100644 src/imports/platform/widgets/qwidgetplatformmessagedialog.cpp delete mode 100644 src/imports/platform/widgets/qwidgetplatformmessagedialog_p.h delete mode 100644 src/imports/platform/widgets/qwidgetplatformsystemtrayicon.cpp delete mode 100644 src/imports/platform/widgets/qwidgetplatformsystemtrayicon_p.h delete mode 100644 src/imports/platform/widgets/widgets.pri delete mode 100644 src/imports/templates/CMakeLists.txt delete mode 100644 src/imports/templates/doc/src/qtquicktemplates2-index.qdoc delete mode 100644 src/imports/templates/doc/src/qtquicktemplates2-qmltypes.qdoc delete mode 100644 src/imports/templates/qtquicktemplates2plugin.cpp create mode 100644 src/labs/CMakeLists.txt create mode 100644 src/labs/platform/CMakeLists.txt create mode 100644 src/labs/platform/doc/images/qtlabsplatform-colordialog-gtk.png create mode 100644 src/labs/platform/doc/images/qtlabsplatform-filedialog-gtk.png create mode 100644 src/labs/platform/doc/images/qtlabsplatform-folderdialog-gtk.png create mode 100644 src/labs/platform/doc/images/qtlabsplatform-fontdialog-gtk.png create mode 100644 src/labs/platform/doc/images/qtlabsplatform-menu.png create mode 100644 src/labs/platform/doc/images/qtlabsplatform-menubar.png create mode 100644 src/labs/platform/doc/images/qtlabsplatform-messagedialog-android.png create mode 100644 src/labs/platform/doc/images/qtlabsplatform-messagedialog-informative-android.png create mode 100644 src/labs/platform/doc/images/qtlabsplatform-systemtrayicon-menu.png create mode 100644 src/labs/platform/doc/images/qtlabsplatform-systemtrayicon-message.png create mode 100644 src/labs/platform/doc/images/qtlabsplatform-systemtrayicon.png create mode 100644 src/labs/platform/doc/qtlabsplatform.qdocconf create mode 100644 src/labs/platform/doc/src/includes/widgets.qdocinc create mode 100644 src/labs/platform/doc/src/qt6-changes.qdoc create mode 100644 src/labs/platform/doc/src/qtlabsplatform-index.qdoc create mode 100644 src/labs/platform/doc/src/qtlabsplatform-qmltypes.qdoc create mode 100644 src/labs/platform/platform.pri create mode 100644 src/labs/platform/qquickplatformcolordialog.cpp create mode 100644 src/labs/platform/qquickplatformcolordialog_p.h create mode 100644 src/labs/platform/qquickplatformdialog.cpp create mode 100644 src/labs/platform/qquickplatformdialog_p.h create mode 100644 src/labs/platform/qquickplatformfiledialog.cpp create mode 100644 src/labs/platform/qquickplatformfiledialog_p.h create mode 100644 src/labs/platform/qquickplatformfolderdialog.cpp create mode 100644 src/labs/platform/qquickplatformfolderdialog_p.h create mode 100644 src/labs/platform/qquickplatformfontdialog.cpp create mode 100644 src/labs/platform/qquickplatformfontdialog_p.h create mode 100644 src/labs/platform/qquickplatformicon.cpp create mode 100644 src/labs/platform/qquickplatformicon_p.h create mode 100644 src/labs/platform/qquickplatformiconloader.cpp create mode 100644 src/labs/platform/qquickplatformiconloader_p.h create mode 100644 src/labs/platform/qquickplatformmenu.cpp create mode 100644 src/labs/platform/qquickplatformmenu_p.h create mode 100644 src/labs/platform/qquickplatformmenubar.cpp create mode 100644 src/labs/platform/qquickplatformmenubar_p.h create mode 100644 src/labs/platform/qquickplatformmenuitem.cpp create mode 100644 src/labs/platform/qquickplatformmenuitem_p.h create mode 100644 src/labs/platform/qquickplatformmenuitemgroup.cpp create mode 100644 src/labs/platform/qquickplatformmenuitemgroup_p.h create mode 100644 src/labs/platform/qquickplatformmenuseparator.cpp create mode 100644 src/labs/platform/qquickplatformmenuseparator_p.h create mode 100644 src/labs/platform/qquickplatformmessagedialog.cpp create mode 100644 src/labs/platform/qquickplatformmessagedialog_p.h create mode 100644 src/labs/platform/qquickplatformstandardpaths.cpp create mode 100644 src/labs/platform/qquickplatformstandardpaths_p.h create mode 100644 src/labs/platform/qquickplatformsystemtrayicon.cpp create mode 100644 src/labs/platform/qquickplatformsystemtrayicon_p.h create mode 100644 src/labs/platform/qtlabsplatformplugin.cpp create mode 100644 src/labs/platform/widgets/qwidgetplatform_p.h create mode 100644 src/labs/platform/widgets/qwidgetplatformcolordialog.cpp create mode 100644 src/labs/platform/widgets/qwidgetplatformcolordialog_p.h create mode 100644 src/labs/platform/widgets/qwidgetplatformdialog.cpp create mode 100644 src/labs/platform/widgets/qwidgetplatformdialog_p.h create mode 100644 src/labs/platform/widgets/qwidgetplatformfiledialog.cpp create mode 100644 src/labs/platform/widgets/qwidgetplatformfiledialog_p.h create mode 100644 src/labs/platform/widgets/qwidgetplatformfontdialog.cpp create mode 100644 src/labs/platform/widgets/qwidgetplatformfontdialog_p.h create mode 100644 src/labs/platform/widgets/qwidgetplatformmenu.cpp create mode 100644 src/labs/platform/widgets/qwidgetplatformmenu_p.h create mode 100644 src/labs/platform/widgets/qwidgetplatformmenuitem.cpp create mode 100644 src/labs/platform/widgets/qwidgetplatformmenuitem_p.h create mode 100644 src/labs/platform/widgets/qwidgetplatformmessagedialog.cpp create mode 100644 src/labs/platform/widgets/qwidgetplatformmessagedialog_p.h create mode 100644 src/labs/platform/widgets/qwidgetplatformsystemtrayicon.cpp create mode 100644 src/labs/platform/widgets/qwidgetplatformsystemtrayicon_p.h create mode 100644 src/labs/platform/widgets/widgets.pri create mode 100644 src/quickcontrols2/basic/AbstractButton.qml create mode 100644 src/quickcontrols2/basic/Action.qml create mode 100644 src/quickcontrols2/basic/ActionGroup.qml create mode 100644 src/quickcontrols2/basic/ApplicationWindow.qml create mode 100644 src/quickcontrols2/basic/BusyIndicator.qml create mode 100644 src/quickcontrols2/basic/Button.qml create mode 100644 src/quickcontrols2/basic/ButtonGroup.qml create mode 100644 src/quickcontrols2/basic/CMakeLists.txt create mode 100644 src/quickcontrols2/basic/CheckBox.qml create mode 100644 src/quickcontrols2/basic/CheckDelegate.qml create mode 100644 src/quickcontrols2/basic/ComboBox.qml create mode 100644 src/quickcontrols2/basic/Container.qml create mode 100644 src/quickcontrols2/basic/Control.qml create mode 100644 src/quickcontrols2/basic/DelayButton.qml create mode 100644 src/quickcontrols2/basic/Dial.qml create mode 100644 src/quickcontrols2/basic/Dialog.qml create mode 100644 src/quickcontrols2/basic/DialogButtonBox.qml create mode 100644 src/quickcontrols2/basic/Drawer.qml create mode 100644 src/quickcontrols2/basic/Frame.qml create mode 100644 src/quickcontrols2/basic/GroupBox.qml create mode 100644 src/quickcontrols2/basic/HorizontalHeaderView.qml create mode 100644 src/quickcontrols2/basic/ItemDelegate.qml create mode 100644 src/quickcontrols2/basic/Label.qml create mode 100644 src/quickcontrols2/basic/Menu.qml create mode 100644 src/quickcontrols2/basic/MenuBar.qml create mode 100644 src/quickcontrols2/basic/MenuBarItem.qml create mode 100644 src/quickcontrols2/basic/MenuItem.qml create mode 100644 src/quickcontrols2/basic/MenuSeparator.qml create mode 100644 src/quickcontrols2/basic/Page.qml create mode 100644 src/quickcontrols2/basic/PageIndicator.qml create mode 100644 src/quickcontrols2/basic/Pane.qml create mode 100644 src/quickcontrols2/basic/Popup.qml create mode 100644 src/quickcontrols2/basic/ProgressBar.qml create mode 100644 src/quickcontrols2/basic/RadioButton.qml create mode 100644 src/quickcontrols2/basic/RadioDelegate.qml create mode 100644 src/quickcontrols2/basic/RangeSlider.qml create mode 100644 src/quickcontrols2/basic/RoundButton.qml create mode 100644 src/quickcontrols2/basic/ScrollBar.qml create mode 100644 src/quickcontrols2/basic/ScrollIndicator.qml create mode 100644 src/quickcontrols2/basic/ScrollView.qml create mode 100644 src/quickcontrols2/basic/Slider.qml create mode 100644 src/quickcontrols2/basic/SpinBox.qml create mode 100644 src/quickcontrols2/basic/SplitView.qml create mode 100644 src/quickcontrols2/basic/StackView.qml create mode 100644 src/quickcontrols2/basic/SwipeDelegate.qml create mode 100644 src/quickcontrols2/basic/SwipeView.qml create mode 100644 src/quickcontrols2/basic/Switch.qml create mode 100644 src/quickcontrols2/basic/SwitchDelegate.qml create mode 100644 src/quickcontrols2/basic/TabBar.qml create mode 100644 src/quickcontrols2/basic/TabButton.qml create mode 100644 src/quickcontrols2/basic/TextArea.qml create mode 100644 src/quickcontrols2/basic/TextField.qml create mode 100644 src/quickcontrols2/basic/ToolBar.qml create mode 100644 src/quickcontrols2/basic/ToolButton.qml create mode 100644 src/quickcontrols2/basic/ToolSeparator.qml create mode 100644 src/quickcontrols2/basic/ToolTip.qml create mode 100644 src/quickcontrols2/basic/Tumbler.qml create mode 100644 src/quickcontrols2/basic/VerticalHeaderView.qml create mode 100644 src/quickcontrols2/basic/basic.pri create mode 100644 src/quickcontrols2/basic/images/arrow-indicator.png create mode 100644 src/quickcontrols2/basic/images/arrow-indicator@2x.png create mode 100644 src/quickcontrols2/basic/images/arrow-indicator@3x.png create mode 100644 src/quickcontrols2/basic/images/arrow-indicator@4x.png create mode 100644 src/quickcontrols2/basic/images/check.png create mode 100644 src/quickcontrols2/basic/images/check@2x.png create mode 100644 src/quickcontrols2/basic/images/check@3x.png create mode 100644 src/quickcontrols2/basic/images/check@4x.png create mode 100644 src/quickcontrols2/basic/images/dial-indicator.png create mode 100644 src/quickcontrols2/basic/images/dial-indicator@2x.png create mode 100644 src/quickcontrols2/basic/images/dial-indicator@3x.png create mode 100644 src/quickcontrols2/basic/images/dial-indicator@4x.png create mode 100644 src/quickcontrols2/basic/images/double-arrow.png create mode 100644 src/quickcontrols2/basic/images/double-arrow@2x.png create mode 100644 src/quickcontrols2/basic/images/double-arrow@3x.png create mode 100644 src/quickcontrols2/basic/images/double-arrow@4x.png create mode 100644 src/quickcontrols2/basic/images/drop-indicator.png create mode 100644 src/quickcontrols2/basic/images/drop-indicator@2x.png create mode 100644 src/quickcontrols2/basic/images/drop-indicator@3x.png create mode 100644 src/quickcontrols2/basic/images/drop-indicator@4x.png create mode 100644 src/quickcontrols2/basic/impl/CMakeLists.txt create mode 100644 src/quickcontrols2/basic/impl/qquickbasicbusyindicator.cpp create mode 100644 src/quickcontrols2/basic/impl/qquickbasicbusyindicator_p.h create mode 100644 src/quickcontrols2/basic/impl/qquickbasicdial.cpp create mode 100644 src/quickcontrols2/basic/impl/qquickbasicdial_p.h create mode 100644 src/quickcontrols2/basic/impl/qquickbasicprogressbar.cpp create mode 100644 src/quickcontrols2/basic/impl/qquickbasicprogressbar_p.h create mode 100644 src/quickcontrols2/basic/qquickbasicstyle.cpp create mode 100644 src/quickcontrols2/basic/qquickbasicstyle_p.h create mode 100644 src/quickcontrols2/basic/qquickbasictheme.cpp create mode 100644 src/quickcontrols2/basic/qquickbasictheme_p.h create mode 100644 src/quickcontrols2/basic/qtquickcontrols2basicstyleplugin.cpp create mode 100644 src/quickcontrols2/basic/qtquickcontrols2basicstyleplugin.qrc create mode 100644 src/quickcontrols2/designer/AbstractButtonSection.qml create mode 100644 src/quickcontrols2/designer/BusyIndicatorSpecifics.qml create mode 100644 src/quickcontrols2/designer/ButtonSection.qml create mode 100644 src/quickcontrols2/designer/ButtonSpecifics.qml create mode 100644 src/quickcontrols2/designer/CMakeLists.txt create mode 100644 src/quickcontrols2/designer/CheckBoxSpecifics.qml create mode 100644 src/quickcontrols2/designer/CheckDelegateSpecifics.qml create mode 100644 src/quickcontrols2/designer/CheckSection.qml create mode 100644 src/quickcontrols2/designer/ComboBoxSpecifics.qml create mode 100644 src/quickcontrols2/designer/ContainerSection.qml create mode 100644 src/quickcontrols2/designer/ControlSection.qml create mode 100644 src/quickcontrols2/designer/ControlSpecifics.qml create mode 100644 src/quickcontrols2/designer/DelayButtonSpecifics.qml create mode 100644 src/quickcontrols2/designer/DialSpecifics.qml create mode 100644 src/quickcontrols2/designer/FrameSpecifics.qml create mode 100644 src/quickcontrols2/designer/GroupBoxSpecifics.qml create mode 100644 src/quickcontrols2/designer/InsetSection.qml create mode 100644 src/quickcontrols2/designer/ItemDelegateSection.qml create mode 100644 src/quickcontrols2/designer/ItemDelegateSpecifics.qml create mode 100644 src/quickcontrols2/designer/LabelSpecifics.qml create mode 100644 src/quickcontrols2/designer/PaddingSection.qml create mode 100644 src/quickcontrols2/designer/PageIndicatorSpecifics.qml create mode 100644 src/quickcontrols2/designer/PageSpecifics.qml create mode 100644 src/quickcontrols2/designer/PaneSection.qml create mode 100644 src/quickcontrols2/designer/PaneSpecifics.qml create mode 100644 src/quickcontrols2/designer/ProgressBarSpecifics.qml create mode 100644 src/quickcontrols2/designer/RadioButtonSpecifics.qml create mode 100644 src/quickcontrols2/designer/RadioDelegateSpecifics.qml create mode 100644 src/quickcontrols2/designer/RangeSliderSpecifics.qml create mode 100644 src/quickcontrols2/designer/RoundButtonSpecifics.qml create mode 100644 src/quickcontrols2/designer/ScrollViewSpecifics.qml create mode 100644 src/quickcontrols2/designer/SliderSpecifics.qml create mode 100644 src/quickcontrols2/designer/SpinBoxSpecifics.qml create mode 100644 src/quickcontrols2/designer/StackViewSpecifics.qml create mode 100644 src/quickcontrols2/designer/SwipeDelegateSpecifics.qml create mode 100644 src/quickcontrols2/designer/SwipeViewSpecifics.qml create mode 100644 src/quickcontrols2/designer/SwitchDelegateSpecifics.qml create mode 100644 src/quickcontrols2/designer/SwitchSpecifics.qml create mode 100644 src/quickcontrols2/designer/TabBarSpecifics.qml create mode 100644 src/quickcontrols2/designer/TabButtonSpecifics.qml create mode 100644 src/quickcontrols2/designer/TextAreaSpecifics.qml create mode 100644 src/quickcontrols2/designer/TextFieldSpecifics.qml create mode 100644 src/quickcontrols2/designer/ToolBarSpecifics.qml create mode 100644 src/quickcontrols2/designer/ToolButtonSpecifics.qml create mode 100644 src/quickcontrols2/designer/ToolSeparatorSpecifics.qml create mode 100644 src/quickcontrols2/designer/TumblerSpecifics.qml create mode 100644 src/quickcontrols2/designer/designer.pri create mode 100644 src/quickcontrols2/designer/images/busyindicator-icon.png create mode 100644 src/quickcontrols2/designer/images/busyindicator-icon16.png create mode 100644 src/quickcontrols2/designer/images/busyindicator-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/button-icon.png create mode 100644 src/quickcontrols2/designer/images/button-icon16.png create mode 100644 src/quickcontrols2/designer/images/button-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/checkbox-icon.png create mode 100644 src/quickcontrols2/designer/images/checkbox-icon16.png create mode 100644 src/quickcontrols2/designer/images/checkbox-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/combobox-icon.png create mode 100644 src/quickcontrols2/designer/images/combobox-icon16.png create mode 100644 src/quickcontrols2/designer/images/combobox-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/delaybutton-icon.png create mode 100644 src/quickcontrols2/designer/images/delaybutton-icon16.png create mode 100644 src/quickcontrols2/designer/images/delaybutton-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/dial-icon.png create mode 100644 src/quickcontrols2/designer/images/dial-icon16.png create mode 100644 src/quickcontrols2/designer/images/dial-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/frame-icon.png create mode 100644 src/quickcontrols2/designer/images/frame-icon16.png create mode 100644 src/quickcontrols2/designer/images/frame-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/groupbox-icon.png create mode 100644 src/quickcontrols2/designer/images/groupbox-icon16.png create mode 100644 src/quickcontrols2/designer/images/groupbox-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/itemdelegate-icon.png create mode 100644 src/quickcontrols2/designer/images/itemdelegate-icon16.png create mode 100644 src/quickcontrols2/designer/images/itemdelegate-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/label-icon.png create mode 100644 src/quickcontrols2/designer/images/label-icon16.png create mode 100644 src/quickcontrols2/designer/images/label-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/page-icon.png create mode 100644 src/quickcontrols2/designer/images/page-icon16.png create mode 100644 src/quickcontrols2/designer/images/page-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/pageindicator-icon.png create mode 100644 src/quickcontrols2/designer/images/pageindicator-icon16.png create mode 100644 src/quickcontrols2/designer/images/pageindicator-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/pane-icon.png create mode 100644 src/quickcontrols2/designer/images/pane-icon16.png create mode 100644 src/quickcontrols2/designer/images/pane-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/progressbar-icon.png create mode 100644 src/quickcontrols2/designer/images/progressbar-icon16.png create mode 100644 src/quickcontrols2/designer/images/progressbar-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/radiobutton-icon.png create mode 100644 src/quickcontrols2/designer/images/radiobutton-icon16.png create mode 100644 src/quickcontrols2/designer/images/radiobutton-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/rangeslider-icon.png create mode 100644 src/quickcontrols2/designer/images/rangeslider-icon16.png create mode 100644 src/quickcontrols2/designer/images/rangeslider-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/roundbutton-icon.png create mode 100644 src/quickcontrols2/designer/images/roundbutton-icon16.png create mode 100644 src/quickcontrols2/designer/images/roundbutton-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/scrollview-icon.png create mode 100644 src/quickcontrols2/designer/images/scrollview-icon16.png create mode 100644 src/quickcontrols2/designer/images/scrollview-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/slider-icon.png create mode 100644 src/quickcontrols2/designer/images/slider-icon16.png create mode 100644 src/quickcontrols2/designer/images/slider-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/spinbox-icon.png create mode 100644 src/quickcontrols2/designer/images/spinbox-icon16.png create mode 100644 src/quickcontrols2/designer/images/spinbox-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/stackview-icon.png create mode 100644 src/quickcontrols2/designer/images/stackview-icon16.png create mode 100644 src/quickcontrols2/designer/images/stackview-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/swipeview-icon.png create mode 100644 src/quickcontrols2/designer/images/swipeview-icon16.png create mode 100644 src/quickcontrols2/designer/images/swipeview-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/switch-icon.png create mode 100644 src/quickcontrols2/designer/images/switch-icon16.png create mode 100644 src/quickcontrols2/designer/images/switch-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/textarea-icon.png create mode 100644 src/quickcontrols2/designer/images/textarea-icon16.png create mode 100644 src/quickcontrols2/designer/images/textarea-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/textfield-icon.png create mode 100644 src/quickcontrols2/designer/images/textfield-icon16.png create mode 100644 src/quickcontrols2/designer/images/textfield-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/toolbar-icon.png create mode 100644 src/quickcontrols2/designer/images/toolbar-icon16.png create mode 100644 src/quickcontrols2/designer/images/toolbar-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/toolbutton-icon.png create mode 100644 src/quickcontrols2/designer/images/toolbutton-icon16.png create mode 100644 src/quickcontrols2/designer/images/toolbutton-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/toolseparator-icon.png create mode 100644 src/quickcontrols2/designer/images/toolseparator-icon16.png create mode 100644 src/quickcontrols2/designer/images/toolseparator-icon@2x.png create mode 100644 src/quickcontrols2/designer/images/tumbler-icon.png create mode 100644 src/quickcontrols2/designer/images/tumbler-icon16.png create mode 100644 src/quickcontrols2/designer/images/tumbler-icon@2x.png create mode 100644 src/quickcontrols2/designer/qtquickcontrols2.metainfo create mode 100644 src/quickcontrols2/doc/doc.pri create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-applicationwindow-wireframe.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-basic-thumbnail.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-basic.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-busyindicator-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-busyindicator.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-busyindicator.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-button-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-button-flat.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-button-highlighted.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-button-icononly.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-button-textbesideicon.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-button-textonly.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-button-textundericon.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-button.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-checkbox-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-checkbox-group.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-checkbox-tristate.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-checkbox.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-checkdelegate-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-checkdelegate-tristate.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-checkdelegate.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-combobox-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-combobox-delegate.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-combobox-popup.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-combobox.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-control.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-control.svg create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-customize-buttons.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-delaybutton-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-delaybutton.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-dial-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-dial-handle.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-dial-inputMode.svgz create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-dial-inputmode.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-dial-no-wrap.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-dial-wrap.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-dial.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-dialogbuttonbox-attached.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-dialogbuttonbox.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-drawer-expanded-wireframe.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-drawer-wireframe.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-drawer.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-frame-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-frame.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-fusion-palettes.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-fusion-thumbnail.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-fusion-violet.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-fusion.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-groupbox-checkable.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-groupbox-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-groupbox-label.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-groupbox.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-4x.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-inset-boundaries.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-inset.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-resized-padding.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-resized-stretchable.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-size.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch.svgz create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-imagine-customization-dark.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-imagine-customization.svgz create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-imagine-thumbnail.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-imagine.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-itemdelegate-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-itemdelegate.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-itemdelegate.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-label-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-label.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-macos-dark.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-macos-light.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-macos-thumbnail.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-material-accent.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-material-attributes.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-material-background.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-material-dark.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-material-elevation.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-material-foreground.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-material-light.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-material-purple.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-material-theme.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-material-thumbnail.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-material-variant-dense.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-material-variant-normal.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-menu-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-menu.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-menu.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-menubar-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-menubar.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-menuseparator-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-menuseparator.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-page-wireframe.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-pageindicator-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-pageindicator-delegate.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-pageindicator.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-pane-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-pane.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-popup-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-popup-settings.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-popup-transformorigin.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-popup.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-popup.svg create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-progressbar-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-progressbar-indeterminate.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-progressbar.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-radiobutton-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-radiobutton.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-radiodelegate-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-radiodelegate.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-rangeslider-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-rangeslider.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-roundbutton.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar-non-attached.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar-nosnap.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar-snapalways.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar-snaponrelease.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-scrollindicator-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-scrollindicator-non-attached.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-scrollindicator.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-scrollview-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-scrollview-wireframe.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-scrollview.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-slider-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-slider-handle.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-slider-nosnap.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-slider-snapalways.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-slider-snaponrelease.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-slider.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-spinbox-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-spinbox-double.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-spinbox-down.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-spinbox-textual.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-spinbox-up.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-spinbox.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-splitview-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-stackview-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-stackview-pop.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-stackview-push.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-stackview-replace.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-stackview-unwind.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-stackview-visible.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-stackview-wireframe.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-styles.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-swipedelegate-behind.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-swipedelegate-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-swipedelegate-leading-trailing.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-swipedelegate.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-swipeview-indicator.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-swipeview-wireframe.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-swipeview.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-switch-checked.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-switch-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-switch.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-switch.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-switchdelegate-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-switchdelegate.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-tabbar-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-tabbar-explicit.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-tabbar-flickable.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-tabbar-wireframe.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-tabbar.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-tabbar.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-tabbutton.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-textarea-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-textarea-scrollable.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-textarea.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-textfield-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-textfield-disabled.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-textfield-focused.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-textfield-normal.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-textfield.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-toolbar-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-toolbar.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-toolbutton-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-toolbutton.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-toolseparator-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-toolseparator.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-tooltip-delay.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-tooltip-hover.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-tooltip-pressandhold.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-tooltip-slider.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-tooltip.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-tumbler-custom.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-tumbler-delegate.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-tumbler-wrap.gif create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-tumbler.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-universal-accent.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-universal-attributes.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-universal-background.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-universal-button.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-universal-dark.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-universal-foreground.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-universal-light.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-universal-theme.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-universal-thumbnail.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-universal-violet.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-windows-thumbnail.png create mode 100644 src/quickcontrols2/doc/images/qtquickcontrols2-windows.png create mode 100644 src/quickcontrols2/doc/manifest-meta.qdocconf create mode 100644 src/quickcontrols2/doc/qtquickcontrols.qdocconf create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-action.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-busyindicator-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-button-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-button-icononly.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-button-textbesideicon.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-button-textonly.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-checkbox-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-checkbox-group.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-checkdelegate-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-combobox-accepted.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-combobox-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-combobox-valuerole.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-delaybutton-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-dial-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-dialog-modal.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-dialog-modeless.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-dialog.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-dialogbuttonbox-attached.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-dialogbuttonbox.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-frame-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-frame.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-groupbox-checkable.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-groupbox-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-groupbox.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-headerview-simple.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-itemdelegate-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-itemdelegate.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-label-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-label.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-material-accent.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-material-background.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-material-elevation.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-material-foreground.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-material-theme.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-material-variant.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-menu-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-menubar-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-menubar.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-menuseparator-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-menuseparator.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-overlay-modal.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-overlay-modeless.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-overview.cmake create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-pageindicator-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-pageindicator-interactive.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-pageindicator.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-pane-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-pane.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-popup-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-popup.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-progressbar-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-radiobutton-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-radiodelegate-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-rangeslider-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-roundbutton.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollbar-active.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollbar-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollbar-non-attached.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollbar-policy.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollindicator-active.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollindicator-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollindicator-non-attached.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollview-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollview-interactive.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollview-listview.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollview-policy.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollview.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-slider-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-spinbox-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-spinbox-double.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-spinbox-textual.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-spinbox.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-splitview-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-stackview-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-stackview-visible.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-swipedelegate-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-swipedelegate-transition.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-swipedelegate.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-swipeview-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-swipeview-indicator.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-switch-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-switchdelegate-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-tabbar-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-tabbar-explicit.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-tabbar-flickable.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-tabbar.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-tabbutton.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-textarea-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-textarea-scrollable.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-textfield-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-textfield-disabled.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-textfield-focused.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-textfield-normal.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-toolbar-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-toolbar.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-toolbutton-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-toolseparator-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-toolseparator.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-tooltip-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-tooltip-hover.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-tooltip-pressandhold.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-tooltip-slider.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-tooltip.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-tumbler-custom.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-tumbler-listView.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-tumbler-pathView.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-tumbler-timePicker.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-universal-accent.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-universal-background.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-universal-foreground.qml create mode 100644 src/quickcontrols2/doc/snippets/qtquickcontrols2-universal-theme.qml create mode 100644 src/quickcontrols2/doc/src/external-pages.qdoc create mode 100644 src/quickcontrols2/doc/src/includes/customize-button-background.qdocinc create mode 100644 src/quickcontrols2/doc/src/includes/inputmethodhints.qdocinc create mode 100644 src/quickcontrols2/doc/src/includes/qquickcontrol-background.qdocinc create mode 100644 src/quickcontrols2/doc/src/includes/qquickcontrol-focusreason.qdocinc create mode 100644 src/quickcontrols2/doc/src/includes/qquickdial.qdocinc create mode 100644 src/quickcontrols2/doc/src/includes/qquickicon.qdocinc create mode 100644 src/quickcontrols2/doc/src/includes/qquickimaginestyle.qdocinc create mode 100644 src/quickcontrols2/doc/src/includes/qquickmaterialstyle.qdocinc create mode 100644 src/quickcontrols2/doc/src/includes/qquickoverlay-popup-parent.qdocinc create mode 100644 src/quickcontrols2/doc/src/includes/qquickpopup-padding.qdocinc create mode 100644 src/quickcontrols2/doc/src/includes/qquickstackview.qdocinc create mode 100644 src/quickcontrols2/doc/src/includes/qquickswipedelegate-interaction.qdocinc create mode 100644 src/quickcontrols2/doc/src/includes/qquickswitch.qdocinc create mode 100644 src/quickcontrols2/doc/src/includes/qquickuniversalstyle.qdocinc create mode 100644 src/quickcontrols2/doc/src/qt6-changes.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-basic.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-buttons.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-configuration.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-containers.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-cppclasses.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-customize.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-delegates.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-deployment.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-environment.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-examples.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-fileselectors.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-focus.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-fusion.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-gettingstarted.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-guidelines.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-icons.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-imagine.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-index.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-indicators.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-input.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-macos.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-material.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-menus.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-navigation.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-popups.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-qmltypes.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-separators.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-styles.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-universal.qdoc create mode 100644 src/quickcontrols2/doc/src/qtquickcontrols2-windows.qdoc create mode 100644 src/quickcontrols2/fusion/ApplicationWindow.qml create mode 100644 src/quickcontrols2/fusion/BusyIndicator.qml create mode 100644 src/quickcontrols2/fusion/Button.qml create mode 100644 src/quickcontrols2/fusion/CMakeLists.txt create mode 100644 src/quickcontrols2/fusion/CheckBox.qml create mode 100644 src/quickcontrols2/fusion/CheckDelegate.qml create mode 100644 src/quickcontrols2/fusion/ComboBox.qml create mode 100644 src/quickcontrols2/fusion/DelayButton.qml create mode 100644 src/quickcontrols2/fusion/Dial.qml create mode 100644 src/quickcontrols2/fusion/Dialog.qml create mode 100644 src/quickcontrols2/fusion/DialogButtonBox.qml create mode 100644 src/quickcontrols2/fusion/Drawer.qml create mode 100644 src/quickcontrols2/fusion/Frame.qml create mode 100644 src/quickcontrols2/fusion/GroupBox.qml create mode 100644 src/quickcontrols2/fusion/HorizontalHeaderView.qml create mode 100644 src/quickcontrols2/fusion/ItemDelegate.qml create mode 100644 src/quickcontrols2/fusion/Label.qml create mode 100644 src/quickcontrols2/fusion/Menu.qml create mode 100644 src/quickcontrols2/fusion/MenuBar.qml create mode 100644 src/quickcontrols2/fusion/MenuBarItem.qml create mode 100644 src/quickcontrols2/fusion/MenuItem.qml create mode 100644 src/quickcontrols2/fusion/MenuSeparator.qml create mode 100644 src/quickcontrols2/fusion/Page.qml create mode 100644 src/quickcontrols2/fusion/PageIndicator.qml create mode 100644 src/quickcontrols2/fusion/Pane.qml create mode 100644 src/quickcontrols2/fusion/Popup.qml create mode 100644 src/quickcontrols2/fusion/ProgressBar.qml create mode 100644 src/quickcontrols2/fusion/RadioButton.qml create mode 100644 src/quickcontrols2/fusion/RadioDelegate.qml create mode 100644 src/quickcontrols2/fusion/RangeSlider.qml create mode 100644 src/quickcontrols2/fusion/RoundButton.qml create mode 100644 src/quickcontrols2/fusion/ScrollBar.qml create mode 100644 src/quickcontrols2/fusion/ScrollIndicator.qml create mode 100644 src/quickcontrols2/fusion/ScrollView.qml create mode 100644 src/quickcontrols2/fusion/Slider.qml create mode 100644 src/quickcontrols2/fusion/SpinBox.qml create mode 100644 src/quickcontrols2/fusion/SplitView.qml create mode 100644 src/quickcontrols2/fusion/SwipeDelegate.qml create mode 100644 src/quickcontrols2/fusion/Switch.qml create mode 100644 src/quickcontrols2/fusion/SwitchDelegate.qml create mode 100644 src/quickcontrols2/fusion/TabBar.qml create mode 100644 src/quickcontrols2/fusion/TabButton.qml create mode 100644 src/quickcontrols2/fusion/TextArea.qml create mode 100644 src/quickcontrols2/fusion/TextField.qml create mode 100644 src/quickcontrols2/fusion/ToolBar.qml create mode 100644 src/quickcontrols2/fusion/ToolButton.qml create mode 100644 src/quickcontrols2/fusion/ToolSeparator.qml create mode 100644 src/quickcontrols2/fusion/ToolTip.qml create mode 100644 src/quickcontrols2/fusion/Tumbler.qml create mode 100644 src/quickcontrols2/fusion/VerticalHeaderView.qml create mode 100644 src/quickcontrols2/fusion/fusion.pri create mode 100644 src/quickcontrols2/fusion/images/arrow.png create mode 100644 src/quickcontrols2/fusion/images/arrow.svg create mode 100644 src/quickcontrols2/fusion/images/arrow@2x.png create mode 100644 src/quickcontrols2/fusion/images/arrow@3x.png create mode 100644 src/quickcontrols2/fusion/images/arrow@4x.png create mode 100644 src/quickcontrols2/fusion/images/checkmark.png create mode 100644 src/quickcontrols2/fusion/images/checkmark.svg create mode 100644 src/quickcontrols2/fusion/images/checkmark@2x.png create mode 100644 src/quickcontrols2/fusion/images/checkmark@3x.png create mode 100644 src/quickcontrols2/fusion/images/checkmark@4x.png create mode 100644 src/quickcontrols2/fusion/images/progressmask.png create mode 100644 src/quickcontrols2/fusion/images/progressmask.svg create mode 100644 src/quickcontrols2/fusion/images/progressmask@2x.png create mode 100644 src/quickcontrols2/fusion/images/progressmask@3x.png create mode 100644 src/quickcontrols2/fusion/images/progressmask@4x.png create mode 100644 src/quickcontrols2/fusion/impl/ButtonPanel.qml create mode 100644 src/quickcontrols2/fusion/impl/CMakeLists.txt create mode 100644 src/quickcontrols2/fusion/impl/CheckIndicator.qml create mode 100644 src/quickcontrols2/fusion/impl/RadioIndicator.qml create mode 100644 src/quickcontrols2/fusion/impl/SliderGroove.qml create mode 100644 src/quickcontrols2/fusion/impl/SliderHandle.qml create mode 100644 src/quickcontrols2/fusion/impl/SwitchIndicator.qml create mode 100644 src/quickcontrols2/fusion/impl/qquickfusionbusyindicator.cpp create mode 100644 src/quickcontrols2/fusion/impl/qquickfusionbusyindicator_p.h create mode 100644 src/quickcontrols2/fusion/impl/qquickfusiondial.cpp create mode 100644 src/quickcontrols2/fusion/impl/qquickfusiondial_p.h create mode 100644 src/quickcontrols2/fusion/impl/qquickfusionknob.cpp create mode 100644 src/quickcontrols2/fusion/impl/qquickfusionknob_p.h create mode 100644 src/quickcontrols2/fusion/qquickfusionstyle.cpp create mode 100644 src/quickcontrols2/fusion/qquickfusionstyle_p.h create mode 100644 src/quickcontrols2/fusion/qquickfusiontheme.cpp create mode 100644 src/quickcontrols2/fusion/qquickfusiontheme_p.h create mode 100644 src/quickcontrols2/fusion/qtquickcontrols2fusionstyle.qrc create mode 100644 src/quickcontrols2/fusion/qtquickcontrols2fusionstyleplugin.cpp create mode 100644 src/quickcontrols2/imagine/ApplicationWindow.qml create mode 100644 src/quickcontrols2/imagine/BusyIndicator.qml create mode 100644 src/quickcontrols2/imagine/Button.qml create mode 100644 src/quickcontrols2/imagine/CMakeLists.txt create mode 100644 src/quickcontrols2/imagine/CheckBox.qml create mode 100644 src/quickcontrols2/imagine/CheckDelegate.qml create mode 100644 src/quickcontrols2/imagine/ComboBox.qml create mode 100644 src/quickcontrols2/imagine/DelayButton.qml create mode 100644 src/quickcontrols2/imagine/Dial.qml create mode 100644 src/quickcontrols2/imagine/Dialog.qml create mode 100644 src/quickcontrols2/imagine/DialogButtonBox.qml create mode 100644 src/quickcontrols2/imagine/Drawer.qml create mode 100644 src/quickcontrols2/imagine/Frame.qml create mode 100644 src/quickcontrols2/imagine/GroupBox.qml create mode 100644 src/quickcontrols2/imagine/HorizontalHeaderView.qml create mode 100644 src/quickcontrols2/imagine/ItemDelegate.qml create mode 100644 src/quickcontrols2/imagine/Label.qml create mode 100644 src/quickcontrols2/imagine/Menu.qml create mode 100644 src/quickcontrols2/imagine/MenuItem.qml create mode 100644 src/quickcontrols2/imagine/MenuSeparator.qml create mode 100644 src/quickcontrols2/imagine/Page.qml create mode 100644 src/quickcontrols2/imagine/PageIndicator.qml create mode 100644 src/quickcontrols2/imagine/Pane.qml create mode 100644 src/quickcontrols2/imagine/Popup.qml create mode 100644 src/quickcontrols2/imagine/ProgressBar.qml create mode 100644 src/quickcontrols2/imagine/RadioButton.qml create mode 100644 src/quickcontrols2/imagine/RadioDelegate.qml create mode 100644 src/quickcontrols2/imagine/RangeSlider.qml create mode 100644 src/quickcontrols2/imagine/RoundButton.qml create mode 100644 src/quickcontrols2/imagine/ScrollBar.qml create mode 100644 src/quickcontrols2/imagine/ScrollIndicator.qml create mode 100644 src/quickcontrols2/imagine/ScrollView.qml create mode 100644 src/quickcontrols2/imagine/Slider.qml create mode 100644 src/quickcontrols2/imagine/SpinBox.qml create mode 100644 src/quickcontrols2/imagine/SplitView.qml create mode 100644 src/quickcontrols2/imagine/StackView.qml create mode 100644 src/quickcontrols2/imagine/SwipeDelegate.qml create mode 100644 src/quickcontrols2/imagine/SwipeView.qml create mode 100644 src/quickcontrols2/imagine/Switch.qml create mode 100644 src/quickcontrols2/imagine/SwitchDelegate.qml create mode 100644 src/quickcontrols2/imagine/TabBar.qml create mode 100644 src/quickcontrols2/imagine/TabButton.qml create mode 100644 src/quickcontrols2/imagine/TextArea.qml create mode 100644 src/quickcontrols2/imagine/TextField.qml create mode 100644 src/quickcontrols2/imagine/ToolBar.qml create mode 100644 src/quickcontrols2/imagine/ToolButton.qml create mode 100644 src/quickcontrols2/imagine/ToolSeparator.qml create mode 100644 src/quickcontrols2/imagine/ToolTip.qml create mode 100644 src/quickcontrols2/imagine/Tumbler.qml create mode 100644 src/quickcontrols2/imagine/VerticalHeaderView.qml create mode 100644 src/quickcontrols2/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/9-patch-export.js create mode 100644 src/quickcontrols2/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/manifest.json create mode 100644 src/quickcontrols2/imagine/design/imagine.sketch create mode 100644 src/quickcontrols2/imagine/images/applicationwindow-background.png create mode 100644 src/quickcontrols2/imagine/images/applicationwindow-background@2x.png create mode 100644 src/quickcontrols2/imagine/images/applicationwindow-background@3x.png create mode 100644 src/quickcontrols2/imagine/images/applicationwindow-background@4x.png create mode 100644 src/quickcontrols2/imagine/images/applicationwindow-overlay-modal.png create mode 100644 src/quickcontrols2/imagine/images/applicationwindow-overlay-modal@2x.png create mode 100644 src/quickcontrols2/imagine/images/applicationwindow-overlay-modal@3x.png create mode 100644 src/quickcontrols2/imagine/images/applicationwindow-overlay-modal@4x.png create mode 100644 src/quickcontrols2/imagine/images/applicationwindow-overlay.png create mode 100644 src/quickcontrols2/imagine/images/applicationwindow-overlay@2x.png create mode 100644 src/quickcontrols2/imagine/images/applicationwindow-overlay@3x.png create mode 100644 src/quickcontrols2/imagine/images/applicationwindow-overlay@4x.png create mode 100644 src/quickcontrols2/imagine/images/busyindicator-animation.webp create mode 100644 src/quickcontrols2/imagine/images/busyindicator-animation@2x.webp create mode 100644 src/quickcontrols2/imagine/images/busyindicator-animation@3x.webp create mode 100644 src/quickcontrols2/imagine/images/busyindicator-animation@4x.webp create mode 100644 src/quickcontrols2/imagine/images/button-background-checked-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-checked-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-checked-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-checked-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-checked-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-checked-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-checked-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-checked-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-checked-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-checked-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-checked-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-checked-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-checked.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-checked@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-checked@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-checked@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-checked-pressed.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-checked-pressed@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-checked-pressed@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-checked-pressed@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-checked.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-checked@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-checked@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-checked@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-highlighted-checked.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-highlighted-checked@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-highlighted-checked@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-highlighted-checked@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-highlighted-pressed.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-highlighted-pressed@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-highlighted-pressed@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-highlighted-pressed@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-highlighted.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-highlighted@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-highlighted@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-highlighted@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-pressed.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-pressed@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-pressed@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat-pressed@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-flat@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted-checked.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted-checked@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted-checked@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted-checked@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted-pressed.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted-pressed@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted-pressed@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted-pressed@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-highlighted@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-pressed.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-pressed@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-pressed@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background-pressed@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/button-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-checked-focused.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-checked-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-checked-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-checked-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-checked-hovered.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-checked-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-checked-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-checked-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-checked-pressed.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-checked-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-checked-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-checked-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-checked.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-checked@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-checked@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-checked@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-disabled.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-focused.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-hovered.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-focused.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-hovered.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-pressed.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-pressed.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkbox-indicator@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background-highlighted.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background-highlighted@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background-highlighted@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background-highlighted@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background-pressed.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background-pressed@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background-pressed@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background-pressed@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-focused.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-hovered.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-pressed.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-checked.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-checked@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-checked@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-checked@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-disabled.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-focused.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-hovered.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-focused.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-hovered.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-pressed.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-pressed.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator@2x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator@3x.png create mode 100644 src/quickcontrols2/imagine/images/checkdelegate-indicator@4x.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-editable-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-editable-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-editable-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-editable-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-editable-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-editable-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-editable-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-editable-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-editable.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-editable@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-editable@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-editable@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-open.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-open@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-open@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-open@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-pressed.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-pressed@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-pressed@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background-pressed@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator-disabled.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator-editable-disabled.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator-editable-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator-editable-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator-editable-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored-disabled.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored@2x.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored@3x.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored@4x.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator-editable.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator-editable@2x.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator-editable@3x.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator-editable@4x.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator@2x.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator@3x.png create mode 100644 src/quickcontrols2/imagine/images/combobox-indicator@4x.png create mode 100644 src/quickcontrols2/imagine/images/combobox-popup.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-popup@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-popup@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/combobox-popup@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-checked-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-checked-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-checked-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-checked-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-checked-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-checked-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-checked-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-checked-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-checked.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-checked@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-checked@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-checked@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-disabled-checked.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-disabled-checked@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-disabled-checked@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-disabled-checked@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-pressed.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-pressed@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-pressed@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background-pressed@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-mask.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-mask@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-mask@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-mask@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-progress-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-progress-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-progress-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-progress-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-progress.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-progress@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-progress@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/delaybutton-progress@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/dial-background-disabled.png create mode 100644 src/quickcontrols2/imagine/images/dial-background-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/dial-background-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/dial-background-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/dial-background-focused.png create mode 100644 src/quickcontrols2/imagine/images/dial-background-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/dial-background-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/dial-background-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/dial-background.png create mode 100644 src/quickcontrols2/imagine/images/dial-background@2x.png create mode 100644 src/quickcontrols2/imagine/images/dial-background@3x.png create mode 100644 src/quickcontrols2/imagine/images/dial-background@4x.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-disabled.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-focused-hovered.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-focused-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-focused-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-focused-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-focused-pressed.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-focused-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-focused-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-focused-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-focused.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-hovered.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-pressed.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle@2x.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle@3x.png create mode 100644 src/quickcontrols2/imagine/images/dial-handle@4x.png create mode 100644 src/quickcontrols2/imagine/images/dialog-background.9.png create mode 100644 src/quickcontrols2/imagine/images/dialog-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/dialog-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/dialog-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/dialog-overlay-modal.png create mode 100644 src/quickcontrols2/imagine/images/dialog-overlay-modal@2x.png create mode 100644 src/quickcontrols2/imagine/images/dialog-overlay-modal@3x.png create mode 100644 src/quickcontrols2/imagine/images/dialog-overlay-modal@4x.png create mode 100644 src/quickcontrols2/imagine/images/dialog-overlay.png create mode 100644 src/quickcontrols2/imagine/images/dialog-overlay@2x.png create mode 100644 src/quickcontrols2/imagine/images/dialog-overlay@3x.png create mode 100644 src/quickcontrols2/imagine/images/dialog-overlay@4x.png create mode 100644 src/quickcontrols2/imagine/images/dialogbuttonbox-background.9.png create mode 100644 src/quickcontrols2/imagine/images/dialogbuttonbox-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/dialogbuttonbox-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/dialogbuttonbox-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/drawer-background-bottom.9.png create mode 100644 src/quickcontrols2/imagine/images/drawer-background-bottom@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/drawer-background-bottom@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/drawer-background-bottom@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/drawer-background-left.9.png create mode 100644 src/quickcontrols2/imagine/images/drawer-background-left@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/drawer-background-left@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/drawer-background-left@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/drawer-background-right.9.png create mode 100644 src/quickcontrols2/imagine/images/drawer-background-right@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/drawer-background-right@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/drawer-background-right@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/drawer-background-top.9.png create mode 100644 src/quickcontrols2/imagine/images/drawer-background-top@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/drawer-background-top@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/drawer-background-top@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/drawer-overlay-modal.png create mode 100644 src/quickcontrols2/imagine/images/drawer-overlay-modal@2x.png create mode 100644 src/quickcontrols2/imagine/images/drawer-overlay-modal@3x.png create mode 100644 src/quickcontrols2/imagine/images/drawer-overlay-modal@4x.png create mode 100644 src/quickcontrols2/imagine/images/drawer-overlay.png create mode 100644 src/quickcontrols2/imagine/images/drawer-overlay@2x.png create mode 100644 src/quickcontrols2/imagine/images/drawer-overlay@3x.png create mode 100644 src/quickcontrols2/imagine/images/drawer-overlay@4x.png create mode 100644 src/quickcontrols2/imagine/images/frame-background.9.png create mode 100644 src/quickcontrols2/imagine/images/frame-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/frame-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/frame-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/groupbox-background.9.png create mode 100644 src/quickcontrols2/imagine/images/groupbox-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/groupbox-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/groupbox-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/groupbox-title.9.png create mode 100644 src/quickcontrols2/imagine/images/groupbox-title@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/groupbox-title@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/groupbox-title@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background-highlighted.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background-highlighted@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background-highlighted@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background-highlighted@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background-pressed.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background-pressed@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background-pressed@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background-pressed@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/itemdelegate-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/menu-background.9.png create mode 100644 src/quickcontrols2/imagine/images/menu-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/menu-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/menu-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-arrow-disabled.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-arrow-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-arrow-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-arrow-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-arrow-mirrored-disabled.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-arrow-mirrored-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-arrow-mirrored-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-arrow-mirrored-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-arrow-mirrored.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-arrow-mirrored@2x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-arrow-mirrored@3x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-arrow-mirrored@4x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-arrow.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-arrow@2x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-arrow@3x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-arrow@4x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-background-highlighted.9.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-background-highlighted@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-background-highlighted@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-background-highlighted@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-background.9.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-checked-focused.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-checked-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-checked-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-checked-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-checked-hovered.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-checked-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-checked-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-checked-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-checked-pressed.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-checked-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-checked-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-checked-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-checked.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-checked@2x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-checked@3x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-checked@4x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-disabled.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-focused.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-hovered.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-pressed.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator@2x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator@3x.png create mode 100644 src/quickcontrols2/imagine/images/menuitem-indicator@4x.png create mode 100644 src/quickcontrols2/imagine/images/menuseparator-separator.9.png create mode 100644 src/quickcontrols2/imagine/images/menuseparator-separator@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/menuseparator-separator@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/menuseparator-separator@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/page-background.png create mode 100644 src/quickcontrols2/imagine/images/page-background@2x.png create mode 100644 src/quickcontrols2/imagine/images/page-background@3x.png create mode 100644 src/quickcontrols2/imagine/images/page-background@4x.png create mode 100644 src/quickcontrols2/imagine/images/pageindicator-delegate-current.png create mode 100644 src/quickcontrols2/imagine/images/pageindicator-delegate-current@2x.png create mode 100644 src/quickcontrols2/imagine/images/pageindicator-delegate-current@3x.png create mode 100644 src/quickcontrols2/imagine/images/pageindicator-delegate-current@4x.png create mode 100644 src/quickcontrols2/imagine/images/pageindicator-delegate-disabled-current.png create mode 100644 src/quickcontrols2/imagine/images/pageindicator-delegate-disabled-current@2x.png create mode 100644 src/quickcontrols2/imagine/images/pageindicator-delegate-disabled-current@3x.png create mode 100644 src/quickcontrols2/imagine/images/pageindicator-delegate-disabled-current@4x.png create mode 100644 src/quickcontrols2/imagine/images/pageindicator-delegate-disabled.png create mode 100644 src/quickcontrols2/imagine/images/pageindicator-delegate-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/pageindicator-delegate-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/pageindicator-delegate-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/pageindicator-delegate-pressed.png create mode 100644 src/quickcontrols2/imagine/images/pageindicator-delegate-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/pageindicator-delegate-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/pageindicator-delegate-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/pageindicator-delegate.png create mode 100644 src/quickcontrols2/imagine/images/pageindicator-delegate@2x.png create mode 100644 src/quickcontrols2/imagine/images/pageindicator-delegate@3x.png create mode 100644 src/quickcontrols2/imagine/images/pageindicator-delegate@4x.png create mode 100644 src/quickcontrols2/imagine/images/pane-background.9.png create mode 100644 src/quickcontrols2/imagine/images/pane-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/pane-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/pane-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/popup-background.9.png create mode 100644 src/quickcontrols2/imagine/images/popup-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/popup-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/popup-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/popup-overlay-modal.png create mode 100644 src/quickcontrols2/imagine/images/popup-overlay-modal@2x.png create mode 100644 src/quickcontrols2/imagine/images/popup-overlay-modal@3x.png create mode 100644 src/quickcontrols2/imagine/images/popup-overlay-modal@4x.png create mode 100644 src/quickcontrols2/imagine/images/popup-overlay.png create mode 100644 src/quickcontrols2/imagine/images/popup-overlay@2x.png create mode 100644 src/quickcontrols2/imagine/images/popup-overlay@3x.png create mode 100644 src/quickcontrols2/imagine/images/popup-overlay@4x.png create mode 100644 src/quickcontrols2/imagine/images/progressbar-animation.webp create mode 100644 src/quickcontrols2/imagine/images/progressbar-animation@2x.webp create mode 100644 src/quickcontrols2/imagine/images/progressbar-animation@3x.webp create mode 100644 src/quickcontrols2/imagine/images/progressbar-animation@4x.webp create mode 100644 src/quickcontrols2/imagine/images/progressbar-background.9.png create mode 100644 src/quickcontrols2/imagine/images/progressbar-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/progressbar-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/progressbar-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/progressbar-mask.9.png create mode 100644 src/quickcontrols2/imagine/images/progressbar-mask@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/progressbar-mask@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/progressbar-mask@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/progressbar-progress.png create mode 100644 src/quickcontrols2/imagine/images/progressbar-progress@2x.png create mode 100644 src/quickcontrols2/imagine/images/progressbar-progress@3x.png create mode 100644 src/quickcontrols2/imagine/images/progressbar-progress@4x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-checked-focused.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-checked-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-checked-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-checked-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-checked-hovered.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-checked-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-checked-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-checked-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-checked-pressed.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-checked-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-checked-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-checked-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-checked.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-checked@2x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-checked@3x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-checked@4x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-disabled.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-focused.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-hovered.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-pressed.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator@2x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator@3x.png create mode 100644 src/quickcontrols2/imagine/images/radiobutton-indicator@4x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background-highlighted.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background-highlighted@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background-highlighted@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background-highlighted@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background-pressed.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background-pressed@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background-pressed@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background-pressed@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-focused.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-hovered.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-pressed.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-checked.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-checked@2x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-checked@3x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-checked@4x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-disabled.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-focused.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-hovered.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-pressed.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator@2x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator@3x.png create mode 100644 src/quickcontrols2/imagine/images/radiodelegate-indicator@4x.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-background-horizontal.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-background-horizontal@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-background-horizontal@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-background-horizontal@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-background-vertical.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-background-vertical@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-background-vertical@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-background-vertical@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-disabled.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-focused-hovered.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-focused-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-focused-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-focused-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-focused-pressed.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-focused-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-focused-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-focused-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-focused.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-hovered.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-pressed.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle@2x.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle@3x.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-handle@4x.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-progress-horizontal-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-progress-horizontal-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-progress-horizontal-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-progress-horizontal-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-progress-horizontal.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-progress-horizontal@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-progress-horizontal@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-progress-horizontal@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-progress-vertical-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-progress-vertical-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-progress-vertical-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-progress-vertical-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-progress-vertical.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-progress-vertical@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-progress-vertical@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/rangeslider-progress-vertical@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-checked-focused.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-checked-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-checked-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-checked-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-checked-hovered.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-checked-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-checked-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-checked-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-checked.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-checked@2x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-checked@3x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-checked@4x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-disabled-checked.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-disabled-checked@2x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-disabled-checked@3x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-disabled-checked@4x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-disabled.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-focused.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-highlighted-focused.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-highlighted-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-highlighted-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-highlighted-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-highlighted-hovered.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-highlighted-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-highlighted-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-highlighted-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-highlighted-pressed.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-highlighted-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-highlighted-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-highlighted-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-highlighted.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-highlighted@2x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-highlighted@3x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-highlighted@4x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-hovered.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-pressed.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background@2x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background@3x.png create mode 100644 src/quickcontrols2/imagine/images/roundbutton-background@4x.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle-disabled.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle-interactive-disabled.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle-interactive-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle-interactive-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle-interactive-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle-interactive-hovered.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle-interactive-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle-interactive-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle-interactive-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle-interactive-pressed.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle-interactive-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle-interactive-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle-interactive-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle-interactive.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle-interactive@2x.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle-interactive@3x.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle-interactive@4x.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle@2x.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle@3x.png create mode 100644 src/quickcontrols2/imagine/images/scrollbar-handle@4x.png create mode 100644 src/quickcontrols2/imagine/images/scrollindicator-handle.png create mode 100644 src/quickcontrols2/imagine/images/scrollindicator-handle@2x.png create mode 100644 src/quickcontrols2/imagine/images/scrollindicator-handle@3x.png create mode 100644 src/quickcontrols2/imagine/images/scrollindicator-handle@4x.png create mode 100644 src/quickcontrols2/imagine/images/slider-background-horizontal.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-background-horizontal@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-background-horizontal@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-background-horizontal@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-background-vertical.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-background-vertical@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-background-vertical@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-background-vertical@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-disabled.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-focused-hovered.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-focused-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-focused-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-focused-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-focused-pressed.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-focused-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-focused-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-focused-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-focused.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-hovered.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-pressed.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle@2x.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle@3x.png create mode 100644 src/quickcontrols2/imagine/images/slider-handle@4x.png create mode 100644 src/quickcontrols2/imagine/images/slider-progress-horizontal-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-progress-horizontal-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-progress-horizontal-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-progress-horizontal-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-progress-horizontal.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-progress-horizontal@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-progress-horizontal@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-progress-horizontal@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-progress-vertical-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-progress-vertical-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-progress-vertical-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-progress-vertical-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-progress-vertical.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-progress-vertical@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-progress-vertical@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/slider-progress-vertical@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-background-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-background-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-background-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-background-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-background-editable.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-background-editable@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-background-editable@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-background-editable@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-background-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-background-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-background-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-background-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-background.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-pressed.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-pressed.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-pressed@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-pressed@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-pressed@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-editable@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-pressed.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-pressed@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-pressed@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-pressed@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-pressed.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-pressed@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-pressed@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down-pressed@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-down@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-pressed.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-pressed.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-pressed@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-pressed@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-pressed@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-editable@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-pressed.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-pressed@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-pressed@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-pressed@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-pressed.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-pressed@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-pressed@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up-pressed@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/spinbox-indicator-up@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/splitview-handle-disabled.png create mode 100644 src/quickcontrols2/imagine/images/splitview-handle-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/splitview-handle-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/splitview-handle-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/splitview-handle-hovered.png create mode 100644 src/quickcontrols2/imagine/images/splitview-handle-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/splitview-handle-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/splitview-handle-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/splitview-handle-pressed.png create mode 100644 src/quickcontrols2/imagine/images/splitview-handle-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/splitview-handle-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/splitview-handle-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/splitview-handle.png create mode 100644 src/quickcontrols2/imagine/images/splitview-handle@2x.png create mode 100644 src/quickcontrols2/imagine/images/splitview-handle@3x.png create mode 100644 src/quickcontrols2/imagine/images/splitview-handle@4x.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background-highlighted.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background-highlighted@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background-highlighted@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background-highlighted@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background-pressed.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background-pressed@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background-pressed@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background-pressed@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/swipedelegate-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/switch-handle-disabled.png create mode 100644 src/quickcontrols2/imagine/images/switch-handle-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/switch-handle-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/switch-handle-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/switch-handle-pressed.png create mode 100644 src/quickcontrols2/imagine/images/switch-handle-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/switch-handle-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/switch-handle-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/switch-handle.png create mode 100644 src/quickcontrols2/imagine/images/switch-handle@2x.png create mode 100644 src/quickcontrols2/imagine/images/switch-handle@3x.png create mode 100644 src/quickcontrols2/imagine/images/switch-handle@4x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-checked-focused.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-checked-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-checked-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-checked-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-checked-hovered.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-checked-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-checked-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-checked-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-checked-pressed.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-checked-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-checked-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-checked-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-checked.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-checked@2x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-checked@3x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-checked@4x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-disabled.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-focused.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-hovered.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-pressed.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator@2x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator@3x.png create mode 100644 src/quickcontrols2/imagine/images/switch-indicator@4x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-background-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-background-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-background-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-background-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-background-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-background-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-background-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-background-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-background-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-background-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-background-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-background-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-background-pressed.9.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-background-pressed@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-background-pressed@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-background-pressed@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-background.9.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-handle-disabled.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-handle-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-handle-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-handle-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-handle-pressed.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-handle-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-handle-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-handle-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-handle.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-handle@2x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-handle@3x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-handle@4x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-focused.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-hovered.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-pressed.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-checked.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-checked@2x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-checked@3x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-checked@4x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-disabled.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-disabled@2x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-disabled@3x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-disabled@4x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-focused.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-focused@2x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-focused@3x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-focused@4x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-hovered.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-hovered@2x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-hovered@3x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-hovered@4x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-pressed.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-pressed@2x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-pressed@3x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator-pressed@4x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator@2x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator@3x.png create mode 100644 src/quickcontrols2/imagine/images/switchdelegate-indicator@4x.png create mode 100644 src/quickcontrols2/imagine/images/tabbar-background.png create mode 100644 src/quickcontrols2/imagine/images/tabbar-background@2x.png create mode 100644 src/quickcontrols2/imagine/images/tabbar-background@3x.png create mode 100644 src/quickcontrols2/imagine/images/tabbar-background@4x.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background-checked.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background-checked@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background-checked@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background-checked@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background-disabled-checked.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background-disabled-checked@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background-disabled-checked@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background-disabled-checked@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background-pressed.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background-pressed@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background-pressed@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background-pressed@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/tabbutton-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/textarea-background-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/textarea-background-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/textarea-background-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/textarea-background-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/textarea-background-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/textarea-background-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/textarea-background-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/textarea-background-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/textarea-background.9.png create mode 100644 src/quickcontrols2/imagine/images/textarea-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/textarea-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/textarea-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/textfield-background-disabled.9.png create mode 100644 src/quickcontrols2/imagine/images/textfield-background-disabled@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/textfield-background-disabled@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/textfield-background-disabled@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/textfield-background-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/textfield-background-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/textfield-background-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/textfield-background-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/textfield-background.9.png create mode 100644 src/quickcontrols2/imagine/images/textfield-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/textfield-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/textfield-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbar-background.png create mode 100644 src/quickcontrols2/imagine/images/toolbar-background@2x.png create mode 100644 src/quickcontrols2/imagine/images/toolbar-background@3x.png create mode 100644 src/quickcontrols2/imagine/images/toolbar-background@4x.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-checked-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-checked-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-checked-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-checked-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-checked-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-checked-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-checked-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-checked-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-checked.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-checked@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-checked@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-checked@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-disabled-checked.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-disabled-checked@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-disabled-checked@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-disabled-checked@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-focused.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-focused@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-focused@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-focused@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-hovered.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-hovered@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-hovered@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-hovered@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-pressed.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-pressed@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-pressed@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background-pressed@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolbutton-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolseparator-separator-horizontal.9.png create mode 100644 src/quickcontrols2/imagine/images/toolseparator-separator-horizontal@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolseparator-separator-horizontal@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolseparator-separator-horizontal@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolseparator-separator-vertical.9.png create mode 100644 src/quickcontrols2/imagine/images/toolseparator-separator-vertical@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolseparator-separator-vertical@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/toolseparator-separator-vertical@4x.9.png create mode 100644 src/quickcontrols2/imagine/images/tooltip-background.9.png create mode 100644 src/quickcontrols2/imagine/images/tooltip-background@2x.9.png create mode 100644 src/quickcontrols2/imagine/images/tooltip-background@3x.9.png create mode 100644 src/quickcontrols2/imagine/images/tooltip-background@4x.9.png create mode 100644 src/quickcontrols2/imagine/imagine.pri create mode 100644 src/quickcontrols2/imagine/impl/CMakeLists.txt create mode 100644 src/quickcontrols2/imagine/impl/OpacityMask.qml create mode 100644 src/quickcontrols2/imagine/impl/qquickimageselector.cpp create mode 100644 src/quickcontrols2/imagine/impl/qquickimageselector_p.h create mode 100644 src/quickcontrols2/imagine/impl/qquickninepatchimage.cpp create mode 100644 src/quickcontrols2/imagine/impl/qquickninepatchimage_p.h create mode 100644 src/quickcontrols2/imagine/impl/shaders/+glslcore/OpacityMask.frag create mode 100644 src/quickcontrols2/imagine/impl/shaders/+qsb/OpacityMask.frag create mode 100644 src/quickcontrols2/imagine/impl/shaders/OpacityMask.frag create mode 100644 src/quickcontrols2/imagine/impl/shaders/OpacityMask_rhi.frag create mode 100644 src/quickcontrols2/imagine/impl/shaders/compile.bat create mode 100644 src/quickcontrols2/imagine/qquickimaginestyle.cpp create mode 100644 src/quickcontrols2/imagine/qquickimaginestyle_p.h create mode 100644 src/quickcontrols2/imagine/qquickimaginetheme.cpp create mode 100644 src/quickcontrols2/imagine/qquickimaginetheme_p.h create mode 100644 src/quickcontrols2/imagine/qtquickcontrols2imaginestyleplugin.cpp create mode 100644 src/quickcontrols2/macos/Button.qml create mode 100644 src/quickcontrols2/macos/CMakeLists.txt create mode 100644 src/quickcontrols2/macos/CheckBox.qml create mode 100644 src/quickcontrols2/macos/ComboBox.qml create mode 100644 src/quickcontrols2/macos/Dial.qml create mode 100644 src/quickcontrols2/macos/Frame.qml create mode 100644 src/quickcontrols2/macos/GroupBox.qml create mode 100644 src/quickcontrols2/macos/ProgressBar.qml create mode 100644 src/quickcontrols2/macos/RadioButton.qml create mode 100644 src/quickcontrols2/macos/ScrollBar.qml create mode 100644 src/quickcontrols2/macos/ScrollView.qml create mode 100644 src/quickcontrols2/macos/Slider.qml create mode 100644 src/quickcontrols2/macos/SpinBox.qml create mode 100644 src/quickcontrols2/macos/TextArea.qml create mode 100644 src/quickcontrols2/macos/TextField.qml create mode 100644 src/quickcontrols2/macos/macos.pri create mode 100644 src/quickcontrols2/macos/qtquickcontrols2macosstyleplugin.cpp create mode 100644 src/quickcontrols2/material/ApplicationWindow.qml create mode 100644 src/quickcontrols2/material/BusyIndicator.qml create mode 100644 src/quickcontrols2/material/Button.qml create mode 100644 src/quickcontrols2/material/CMakeLists.txt create mode 100644 src/quickcontrols2/material/CheckBox.qml create mode 100644 src/quickcontrols2/material/CheckDelegate.qml create mode 100644 src/quickcontrols2/material/ComboBox.qml create mode 100644 src/quickcontrols2/material/DelayButton.qml create mode 100644 src/quickcontrols2/material/Dial.qml create mode 100644 src/quickcontrols2/material/Dialog.qml create mode 100644 src/quickcontrols2/material/DialogButtonBox.qml create mode 100644 src/quickcontrols2/material/Drawer.qml create mode 100644 src/quickcontrols2/material/Frame.qml create mode 100644 src/quickcontrols2/material/GroupBox.qml create mode 100644 src/quickcontrols2/material/HorizontalHeaderView.qml create mode 100644 src/quickcontrols2/material/ItemDelegate.qml create mode 100644 src/quickcontrols2/material/LICENSE_ANGULARJS.txt create mode 100644 src/quickcontrols2/material/Label.qml create mode 100644 src/quickcontrols2/material/Menu.qml create mode 100644 src/quickcontrols2/material/MenuBar.qml create mode 100644 src/quickcontrols2/material/MenuBarItem.qml create mode 100644 src/quickcontrols2/material/MenuItem.qml create mode 100644 src/quickcontrols2/material/MenuSeparator.qml create mode 100644 src/quickcontrols2/material/Page.qml create mode 100644 src/quickcontrols2/material/PageIndicator.qml create mode 100644 src/quickcontrols2/material/Pane.qml create mode 100644 src/quickcontrols2/material/Popup.qml create mode 100644 src/quickcontrols2/material/ProgressBar.qml create mode 100644 src/quickcontrols2/material/RadioButton.qml create mode 100644 src/quickcontrols2/material/RadioDelegate.qml create mode 100644 src/quickcontrols2/material/RangeSlider.qml create mode 100644 src/quickcontrols2/material/RoundButton.qml create mode 100644 src/quickcontrols2/material/ScrollBar.qml create mode 100644 src/quickcontrols2/material/ScrollIndicator.qml create mode 100644 src/quickcontrols2/material/ScrollView.qml create mode 100644 src/quickcontrols2/material/Slider.qml create mode 100644 src/quickcontrols2/material/SpinBox.qml create mode 100644 src/quickcontrols2/material/SplitView.qml create mode 100644 src/quickcontrols2/material/StackView.qml create mode 100644 src/quickcontrols2/material/SwipeDelegate.qml create mode 100644 src/quickcontrols2/material/SwipeView.qml create mode 100644 src/quickcontrols2/material/Switch.qml create mode 100644 src/quickcontrols2/material/SwitchDelegate.qml create mode 100644 src/quickcontrols2/material/TabBar.qml create mode 100644 src/quickcontrols2/material/TabButton.qml create mode 100644 src/quickcontrols2/material/TextArea.qml create mode 100644 src/quickcontrols2/material/TextField.qml create mode 100644 src/quickcontrols2/material/ToolBar.qml create mode 100644 src/quickcontrols2/material/ToolButton.qml create mode 100644 src/quickcontrols2/material/ToolSeparator.qml create mode 100644 src/quickcontrols2/material/ToolTip.qml create mode 100644 src/quickcontrols2/material/Tumbler.qml create mode 100644 src/quickcontrols2/material/VerticalHeaderView.qml create mode 100644 src/quickcontrols2/material/images/arrow-indicator.png create mode 100644 src/quickcontrols2/material/images/arrow-indicator.svg create mode 100644 src/quickcontrols2/material/images/arrow-indicator@2x.png create mode 100644 src/quickcontrols2/material/images/arrow-indicator@3x.png create mode 100644 src/quickcontrols2/material/images/arrow-indicator@4x.png create mode 100644 src/quickcontrols2/material/images/check.png create mode 100644 src/quickcontrols2/material/images/check@2x.png create mode 100644 src/quickcontrols2/material/images/check@3x.png create mode 100644 src/quickcontrols2/material/images/check@4x.png create mode 100644 src/quickcontrols2/material/images/drop-indicator.png create mode 100644 src/quickcontrols2/material/images/drop-indicator.svg create mode 100644 src/quickcontrols2/material/images/drop-indicator@2x.png create mode 100644 src/quickcontrols2/material/images/drop-indicator@3x.png create mode 100644 src/quickcontrols2/material/images/drop-indicator@4x.png create mode 100644 src/quickcontrols2/material/impl/BoxShadow.qml create mode 100644 src/quickcontrols2/material/impl/CMakeLists.txt create mode 100644 src/quickcontrols2/material/impl/CheckIndicator.qml create mode 100644 src/quickcontrols2/material/impl/CursorDelegate.qml create mode 100644 src/quickcontrols2/material/impl/ElevationEffect.qml create mode 100644 src/quickcontrols2/material/impl/RadioIndicator.qml create mode 100644 src/quickcontrols2/material/impl/RectangularGlow.qml create mode 100644 src/quickcontrols2/material/impl/SliderHandle.qml create mode 100644 src/quickcontrols2/material/impl/SwitchIndicator.qml create mode 100644 src/quickcontrols2/material/impl/qquickmaterialbusyindicator.cpp create mode 100644 src/quickcontrols2/material/impl/qquickmaterialbusyindicator_p.h create mode 100644 src/quickcontrols2/material/impl/qquickmaterialprogressbar.cpp create mode 100644 src/quickcontrols2/material/impl/qquickmaterialprogressbar_p.h create mode 100644 src/quickcontrols2/material/impl/qquickmaterialripple.cpp create mode 100644 src/quickcontrols2/material/impl/qquickmaterialripple_p.h create mode 100644 src/quickcontrols2/material/material.pri create mode 100644 src/quickcontrols2/material/qquickmaterialstyle.cpp create mode 100644 src/quickcontrols2/material/qquickmaterialstyle_p.h create mode 100644 src/quickcontrols2/material/qquickmaterialtheme.cpp create mode 100644 src/quickcontrols2/material/qquickmaterialtheme_p.h create mode 100644 src/quickcontrols2/material/qt_attribution.json create mode 100644 src/quickcontrols2/material/qtquickcontrols2materialstyleplugin.cpp create mode 100644 src/quickcontrols2/material/qtquickcontrols2materialstyleplugin.qrc create mode 100644 src/quickcontrols2/material/shaders/+glslcore/RectangularGlow.frag create mode 100644 src/quickcontrols2/material/shaders/+hlsl/RectangularGlow.frag create mode 100644 src/quickcontrols2/material/shaders/+qsb/RectangularGlow.frag create mode 100644 src/quickcontrols2/material/shaders/RectangularGlow.frag create mode 100644 src/quickcontrols2/material/shaders/RectangularGlow_rhi.frag create mode 100644 src/quickcontrols2/material/shaders/compile.bat create mode 100644 src/quickcontrols2/qtquickcontrols2plugin.cpp create mode 100644 src/quickcontrols2/universal/ApplicationWindow.qml create mode 100644 src/quickcontrols2/universal/BusyIndicator.qml create mode 100644 src/quickcontrols2/universal/Button.qml create mode 100644 src/quickcontrols2/universal/CMakeLists.txt create mode 100644 src/quickcontrols2/universal/CheckBox.qml create mode 100644 src/quickcontrols2/universal/CheckDelegate.qml create mode 100644 src/quickcontrols2/universal/ComboBox.qml create mode 100644 src/quickcontrols2/universal/DelayButton.qml create mode 100644 src/quickcontrols2/universal/Dial.qml create mode 100644 src/quickcontrols2/universal/Dialog.qml create mode 100644 src/quickcontrols2/universal/DialogButtonBox.qml create mode 100644 src/quickcontrols2/universal/Drawer.qml create mode 100644 src/quickcontrols2/universal/Frame.qml create mode 100644 src/quickcontrols2/universal/GroupBox.qml create mode 100644 src/quickcontrols2/universal/HorizontalHeaderView.qml create mode 100644 src/quickcontrols2/universal/ItemDelegate.qml create mode 100644 src/quickcontrols2/universal/Label.qml create mode 100644 src/quickcontrols2/universal/Menu.qml create mode 100644 src/quickcontrols2/universal/MenuBar.qml create mode 100644 src/quickcontrols2/universal/MenuBarItem.qml create mode 100644 src/quickcontrols2/universal/MenuItem.qml create mode 100644 src/quickcontrols2/universal/MenuSeparator.qml create mode 100644 src/quickcontrols2/universal/Page.qml create mode 100644 src/quickcontrols2/universal/PageIndicator.qml create mode 100644 src/quickcontrols2/universal/Pane.qml create mode 100644 src/quickcontrols2/universal/Popup.qml create mode 100644 src/quickcontrols2/universal/ProgressBar.qml create mode 100644 src/quickcontrols2/universal/README.md create mode 100644 src/quickcontrols2/universal/RadioButton.qml create mode 100644 src/quickcontrols2/universal/RadioDelegate.qml create mode 100644 src/quickcontrols2/universal/RangeSlider.qml create mode 100644 src/quickcontrols2/universal/RoundButton.qml create mode 100644 src/quickcontrols2/universal/ScrollBar.qml create mode 100644 src/quickcontrols2/universal/ScrollIndicator.qml create mode 100644 src/quickcontrols2/universal/ScrollView.qml create mode 100644 src/quickcontrols2/universal/Slider.qml create mode 100644 src/quickcontrols2/universal/SpinBox.qml create mode 100644 src/quickcontrols2/universal/SplitView.qml create mode 100644 src/quickcontrols2/universal/StackView.qml create mode 100644 src/quickcontrols2/universal/SwipeDelegate.qml create mode 100644 src/quickcontrols2/universal/Switch.qml create mode 100644 src/quickcontrols2/universal/SwitchDelegate.qml create mode 100644 src/quickcontrols2/universal/TabBar.qml create mode 100644 src/quickcontrols2/universal/TabButton.qml create mode 100644 src/quickcontrols2/universal/TextArea.qml create mode 100644 src/quickcontrols2/universal/TextField.qml create mode 100644 src/quickcontrols2/universal/ToolBar.qml create mode 100644 src/quickcontrols2/universal/ToolButton.qml create mode 100644 src/quickcontrols2/universal/ToolSeparator.qml create mode 100644 src/quickcontrols2/universal/ToolTip.qml create mode 100644 src/quickcontrols2/universal/Tumbler.qml create mode 100644 src/quickcontrols2/universal/VerticalHeaderView.qml create mode 100644 src/quickcontrols2/universal/images/checkmark.png create mode 100644 src/quickcontrols2/universal/images/checkmark@2x.png create mode 100644 src/quickcontrols2/universal/images/checkmark@3x.png create mode 100644 src/quickcontrols2/universal/images/checkmark@4x.png create mode 100644 src/quickcontrols2/universal/images/downarrow.png create mode 100644 src/quickcontrols2/universal/images/downarrow@2x.png create mode 100644 src/quickcontrols2/universal/images/downarrow@3x.png create mode 100644 src/quickcontrols2/universal/images/downarrow@4x.png create mode 100644 src/quickcontrols2/universal/images/leftarrow.png create mode 100644 src/quickcontrols2/universal/images/leftarrow@2x.png create mode 100644 src/quickcontrols2/universal/images/leftarrow@3x.png create mode 100644 src/quickcontrols2/universal/images/leftarrow@4x.png create mode 100644 src/quickcontrols2/universal/images/rightarrow.png create mode 100644 src/quickcontrols2/universal/images/rightarrow@2x.png create mode 100644 src/quickcontrols2/universal/images/rightarrow@3x.png create mode 100644 src/quickcontrols2/universal/images/rightarrow@4x.png create mode 100644 src/quickcontrols2/universal/impl/CMakeLists.txt create mode 100644 src/quickcontrols2/universal/impl/CheckIndicator.qml create mode 100644 src/quickcontrols2/universal/impl/RadioIndicator.qml create mode 100644 src/quickcontrols2/universal/impl/SwitchIndicator.qml create mode 100644 src/quickcontrols2/universal/impl/qquickuniversalbusyindicator.cpp create mode 100644 src/quickcontrols2/universal/impl/qquickuniversalbusyindicator_p.h create mode 100644 src/quickcontrols2/universal/impl/qquickuniversalfocusrectangle.cpp create mode 100644 src/quickcontrols2/universal/impl/qquickuniversalfocusrectangle_p.h create mode 100644 src/quickcontrols2/universal/impl/qquickuniversalprogressbar.cpp create mode 100644 src/quickcontrols2/universal/impl/qquickuniversalprogressbar_p.h create mode 100644 src/quickcontrols2/universal/qquickuniversalstyle.cpp create mode 100644 src/quickcontrols2/universal/qquickuniversalstyle_p.h create mode 100644 src/quickcontrols2/universal/qquickuniversaltheme.cpp create mode 100644 src/quickcontrols2/universal/qquickuniversaltheme_p.h create mode 100644 src/quickcontrols2/universal/qtquickcontrols2universalstyleplugin.cpp create mode 100644 src/quickcontrols2/universal/qtquickcontrols2universalstyleplugin.qrc create mode 100644 src/quickcontrols2/universal/universal.pri create mode 100644 src/quickcontrols2/windows/Button.qml create mode 100644 src/quickcontrols2/windows/CMakeLists.txt create mode 100644 src/quickcontrols2/windows/CheckBox.qml create mode 100644 src/quickcontrols2/windows/ComboBox.qml create mode 100644 src/quickcontrols2/windows/Frame.qml create mode 100644 src/quickcontrols2/windows/GroupBox.qml create mode 100644 src/quickcontrols2/windows/ProgressBar.qml create mode 100644 src/quickcontrols2/windows/RadioButton.qml create mode 100644 src/quickcontrols2/windows/ScrollBar.qml create mode 100644 src/quickcontrols2/windows/ScrollView.qml create mode 100644 src/quickcontrols2/windows/Slider.qml create mode 100644 src/quickcontrols2/windows/SpinBox.qml create mode 100644 src/quickcontrols2/windows/TextArea.qml create mode 100644 src/quickcontrols2/windows/TextField.qml create mode 100644 src/quickcontrols2/windows/qtquickcontrols2windowsstyleplugin.cpp create mode 100644 src/quickcontrols2/windows/windows.pri create mode 100644 src/quickdialogs2/quickdialogs2/doc/images/qtquickdialogs-filedialog-gtk.png create mode 100644 src/quickdialogs2/quickdialogs2/doc/images/qtquickdialogs-fontdialog-gtk.png create mode 100644 src/quickdialogs2/quickdialogs2/doc/qtquickdialogs.qdocconf create mode 100644 src/quickdialogs2/quickdialogs2/doc/src/includes/fallback.qdocinc create mode 100644 src/quicknativestyle/CMakeLists.txt create mode 100644 src/quicknativestyle/controls/DefaultButton.qml create mode 100644 src/quicknativestyle/controls/DefaultCheckBox.qml create mode 100644 src/quicknativestyle/controls/DefaultComboBox.qml create mode 100644 src/quicknativestyle/controls/DefaultDial.qml create mode 100644 src/quicknativestyle/controls/DefaultFrame.qml create mode 100644 src/quicknativestyle/controls/DefaultGroupBox.qml create mode 100644 src/quicknativestyle/controls/DefaultProgressBar.qml create mode 100644 src/quicknativestyle/controls/DefaultRadioButton.qml create mode 100644 src/quicknativestyle/controls/DefaultScrollBar.qml create mode 100644 src/quicknativestyle/controls/DefaultSlider.qml create mode 100644 src/quicknativestyle/controls/DefaultSpinBox.qml create mode 100644 src/quicknativestyle/controls/DefaultTextArea.qml create mode 100644 src/quicknativestyle/controls/DefaultTextField.qml create mode 100644 src/quicknativestyle/controls/controls.pri create mode 100644 src/quicknativestyle/items/items.pri create mode 100644 src/quicknativestyle/items/qquickstyleitem.cpp create mode 100644 src/quicknativestyle/items/qquickstyleitem.h create mode 100644 src/quicknativestyle/items/qquickstyleitembutton.cpp create mode 100644 src/quicknativestyle/items/qquickstyleitembutton.h create mode 100644 src/quicknativestyle/items/qquickstyleitemcheckbox.cpp create mode 100644 src/quicknativestyle/items/qquickstyleitemcheckbox.h create mode 100644 src/quicknativestyle/items/qquickstyleitemcombobox.cpp create mode 100644 src/quicknativestyle/items/qquickstyleitemcombobox.h create mode 100644 src/quicknativestyle/items/qquickstyleitemdial.cpp create mode 100644 src/quicknativestyle/items/qquickstyleitemdial.h create mode 100644 src/quicknativestyle/items/qquickstyleitemframe.cpp create mode 100644 src/quicknativestyle/items/qquickstyleitemframe.h create mode 100644 src/quicknativestyle/items/qquickstyleitemgroupbox.cpp create mode 100644 src/quicknativestyle/items/qquickstyleitemgroupbox.h create mode 100644 src/quicknativestyle/items/qquickstyleitemprogressbar.cpp create mode 100644 src/quicknativestyle/items/qquickstyleitemprogressbar.h create mode 100644 src/quicknativestyle/items/qquickstyleitemradiobutton.cpp create mode 100644 src/quicknativestyle/items/qquickstyleitemradiobutton.h create mode 100644 src/quicknativestyle/items/qquickstyleitemscrollbar.cpp create mode 100644 src/quicknativestyle/items/qquickstyleitemscrollbar.h create mode 100644 src/quicknativestyle/items/qquickstyleitemscrollviewcorner.cpp create mode 100644 src/quicknativestyle/items/qquickstyleitemscrollviewcorner.h create mode 100644 src/quicknativestyle/items/qquickstyleitemslider.cpp create mode 100644 src/quicknativestyle/items/qquickstyleitemslider.h create mode 100644 src/quicknativestyle/items/qquickstyleitemspinbox.cpp create mode 100644 src/quicknativestyle/items/qquickstyleitemspinbox.h create mode 100644 src/quicknativestyle/items/qquickstyleitemtextfield.cpp create mode 100644 src/quicknativestyle/items/qquickstyleitemtextfield.h create mode 100644 src/quicknativestyle/qstyle/mac/mac.pri create mode 100644 src/quicknativestyle/qstyle/mac/qquickmacstyle_mac.mm create mode 100644 src/quicknativestyle/qstyle/mac/qquickmacstyle_mac_p.h create mode 100644 src/quicknativestyle/qstyle/mac/qquickmacstyle_mac_p_p.h create mode 100644 src/quicknativestyle/qstyle/qquickcommonstyle.cpp create mode 100644 src/quicknativestyle/qstyle/qquickcommonstyle.h create mode 100644 src/quicknativestyle/qstyle/qquickcommonstyle_p.h create mode 100644 src/quicknativestyle/qstyle/qquickcommonstylepixmaps_p.h create mode 100644 src/quicknativestyle/qstyle/qquickdrawutil.cpp create mode 100644 src/quicknativestyle/qstyle/qquickdrawutil.h create mode 100644 src/quicknativestyle/qstyle/qquicknativestyle.cpp create mode 100644 src/quicknativestyle/qstyle/qquicknativestyle.h create mode 100644 src/quicknativestyle/qstyle/qquickstyle.cpp create mode 100644 src/quicknativestyle/qstyle/qquickstyle.h create mode 100644 src/quicknativestyle/qstyle/qquickstyle_p.h create mode 100644 src/quicknativestyle/qstyle/qquickstylehelper.cpp create mode 100644 src/quicknativestyle/qstyle/qquickstylehelper_p.h create mode 100644 src/quicknativestyle/qstyle/qquickstyleoption.cpp create mode 100644 src/quicknativestyle/qstyle/qquickstyleoption.h create mode 100644 src/quicknativestyle/qstyle/qstyle.pri create mode 100644 src/quicknativestyle/qstyle/windows/qquickwindowsstyle.cpp create mode 100644 src/quicknativestyle/qstyle/windows/qquickwindowsstyle_p.h create mode 100644 src/quicknativestyle/qstyle/windows/qquickwindowsstyle_p_p.h create mode 100644 src/quicknativestyle/qstyle/windows/qquickwindowsvistastyle.cpp create mode 100644 src/quicknativestyle/qstyle/windows/qquickwindowsvistastyle_p.h create mode 100644 src/quicknativestyle/qstyle/windows/qquickwindowsvistastyle_p_p.h create mode 100644 src/quicknativestyle/qstyle/windows/qquickwindowsxpstyle.cpp create mode 100644 src/quicknativestyle/qstyle/windows/qquickwindowsxpstyle_p.h create mode 100644 src/quicknativestyle/qstyle/windows/qquickwindowsxpstyle_p_p.h create mode 100644 src/quicknativestyle/qstyle/windows/windows.pri create mode 100644 src/quicknativestyle/qtquickcontrols2nativestyleplugin.cpp create mode 100644 src/quicknativestyle/util/FocusFrame.qml create mode 100644 src/quicknativestyle/util/qquickmacfocusframe.h create mode 100644 src/quicknativestyle/util/qquickmacfocusframe.mm create mode 100644 src/quicknativestyle/util/util.pri create mode 100644 src/quicktemplates2/doc/src/qtquicktemplates2-index.qdoc create mode 100644 src/quicktemplates2/doc/src/qtquicktemplates2-qmltypes.qdoc create mode 100644 src/quicktemplates2/qtquicktemplates2plugin.cpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9b11240b..deb79c7b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,7 +1,8 @@ # Generated from src.pro. add_subdirectory(quicktemplates2) -add_subdirectory(quickcontrols2) add_subdirectory(quickcontrols2impl) +add_subdirectory(quickcontrols2) add_subdirectory(quickdialogs2) -add_subdirectory(imports) +add_subdirectory(quicknativestyle) +add_subdirectory(labs) diff --git a/src/imports/CMakeLists.txt b/src/imports/CMakeLists.txt deleted file mode 100644 index d056a899..00000000 --- a/src/imports/CMakeLists.txt +++ /dev/null @@ -1,24 +0,0 @@ -# Generated from imports.pro. - -add_subdirectory(controls) -add_subdirectory(controlsimpl) -add_subdirectory(dialogs) -add_subdirectory(platform) -add_subdirectory(templates) -add_subdirectory(nativestyle) -add_subdirectory(controls/basic) -add_subdirectory(controls/basic/impl) -add_subdirectory(controls/fusion) -add_subdirectory(controls/fusion/impl) -add_subdirectory(controls/imagine) -add_subdirectory(controls/imagine/impl) -add_subdirectory(controls/material) -add_subdirectory(controls/material/impl) -add_subdirectory(controls/universal) -add_subdirectory(controls/universal/impl) -if(MACOS) - add_subdirectory(controls/macos) -endif() -if(WIN32) - add_subdirectory(controls/windows) -endif() diff --git a/src/imports/controls/CMakeLists.txt b/src/imports/controls/CMakeLists.txt deleted file mode 100644 index 38454f99..00000000 --- a/src/imports/controls/CMakeLists.txt +++ /dev/null @@ -1,120 +0,0 @@ -# Generated from controls.pro. - -##################################################################### -## qtquickcontrols2plugin Plugin: -##################################################################### - -qt_internal_add_qml_module(qtquickcontrols2plugin - URI "QtQuick.Controls" - VERSION "${PROJECT_VERSION}" - DESIGNER_SUPPORTED - CLASSNAME QtQuickControls2Plugin - SKIP_TYPE_REGISTRATION - IMPORTS - QtQuick.Controls.impl/auto - OPTIONAL_IMPORTS - QtQuick.Controls.Basic/auto - QtQuick.Controls.Fusion/auto - QtQuick.Controls.Material/auto - QtQuick.Controls.Imagine/auto - QtQuick.Controls.Universal/auto - QtQuick.Controls.Windows/auto - QtQuick.Controls.macOS/auto - SOURCES - qtquickcontrols2plugin.cpp - DEFINES - QT_NO_CAST_FROM_ASCII - QT_NO_CAST_TO_ASCII - LIBRARIES - Qt::CorePrivate - Qt::GuiPrivate - Qt::QmlPrivate - Qt::QuickControls2ImplPrivate - Qt::QuickControls2Private - Qt::QuickPrivate - Qt::QuickTemplates2Private - PUBLIC_LIBRARIES - Qt::Core - Qt::Gui - Qt::Qml - Qt::Quick - Qt::QuickControls2 -) - -#### Keys ignored in scope 1:.:.:controls.pro:: -# OTHER_FILES = "qmldir" "$$PWD/snippets/*.qml" "$$PWD/src/*.qdoc" "$$PWD/src/templates/*.qdoc" -# QML_IMPORT_VERSION = "$$QT_VERSION" -# TARGETPATH = "QtQuick/Controls" - -## Scopes: -##################################################################### - -if(QT_FEATURE_quick_designer) - get_target_property(__aux_qml_files_install_base qtquickcontrols2plugin QT_QML_MODULE_INSTALL_DIR) - - file(GLOB_RECURSE __aux_qml_glob_files - RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" - "designer/images/*.png") - qt_path_join(__aux_qml_files_install_dir "${__aux_qml_files_install_base}" "designer/images") - - qt_copy_or_install( - FILES - ${__aux_qml_glob_files} - DESTINATION "${__aux_qml_files_install_dir}") - - qt_path_join(__aux_qml_files_install_dir "${__aux_qml_files_install_base}" "designer") - - qt_copy_or_install( - FILES - designer/AbstractButtonSection.qml - designer/BusyIndicatorSpecifics.qml - designer/ButtonSection.qml - designer/ButtonSpecifics.qml - designer/CheckBoxSpecifics.qml - designer/CheckDelegateSpecifics.qml - designer/CheckSection.qml - designer/ComboBoxSpecifics.qml - designer/ContainerSection.qml - designer/ControlSection.qml - designer/ControlSpecifics.qml - designer/DelayButtonSpecifics.qml - designer/DialSpecifics.qml - designer/FrameSpecifics.qml - designer/GroupBoxSpecifics.qml - designer/InsetSection.qml - designer/ItemDelegateSection.qml - designer/ItemDelegateSpecifics.qml - designer/LabelSpecifics.qml - designer/PaddingSection.qml - designer/PageIndicatorSpecifics.qml - designer/PageSpecifics.qml - designer/PaneSection.qml - designer/PaneSpecifics.qml - designer/ProgressBarSpecifics.qml - designer/RadioButtonSpecifics.qml - designer/RadioDelegateSpecifics.qml - designer/RangeSliderSpecifics.qml - designer/RoundButtonSpecifics.qml - designer/ScrollViewSpecifics.qml - designer/SliderSpecifics.qml - designer/SpinBoxSpecifics.qml - designer/StackViewSpecifics.qml - designer/SwipeDelegateSpecifics.qml - designer/SwipeViewSpecifics.qml - designer/SwitchDelegateSpecifics.qml - designer/SwitchSpecifics.qml - designer/TabBarSpecifics.qml - designer/TabButtonSpecifics.qml - designer/TextAreaSpecifics.qml - designer/TextFieldSpecifics.qml - designer/ToolBarSpecifics.qml - designer/ToolButtonSpecifics.qml - designer/ToolSeparatorSpecifics.qml - designer/TumblerSpecifics.qml - designer/qtquickcontrols2.metainfo - DESTINATION "${__aux_qml_files_install_dir}") -endif() -qt_internal_add_docs(qtquickcontrols2plugin - doc/qtquickcontrols.qdocconf -) - diff --git a/src/imports/controls/basic/AbstractButton.qml b/src/imports/controls/basic/AbstractButton.qml deleted file mode 100644 index a4855c21..00000000 --- a/src/imports/controls/basic/AbstractButton.qml +++ /dev/null @@ -1,47 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T - -T.AbstractButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) -} diff --git a/src/imports/controls/basic/Action.qml b/src/imports/controls/basic/Action.qml deleted file mode 100644 index bb66fc8f..00000000 --- a/src/imports/controls/basic/Action.qml +++ /dev/null @@ -1,40 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T - -T.Action { } diff --git a/src/imports/controls/basic/ActionGroup.qml b/src/imports/controls/basic/ActionGroup.qml deleted file mode 100644 index 70170f0e..00000000 --- a/src/imports/controls/basic/ActionGroup.qml +++ /dev/null @@ -1,40 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T - -T.ActionGroup { } diff --git a/src/imports/controls/basic/ApplicationWindow.qml b/src/imports/controls/basic/ApplicationWindow.qml deleted file mode 100644 index ac50d5fa..00000000 --- a/src/imports/controls/basic/ApplicationWindow.qml +++ /dev/null @@ -1,45 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ApplicationWindow { - id: window - - color: window.palette.window -} diff --git a/src/imports/controls/basic/BusyIndicator.qml b/src/imports/controls/basic/BusyIndicator.qml deleted file mode 100644 index 0c51c9a2..00000000 --- a/src/imports/controls/basic/BusyIndicator.qml +++ /dev/null @@ -1,62 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.Basic.impl -import QtQuick.Templates as T - -T.BusyIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - - contentItem: BusyIndicatorImpl { - implicitWidth: 48 - implicitHeight: 48 - - pen: control.palette.dark - fill: control.palette.dark - - running: control.running - opacity: control.running ? 1 : 0 - Behavior on opacity { OpacityAnimator { duration: 250 } } - } -} diff --git a/src/imports/controls/basic/Button.qml b/src/imports/controls/basic/Button.qml deleted file mode 100644 index f657a0d2..00000000 --- a/src/imports/controls/basic/Button.qml +++ /dev/null @@ -1,79 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.Button { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - horizontalPadding: padding + 2 - spacing: 6 - - icon.width: 24 - icon.height: 24 - icon.color: control.checked || control.highlighted ? control.palette.brightText : - control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.checked || control.highlighted ? control.palette.brightText : - control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 40 - visible: !control.flat || control.down || control.checked || control.highlighted - color: Color.blend(control.checked || control.highlighted ? control.palette.dark : control.palette.button, - control.palette.mid, control.down ? 0.5 : 0.0) - border.color: control.palette.highlight - border.width: control.visualFocus ? 2 : 0 - } -} diff --git a/src/imports/controls/basic/ButtonGroup.qml b/src/imports/controls/basic/ButtonGroup.qml deleted file mode 100644 index fadc538a..00000000 --- a/src/imports/controls/basic/ButtonGroup.qml +++ /dev/null @@ -1,40 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T - -T.ButtonGroup { } diff --git a/src/imports/controls/basic/CMakeLists.txt b/src/imports/controls/basic/CMakeLists.txt deleted file mode 100644 index ee7dc6c8..00000000 --- a/src/imports/controls/basic/CMakeLists.txt +++ /dev/null @@ -1,307 +0,0 @@ -# Generated from basic.pro. - -##################################################################### -## qtquickcontrols2basicstyleplugin Plugin: -##################################################################### - -qt_internal_add_qml_module(qtquickcontrols2basicstyleplugin - URI "QtQuick.Controls.Basic" - VERSION "${PROJECT_VERSION}" - CLASSNAME QtQuickControls2BasicStylePlugin - GENERATE_QMLTYPES - INSTALL_QMLTYPES - SOURCES - qquickbasicstyle.cpp qquickbasicstyle_p.h - qquickbasictheme.cpp qquickbasictheme_p.h - qtquickcontrols2basicstyleplugin.cpp - DEFINES - QT_NO_CAST_FROM_ASCII - QT_NO_CAST_TO_ASCII - LIBRARIES - Qt::CorePrivate - Qt::GuiPrivate - Qt::QmlPrivate - Qt::QuickControls2Private - Qt::QuickPrivate - Qt::QuickTemplates2Private - PUBLIC_LIBRARIES - Qt::Core - Qt::Gui - Qt::Qml - Qt::Quick -) - -# Resources: -set(qtquickcontrols2basicstyleplugin_resource_files - "images/arrow-indicator.png" - "images/arrow-indicator@2x.png" - "images/arrow-indicator@3x.png" - "images/arrow-indicator@4x.png" - "images/check.png" - "images/check@2x.png" - "images/check@3x.png" - "images/check@4x.png" - "images/dial-indicator.png" - "images/dial-indicator@2x.png" - "images/dial-indicator@3x.png" - "images/dial-indicator@4x.png" - "images/double-arrow.png" - "images/double-arrow@2x.png" - "images/double-arrow@3x.png" - "images/double-arrow@4x.png" - "images/drop-indicator.png" - "images/drop-indicator@2x.png" - "images/drop-indicator@3x.png" - "images/drop-indicator@4x.png" -) - -qt_internal_add_resource(qtquickcontrols2basicstyleplugin "qtquickcontrols2basicstyleplugin" - PREFIX - "/qt-project.org/imports/QtQuick/Controls/Basic" - FILES - ${qtquickcontrols2basicstyleplugin_resource_files} -) - - -#### Keys ignored in scope 1:.:.:basic.pro:: -# OTHER_FILES = "qmldir" "$$QML_FILES" -# QML_IMPORT_NAME = "QtQuick.Controls.Basic" -# QML_IMPORT_VERSION = "$$QT_VERSION" -# TARGETPATH = "QtQuick/Controls/Basic" -# _REQUIREMENTS = "qtConfig(quickcontrols2-basic)" - -set(qml_files - "AbstractButton.qml" - "Action.qml" - "ActionGroup.qml" - "ApplicationWindow.qml" - "BusyIndicator.qml" - "Button.qml" - "ButtonGroup.qml" - "CheckBox.qml" - "CheckDelegate.qml" - "ComboBox.qml" - "Container.qml" - "Control.qml" - "DelayButton.qml" - "Dial.qml" - "Dialog.qml" - "DialogButtonBox.qml" - "Drawer.qml" - "Frame.qml" - "GroupBox.qml" - "HorizontalHeaderView.qml" - "ItemDelegate.qml" - "Label.qml" - "Menu.qml" - "MenuBar.qml" - "MenuBarItem.qml" - "MenuItem.qml" - "MenuSeparator.qml" - "Page.qml" - "PageIndicator.qml" - "Pane.qml" - "Popup.qml" - "ProgressBar.qml" - "RadioButton.qml" - "RadioDelegate.qml" - "RangeSlider.qml" - "RoundButton.qml" - "ScrollBar.qml" - "ScrollIndicator.qml" - "ScrollView.qml" - "Slider.qml" - "SpinBox.qml" - "SplitView.qml" - "StackView.qml" - "SwipeDelegate.qml" - "Switch.qml" - "SwitchDelegate.qml" - "SwipeView.qml" - "TabBar.qml" - "TabButton.qml" - "TextArea.qml" - "TextField.qml" - "ToolBar.qml" - "ToolButton.qml" - "ToolSeparator.qml" - "ToolTip.qml" - "Tumbler.qml" - "VerticalHeaderView.qml" -) -set_source_files_properties(AbstractButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Action.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.3;6.0" -) -set_source_files_properties(ActionGroup.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.3;6.0" -) -set_source_files_properties(ApplicationWindow.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(BusyIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Button.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ButtonGroup.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(CheckBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(CheckDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ComboBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Container.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Control.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(DelayButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.2;6.0" -) -set_source_files_properties(Dial.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Dialog.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(DialogButtonBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(Drawer.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Frame.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(GroupBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(HorizontalHeaderView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.15;6.0" -) -set_source_files_properties(ItemDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Label.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Menu.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(MenuBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.3;6.0" -) -set_source_files_properties(MenuBarItem.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.3;6.0" -) -set_source_files_properties(MenuItem.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(MenuSeparator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(Page.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(PageIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Pane.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Popup.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ProgressBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(RadioButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(RadioDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(RangeSlider.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(RoundButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(ScrollBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ScrollIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ScrollView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.2;6.0" -) -set_source_files_properties(Slider.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SpinBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SplitView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.13;6.0" -) -set_source_files_properties(StackView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SwipeDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Switch.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SwitchDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SwipeView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TabBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TabButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TextArea.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TextField.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ToolBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ToolButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ToolSeparator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(ToolTip.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Tumbler.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(VerticalHeaderView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.15;6.0" -) - -qt6_target_qml_files(qtquickcontrols2basicstyleplugin - FILES - ${qml_files} -) diff --git a/src/imports/controls/basic/CheckBox.qml b/src/imports/controls/basic/CheckBox.qml deleted file mode 100644 index 6465460d..00000000 --- a/src/imports/controls/basic/CheckBox.qml +++ /dev/null @@ -1,92 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl - -T.CheckBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - // keep in sync with CheckDelegate.qml (shared CheckIndicator.qml was removed for performance reasons) - indicator: Rectangle { - implicitWidth: 28 - implicitHeight: 28 - - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - - color: control.down ? control.palette.light : control.palette.base - border.width: control.visualFocus ? 2 : 1 - border.color: control.visualFocus ? control.palette.highlight : control.palette.mid - - ColorImage { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - defaultColor: "#353637" - color: control.palette.text - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png" - visible: control.checkState === Qt.Checked - } - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 16 - height: 3 - color: control.palette.text - visible: control.checkState === Qt.PartiallyChecked - } - } - - contentItem: CheckLabel { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.palette.windowText - } -} diff --git a/src/imports/controls/basic/CheckDelegate.qml b/src/imports/controls/basic/CheckDelegate.qml deleted file mode 100644 index 1a1827e3..00000000 --- a/src/imports/controls/basic/CheckDelegate.qml +++ /dev/null @@ -1,109 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl - -T.CheckDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 12 - spacing: 12 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.text - - contentItem: IconLabel { - leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.text - } - - // keep in sync with CheckBox.qml (shared CheckIndicator.qml was removed for performance reasons) - indicator: Rectangle { - implicitWidth: 28 - implicitHeight: 28 - - x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding - y: control.topPadding + (control.availableHeight - height) / 2 - - color: control.down ? control.palette.light : control.palette.base - border.width: control.visualFocus ? 2 : 1 - border.color: control.visualFocus ? control.palette.highlight : control.palette.mid - - ColorImage { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - defaultColor: "#353637" - color: control.palette.text - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png" - visible: control.checkState === Qt.Checked - } - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 16 - height: 3 - color: control.palette.text - visible: control.checkState === Qt.PartiallyChecked - } - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 40 - visible: control.down || control.highlighted - color: control.down ? control.palette.midlight : control.palette.light - } -} diff --git a/src/imports/controls/basic/ComboBox.qml b/src/imports/controls/basic/ComboBox.qml deleted file mode 100644 index 6a1924ed..00000000 --- a/src/imports/controls/basic/ComboBox.qml +++ /dev/null @@ -1,140 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ComboBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) - rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) - - delegate: ItemDelegate { - width: ListView.view.width - text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData - palette.text: control.palette.text - palette.highlightedText: control.palette.highlightedText - font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal - highlighted: control.highlightedIndex === index - hoverEnabled: control.hoverEnabled - } - - indicator: ColorImage { - x: control.mirrored ? control.padding : control.width - width - control.padding - y: control.topPadding + (control.availableHeight - height) / 2 - color: control.palette.dark - defaultColor: "#353637" - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/double-arrow.png" - opacity: enabled ? 1 : 0.3 - } - - contentItem: T.TextField { - leftPadding: !control.mirrored ? 12 : control.editable && activeFocus ? 3 : 1 - rightPadding: control.mirrored ? 12 : control.editable && activeFocus ? 3 : 1 - topPadding: 6 - control.padding - bottomPadding: 6 - control.padding - - text: control.editable ? control.editText : control.displayText - - enabled: control.editable - autoScroll: control.editable - readOnly: control.down - inputMethodHints: control.inputMethodHints - validator: control.validator - selectByMouse: control.selectTextByMouse - - font: control.font - color: control.editable ? control.palette.text : control.palette.buttonText - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - verticalAlignment: Text.AlignVCenter - - background: Rectangle { - visible: control.enabled && control.editable && !control.flat - border.width: parent && parent.activeFocus ? 2 : 1 - border.color: parent && parent.activeFocus ? control.palette.highlight : control.palette.button - color: control.palette.base - } - } - - background: Rectangle { - implicitWidth: 140 - implicitHeight: 40 - - color: control.down ? control.palette.mid : control.palette.button - border.color: control.palette.highlight - border.width: !control.editable && control.visualFocus ? 2 : 0 - visible: !control.flat || control.down - } - - popup: T.Popup { - y: control.height - width: control.width - height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin) - topMargin: 6 - bottomMargin: 6 - - contentItem: ListView { - clip: true - implicitHeight: contentHeight - model: control.delegateModel - currentIndex: control.highlightedIndex - highlightMoveDuration: 0 - - Rectangle { - z: 10 - width: parent.width - height: parent.height - color: "transparent" - border.color: control.palette.mid - } - - T.ScrollIndicator.vertical: ScrollIndicator { } - } - - background: Rectangle { - color: control.palette.window - } - } -} diff --git a/src/imports/controls/basic/Container.qml b/src/imports/controls/basic/Container.qml deleted file mode 100644 index 93919075..00000000 --- a/src/imports/controls/basic/Container.qml +++ /dev/null @@ -1,47 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T - -T.Container { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) -} diff --git a/src/imports/controls/basic/Control.qml b/src/imports/controls/basic/Control.qml deleted file mode 100644 index 7a68a431..00000000 --- a/src/imports/controls/basic/Control.qml +++ /dev/null @@ -1,47 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T - -T.Control { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) -} diff --git a/src/imports/controls/basic/DelayButton.qml b/src/imports/controls/basic/DelayButton.qml deleted file mode 100644 index 367384c0..00000000 --- a/src/imports/controls/basic/DelayButton.qml +++ /dev/null @@ -1,104 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.DelayButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - horizontalPadding: padding + 2 - - transition: Transition { - NumberAnimation { - duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress) - } - } - - contentItem: ItemGroup { - ClippedText { - clip: control.progress > 0 - clipX: -control.leftPadding + control.progress * control.width - clipWidth: (1.0 - control.progress) * control.width - visible: control.progress < 1 - - text: control.text - font: control.font - opacity: enabled ? 1 : 0.3 - color: control.palette.buttonText - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - elide: Text.ElideRight - } - - ClippedText { - clip: control.progress > 0 - clipX: -control.leftPadding - clipWidth: control.progress * control.width - visible: control.progress > 0 - - text: control.text - font: control.font - opacity: enabled ? 1 : 0.3 - color: control.palette.brightText - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - elide: Text.ElideRight - } - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 40 - color: Color.blend(control.palette.button, control.palette.mid, control.down ? 0.5 : 0.0) - border.color: control.palette.highlight - border.width: control.visualFocus ? 2 : 0 - - PaddedRectangle { - padding: control.visualFocus ? 2 : 0 - width: control.progress * parent.width - height: parent.height - color: Color.blend(control.palette.dark, control.palette.mid, control.down ? 0.5 : 0.0) - } - } -} diff --git a/src/imports/controls/basic/Dial.qml b/src/imports/controls/basic/Dial.qml deleted file mode 100644 index 8450e9f9..00000000 --- a/src/imports/controls/basic/Dial.qml +++ /dev/null @@ -1,79 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Controls.Basic.impl -import QtQuick.Templates as T - -T.Dial { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - background: DialImpl { - implicitWidth: 184 - implicitHeight: 184 - color: control.visualFocus ? control.palette.highlight : control.palette.dark - progress: control.position - opacity: control.enabled ? 1 : 0.3 - } - - handle: ColorImage { - x: control.background.x + control.background.width / 2 - width / 2 - y: control.background.y + control.background.height / 2 - height / 2 - width: 14 - height: 10 - defaultColor: "#353637" - color: control.visualFocus ? control.palette.highlight : control.palette.dark - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/dial-indicator.png" - antialiasing: true - opacity: control.enabled ? 1 : 0.3 - transform: [ - Translate { - y: -Math.min(control.background.width, control.background.height) * 0.4 + control.handle.height / 2 - }, - Rotation { - angle: control.angle - origin.x: control.handle.width / 2 - origin.y: control.handle.height / 2 - } - ] - } -} diff --git a/src/imports/controls/basic/Dialog.qml b/src/imports/controls/basic/Dialog.qml deleted file mode 100644 index 1f2b4fbb..00000000 --- a/src/imports/controls/basic/Dialog.qml +++ /dev/null @@ -1,85 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl - -T.Dialog { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - padding: 12 - - background: Rectangle { - color: control.palette.window - border.color: control.palette.dark - } - - header: Label { - text: control.title - visible: control.title - elide: Label.ElideRight - font.bold: true - padding: 12 - background: Rectangle { - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 1 - color: control.palette.window - } - } - - footer: DialogButtonBox { - visible: count > 0 - } - - T.Overlay.modal: Rectangle { - color: Color.transparent(control.palette.shadow, 0.5) - } - - T.Overlay.modeless: Rectangle { - color: Color.transparent(control.palette.shadow, 0.12) - } -} diff --git a/src/imports/controls/basic/DialogButtonBox.qml b/src/imports/controls/basic/DialogButtonBox.qml deleted file mode 100644 index e4cdbd14..00000000 --- a/src/imports/controls/basic/DialogButtonBox.qml +++ /dev/null @@ -1,72 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T - -T.DialogButtonBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - (control.count === 1 ? implicitContentWidth * 2 : implicitContentWidth) + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - contentWidth: contentItem.contentWidth - - spacing: 1 - padding: 12 - alignment: count === 1 ? Qt.AlignRight : undefined - - delegate: Button { - width: control.count === 1 ? control.availableWidth / 2 : undefined - } - - contentItem: ListView { - model: control.contentModel - spacing: control.spacing - orientation: ListView.Horizontal - boundsBehavior: Flickable.StopAtBounds - snapMode: ListView.SnapToItem - } - - background: Rectangle { - implicitHeight: 40 - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - color: control.palette.window - } -} diff --git a/src/imports/controls/basic/Drawer.qml b/src/imports/controls/basic/Drawer.qml deleted file mode 100644 index 0d286f99..00000000 --- a/src/imports/controls/basic/Drawer.qml +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.Drawer { - id: control - - parent: T.Overlay.overlay - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: control.edge === Qt.BottomEdge - leftPadding: control.edge === Qt.RightEdge - rightPadding: control.edge === Qt.LeftEdge - bottomPadding: control.edge === Qt.TopEdge - - enter: Transition { SmoothedAnimation { velocity: 5 } } - exit: Transition { SmoothedAnimation { velocity: 5 } } - - background: Rectangle { - color: control.palette.window - Rectangle { - readonly property bool horizontal: control.edge === Qt.LeftEdge || control.edge === Qt.RightEdge - width: horizontal ? 1 : parent.width - height: horizontal ? parent.height : 1 - color: control.palette.dark - x: control.edge === Qt.LeftEdge ? parent.width - 1 : 0 - y: control.edge === Qt.TopEdge ? parent.height - 1 : 0 - } - } - - T.Overlay.modal: Rectangle { - color: Color.transparent(control.palette.shadow, 0.5) - } - - T.Overlay.modeless: Rectangle { - color: Color.transparent(control.palette.shadow, 0.12) - } -} diff --git a/src/imports/controls/basic/Frame.qml b/src/imports/controls/basic/Frame.qml deleted file mode 100644 index 22f29806..00000000 --- a/src/imports/controls/basic/Frame.qml +++ /dev/null @@ -1,55 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.Frame { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 12 - - background: Rectangle { - color: "transparent" - border.color: control.palette.mid - } -} diff --git a/src/imports/controls/basic/GroupBox.qml b/src/imports/controls/basic/GroupBox.qml deleted file mode 100644 index 27ff8ce6..00000000 --- a/src/imports/controls/basic/GroupBox.qml +++ /dev/null @@ -1,73 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.GroupBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitLabelWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - spacing: 6 - padding: 12 - topPadding: padding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) - - label: Text { - x: control.leftPadding - width: control.availableWidth - - text: control.title - font: control.font - color: control.palette.windowText - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } - - background: Rectangle { - y: control.topPadding - control.bottomPadding - width: parent.width - height: parent.height - control.topPadding + control.bottomPadding - - color: "transparent" - border.color: control.palette.mid - } -} diff --git a/src/imports/controls/basic/HorizontalHeaderView.qml b/src/imports/controls/basic/HorizontalHeaderView.qml deleted file mode 100644 index e5214593..00000000 --- a/src/imports/controls/basic/HorizontalHeaderView.qml +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T - -T.HorizontalHeaderView { - id: control - - implicitWidth: syncView ? syncView.width : 0 - implicitHeight: contentHeight - - delegate: Rectangle { - // Qt6: add cellPadding (and font etc) as public API in headerview - readonly property real cellPadding: 8 - - implicitWidth: text.implicitWidth + (cellPadding * 2) - implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2)) - color: "#f6f6f6" - border.color: "#e4e4e4" - - Text { - id: text - text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] - : model[control.textRole]) - : modelData - width: parent.width - height: parent.height - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: "#ff26282a" - } - } -} diff --git a/src/imports/controls/basic/ItemDelegate.qml b/src/imports/controls/basic/ItemDelegate.qml deleted file mode 100644 index 3a1cb298..00000000 --- a/src/imports/controls/basic/ItemDelegate.qml +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ItemDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 12 - spacing: 8 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.text - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.highlighted ? control.palette.highlightedText : control.palette.text - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 40 - visible: control.down || control.highlighted || control.visualFocus - color: Color.blend(control.down ? control.palette.midlight : control.palette.light, - control.palette.highlight, control.visualFocus ? 0.15 : 0.0) - } -} diff --git a/src/imports/controls/basic/Label.qml b/src/imports/controls/basic/Label.qml deleted file mode 100644 index 9d7dfdfd..00000000 --- a/src/imports/controls/basic/Label.qml +++ /dev/null @@ -1,46 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.Label { - id: control - - color: control.palette.windowText - linkColor: control.palette.link -} diff --git a/src/imports/controls/basic/Menu.qml b/src/imports/controls/basic/Menu.qml deleted file mode 100644 index 475e58cc..00000000 --- a/src/imports/controls/basic/Menu.qml +++ /dev/null @@ -1,80 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.Menu { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - margins: 0 - overlap: 1 - - delegate: MenuItem { } - - contentItem: ListView { - implicitHeight: contentHeight - model: control.contentModel - interactive: Window.window - ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height - : false - clip: true - currentIndex: control.currentIndex - - ScrollIndicator.vertical: ScrollIndicator {} - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 40 - color: control.palette.window - border.color: control.palette.dark - } - - T.Overlay.modal: Rectangle { - color: Color.transparent(control.palette.shadow, 0.5) - } - - T.Overlay.modeless: Rectangle { - color: Color.transparent(control.palette.shadow, 0.12) - } -} diff --git a/src/imports/controls/basic/MenuBar.qml b/src/imports/controls/basic/MenuBar.qml deleted file mode 100644 index 79199d12..00000000 --- a/src/imports/controls/basic/MenuBar.qml +++ /dev/null @@ -1,62 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl - -T.MenuBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - delegate: MenuBarItem { } - - contentItem: Row { - spacing: control.spacing - Repeater { - model: control.contentModel - } - } - - background: Rectangle { - implicitHeight: 40 - color: control.palette.button - } -} diff --git a/src/imports/controls/basic/MenuBarItem.qml b/src/imports/controls/basic/MenuBarItem.qml deleted file mode 100644 index e7fd1c0b..00000000 --- a/src/imports/controls/basic/MenuBarItem.qml +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl - -T.MenuBarItem { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 6 - padding: 6 - leftPadding: 12 - rightPadding: 16 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.buttonText - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.buttonText - } - - background: Rectangle { - implicitWidth: 40 - implicitHeight: 40 - color: control.down || control.highlighted ? control.palette.mid : "transparent" - } -} diff --git a/src/imports/controls/basic/MenuItem.qml b/src/imports/controls/basic/MenuItem.qml deleted file mode 100644 index ab1f12f5..00000000 --- a/src/imports/controls/basic/MenuItem.qml +++ /dev/null @@ -1,104 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.MenuItem { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.windowText - - contentItem: IconLabel { - readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0 - readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0 - leftPadding: !control.mirrored ? indicatorPadding : arrowPadding - rightPadding: control.mirrored ? indicatorPadding : arrowPadding - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.windowText - } - - indicator: ColorImage { - x: control.mirrored ? control.width - width - control.rightPadding : control.leftPadding - y: control.topPadding + (control.availableHeight - height) / 2 - - visible: control.checked - source: control.checkable ? "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png" : "" - color: control.palette.windowText - defaultColor: "#353637" - } - - arrow: ColorImage { - x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding - y: control.topPadding + (control.availableHeight - height) / 2 - - visible: control.subMenu - mirror: control.mirrored - source: control.subMenu ? "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/arrow-indicator.png" : "" - color: control.palette.windowText - defaultColor: "#353637" - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 40 - x: 1 - y: 1 - width: control.width - 2 - height: control.height - 2 - color: control.down ? control.palette.midlight : control.highlighted ? control.palette.light : "transparent" - } -} diff --git a/src/imports/controls/basic/MenuSeparator.qml b/src/imports/controls/basic/MenuSeparator.qml deleted file mode 100644 index bc17dc39..00000000 --- a/src/imports/controls/basic/MenuSeparator.qml +++ /dev/null @@ -1,57 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.MenuSeparator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 2 - verticalPadding: padding + 4 - - contentItem: Rectangle { - implicitWidth: 188 - implicitHeight: 1 - color: control.palette.mid - } -} diff --git a/src/imports/controls/basic/Page.qml b/src/imports/controls/basic/Page.qml deleted file mode 100644 index ff75ee4e..00000000 --- a/src/imports/controls/basic/Page.qml +++ /dev/null @@ -1,56 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.Page { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - background: Rectangle { - color: control.palette.window - } -} diff --git a/src/imports/controls/basic/PageIndicator.qml b/src/imports/controls/basic/PageIndicator.qml deleted file mode 100644 index bd5ef290..00000000 --- a/src/imports/controls/basic/PageIndicator.qml +++ /dev/null @@ -1,71 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.PageIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - delegate: Rectangle { - implicitWidth: 8 - implicitHeight: 8 - - radius: width / 2 - color: control.palette.dark - - opacity: index === currentIndex ? 0.95 : pressed ? 0.7 : 0.45 - Behavior on opacity { OpacityAnimator { duration: 100 } } - } - - contentItem: Row { - spacing: control.spacing - - Repeater { - model: control.count - delegate: control.delegate - } - } -} diff --git a/src/imports/controls/basic/Pane.qml b/src/imports/controls/basic/Pane.qml deleted file mode 100644 index 181db9e4..00000000 --- a/src/imports/controls/basic/Pane.qml +++ /dev/null @@ -1,54 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.Pane { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 12 - - background: Rectangle { - color: control.palette.window - } -} diff --git a/src/imports/controls/basic/Popup.qml b/src/imports/controls/basic/Popup.qml deleted file mode 100644 index 720483d9..00000000 --- a/src/imports/controls/basic/Popup.qml +++ /dev/null @@ -1,63 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.Popup { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 12 - - background: Rectangle { - color: control.palette.window - border.color: control.palette.dark - } - - T.Overlay.modal: Rectangle { - color: Color.transparent(control.palette.shadow, 0.5) - } - - T.Overlay.modeless: Rectangle { - color: Color.transparent(control.palette.shadow, 0.12) - } -} diff --git a/src/imports/controls/basic/ProgressBar.qml b/src/imports/controls/basic/ProgressBar.qml deleted file mode 100644 index a49538d1..00000000 --- a/src/imports/controls/basic/ProgressBar.qml +++ /dev/null @@ -1,66 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Basic.impl - -T.ProgressBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - contentItem: ProgressBarImpl { - implicitHeight: 6 - implicitWidth: 116 - scale: control.mirrored ? -1 : 1 - progress: control.position - indeterminate: control.visible && control.indeterminate - color: control.palette.dark - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 6 - y: (control.height - height) / 2 - height: 6 - - color: control.palette.midlight - } -} diff --git a/src/imports/controls/basic/RadioButton.qml b/src/imports/controls/basic/RadioButton.qml deleted file mode 100644 index adb91435..00000000 --- a/src/imports/controls/basic/RadioButton.qml +++ /dev/null @@ -1,85 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.RadioButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - // keep in sync with RadioDelegate.qml (shared RadioIndicator.qml was removed for performance reasons) - indicator: Rectangle { - implicitWidth: 28 - implicitHeight: 28 - - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - - radius: width / 2 - color: control.down ? control.palette.light : control.palette.base - border.width: control.visualFocus ? 2 : 1 - border.color: control.visualFocus ? control.palette.highlight : control.palette.mid - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 20 - height: 20 - radius: width / 2 - color: control.palette.text - visible: control.checked - } - } - - contentItem: CheckLabel { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.palette.windowText - } -} diff --git a/src/imports/controls/basic/RadioDelegate.qml b/src/imports/controls/basic/RadioDelegate.qml deleted file mode 100644 index 69be290c..00000000 --- a/src/imports/controls/basic/RadioDelegate.qml +++ /dev/null @@ -1,102 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.RadioDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 12 - spacing: 12 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.text - - contentItem: IconLabel { - leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.text - } - - // keep in sync with RadioButton.qml (shared RadioIndicator.qml was removed for performance reasons) - indicator: Rectangle { - implicitWidth: 28 - implicitHeight: 28 - - x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding - y: control.topPadding + (control.availableHeight - height) / 2 - - radius: width / 2 - color: control.down ? control.palette.light : control.palette.base - border.width: control.visualFocus ? 2 : 1 - border.color: control.visualFocus ? control.palette.highlight : control.palette.mid - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 20 - height: 20 - radius: width / 2 - color: control.palette.text - visible: control.checked - } - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 40 - visible: control.down || control.highlighted - color: control.down ? control.palette.midlight : control.palette.light - } -} diff --git a/src/imports/controls/basic/RangeSlider.qml b/src/imports/controls/basic/RangeSlider.qml deleted file mode 100644 index e47cbd52..00000000 --- a/src/imports/controls/basic/RangeSlider.qml +++ /dev/null @@ -1,95 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.RangeSlider { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - first.implicitHandleWidth + leftPadding + rightPadding, - second.implicitHandleWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - first.implicitHandleHeight + topPadding + bottomPadding, - second.implicitHandleHeight + topPadding + bottomPadding) - - padding: 6 - - first.handle: Rectangle { - x: control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height)) - implicitWidth: 28 - implicitHeight: 28 - radius: width / 2 - border.width: activeFocus ? 2 : 1 - border.color: activeFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight - color: control.first.pressed ? control.palette.light : control.palette.window - } - - second.handle: Rectangle { - x: control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height)) - implicitWidth: 28 - implicitHeight: 28 - radius: width / 2 - border.width: activeFocus ? 2 : 1 - border.color: activeFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight - color: control.second.pressed ? control.palette.light : control.palette.window - } - - background: Rectangle { - x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) - implicitWidth: control.horizontal ? 200 : 6 - implicitHeight: control.horizontal ? 6 : 200 - width: control.horizontal ? control.availableWidth : implicitWidth - height: control.horizontal ? implicitHeight : control.availableHeight - radius: 3 - color: control.palette.midlight - scale: control.horizontal && control.mirrored ? -1 : 1 - - Rectangle { - x: control.horizontal ? control.first.position * parent.width + 3 : 0 - y: control.horizontal ? 0 : control.second.visualPosition * parent.height + 3 - width: control.horizontal ? control.second.position * parent.width - control.first.position * parent.width - 6 : 6 - height: control.horizontal ? 6 : control.second.position * parent.height - control.first.position * parent.height - 6 - - color: control.palette.dark - } - } -} diff --git a/src/imports/controls/basic/RoundButton.qml b/src/imports/controls/basic/RoundButton.qml deleted file mode 100644 index 6ab810fd..00000000 --- a/src/imports/controls/basic/RoundButton.qml +++ /dev/null @@ -1,80 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.RoundButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 24 - icon.height: 24 - icon.color: control.checked || control.highlighted ? control.palette.brightText : - control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.checked || control.highlighted ? control.palette.brightText : - control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText - } - - background: Rectangle { - implicitWidth: 40 - implicitHeight: 40 - radius: control.radius - opacity: enabled ? 1 : 0.3 - visible: !control.flat || control.down || control.checked || control.highlighted - color: Color.blend(control.checked || control.highlighted ? control.palette.dark : control.palette.button, - control.palette.mid, control.down ? 0.5 : 0.0) - border.color: control.palette.highlight - border.width: control.visualFocus ? 2 : 0 - } -} diff --git a/src/imports/controls/basic/ScrollBar.qml b/src/imports/controls/basic/ScrollBar.qml deleted file mode 100644 index 763f96bb..00000000 --- a/src/imports/controls/basic/ScrollBar.qml +++ /dev/null @@ -1,75 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ScrollBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 2 - visible: control.policy !== T.ScrollBar.AlwaysOff - minimumSize: orientation == Qt.Horizontal ? height / width : width / height - - contentItem: Rectangle { - implicitWidth: control.interactive ? 6 : 2 - implicitHeight: control.interactive ? 6 : 2 - - radius: width / 2 - color: control.pressed ? control.palette.dark : control.palette.mid - opacity: 0.0 - - states: State { - name: "active" - when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0) - PropertyChanges { target: 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/imports/controls/basic/ScrollIndicator.qml b/src/imports/controls/basic/ScrollIndicator.qml deleted file mode 100644 index dcb23d65..00000000 --- a/src/imports/controls/basic/ScrollIndicator.qml +++ /dev/null @@ -1,75 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ScrollIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 2 - - contentItem: Rectangle { - implicitWidth: 2 - implicitHeight: 2 - - color: control.palette.mid - visible: control.size < 1.0 - opacity: 0.0 - - states: State { - name: "active" - when: control.active - PropertyChanges { target: 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/imports/controls/basic/ScrollView.qml b/src/imports/controls/basic/ScrollView.qml deleted file mode 100644 index 43c4e428..00000000 --- a/src/imports/controls/basic/ScrollView.qml +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ScrollView { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - ScrollBar.vertical: ScrollBar { - parent: control - x: control.mirrored ? 0 : control.width - width - y: control.topPadding - height: control.availableHeight - active: control.ScrollBar.horizontal.active - } - - ScrollBar.horizontal: ScrollBar { - parent: control - x: control.leftPadding - y: control.height - height - width: control.availableWidth - active: control.ScrollBar.vertical.active - } -} diff --git a/src/imports/controls/basic/Slider.qml b/src/imports/controls/basic/Slider.qml deleted file mode 100644 index 425f4975..00000000 --- a/src/imports/controls/basic/Slider.qml +++ /dev/null @@ -1,82 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.Slider { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitHandleWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitHandleHeight + topPadding + bottomPadding) - - padding: 6 - - handle: Rectangle { - x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)) - implicitWidth: 28 - implicitHeight: 28 - radius: width / 2 - color: control.pressed ? control.palette.light : control.palette.window - border.width: control.visualFocus ? 2 : 1 - border.color: control.visualFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight - } - - background: Rectangle { - x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) - implicitWidth: control.horizontal ? 200 : 6 - implicitHeight: control.horizontal ? 6 : 200 - width: control.horizontal ? control.availableWidth : implicitWidth - height: control.horizontal ? implicitHeight : control.availableHeight - radius: 3 - color: control.palette.midlight - scale: control.horizontal && control.mirrored ? -1 : 1 - - Rectangle { - y: control.horizontal ? 0 : control.visualPosition * parent.height - width: control.horizontal ? control.position * parent.width : 6 - height: control.horizontal ? 6 : control.position * parent.height - - radius: 3 - color: control.palette.dark - } - } -} diff --git a/src/imports/controls/basic/SpinBox.qml b/src/imports/controls/basic/SpinBox.qml deleted file mode 100644 index 772cc583..00000000 --- a/src/imports/controls/basic/SpinBox.qml +++ /dev/null @@ -1,134 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.SpinBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentItem.implicitWidth + 2 * padding + - up.implicitIndicatorWidth + - down.implicitIndicatorWidth) - implicitHeight: Math.max(implicitContentHeight + topPadding + bottomPadding, - implicitBackgroundHeight, - up.implicitIndicatorHeight, - down.implicitIndicatorHeight) - - padding: 6 - leftPadding: padding + (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0)) - rightPadding: padding + (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0)) - - validator: IntValidator { - locale: control.locale.name - bottom: Math.min(control.from, control.to) - top: Math.max(control.from, control.to) - } - - contentItem: TextInput { - z: 2 - text: control.displayText - - font: control.font - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - horizontalAlignment: Qt.AlignHCenter - verticalAlignment: Qt.AlignVCenter - - readOnly: !control.editable - validator: control.validator - inputMethodHints: control.inputMethodHints - - Rectangle { - x: -6 - (control.down.indicator ? 1 : 0) - y: -6 - width: control.width - (control.up.indicator ? control.up.indicator.width - 1 : 0) - (control.down.indicator ? control.down.indicator.width - 1 : 0) - height: control.height - visible: control.activeFocus - color: "transparent" - border.color: control.palette.highlight - border.width: 2 - } - } - - up.indicator: Rectangle { - x: control.mirrored ? 0 : parent.width - width - height: parent.height - implicitWidth: 40 - implicitHeight: 40 - color: control.up.pressed ? control.palette.mid : control.palette.button - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: parent.width / 3 - height: 2 - color: enabled ? control.palette.buttonText : control.palette.mid - } - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 2 - height: parent.width / 3 - color: enabled ? control.palette.buttonText : control.palette.mid - } - } - - down.indicator: Rectangle { - x: control.mirrored ? parent.width - width : 0 - height: parent.height - implicitWidth: 40 - implicitHeight: 40 - color: control.down.pressed ? control.palette.mid : control.palette.button - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: parent.width / 3 - height: 2 - color: enabled ? control.palette.buttonText : control.palette.mid - } - } - - background: Rectangle { - implicitWidth: 140 - color: enabled ? control.palette.base : control.palette.button - border.color: control.palette.button - } -} diff --git a/src/imports/controls/basic/SplitView.qml b/src/imports/controls/basic/SplitView.qml deleted file mode 100644 index 66d24743..00000000 --- a/src/imports/controls/basic/SplitView.qml +++ /dev/null @@ -1,54 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl - -T.SplitView { - id: control - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - handle: Rectangle { - implicitWidth: control.orientation === Qt.Horizontal ? 6 : control.width - implicitHeight: control.orientation === Qt.Horizontal ? control.height : 6 - color: T.SplitHandle.pressed ? control.palette.mid - : (T.SplitHandle.hovered ? control.palette.midlight : control.palette.button) - } -} diff --git a/src/imports/controls/basic/StackView.qml b/src/imports/controls/basic/StackView.qml deleted file mode 100644 index cbf13f36..00000000 --- a/src/imports/controls/basic/StackView.qml +++ /dev/null @@ -1,66 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T - -T.StackView { - id: control - - popEnter: Transition { - XAnimator { from: (control.mirrored ? -1 : 1) * -control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } - } - - popExit: Transition { - XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * control.width; duration: 400; easing.type: Easing.OutCubic } - } - - pushEnter: Transition { - XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } - } - - pushExit: Transition { - XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 400; easing.type: Easing.OutCubic } - } - - replaceEnter: Transition { - XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } - } - - replaceExit: Transition { - XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 400; easing.type: Easing.OutCubic } - } -} diff --git a/src/imports/controls/basic/SwipeDelegate.qml b/src/imports/controls/basic/SwipeDelegate.qml deleted file mode 100644 index f8209a1e..00000000 --- a/src/imports/controls/basic/SwipeDelegate.qml +++ /dev/null @@ -1,77 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.SwipeDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 12 - spacing: 12 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.text - - swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } } - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.text - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 40 - color: Color.blend(control.down ? control.palette.midlight : control.palette.light, - control.palette.highlight, control.visualFocus ? 0.15 : 0.0) - } -} diff --git a/src/imports/controls/basic/SwipeView.qml b/src/imports/controls/basic/SwipeView.qml deleted file mode 100644 index 6ce4ee6c..00000000 --- a/src/imports/controls/basic/SwipeView.qml +++ /dev/null @@ -1,65 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T - -T.SwipeView { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - contentItem: ListView { - model: control.contentModel - interactive: control.interactive - currentIndex: control.currentIndex - focus: control.focus - - spacing: control.spacing - orientation: control.orientation - snapMode: ListView.SnapOneItem - boundsBehavior: Flickable.StopAtBounds - - highlightRangeMode: ListView.StrictlyEnforceRange - preferredHighlightBegin: 0 - preferredHighlightEnd: 0 - highlightMoveDuration: 250 - maximumFlickVelocity: 4 * (control.orientation === Qt.Horizontal ? width : height) - } -} diff --git a/src/imports/controls/basic/Switch.qml b/src/imports/controls/basic/Switch.qml deleted file mode 100644 index 0d919f9e..00000000 --- a/src/imports/controls/basic/Switch.qml +++ /dev/null @@ -1,91 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl - -T.Switch { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - indicator: PaddedRectangle { - implicitWidth: 56 - implicitHeight: 28 - - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - - radius: 8 - leftPadding: 0 - rightPadding: 0 - padding: (height - 16) / 2 - color: control.checked ? control.palette.dark : control.palette.midlight - - Rectangle { - x: Math.max(0, Math.min(parent.width - width, control.visualPosition * parent.width - (width / 2))) - y: (parent.height - height) / 2 - width: 28 - height: 28 - radius: 16 - color: control.down ? control.palette.light : control.palette.window - border.width: control.visualFocus ? 2 : 1 - border.color: control.visualFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight - - Behavior on x { - enabled: !control.down - SmoothedAnimation { velocity: 200 } - } - } - } - - contentItem: CheckLabel { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.palette.windowText - } -} diff --git a/src/imports/controls/basic/SwitchDelegate.qml b/src/imports/controls/basic/SwitchDelegate.qml deleted file mode 100644 index 8203e107..00000000 --- a/src/imports/controls/basic/SwitchDelegate.qml +++ /dev/null @@ -1,108 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl - -T.SwitchDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 12 - spacing: 12 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.text - - indicator: PaddedRectangle { - implicitWidth: 56 - implicitHeight: 28 - - x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - - radius: 8 - leftPadding: 0 - rightPadding: 0 - padding: (height - 16) / 2 - color: control.checked ? control.palette.dark : control.palette.midlight - - Rectangle { - x: Math.max(0, Math.min(parent.width - width, control.visualPosition * parent.width - (width / 2))) - y: (parent.height - height) / 2 - width: 28 - height: 28 - radius: 16 - color: control.down ? control.palette.light : control.palette.window - border.width: control.visualFocus ? 2 : 1 - border.color: control.visualFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight - - Behavior on x { - enabled: !control.down - SmoothedAnimation { velocity: 200 } - } - } - } - - contentItem: IconLabel { - leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.text - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 40 - visible: control.down || control.highlighted - color: control.down ? control.palette.midlight : control.palette.light - } -} diff --git a/src/imports/controls/basic/TabBar.qml b/src/imports/controls/basic/TabBar.qml deleted file mode 100644 index f1b11ac2..00000000 --- a/src/imports/controls/basic/TabBar.qml +++ /dev/null @@ -1,69 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T - -T.TabBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - spacing: 1 - - contentItem: ListView { - model: control.contentModel - currentIndex: control.currentIndex - - spacing: control.spacing - orientation: ListView.Horizontal - boundsBehavior: Flickable.StopAtBounds - flickableDirection: Flickable.AutoFlickIfNeeded - snapMode: ListView.SnapToItem - - highlightMoveDuration: 0 - highlightRangeMode: ListView.ApplyRange - preferredHighlightBegin: 40 - preferredHighlightEnd: width - 40 - } - - background: Rectangle { - color: control.palette.window - } -} diff --git a/src/imports/controls/basic/TabButton.qml b/src/imports/controls/basic/TabButton.qml deleted file mode 100644 index 5e38f69c..00000000 --- a/src/imports/controls/basic/TabButton.qml +++ /dev/null @@ -1,72 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.TabButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 24 - icon.height: 24 - icon.color: checked ? control.palette.windowText : control.palette.brightText - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.checked ? control.palette.windowText : control.palette.brightText - } - - background: Rectangle { - implicitHeight: 40 - color: Color.blend(control.checked ? control.palette.window : control.palette.dark, - control.palette.mid, control.down ? 0.5 : 0.0) - } -} diff --git a/src/imports/controls/basic/TextArea.qml b/src/imports/controls/basic/TextArea.qml deleted file mode 100644 index fa6112f6..00000000 --- a/src/imports/controls/basic/TextArea.qml +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.TextArea { - id: control - - implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, - implicitBackgroundWidth + leftInset + rightInset, - placeholder.implicitWidth + leftPadding + rightPadding) - implicitHeight: Math.max(contentHeight + topPadding + bottomPadding, - implicitBackgroundHeight + topInset + bottomInset, - placeholder.implicitHeight + topPadding + bottomPadding) - - padding: 6 - leftPadding: padding + 4 - - color: control.palette.text - placeholderTextColor: Color.transparent(control.color, 0.5) - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - - PlaceholderText { - id: placeholder - x: control.leftPadding - y: control.topPadding - width: control.width - (control.leftPadding + control.rightPadding) - height: control.height - (control.topPadding + control.bottomPadding) - - text: control.placeholderText - font: control.font - color: control.placeholderTextColor - verticalAlignment: control.verticalAlignment - visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) - elide: Text.ElideRight - renderType: control.renderType - } -} diff --git a/src/imports/controls/basic/TextField.qml b/src/imports/controls/basic/TextField.qml deleted file mode 100644 index 9c66e4ba..00000000 --- a/src/imports/controls/basic/TextField.qml +++ /dev/null @@ -1,82 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.TextField { - id: control - - implicitWidth: implicitBackgroundWidth + leftInset + rightInset - || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding, - placeholder.implicitHeight + topPadding + bottomPadding) - - padding: 6 - leftPadding: padding + 4 - - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - placeholderTextColor: Color.transparent(control.color, 0.5) - verticalAlignment: TextInput.AlignVCenter - - PlaceholderText { - id: placeholder - x: control.leftPadding - y: control.topPadding - width: control.width - (control.leftPadding + control.rightPadding) - height: control.height - (control.topPadding + control.bottomPadding) - - text: control.placeholderText - font: control.font - color: control.placeholderTextColor - verticalAlignment: control.verticalAlignment - visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) - elide: Text.ElideRight - renderType: control.renderType - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 40 - border.width: control.activeFocus ? 2 : 1 - color: control.palette.base - border.color: control.activeFocus ? control.palette.highlight : control.palette.mid - } -} diff --git a/src/imports/controls/basic/ToolBar.qml b/src/imports/controls/basic/ToolBar.qml deleted file mode 100644 index 1d21c51d..00000000 --- a/src/imports/controls/basic/ToolBar.qml +++ /dev/null @@ -1,53 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ToolBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - background: Rectangle { - implicitHeight: 40 - color: control.palette.button - } -} diff --git a/src/imports/controls/basic/ToolButton.qml b/src/imports/controls/basic/ToolButton.qml deleted file mode 100644 index 8a4f8097..00000000 --- a/src/imports/controls/basic/ToolButton.qml +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ToolButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 24 - icon.height: 24 - icon.color: visualFocus ? control.palette.highlight : control.palette.buttonText - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.visualFocus ? control.palette.highlight : control.palette.buttonText - } - - background: Rectangle { - implicitWidth: 40 - implicitHeight: 40 - - opacity: control.down ? 1.0 : 0.5 - color: control.down || control.checked || control.highlighted ? control.palette.mid : control.palette.button - } -} diff --git a/src/imports/controls/basic/ToolSeparator.qml b/src/imports/controls/basic/ToolSeparator.qml deleted file mode 100644 index 774e41ec..00000000 --- a/src/imports/controls/basic/ToolSeparator.qml +++ /dev/null @@ -1,57 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ToolSeparator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: vertical ? 6 : 2 - verticalPadding: vertical ? 2 : 6 - - contentItem: Rectangle { - implicitWidth: vertical ? 1 : 30 - implicitHeight: vertical ? 30 : 1 - color: control.palette.mid - } -} diff --git a/src/imports/controls/basic/ToolTip.qml b/src/imports/controls/basic/ToolTip.qml deleted file mode 100644 index 9d10f7fa..00000000 --- a/src/imports/controls/basic/ToolTip.qml +++ /dev/null @@ -1,68 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ToolTip { - id: control - - x: parent ? (parent.width - implicitWidth) / 2 : 0 - y: -implicitHeight - 3 - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - margins: 6 - padding: 6 - - closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent - - contentItem: Text { - text: control.text - font: control.font - wrapMode: Text.Wrap - color: control.palette.toolTipText - } - - background: Rectangle { - border.color: control.palette.dark - color: control.palette.toolTipBase - } -} diff --git a/src/imports/controls/basic/Tumbler.qml b/src/imports/controls/basic/Tumbler.qml deleted file mode 100644 index a69df1f3..00000000 --- a/src/imports/controls/basic/Tumbler.qml +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.Tumbler { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - delegate: Text { - text: modelData - color: control.visualFocus ? control.palette.highlight : control.palette.text - font: control.font - opacity: 1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2) - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - } - - contentItem: TumblerView { - implicitWidth: 60 - implicitHeight: 200 - model: control.model - delegate: control.delegate - path: Path { - startX: control.contentItem.width / 2 - startY: -control.contentItem.delegateHeight / 2 - PathLine { - x: control.contentItem.width / 2 - y: (control.visibleItemCount + 1) * control.contentItem.delegateHeight - control.contentItem.delegateHeight / 2 - } - } - - property real delegateHeight: control.availableHeight / control.visibleItemCount - } -} diff --git a/src/imports/controls/basic/VerticalHeaderView.qml b/src/imports/controls/basic/VerticalHeaderView.qml deleted file mode 100644 index 7c057e01..00000000 --- a/src/imports/controls/basic/VerticalHeaderView.qml +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T - -T.VerticalHeaderView { - id: control - - implicitWidth: contentWidth - implicitHeight: syncView ? syncView.height : 0 - - delegate: Rectangle { - // Qt6: add cellPadding (and font etc) as public API in headerview - readonly property real cellPadding: 8 - - implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2)) - implicitHeight: text.implicitHeight + (cellPadding * 2) - color: "#f6f6f6" - border.color: "#e4e4e4" - - Text { - id: text - text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] - : model[control.textRole]) - : modelData - width: parent.width - height: parent.height - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: "#ff26282a" - } - } -} diff --git a/src/imports/controls/basic/basic.pri b/src/imports/controls/basic/basic.pri deleted file mode 100644 index 337f7f36..00000000 --- a/src/imports/controls/basic/basic.pri +++ /dev/null @@ -1,66 +0,0 @@ -HEADERS += \ - $$PWD/qquickbasicstyle_p.h \ - $$PWD/qquickbasictheme_p.h - -SOURCES += \ - $$PWD/qquickbasicstyle.cpp \ - $$PWD/qquickbasictheme.cpp - -QML_FILES += \ - $$PWD/AbstractButton.qml \ - $$PWD/Action.qml \ - $$PWD/ActionGroup.qml \ - $$PWD/ApplicationWindow.qml \ - $$PWD/BusyIndicator.qml \ - $$PWD/Button.qml \ - $$PWD/ButtonGroup.qml \ - $$PWD/CheckBox.qml \ - $$PWD/CheckDelegate.qml \ - $$PWD/ComboBox.qml \ - $$PWD/Container.qml \ - $$PWD/Control.qml \ - $$PWD/DelayButton.qml \ - $$PWD/Dial.qml \ - $$PWD/Dialog.qml \ - $$PWD/DialogButtonBox.qml \ - $$PWD/Drawer.qml \ - $$PWD/Frame.qml \ - $$PWD/GroupBox.qml \ - $$PWD/HorizontalHeaderView.qml \ - $$PWD/ItemDelegate.qml \ - $$PWD/Label.qml \ - $$PWD/Menu.qml \ - $$PWD/MenuBar.qml \ - $$PWD/MenuBarItem.qml \ - $$PWD/MenuItem.qml \ - $$PWD/MenuSeparator.qml \ - $$PWD/Page.qml \ - $$PWD/PageIndicator.qml \ - $$PWD/Pane.qml \ - $$PWD/Popup.qml \ - $$PWD/ProgressBar.qml \ - $$PWD/RadioButton.qml \ - $$PWD/RadioDelegate.qml \ - $$PWD/RangeSlider.qml \ - $$PWD/RoundButton.qml \ - $$PWD/ScrollBar.qml \ - $$PWD/ScrollIndicator.qml \ - $$PWD/ScrollView.qml \ - $$PWD/Slider.qml \ - $$PWD/SpinBox.qml \ - $$PWD/SplitView.qml \ - $$PWD/StackView.qml \ - $$PWD/SwipeDelegate.qml \ - $$PWD/Switch.qml \ - $$PWD/SwitchDelegate.qml \ - $$PWD/SwipeView.qml \ - $$PWD/TabBar.qml \ - $$PWD/TabButton.qml \ - $$PWD/TextArea.qml \ - $$PWD/TextField.qml \ - $$PWD/ToolBar.qml \ - $$PWD/ToolButton.qml \ - $$PWD/ToolSeparator.qml \ - $$PWD/ToolTip.qml \ - $$PWD/Tumbler.qml \ - $$PWD/VerticalHeaderView.qml diff --git a/src/imports/controls/basic/images/arrow-indicator.png b/src/imports/controls/basic/images/arrow-indicator.png deleted file mode 100644 index d833d52c..00000000 Binary files a/src/imports/controls/basic/images/arrow-indicator.png and /dev/null differ diff --git a/src/imports/controls/basic/images/arrow-indicator@2x.png b/src/imports/controls/basic/images/arrow-indicator@2x.png deleted file mode 100644 index 55c7940a..00000000 Binary files a/src/imports/controls/basic/images/arrow-indicator@2x.png and /dev/null differ diff --git a/src/imports/controls/basic/images/arrow-indicator@3x.png b/src/imports/controls/basic/images/arrow-indicator@3x.png deleted file mode 100644 index c7067c5c..00000000 Binary files a/src/imports/controls/basic/images/arrow-indicator@3x.png and /dev/null differ diff --git a/src/imports/controls/basic/images/arrow-indicator@4x.png b/src/imports/controls/basic/images/arrow-indicator@4x.png deleted file mode 100644 index 4c5cf351..00000000 Binary files a/src/imports/controls/basic/images/arrow-indicator@4x.png and /dev/null differ diff --git a/src/imports/controls/basic/images/check.png b/src/imports/controls/basic/images/check.png deleted file mode 100644 index 479a8442..00000000 Binary files a/src/imports/controls/basic/images/check.png and /dev/null differ diff --git a/src/imports/controls/basic/images/check@2x.png b/src/imports/controls/basic/images/check@2x.png deleted file mode 100644 index 79663c0b..00000000 Binary files a/src/imports/controls/basic/images/check@2x.png and /dev/null differ diff --git a/src/imports/controls/basic/images/check@3x.png b/src/imports/controls/basic/images/check@3x.png deleted file mode 100644 index fd0135ab..00000000 Binary files a/src/imports/controls/basic/images/check@3x.png and /dev/null differ diff --git a/src/imports/controls/basic/images/check@4x.png b/src/imports/controls/basic/images/check@4x.png deleted file mode 100644 index e7e0b640..00000000 Binary files a/src/imports/controls/basic/images/check@4x.png and /dev/null differ diff --git a/src/imports/controls/basic/images/dial-indicator.png b/src/imports/controls/basic/images/dial-indicator.png deleted file mode 100644 index 92357c51..00000000 Binary files a/src/imports/controls/basic/images/dial-indicator.png and /dev/null differ diff --git a/src/imports/controls/basic/images/dial-indicator@2x.png b/src/imports/controls/basic/images/dial-indicator@2x.png deleted file mode 100644 index f436443b..00000000 Binary files a/src/imports/controls/basic/images/dial-indicator@2x.png and /dev/null differ diff --git a/src/imports/controls/basic/images/dial-indicator@3x.png b/src/imports/controls/basic/images/dial-indicator@3x.png deleted file mode 100644 index d883045b..00000000 Binary files a/src/imports/controls/basic/images/dial-indicator@3x.png and /dev/null differ diff --git a/src/imports/controls/basic/images/dial-indicator@4x.png b/src/imports/controls/basic/images/dial-indicator@4x.png deleted file mode 100644 index 79477712..00000000 Binary files a/src/imports/controls/basic/images/dial-indicator@4x.png and /dev/null differ diff --git a/src/imports/controls/basic/images/double-arrow.png b/src/imports/controls/basic/images/double-arrow.png deleted file mode 100644 index 3ecd7f89..00000000 Binary files a/src/imports/controls/basic/images/double-arrow.png and /dev/null differ diff --git a/src/imports/controls/basic/images/double-arrow@2x.png b/src/imports/controls/basic/images/double-arrow@2x.png deleted file mode 100644 index eeb03e28..00000000 Binary files a/src/imports/controls/basic/images/double-arrow@2x.png and /dev/null differ diff --git a/src/imports/controls/basic/images/double-arrow@3x.png b/src/imports/controls/basic/images/double-arrow@3x.png deleted file mode 100644 index f0662d20..00000000 Binary files a/src/imports/controls/basic/images/double-arrow@3x.png and /dev/null differ diff --git a/src/imports/controls/basic/images/double-arrow@4x.png b/src/imports/controls/basic/images/double-arrow@4x.png deleted file mode 100644 index 10891e91..00000000 Binary files a/src/imports/controls/basic/images/double-arrow@4x.png and /dev/null differ diff --git a/src/imports/controls/basic/images/drop-indicator.png b/src/imports/controls/basic/images/drop-indicator.png deleted file mode 100644 index 80c1d958..00000000 Binary files a/src/imports/controls/basic/images/drop-indicator.png and /dev/null differ diff --git a/src/imports/controls/basic/images/drop-indicator@2x.png b/src/imports/controls/basic/images/drop-indicator@2x.png deleted file mode 100644 index 6e0f228c..00000000 Binary files a/src/imports/controls/basic/images/drop-indicator@2x.png and /dev/null differ diff --git a/src/imports/controls/basic/images/drop-indicator@3x.png b/src/imports/controls/basic/images/drop-indicator@3x.png deleted file mode 100644 index 199752fb..00000000 Binary files a/src/imports/controls/basic/images/drop-indicator@3x.png and /dev/null differ diff --git a/src/imports/controls/basic/images/drop-indicator@4x.png b/src/imports/controls/basic/images/drop-indicator@4x.png deleted file mode 100644 index 58311fbe..00000000 Binary files a/src/imports/controls/basic/images/drop-indicator@4x.png and /dev/null differ diff --git a/src/imports/controls/basic/impl/CMakeLists.txt b/src/imports/controls/basic/impl/CMakeLists.txt deleted file mode 100644 index 2ae6cf75..00000000 --- a/src/imports/controls/basic/impl/CMakeLists.txt +++ /dev/null @@ -1,42 +0,0 @@ -# Generated from basic-impl.pro. - -##################################################################### -## qtquickcontrols2basicstyleimplplugin Plugin: -##################################################################### - -qt_internal_add_qml_module(qtquickcontrols2basicstyleimplplugin - URI "QtQuick.Controls.Basic.impl" - VERSION "${PROJECT_VERSION}" - CLASSNAME QtQuickControls2BasicStyleImplPlugin - SKIP_TYPE_REGISTRATION - GENERATE_QMLTYPES - INSTALL_QMLTYPES - SOURCES - qquickbasicbusyindicator.cpp qquickbasicbusyindicator_p.h - qquickbasicdial.cpp qquickbasicdial_p.h - qquickbasicprogressbar.cpp qquickbasicprogressbar_p.h - qtquickcontrols2basicstyleimplplugin.cpp - DEFINES - QT_NO_CAST_FROM_ASCII - QT_NO_CAST_TO_ASCII - LIBRARIES - Qt::CorePrivate - Qt::Gui - Qt::QmlPrivate - Qt::QuickControls2ImplPrivate - Qt::QuickPrivate - Qt::QuickTemplates2Private - PUBLIC_LIBRARIES - Qt::Core - Qt::Gui - Qt::Qml - Qt::Quick -) - -#### Keys ignored in scope 1:.:.:basic-impl.pro:: -# OTHER_FILES = "qmldir" -# QML_IMPORT_NAME = "QtQuick.Controls.Basic.impl" -# QML_IMPORT_VERSION = "$$QT_VERSION" -# QT_FOR_CONFIG = "quickcontrols2-private" -# TARGETPATH = "QtQuick/Controls/Basic/impl" -# _REQUIREMENTS = "qtConfig(quickcontrols2-basic)" diff --git a/src/imports/controls/basic/impl/qquickbasicbusyindicator.cpp b/src/imports/controls/basic/impl/qquickbasicbusyindicator.cpp deleted file mode 100644 index 7fb3b024..00000000 --- a/src/imports/controls/basic/impl/qquickbasicbusyindicator.cpp +++ /dev/null @@ -1,223 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickbasicbusyindicator_p.h" - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -static const int CircleCount = 10; -static const int TotalDuration = 100 * CircleCount * 2; -static const QRgb TransparentColor = 0x00000000; - -static QPointF moveCircle(const QPointF &pos, qreal rotation, qreal distance) -{ - return pos - QTransform().rotate(rotation).map(QPointF(0, distance)); -} - -class QQuickBasicBusyIndicatorNode : public QQuickAnimatedNode -{ -public: - QQuickBasicBusyIndicatorNode(QQuickBasicBusyIndicator *item); - - void updateCurrentTime(int time) override; - void sync(QQuickItem *item) override; - -private: - QColor m_pen; - QColor m_fill; -}; - -QQuickBasicBusyIndicatorNode::QQuickBasicBusyIndicatorNode(QQuickBasicBusyIndicator *item) - : QQuickAnimatedNode(item) -{ - setLoopCount(Infinite); - setDuration(TotalDuration); - setCurrentTime(item->elapsed()); - - for (int i = 0; i < CircleCount; ++i) { - QSGTransformNode *transformNode = new QSGTransformNode; - appendChildNode(transformNode); - - QQuickItemPrivate *d = QQuickItemPrivate::get(item); - QSGInternalRectangleNode *rectNode = d->sceneGraphContext()->createInternalRectangleNode(); - rectNode->setAntialiasing(true); - transformNode->appendChildNode(rectNode); - } -} - -void QQuickBasicBusyIndicatorNode::updateCurrentTime(int time) -{ - const qreal percentageComplete = time / qreal(TotalDuration); - const qreal firstPhaseProgress = percentageComplete <= 0.5 ? percentageComplete * 2 : 0; - const qreal secondPhaseProgress = percentageComplete > 0.5 ? (percentageComplete - 0.5) * 2 : 0; - - QSGTransformNode *transformNode = static_cast(firstChild()); - Q_ASSERT(transformNode->type() == QSGNode::TransformNodeType); - for (int i = 0; i < CircleCount; ++i) { - QSGInternalRectangleNode *rectNode = static_cast(transformNode->firstChild()); - Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType); - - const bool fill = (firstPhaseProgress > qreal(i) / CircleCount) || (secondPhaseProgress > 0 && secondPhaseProgress < qreal(i) / CircleCount); - rectNode->setColor(fill ? m_fill : QColor::fromRgba(TransparentColor)); - rectNode->setPenColor(m_pen); - rectNode->setPenWidth(1); - rectNode->update(); - - transformNode = static_cast(transformNode->nextSibling()); - } -} - -void QQuickBasicBusyIndicatorNode::sync(QQuickItem *item) -{ - const qreal w = item->width(); - const qreal h = item->height(); - const qreal sz = qMin(w, h); - const qreal dx = (w - sz) / 2; - const qreal dy = (h - sz) / 2; - const int circleRadius = sz / 12; - - m_pen = static_cast(item)->pen(); - m_fill = static_cast(item)->fill(); - - QSGTransformNode *transformNode = static_cast(firstChild()); - for (int i = 0; i < CircleCount; ++i) { - Q_ASSERT(transformNode->type() == QSGNode::TransformNodeType); - - QSGInternalRectangleNode *rectNode = static_cast(transformNode->firstChild()); - Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType); - - QPointF pos = QPointF(sz / 2 - circleRadius, sz / 2 - circleRadius); - pos = moveCircle(pos, 360.0 / CircleCount * i, sz / 2 - circleRadius); - - QMatrix4x4 m; - m.translate(dx + pos.x(), dy + pos.y()); - transformNode->setMatrix(m); - - rectNode->setRect(QRectF(QPointF(), QSizeF(circleRadius * 2, circleRadius * 2))); - rectNode->setRadius(circleRadius); - - transformNode = static_cast(transformNode->nextSibling()); - } -} - -QQuickBasicBusyIndicator::QQuickBasicBusyIndicator(QQuickItem *parent) : - QQuickItem(parent) -{ - setFlag(ItemHasContents); -} - -QColor QQuickBasicBusyIndicator::pen() const -{ - return m_pen; -} - -void QQuickBasicBusyIndicator::setPen(const QColor &pen) -{ - if (pen == m_pen) - return; - - m_pen = pen; - update(); -} - -QColor QQuickBasicBusyIndicator::fill() const -{ - return m_fill; -} - -void QQuickBasicBusyIndicator::setFill(const QColor &fill) -{ - if (fill == m_fill) - return; - - m_fill = fill; - update(); -} - -bool QQuickBasicBusyIndicator::isRunning() const -{ - return isVisible(); -} - -void QQuickBasicBusyIndicator::setRunning(bool running) -{ - if (running) - setVisible(true); -} - -int QQuickBasicBusyIndicator::elapsed() const -{ - return m_elapsed; -} - -void QQuickBasicBusyIndicator::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data) -{ - QQuickItem::itemChange(change, data); - switch (change) { - case ItemOpacityHasChanged: - if (qFuzzyIsNull(data.realValue)) - setVisible(false); - break; - case ItemVisibleHasChanged: - update(); - break; - default: - break; - } -} - -QSGNode *QQuickBasicBusyIndicator::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *) -{ - QQuickBasicBusyIndicatorNode *node = static_cast(oldNode); - if (isRunning() && width() > 0 && height() > 0) { - if (!node) { - node = new QQuickBasicBusyIndicatorNode(this); - node->start(); - } - node->sync(this); - } else { - m_elapsed = node ? node->currentTime() : 0; - delete node; - node = nullptr; - } - return node; -} - -QT_END_NAMESPACE diff --git a/src/imports/controls/basic/impl/qquickbasicbusyindicator_p.h b/src/imports/controls/basic/impl/qquickbasicbusyindicator_p.h deleted file mode 100644 index 7eea6656..00000000 --- a/src/imports/controls/basic/impl/qquickbasicbusyindicator_p.h +++ /dev/null @@ -1,93 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKDEFAULTBUSYINDICATOR_P_H -#define QQUICKDEFAULTBUSYINDICATOR_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include - -QT_BEGIN_NAMESPACE - -class QQuickBasicBusyIndicator : public QQuickItem -{ - Q_OBJECT - Q_PROPERTY(QColor pen READ pen WRITE setPen FINAL) - Q_PROPERTY(QColor fill READ fill WRITE setFill FINAL) - Q_PROPERTY(bool running READ isRunning WRITE setRunning) - QML_NAMED_ELEMENT(BusyIndicatorImpl) - QML_ADDED_IN_VERSION(2, 0) - -public: - explicit QQuickBasicBusyIndicator(QQuickItem *parent = nullptr); - - QColor pen() const; - void setPen(const QColor &pen); - - QColor fill() const; - void setFill(const QColor &fill); - - bool isRunning() const; - void setRunning(bool running); - - int elapsed() const; - -protected: - void itemChange(ItemChange change, const ItemChangeData &data) override; - QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override; - -private: - int m_elapsed = 0; - QColor m_pen; - QColor m_fill; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickBasicBusyIndicator) - -#endif // QQUICKDEFAULTBUSYINDICATOR_P_H diff --git a/src/imports/controls/basic/impl/qquickbasicdial.cpp b/src/imports/controls/basic/impl/qquickbasicdial.cpp deleted file mode 100644 index 223e8042..00000000 --- a/src/imports/controls/basic/impl/qquickbasicdial.cpp +++ /dev/null @@ -1,122 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickbasicdial_p.h" - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -QQuickBasicDial::QQuickBasicDial(QQuickItem *parent) : - QQuickPaintedItem(parent) -{ -} - -qreal QQuickBasicDial::progress() const -{ - return m_progress; -} - -void QQuickBasicDial::setProgress(qreal progress) -{ - if (progress == m_progress) - return; - - m_progress = progress; - update(); -} - -QColor QQuickBasicDial::color() const -{ - return m_color; -} - -void QQuickBasicDial::setColor(const QColor &color) -{ - if (color == m_color) - return; - - m_color = color; - update(); -} - -void QQuickBasicDial::paint(QPainter *painter) -{ - if (width() <= 0 || height() <= 0) - return; - - QPen pen(m_color); - pen.setWidth(8); - pen.setCapStyle(Qt::FlatCap); - painter->setPen(pen); - - const QRectF bounds = boundingRect(); - const qreal smallest = qMin(bounds.width(), bounds.height()); - QRectF rect = QRectF(pen.widthF() / 2.0 + 1, pen.widthF() / 2.0 + 1, smallest - pen.widthF() - 2, smallest - pen.widthF() - 2); - rect.moveCenter(bounds.center()); - - // Make sure the arc is aligned to whole pixels. - if (rect.x() - int(rect.x()) > 0) - rect.setX(qCeil(rect.x())); - if (rect.y() - int(rect.y()) > 0) - rect.setY(qCeil(rect.y())); - if (rect.width() - int(rect.width()) > 0) - rect.setWidth(qFloor(rect.width())); - if (rect.height() - int(rect.height()) > 0) - rect.setHeight(qFloor(rect.height())); - - painter->setRenderHint(QPainter::Antialiasing); - - const qreal startAngle = (140 + 90); - const qreal spanAngle = (m_progress * 280) * -1; - QPainterPath path; - path.arcMoveTo(rect, startAngle); - path.arcTo(rect, startAngle, spanAngle); - painter->drawPath(path); - - rect.adjust(-pen.widthF() / 2.0, -pen.widthF() / 2.0, pen.widthF() / 2.0, pen.widthF() / 2.0); - pen.setWidth(1); - painter->setPen(pen); - - path = QPainterPath(); - path.arcMoveTo(rect, 0); - path.arcTo(rect, 0, 360); - painter->drawPath(path); -} - -QT_END_NAMESPACE diff --git a/src/imports/controls/basic/impl/qquickbasicdial_p.h b/src/imports/controls/basic/impl/qquickbasicdial_p.h deleted file mode 100644 index bd9bbb72..00000000 --- a/src/imports/controls/basic/impl/qquickbasicdial_p.h +++ /dev/null @@ -1,82 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKDEFAULTDIAL_P_H -#define QQUICKDEFAULTDIAL_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include - -QT_BEGIN_NAMESPACE - -class QQuickBasicDial : public QQuickPaintedItem -{ - Q_OBJECT - Q_PROPERTY(qreal progress READ progress WRITE setProgress FINAL) - Q_PROPERTY(QColor color READ color WRITE setColor FINAL) - QML_NAMED_ELEMENT(DialImpl) - QML_ADDED_IN_VERSION(2, 0) - -public: - explicit QQuickBasicDial(QQuickItem *parent = nullptr); - - qreal progress() const; - void setProgress(qreal progress); - - QColor color() const; - void setColor(const QColor &color); - - void paint(QPainter *painter) override; - -private: - qreal m_progress = 0; - QColor m_color = Qt::black; -}; - -QT_END_NAMESPACE - -#endif // QQUICKDEFAULTDIAL_P_H diff --git a/src/imports/controls/basic/impl/qquickbasicprogressbar.cpp b/src/imports/controls/basic/impl/qquickbasicprogressbar.cpp deleted file mode 100644 index 717082af..00000000 --- a/src/imports/controls/basic/impl/qquickbasicprogressbar.cpp +++ /dev/null @@ -1,280 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickbasicprogressbar_p.h" - -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -static const int Blocks = 4; -static const int BlockWidth = 16; -static const int BlockRestingSpacing = 4; -static const int BlockMovingSpacing = 48; -static const int BlockSpan = Blocks * (BlockWidth + BlockRestingSpacing) - BlockRestingSpacing; -static const int TotalDuration = 4000; -static const int SecondPhaseStart = TotalDuration * 0.4; -static const int ThirdPhaseStart = TotalDuration * 0.6; - -static inline qreal blockStartX(int blockIndex) -{ - return ((blockIndex + 1) * -BlockWidth) - (blockIndex * BlockMovingSpacing); -} - -static inline qreal blockRestX(int blockIndex, qreal availableWidth) -{ - const qreal spanRightEdgePos = availableWidth / 2 + BlockSpan / 2.0; - return spanRightEdgePos - (blockIndex + 1) * BlockWidth - (blockIndex * BlockRestingSpacing); -} - -static inline qreal blockEndX(int blockIndex, qreal availableWidth) -{ - return availableWidth - blockStartX(Blocks - 1 - blockIndex) - BlockWidth; -} - -class QQuickBasicProgressBarNode : public QQuickAnimatedNode -{ -public: - QQuickBasicProgressBarNode(QQuickBasicProgressBar *item); - - void updateCurrentTime(int time) override; - void sync(QQuickItem *item) override; - -private: - bool m_indeterminate = false; - qreal m_pixelsPerSecond = 0; -}; - -QQuickBasicProgressBarNode::QQuickBasicProgressBarNode(QQuickBasicProgressBar *item) - : QQuickAnimatedNode(item), - m_pixelsPerSecond(item->width()) -{ - setLoopCount(Infinite); - setDuration(TotalDuration); -} - -void QQuickBasicProgressBarNode::updateCurrentTime(int time) -{ - QSGTransformNode *transformNode = static_cast(firstChild()); - for (int i = 0; i < Blocks; ++i) { - Q_ASSERT(transformNode->type() == QSGNode::TransformNodeType); - - QMatrix4x4 m; - const qreal restX = blockRestX(i, m_pixelsPerSecond); - const qreal timeInSeconds = time / 1000.0; - - if (time < SecondPhaseStart) { - // Move into the resting position for the first phase. - QEasingCurve easingCurve(QEasingCurve::InQuad); - const qreal easedCompletion = easingCurve.valueForProgress(time / qreal(SecondPhaseStart)); - const qreal distance = m_pixelsPerSecond * (easedCompletion * (SecondPhaseStart / 1000.0)); - const qreal position = blockStartX(i) + distance; - const qreal destination = restX; - m.translate(qMin(position, destination), 0); - } else if (time < ThirdPhaseStart) { - // Stay in the same position for the second phase. - m.translate(restX, 0); - } else { - // Move out of view for the third phase. - const int thirdPhaseSubKickoff = (BlockMovingSpacing / m_pixelsPerSecond) * 1000; - const int subphase = (time - ThirdPhaseStart) / thirdPhaseSubKickoff; - // If we're not at this subphase yet, don't try to animate movement, - // because it will be incorrect. - if (subphase < i) - return; - - const qreal timeSinceSecondPhase = timeInSeconds - (ThirdPhaseStart / 1000.0); - // We only want to start keeping track of time once our subphase has started, - // otherwise we move too much because we account for time that has already elapsed. - // For example, if we were 60 milliseconds into the third subphase: - // - // 0 ..... 1 ..... 2 ... - // 100 100 60 - // - // i == 0, timeSinceOurKickoff == 260 - // i == 1, timeSinceOurKickoff == 160 - // i == 2, timeSinceOurKickoff == 60 - const qreal timeSinceOurKickoff = timeSinceSecondPhase - (thirdPhaseSubKickoff / 1000.0 * i); - const qreal position = restX + (m_pixelsPerSecond * (timeSinceOurKickoff)); - const qreal destination = blockEndX(i, m_pixelsPerSecond); - m.translate(qMin(position, destination), 0); - } - - transformNode->setMatrix(m); - - transformNode = static_cast(transformNode->nextSibling()); - } -} - -void QQuickBasicProgressBarNode::sync(QQuickItem *item) -{ - QQuickBasicProgressBar *bar = static_cast(item); - if (m_indeterminate != bar->isIndeterminate()) { - m_indeterminate = bar->isIndeterminate(); - if (m_indeterminate) - start(); - else - stop(); - } - m_pixelsPerSecond = item->width(); - - QQuickItemPrivate *d = QQuickItemPrivate::get(item); - - QMatrix4x4 m; - m.translate(0, (item->height() - item->implicitHeight()) / 2); - setMatrix(m); - - if (m_indeterminate) { - if (childCount() != Blocks) { - // This was previously a regular progress bar; remove the old nodes. - removeAllChildNodes(); - } - - QSGTransformNode *transformNode = static_cast(firstChild()); - for (int i = 0; i < Blocks; ++i) { - if (!transformNode) { - transformNode = new QSGTransformNode; - appendChildNode(transformNode); - } - - QSGInternalRectangleNode *rectNode = static_cast(transformNode->firstChild()); - if (!rectNode) { - rectNode = d->sceneGraphContext()->createInternalRectangleNode(); - rectNode->setColor(bar->color()); - transformNode->appendChildNode(rectNode); - } - - QMatrix4x4 m; - m.translate(blockStartX(i), 0); - transformNode->setMatrix(m); - - rectNode->setRect(QRectF(QPointF(0, 0), QSizeF(BlockWidth, item->implicitHeight()))); - rectNode->update(); - - transformNode = static_cast(transformNode->nextSibling()); - } - } else { - if (childCount() > 1) { - // This was previously an indeterminate progress bar; remove the old nodes. - removeAllChildNodes(); - } - - QSGInternalRectangleNode *rectNode = static_cast(firstChild()); - if (!rectNode) { - rectNode = d->sceneGraphContext()->createInternalRectangleNode(); - rectNode->setColor(bar->color()); - appendChildNode(rectNode); - } - - rectNode->setRect(QRectF(QPointF(0, 0), QSizeF(bar->progress() * item->width(), item->implicitHeight()))); - rectNode->update(); - } -} - -QQuickBasicProgressBar::QQuickBasicProgressBar(QQuickItem *parent) : - QQuickItem(parent) -{ - setFlag(ItemHasContents); -} - -qreal QQuickBasicProgressBar::progress() const -{ - return m_progress; -} - -void QQuickBasicProgressBar::setProgress(qreal progress) -{ - if (progress == m_progress) - return; - - m_progress = progress; - update(); -} - -bool QQuickBasicProgressBar::isIndeterminate() const -{ - return m_indeterminate; -} - -void QQuickBasicProgressBar::setIndeterminate(bool indeterminate) -{ - if (indeterminate == m_indeterminate) - return; - - m_indeterminate = indeterminate; - setClip(m_indeterminate); - update(); -} - -QColor QQuickBasicProgressBar::color() const -{ - return m_color; -} - -void QQuickBasicProgressBar::setColor(const QColor &color) -{ - if (color == m_color) - return; - - m_color = color; - update(); -} - -void QQuickBasicProgressBar::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data) -{ - QQuickItem::itemChange(change, data); - if (change == ItemVisibleHasChanged) - update(); -} - -QSGNode *QQuickBasicProgressBar::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *) -{ - QQuickBasicProgressBarNode *node = static_cast(oldNode); - if (isVisible() && width() > 0 && height() > 0) { - if (!node) - node = new QQuickBasicProgressBarNode(this); - node->sync(this); - } else { - delete node; - node = nullptr; - } - return node; -} - -QT_END_NAMESPACE diff --git a/src/imports/controls/basic/impl/qquickbasicprogressbar_p.h b/src/imports/controls/basic/impl/qquickbasicprogressbar_p.h deleted file mode 100644 index 1d853ecb..00000000 --- a/src/imports/controls/basic/impl/qquickbasicprogressbar_p.h +++ /dev/null @@ -1,91 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKDEFAULTPROGRESSBAR_P_H -#define QQUICKDEFAULTPROGRESSBAR_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include - -QT_BEGIN_NAMESPACE - -class QQuickBasicProgressBar : public QQuickItem -{ - Q_OBJECT - Q_PROPERTY(bool indeterminate READ isIndeterminate WRITE setIndeterminate FINAL) - Q_PROPERTY(qreal progress READ progress WRITE setProgress FINAL) - Q_PROPERTY(QColor color READ color WRITE setColor FINAL) - QML_NAMED_ELEMENT(ProgressBarImpl) - QML_ADDED_IN_VERSION(2, 0) - -public: - explicit QQuickBasicProgressBar(QQuickItem *parent = nullptr); - - bool isIndeterminate() const; - void setIndeterminate(bool indeterminate); - - qreal progress() const; - void setProgress(qreal progress); - - QColor color() const; - void setColor(const QColor &color); - -protected: - void itemChange(ItemChange change, const ItemChangeData &data) override; - QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override; - -private: - qreal m_progress = 0; - bool m_indeterminate = false; - QColor m_color; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickBasicProgressBar) - -#endif // QQUICKDEFAULTPROGRESSBAR_P_H diff --git a/src/imports/controls/basic/impl/qtquickcontrols2basicstyleimplplugin.cpp b/src/imports/controls/basic/impl/qtquickcontrols2basicstyleimplplugin.cpp deleted file mode 100644 index b39bdb5c..00000000 --- a/src/imports/controls/basic/impl/qtquickcontrols2basicstyleimplplugin.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include - -extern void qml_register_types_QtQuick_Controls_Basic_impl(); - -QT_BEGIN_NAMESPACE - -class QtQuickControls2BasicStyleImplPlugin : public QQmlEngineExtensionPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) - -public: - QtQuickControls2BasicStyleImplPlugin(QObject *parent = nullptr); -}; - -QtQuickControls2BasicStyleImplPlugin::QtQuickControls2BasicStyleImplPlugin(QObject *parent) - : QQmlEngineExtensionPlugin(parent) -{ - volatile auto registration = &::qml_register_types_QtQuick_Controls_Basic_impl; - Q_UNUSED(registration); -} - -QT_END_NAMESPACE - -#include "qtquickcontrols2basicstyleimplplugin.moc" diff --git a/src/imports/controls/basic/qquickbasicstyle.cpp b/src/imports/controls/basic/qquickbasicstyle.cpp deleted file mode 100644 index 9dcb7c74..00000000 --- a/src/imports/controls/basic/qquickbasicstyle.cpp +++ /dev/null @@ -1,246 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickbasicstyle_p.h" - -QT_BEGIN_NAMESPACE - -QQuickBasicStyle::QQuickBasicStyle(QObject *parent) : - QObject(parent) -{ -} - -QColor QQuickBasicStyle::backgroundColor() const -{ - return QColor::fromRgba(0xFFFFFFFF); -} - -QColor QQuickBasicStyle::overlayModalColor() const -{ - return QColor::fromRgba(0x7F28282A); -} - -QColor QQuickBasicStyle::overlayDimColor() const -{ - return QColor::fromRgba(0x1F28282A); -} - -QColor QQuickBasicStyle::textColor() const -{ - return QColor::fromRgba(0xFF353637); -} - -QColor QQuickBasicStyle::textDarkColor() const -{ - return QColor::fromRgba(0xFF26282A); -} - -QColor QQuickBasicStyle::textLightColor() const -{ - return QColor::fromRgba(0xFFFFFFFF); -} - -QColor QQuickBasicStyle::textLinkColor() const -{ - return QColor::fromRgba(0xFF45A7D7); -} - -QColor QQuickBasicStyle::textSelectionColor() const -{ - return QColor::fromRgba(0xFFFDDD5C); -} - -QColor QQuickBasicStyle::textDisabledColor() const -{ - return QColor::fromRgba(0xFFBDBEBF); -} - -QColor QQuickBasicStyle::textDisabledLightColor() const -{ - return QColor::fromRgba(0xFFC2C2C2); -} - -QColor QQuickBasicStyle::textPlaceholderColor() const -{ - return QColor::fromRgba(0xFF777777); -} - -QColor QQuickBasicStyle::focusColor() const -{ - return QColor::fromRgba(0xFF0066FF); -} - -QColor QQuickBasicStyle::focusLightColor() const -{ - return QColor::fromRgba(0xFFF0F6FF); -} - -QColor QQuickBasicStyle::focusPressedColor() const -{ - return QColor::fromRgba(0xFFCCE0FF); -} - -QColor QQuickBasicStyle::buttonColor() const -{ - return QColor::fromRgba(0xFFE0E0E0); -} - -QColor QQuickBasicStyle::buttonPressedColor() const -{ - return QColor::fromRgba(0xFFD0D0D0); -} - -QColor QQuickBasicStyle::buttonCheckedColor() const -{ - return QColor::fromRgba(0xFF353637); -} - -QColor QQuickBasicStyle::buttonCheckedPressedColor() const -{ - return QColor::fromRgba(0xFF585A5C); -} - -QColor QQuickBasicStyle::buttonCheckedFocusColor() const -{ - return QColor::fromRgba(0xFF599BFF); -} - -QColor QQuickBasicStyle::toolButtonColor() const -{ - return QColor::fromRgba(0x33333333); -} - -QColor QQuickBasicStyle::tabButtonColor() const -{ - return QColor::fromRgba(0xFF353637); -} - -QColor QQuickBasicStyle::tabButtonPressedColor() const -{ - return QColor::fromRgba(0xFF585A5C); -} - -QColor QQuickBasicStyle::tabButtonCheckedPressedColor() const -{ - return QColor::fromRgba(0xFFE4E4E4); -} - -QColor QQuickBasicStyle::delegateColor() const -{ - return QColor::fromRgba(0xFFEEEEEE); -} - -QColor QQuickBasicStyle::delegatePressedColor() const -{ - return QColor::fromRgba(0xFFBDBEBF); -} - -QColor QQuickBasicStyle::delegateFocusColor() const -{ - return QColor::fromRgba(0xFFE5EFFF); -} - -QColor QQuickBasicStyle::indicatorPressedColor() const -{ - return QColor::fromRgba(0xFFF6F6F6); -} - -QColor QQuickBasicStyle::indicatorDisabledColor() const -{ - return QColor::fromRgba(0xFFFDFDFD); -} - -QColor QQuickBasicStyle::indicatorFrameColor() const -{ - return QColor::fromRgba(0xFF909090); -} - -QColor QQuickBasicStyle::indicatorFramePressedColor() const -{ - return QColor::fromRgba(0xFF808080); -} - -QColor QQuickBasicStyle::indicatorFrameDisabledColor() const -{ - return QColor::fromRgba(0xFFD6D6D6); -} - -QColor QQuickBasicStyle::frameDarkColor() const -{ - return QColor::fromRgba(0xFF353637); -} - -QColor QQuickBasicStyle::frameLightColor() const -{ - return QColor::fromRgba(0xFFBDBEBF); -} - -QColor QQuickBasicStyle::scrollBarColor() const -{ - return QColor::fromRgba(0xFFBDBEBF); -} - -QColor QQuickBasicStyle::scrollBarPressedColor() const -{ - return QColor::fromRgba(0xFF28282A); -} - -QColor QQuickBasicStyle::progressBarColor() const -{ - return QColor::fromRgba(0xFFE4E4E4); -} - -QColor QQuickBasicStyle::pageIndicatorColor() const -{ - return QColor::fromRgba(0xFF28282A); -} - -QColor QQuickBasicStyle::separatorColor() const -{ - return QColor::fromRgba(0xFFCCCCCC); -} - -QColor QQuickBasicStyle::disabledDarkColor() const -{ - return QColor::fromRgba(0xFF353637); -} - -QColor QQuickBasicStyle::disabledLightColor() const -{ - return QColor::fromRgba(0xFFBDBEBF); -} - -QT_END_NAMESPACE diff --git a/src/imports/controls/basic/qquickbasicstyle_p.h b/src/imports/controls/basic/qquickbasicstyle_p.h deleted file mode 100644 index 3f3d84b8..00000000 --- a/src/imports/controls/basic/qquickbasicstyle_p.h +++ /dev/null @@ -1,151 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKBASICSTYLE_P_H -#define QQUICKBASICSTYLE_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class QQuickBasicStyle : public QObject -{ - Q_OBJECT - Q_PROPERTY(QColor backgroundColor READ backgroundColor CONSTANT FINAL) - Q_PROPERTY(QColor overlayModalColor READ overlayModalColor CONSTANT FINAL) - Q_PROPERTY(QColor overlayDimColor READ overlayDimColor CONSTANT FINAL) - Q_PROPERTY(QColor textColor READ textColor CONSTANT FINAL) - Q_PROPERTY(QColor textDarkColor READ textDarkColor CONSTANT FINAL) - Q_PROPERTY(QColor textLightColor READ textLightColor CONSTANT FINAL) - Q_PROPERTY(QColor textLinkColor READ textLinkColor CONSTANT FINAL) - Q_PROPERTY(QColor textSelectionColor READ textSelectionColor CONSTANT FINAL) - Q_PROPERTY(QColor textDisabledColor READ textDisabledColor CONSTANT FINAL) - Q_PROPERTY(QColor textDisabledLightColor READ textDisabledLightColor CONSTANT FINAL) - Q_PROPERTY(QColor textPlaceholderColor READ textPlaceholderColor CONSTANT FINAL) - Q_PROPERTY(QColor focusColor READ focusColor CONSTANT FINAL) - Q_PROPERTY(QColor focusLightColor READ focusLightColor CONSTANT FINAL) - Q_PROPERTY(QColor focusPressedColor READ focusPressedColor CONSTANT FINAL) - Q_PROPERTY(QColor buttonColor READ buttonColor CONSTANT FINAL) - Q_PROPERTY(QColor buttonPressedColor READ buttonPressedColor CONSTANT FINAL) - Q_PROPERTY(QColor buttonCheckedColor READ buttonCheckedColor CONSTANT FINAL) - Q_PROPERTY(QColor buttonCheckedPressedColor READ buttonCheckedPressedColor CONSTANT FINAL) - Q_PROPERTY(QColor buttonCheckedFocusColor READ buttonCheckedFocusColor CONSTANT FINAL) - Q_PROPERTY(QColor toolButtonColor READ toolButtonColor CONSTANT FINAL) - Q_PROPERTY(QColor tabButtonColor READ tabButtonColor CONSTANT FINAL) - Q_PROPERTY(QColor tabButtonPressedColor READ tabButtonPressedColor CONSTANT FINAL) - Q_PROPERTY(QColor tabButtonCheckedPressedColor READ tabButtonCheckedPressedColor CONSTANT FINAL) - Q_PROPERTY(QColor delegateColor READ delegateColor CONSTANT FINAL) - Q_PROPERTY(QColor delegatePressedColor READ delegatePressedColor CONSTANT FINAL) - Q_PROPERTY(QColor delegateFocusColor READ delegateFocusColor CONSTANT FINAL) - Q_PROPERTY(QColor indicatorPressedColor READ indicatorPressedColor CONSTANT FINAL) - Q_PROPERTY(QColor indicatorDisabledColor READ indicatorDisabledColor CONSTANT FINAL) - Q_PROPERTY(QColor indicatorFrameColor READ indicatorFrameColor CONSTANT FINAL) - Q_PROPERTY(QColor indicatorFramePressedColor READ indicatorFramePressedColor CONSTANT FINAL) - Q_PROPERTY(QColor indicatorFrameDisabledColor READ indicatorFrameDisabledColor CONSTANT FINAL) - Q_PROPERTY(QColor frameDarkColor READ frameDarkColor CONSTANT FINAL) - Q_PROPERTY(QColor frameLightColor READ frameLightColor CONSTANT FINAL) - Q_PROPERTY(QColor scrollBarColor READ scrollBarColor CONSTANT FINAL) - Q_PROPERTY(QColor scrollBarPressedColor READ scrollBarPressedColor CONSTANT FINAL) - Q_PROPERTY(QColor progressBarColor READ progressBarColor CONSTANT FINAL) - Q_PROPERTY(QColor pageIndicatorColor READ pageIndicatorColor CONSTANT FINAL) - Q_PROPERTY(QColor separatorColor READ separatorColor CONSTANT FINAL) - Q_PROPERTY(QColor disabledDarkColor READ disabledDarkColor CONSTANT FINAL) - Q_PROPERTY(QColor disabledLightColor READ disabledLightColor CONSTANT FINAL) - QML_NAMED_ELEMENT(Basic) - QML_SINGLETON - QML_ADDED_IN_VERSION(2, 1) - -public: - explicit QQuickBasicStyle(QObject *parent = nullptr); - - QColor backgroundColor() const; - QColor overlayModalColor() const; - QColor overlayDimColor() const; - QColor textColor() const; - QColor textDarkColor() const; - QColor textLightColor() const; - QColor textLinkColor() const; - QColor textSelectionColor() const; - QColor textDisabledColor() const; - QColor textDisabledLightColor() const; - QColor textPlaceholderColor() const; - QColor focusColor() const; - QColor focusLightColor() const; - QColor focusPressedColor() const; - QColor buttonColor() const; - QColor buttonPressedColor() const; - QColor buttonCheckedColor() const; - QColor buttonCheckedPressedColor() const; - QColor buttonCheckedFocusColor() const; - QColor toolButtonColor() const; - QColor tabButtonColor() const; - QColor tabButtonPressedColor() const; - QColor tabButtonCheckedPressedColor() const; - QColor delegateColor() const; - QColor delegatePressedColor() const; - QColor delegateFocusColor() const; - QColor indicatorPressedColor() const; - QColor indicatorDisabledColor() const; - QColor indicatorFrameColor() const; - QColor indicatorFramePressedColor() const; - QColor indicatorFrameDisabledColor() const; - QColor frameDarkColor() const; - QColor frameLightColor() const; - QColor scrollBarColor() const; - QColor scrollBarPressedColor() const; - QColor progressBarColor() const; - QColor pageIndicatorColor() const; - QColor separatorColor() const; - QColor disabledDarkColor() const; - QColor disabledLightColor() const; -}; - -QT_END_NAMESPACE - -#endif // QQUICKBASICSTYLE_P_H diff --git a/src/imports/controls/basic/qquickbasictheme.cpp b/src/imports/controls/basic/qquickbasictheme.cpp deleted file mode 100644 index 1f876e3d..00000000 --- a/src/imports/controls/basic/qquickbasictheme.cpp +++ /dev/null @@ -1,89 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickbasictheme_p.h" - -#include - -QT_BEGIN_NAMESPACE - -void QQuickBasicTheme::initialize(QQuickTheme *theme) -{ - QPalette systemPalette; - - systemPalette.setColor(QPalette::Base, QColor::fromRgba(0xFFFFFFFF)); - systemPalette.setColor(QPalette::Disabled, QPalette::Base, QColor::fromRgba(0xFFD6D6D6)); - - systemPalette.setColor(QPalette::Button, QColor::fromRgba(0xFFE0E0E0)); - - systemPalette.setColor(QPalette::ButtonText, QColor::fromRgba(0xFF26282A)); - systemPalette.setColor(QPalette::Disabled, QPalette::ButtonText, QColor::fromRgba(0x4D26282A)); - - systemPalette.setColor(QPalette::BrightText, QColor::fromRgba(0xFFFFFFFF)); - systemPalette.setColor(QPalette::Disabled, QPalette::BrightText, QColor::fromRgba(0x4DFFFFFF)); - - systemPalette.setColor(QPalette::Dark, QColor::fromRgba(0xFF353637)); - - systemPalette.setColor(QPalette::Highlight, QColor::fromRgba(0xFF0066FF)); - systemPalette.setColor(QPalette::Disabled, QPalette::Highlight, QColor::fromRgba(0xFFF0F6FF)); - - systemPalette.setColor(QPalette::HighlightedText, QColor::fromRgba(0xFF090909)); - - systemPalette.setColor(QPalette::Light, QColor::fromRgba(0xFFF6F6F6)); - - systemPalette.setColor(QPalette::Link, QColor::fromRgba(0xFF45A7D7)); - - systemPalette.setColor(QPalette::Mid, QColor::fromRgba(0xFFBDBDBD)); - - systemPalette.setColor(QPalette::Midlight, QColor::fromRgba(0xFFE4E4E4)); - - systemPalette.setColor(QPalette::Text, QColor::fromRgba(0xFF353637)); - systemPalette.setColor(QPalette::Disabled, QPalette::Text, QColor::fromRgba(0x7F353637)); - - systemPalette.setColor(QPalette::Shadow, QColor::fromRgba(0xFF28282A)); - - systemPalette.setColor(QPalette::ToolTipBase, QColor::fromRgba(0xFFFFFFFF)); - systemPalette.setColor(QPalette::ToolTipText, QColor::fromRgba(0xFF000000)); - - systemPalette.setColor(QPalette::Window, QColor::fromRgba(0xFFFFFFFF)); - - systemPalette.setColor(QPalette::WindowText, QColor::fromRgba(0xFF26282A)); - systemPalette.setColor(QPalette::Disabled, QPalette::WindowText, QColor::fromRgba(0xFFBDBEBF)); - - theme->setPalette(QQuickTheme::System, systemPalette); -} - -QT_END_NAMESPACE diff --git a/src/imports/controls/basic/qquickbasictheme_p.h b/src/imports/controls/basic/qquickbasictheme_p.h deleted file mode 100644 index a0a29953..00000000 --- a/src/imports/controls/basic/qquickbasictheme_p.h +++ /dev/null @@ -1,65 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKBASICTHEME_P_H -#define QQUICKBASICTHEME_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include - -QT_BEGIN_NAMESPACE - -class QQuickTheme; - -class QQuickBasicTheme -{ -public: - static void initialize(QQuickTheme *theme); -}; - -QT_END_NAMESPACE - -#endif // QQUICKBASICTHEME_P_H diff --git a/src/imports/controls/basic/qtquickcontrols2basicstyleplugin.cpp b/src/imports/controls/basic/qtquickcontrols2basicstyleplugin.cpp deleted file mode 100644 index 7786223c..00000000 --- a/src/imports/controls/basic/qtquickcontrols2basicstyleplugin.cpp +++ /dev/null @@ -1,79 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickbasicstyle_p.h" -#include "qquickbasictheme_p.h" - -#include -#include - -extern void qml_register_types_QtQuick_Controls_Basic(); - -QT_BEGIN_NAMESPACE - -class QtQuickControls2BasicStylePlugin: public QQuickStylePlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) - -public: - QtQuickControls2BasicStylePlugin(QObject *parent = nullptr); - - QString name() const override; - void initializeTheme(QQuickTheme *theme) override; - - QQuickBasicTheme theme; -}; - -QtQuickControls2BasicStylePlugin::QtQuickControls2BasicStylePlugin(QObject *parent) : QQuickStylePlugin(parent) -{ - volatile auto registration = &qml_register_types_QtQuick_Controls_Basic; - Q_UNUSED(registration); -} - -QString QtQuickControls2BasicStylePlugin::name() const -{ - return QStringLiteral("Basic"); -} - -void QtQuickControls2BasicStylePlugin::initializeTheme(QQuickTheme *theme) -{ - this->theme.initialize(theme); -} - -QT_END_NAMESPACE - -#include "qtquickcontrols2basicstyleplugin.moc" diff --git a/src/imports/controls/basic/qtquickcontrols2basicstyleplugin.qrc b/src/imports/controls/basic/qtquickcontrols2basicstyleplugin.qrc deleted file mode 100644 index 27fd6ac2..00000000 --- a/src/imports/controls/basic/qtquickcontrols2basicstyleplugin.qrc +++ /dev/null @@ -1,24 +0,0 @@ - - - images/arrow-indicator.png - images/arrow-indicator@2x.png - images/arrow-indicator@3x.png - images/arrow-indicator@4x.png - images/check.png - images/check@2x.png - images/check@3x.png - images/check@4x.png - images/dial-indicator.png - images/dial-indicator@2x.png - images/dial-indicator@3x.png - images/dial-indicator@4x.png - images/drop-indicator.png - images/drop-indicator@2x.png - images/drop-indicator@3x.png - images/drop-indicator@4x.png - images/double-arrow.png - images/double-arrow@2x.png - images/double-arrow@3x.png - images/double-arrow@4x.png - - diff --git a/src/imports/controls/designer/AbstractButtonSection.qml b/src/imports/controls/designer/AbstractButtonSection.qml deleted file mode 100644 index 2ccb8231..00000000 --- a/src/imports/controls/designer/AbstractButtonSection.qml +++ /dev/null @@ -1,122 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Section { - caption: qsTr("AbstractButton") - - SectionLayout { - Label { - text: qsTr("Text") - tooltip: qsTr("The text displayed on the button.") - } - SecondColumnLayout { - LineEdit { - backendValue: backendValues.text - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Display") - tooltip: qsTr("Determines how the icon and text are displayed within the button.") - disabledState: !backendValues.display.isAvailable - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.display - model: [ "IconOnly", "TextOnly", "TextBesideIcon" ] - scope: "AbstractButton" - Layout.fillWidth: true - enabled: backendValue.isAvailable - } - } - - Label { - visible: checkable - text: qsTr("Checkable") - tooltip: qsTr("Whether the button is checkable.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.checkable.valueToString - backendValue: backendValues.checkable - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Checked") - tooltip: qsTr("Whether the button is checked.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.checked.valueToString - backendValue: backendValues.checked - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Exclusive") - tooltip: qsTr("Whether the button is exclusive.") - disabledState: !backendValues.autoExclusive.isAvailable - } - SecondColumnLayout { - CheckBox { - text: backendValues.autoExclusive.valueToString - backendValue: backendValues.autoExclusive - Layout.fillWidth: true - enabled: backendValue.isAvailable - } - } - - Label { - text: qsTr("Auto-Repeat") - tooltip: qsTr("Whether the button repeats pressed(), released() and clicked() signals while the button is pressed and held down.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.autoRepeat.valueToString - backendValue: backendValues.autoRepeat - Layout.fillWidth: true - } - } - } -} diff --git a/src/imports/controls/designer/BusyIndicatorSpecifics.qml b/src/imports/controls/designer/BusyIndicatorSpecifics.qml deleted file mode 100644 index 7b2899d3..00000000 --- a/src/imports/controls/designer/BusyIndicatorSpecifics.qml +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("BusyIndicator") - - SectionLayout { - Label { - text: qsTr("Running") - tooltip: qsTr("Whether the busy indicator is currently indicating activity.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.running.valueToString - backendValue: backendValues.running - Layout.fillWidth: true - } - } - } - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/ButtonSection.qml b/src/imports/controls/designer/ButtonSection.qml deleted file mode 100644 index ff70d52c..00000000 --- a/src/imports/controls/designer/ButtonSection.qml +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Section { - id: section - caption: qsTr("Button") - - SectionLayout { - - Label { - text: qsTr("Flat") - tooltip: qsTr("Whether the button is flat.") - disabledState: !backendValues.flat.isAvailable - } - SecondColumnLayout { - CheckBox { - text: backendValues.flat.valueToString - backendValue: backendValues.flat - Layout.fillWidth: true - enabled: backendValue.isAvailable - } - } - Label { - text: qsTr("Highlighted") - tooltip: qsTr("Whether the button is highlighted.") - disabledState: !backendValues.highlighted.isAvailable - } - SecondColumnLayout { - CheckBox { - text: backendValues.highlighted.valueToString - backendValue: backendValues.highlighted - Layout.fillWidth: true - enabled: backendValue.isAvailable - } - } - } -} diff --git a/src/imports/controls/designer/ButtonSpecifics.qml b/src/imports/controls/designer/ButtonSpecifics.qml deleted file mode 100644 index 5a46e72a..00000000 --- a/src/imports/controls/designer/ButtonSpecifics.qml +++ /dev/null @@ -1,63 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - ButtonSection { - width: parent.width - } - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/CheckBoxSpecifics.qml b/src/imports/controls/designer/CheckBoxSpecifics.qml deleted file mode 100644 index d3aae9b6..00000000 --- a/src/imports/controls/designer/CheckBoxSpecifics.qml +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - CheckSection { - width: parent.width - caption: qsTr("CheckBox") - } - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/CheckDelegateSpecifics.qml b/src/imports/controls/designer/CheckDelegateSpecifics.qml deleted file mode 100644 index 8014480c..00000000 --- a/src/imports/controls/designer/CheckDelegateSpecifics.qml +++ /dev/null @@ -1,68 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - CheckSection { - width: parent.width - caption: qsTr("CheckDelegate") - } - - ItemDelegateSection { - width: parent.width - } - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/CheckSection.qml b/src/imports/controls/designer/CheckSection.qml deleted file mode 100644 index 0f49fa25..00000000 --- a/src/imports/controls/designer/CheckSection.qml +++ /dev/null @@ -1,68 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Section { - SectionLayout { - Label { - text: qsTr("Check State") - tooltip: qsTr("The current check state.") - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.checkState - model: [ "Unchecked", "PartiallyChecked", "Checked" ] - scope: "Qt" - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Tri-state") - tooltip: qsTr("Whether the checkbox has three states.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.tristate.valueToString - backendValue: backendValues.tristate - Layout.fillWidth: true - } - } - } -} diff --git a/src/imports/controls/designer/ComboBoxSpecifics.qml b/src/imports/controls/designer/ComboBoxSpecifics.qml deleted file mode 100644 index 810f19b5..00000000 --- a/src/imports/controls/designer/ComboBoxSpecifics.qml +++ /dev/null @@ -1,119 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("ComboBox") - - SectionLayout { - Label { - text: qsTr("Text Role") - tooltip: qsTr("The model role used for displaying text.") - } - SecondColumnLayout { - LineEdit { - backendValue: backendValues.textRole - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Current") - tooltip: qsTr("The index of the current item.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.currentIndex - Layout.fillWidth: true - } - } - Label { - text: qsTr("Editable") - tooltip: qsTr("Whether the combo box is editable.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.editable.valueToString - backendValue: backendValues.editable - Layout.fillWidth: true - } - } - Label { - text: qsTr("Flat") - tooltip: qsTr("Whether the combo box button is flat.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.flat.valueToString - backendValue: backendValues.flat - Layout.fillWidth: true - } - } - Label { - text: qsTr("DisplayText") - tooltip: qsTr("Holds the text that is displayed on the combo box button.") - } - SecondColumnLayout { - LineEdit { - backendValue: backendValues.displayText - Layout.fillWidth: true - } - } - } - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/ContainerSection.qml b/src/imports/controls/designer/ContainerSection.qml deleted file mode 100644 index 15d1ddf5..00000000 --- a/src/imports/controls/designer/ContainerSection.qml +++ /dev/null @@ -1,59 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Section { - caption: qsTr("Container") - - SectionLayout { - Label { - text: qsTr("Current") - tooltip: qsTr("The index of the current item.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.currentIndex - Layout.fillWidth: true - } - } - } -} diff --git a/src/imports/controls/designer/ControlSection.qml b/src/imports/controls/designer/ControlSection.qml deleted file mode 100644 index 12033eea..00000000 --- a/src/imports/controls/designer/ControlSection.qml +++ /dev/null @@ -1,114 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Section { - caption: qsTr("Control") - - SectionLayout { - Label { - text: qsTr("Enabled") - tooltip: qsTr("Whether the control is enabled.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.enabled.valueToString - backendValue: backendValues.enabled - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Focus Policy") - tooltip: qsTr("Focus policy of the control.") - disabledState: !backendValues.focusPolicy.isAvailable - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.focusPolicy - model: [ "TabFocus", "ClickFocus", "StrongFocus", "WheelFocus", "NoFocus" ] - scope: "Qt" - Layout.fillWidth: true - enabled: backendValue.isAvailable - } - } - - Label { - text: qsTr("Hover") - tooltip: qsTr("Whether control accepts hover events.") - disabledState: !backendValues.hoverEnabled.isAvailable - } - SecondColumnLayout { - CheckBox { - text: backendValues.hoverEnabled.valueToString - backendValue: backendValues.hoverEnabled - Layout.fillWidth: true - enabled: backendValue.isAvailable - } - } - - Label { - text: qsTr("Spacing") - tooltip: qsTr("Spacing between internal elements of the control.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.spacing - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Wheel") - tooltip: qsTr("Whether control accepts wheel events.") - disabledState: !backendValues.wheelEnabled.isAvailable - } - SecondColumnLayout { - CheckBox { - text: backendValues.wheelEnabled.valueToString - backendValue: backendValues.wheelEnabled - Layout.fillWidth: true - enabled: backendValue.isAvailable - } - } - } -} diff --git a/src/imports/controls/designer/ControlSpecifics.qml b/src/imports/controls/designer/ControlSpecifics.qml deleted file mode 100644 index 3937437b..00000000 --- a/src/imports/controls/designer/ControlSpecifics.qml +++ /dev/null @@ -1,55 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/DelayButtonSpecifics.qml b/src/imports/controls/designer/DelayButtonSpecifics.qml deleted file mode 100644 index 024fe589..00000000 --- a/src/imports/controls/designer/DelayButtonSpecifics.qml +++ /dev/null @@ -1,81 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("DelayButton") - - SectionLayout { - Label { - text: qsTr("Delay") - tooltip: qsTr("The delay in milliseconds.") - } - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 9999999 - decimals: 0 - stepSize: 1 - backendValue: backendValues.delay - Layout.fillWidth: true - } - } - } - } - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/DialSpecifics.qml b/src/imports/controls/designer/DialSpecifics.qml deleted file mode 100644 index 026cb2b1..00000000 --- a/src/imports/controls/designer/DialSpecifics.qml +++ /dev/null @@ -1,172 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Dial") - - SectionLayout { - Label { - text: qsTr("Value") - tooltip: qsTr("The current value of the dial.") - } - SecondColumnLayout { - SpinBox { - minimumValue: Math.min(backendValues.from.value, backendValues.to.value) - maximumValue: Math.max(backendValues.from.value, backendValues.to.value) - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.value - Layout.fillWidth: true - } - } - - Label { - text: qsTr("From") - tooltip: qsTr("The starting value of the dial range.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.from - Layout.fillWidth: true - } - } - - Label { - text: qsTr("To") - tooltip: qsTr("The ending value of the dial range.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.to - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Step Size") - tooltip: qsTr("The step size of the dial.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.stepSize - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Snap Mode") - tooltip: qsTr("The snap mode of the dial.") - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.snapMode - model: [ "NoSnap", "SnapOnRelease", "SnapAlways" ] - scope: "Dial" - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Live") - tooltip: qsTr("Whether the dial provides live value updates.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.live.valueToString - backendValue: backendValues.live - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Input Mode") - tooltip: qsTr("How the dial tracks movement.") - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.inputMode - model: [ "Circular", "Horizontal", "Vertical" ] - scope: "Dial" - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Wrap") - tooltip: qsTr("Whether the dial wraps when dragged.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.wrap.valueToString - backendValue: backendValues.wrap - Layout.fillWidth: true - } - } - } - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/FrameSpecifics.qml b/src/imports/controls/designer/FrameSpecifics.qml deleted file mode 100644 index 36739956..00000000 --- a/src/imports/controls/designer/FrameSpecifics.qml +++ /dev/null @@ -1,59 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - PaneSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/GroupBoxSpecifics.qml b/src/imports/controls/designer/GroupBoxSpecifics.qml deleted file mode 100644 index f808b001..00000000 --- a/src/imports/controls/designer/GroupBoxSpecifics.qml +++ /dev/null @@ -1,77 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("GroupBox") - - SectionLayout { - Label { - text: qsTr("Title") - tooltip: qsTr("The title of the group box.") - } - SecondColumnLayout { - LineEdit { - backendValue: backendValues.title - Layout.fillWidth: true - } - } - } - } - - PaneSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/InsetSection.qml b/src/imports/controls/designer/InsetSection.qml deleted file mode 100644 index 45a4df4f..00000000 --- a/src/imports/controls/designer/InsetSection.qml +++ /dev/null @@ -1,119 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Section { - caption: qsTr("Inset") - - SectionLayout { - Label { - text: qsTr("Vertical") - } - SecondColumnLayout { - Label { - text: qsTr("Top") - tooltip: qsTr("Top inset for the background.") - width: 42 - } - SpinBox { - maximumValue: 10000 - minimumValue: -10000 - realDragRange: 5000 - decimals: 0 - backendValue: backendValues.topInset - Layout.fillWidth: true - } - Item { - width: 4 - height: 4 - } - - Label { - text: qsTr("Bottom") - tooltip: qsTr("Bottom inset for the background.") - width: 42 - } - SpinBox { - maximumValue: 10000 - minimumValue: -10000 - realDragRange: 5000 - decimals: 0 - backendValue: backendValues.bottomInset - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Horizontal") - } - SecondColumnLayout { - Label { - text: qsTr("Left") - tooltip: qsTr("Left inset for the background.") - width: 42 - } - SpinBox { - maximumValue: 10000 - minimumValue: -10000 - realDragRange: 5000 - decimals: 0 - backendValue: backendValues.leftInset - Layout.fillWidth: true - } - Item { - width: 4 - height: 4 - } - - Label { - text: qsTr("Right") - tooltip: qsTr("Right inset for the background.") - width: 42 - } - SpinBox { - maximumValue: 10000 - minimumValue: -10000 - realDragRange: 5000 - decimals: 0 - backendValue: backendValues.rightInset - Layout.fillWidth: true - } - } - } -} diff --git a/src/imports/controls/designer/ItemDelegateSection.qml b/src/imports/controls/designer/ItemDelegateSection.qml deleted file mode 100644 index 448a20d9..00000000 --- a/src/imports/controls/designer/ItemDelegateSection.qml +++ /dev/null @@ -1,58 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Section { - id: section - caption: qsTr("ItemDelegate") - - SectionLayout { - Label { - text: qsTr("Highlighted") - tooltip: qsTr("Whether the delegate is highlighted.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.highlighted.valueToString - backendValue: backendValues.highlighted - Layout.fillWidth: true - } - } - } -} diff --git a/src/imports/controls/designer/ItemDelegateSpecifics.qml b/src/imports/controls/designer/ItemDelegateSpecifics.qml deleted file mode 100644 index 1757521d..00000000 --- a/src/imports/controls/designer/ItemDelegateSpecifics.qml +++ /dev/null @@ -1,63 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - ItemDelegateSection { - width: parent.width - } - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/LabelSpecifics.qml b/src/imports/controls/designer/LabelSpecifics.qml deleted file mode 100644 index 569b44c8..00000000 --- a/src/imports/controls/designer/LabelSpecifics.qml +++ /dev/null @@ -1,86 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - StandardTextSection { - width: parent.width - showIsWrapping: true - showFormatProperty: true - showVerticalAlignment: true - } - - Section { - anchors.left: parent.left - anchors.right: parent.right - caption: qsTr("Text Color") - - ColorEditor { - caption: qsTr("Text Color") - backendValue: backendValues.color - supportGradient: false - } - } - - Section { - anchors.left: parent.left - anchors.right: parent.right - caption: qsTr("Style Color") - - ColorEditor { - caption: qsTr("Style Color") - backendValue: backendValues.styleColor - supportGradient: false - } - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } - - InsetSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/PaddingSection.qml b/src/imports/controls/designer/PaddingSection.qml deleted file mode 100644 index 325c5698..00000000 --- a/src/imports/controls/designer/PaddingSection.qml +++ /dev/null @@ -1,101 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Section { - caption: qsTr("Padding") - - SectionLayout { - Label { - text: qsTr("Top") - tooltip: qsTr("Padding between the content and the top edge of the control.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.topPadding - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Left") - tooltip: qsTr("Padding between the content and the left edge of the control.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.leftPadding - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Right") - tooltip: qsTr("Padding between the content and the right edge of the control.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.rightPadding - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Bottom") - tooltip: qsTr("Padding between the content and the bottom edge of the control.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.bottomPadding - Layout.fillWidth: true - } - } - } -} diff --git a/src/imports/controls/designer/PageIndicatorSpecifics.qml b/src/imports/controls/designer/PageIndicatorSpecifics.qml deleted file mode 100644 index c73652e9..00000000 --- a/src/imports/controls/designer/PageIndicatorSpecifics.qml +++ /dev/null @@ -1,98 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("PageIndicator") - - SectionLayout { - Label { - text: qsTr("Count") - tooltip: qsTr("The number of pages.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.count - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Current") - tooltip: qsTr("The index of the current page.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.currentIndex - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Interactive") - tooltip: qsTr("Whether the control is interactive.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.interactive.valueToString - backendValue: backendValues.interactive - Layout.fillWidth: true - } - } - } - } - - ControlSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/PageSpecifics.qml b/src/imports/controls/designer/PageSpecifics.qml deleted file mode 100644 index 965ed655..00000000 --- a/src/imports/controls/designer/PageSpecifics.qml +++ /dev/null @@ -1,101 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Page") - - SectionLayout { - Label { - text: qsTr("Title") - tooltip: qsTr("Title of the page.") - } - SecondColumnLayout { - LineEdit { - backendValue: backendValues.title - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Content Width") - tooltip: qsTr("Content height used for calculating the total implicit width.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.contentWidth - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Content Height") - tooltip: qsTr("Content height used for calculating the total implicit height.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.contentHeight - Layout.fillWidth: true - } - } - } - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/PaneSection.qml b/src/imports/controls/designer/PaneSection.qml deleted file mode 100644 index 9dcc2097..00000000 --- a/src/imports/controls/designer/PaneSection.qml +++ /dev/null @@ -1,73 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Section { - caption: qsTr("Pane") - - SectionLayout { - Label { - text: qsTr("Content Width") - tooltip: qsTr("Content height used for calculating the total implicit width.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.contentWidth - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Content Height") - tooltip: qsTr("Content height used for calculating the total implicit height.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.contentHeight - Layout.fillWidth: true - } - } - } -} diff --git a/src/imports/controls/designer/PaneSpecifics.qml b/src/imports/controls/designer/PaneSpecifics.qml deleted file mode 100644 index 36739956..00000000 --- a/src/imports/controls/designer/PaneSpecifics.qml +++ /dev/null @@ -1,59 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - PaneSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/ProgressBarSpecifics.qml b/src/imports/controls/designer/ProgressBarSpecifics.qml deleted file mode 100644 index 14f87925..00000000 --- a/src/imports/controls/designer/ProgressBarSpecifics.qml +++ /dev/null @@ -1,121 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("ProgressBar") - - SectionLayout { - Label { - text: qsTr("Indeterminate") - tooltip: qsTr("Whether the progress is indeterminate.") - disabledState: !backendValues.indeterminate.isAvailable - } - SecondColumnLayout { - CheckBox { - text: backendValues.indeterminate.valueToString - backendValue: backendValues.indeterminate - Layout.fillWidth: true - enabled: backendValue.isAvailable - } - } - - Label { - text: qsTr("Value") - tooltip: qsTr("The current value of the progress.") - } - SecondColumnLayout { - SpinBox { - minimumValue: Math.min(backendValues.from.value, backendValues.to.value) - maximumValue: Math.max(backendValues.from.value, backendValues.to.value) - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.value - Layout.fillWidth: true - } - } - - Label { - text: qsTr("From") - tooltip: qsTr("The starting value for the progress.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.from - Layout.fillWidth: true - } - } - - Label { - text: qsTr("To") - tooltip: qsTr("The ending value for the progress.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.to - Layout.fillWidth: true - } - } - } - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/RadioButtonSpecifics.qml b/src/imports/controls/designer/RadioButtonSpecifics.qml deleted file mode 100644 index df0af7e7..00000000 --- a/src/imports/controls/designer/RadioButtonSpecifics.qml +++ /dev/null @@ -1,59 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/RadioDelegateSpecifics.qml b/src/imports/controls/designer/RadioDelegateSpecifics.qml deleted file mode 100644 index 1757521d..00000000 --- a/src/imports/controls/designer/RadioDelegateSpecifics.qml +++ /dev/null @@ -1,63 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - ItemDelegateSection { - width: parent.width - } - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/RangeSliderSpecifics.qml b/src/imports/controls/designer/RangeSliderSpecifics.qml deleted file mode 100644 index 577033ed..00000000 --- a/src/imports/controls/designer/RangeSliderSpecifics.qml +++ /dev/null @@ -1,189 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("RangeSlider") - - SectionLayout { - Label { - text: qsTr("First Value") - tooltip: qsTr("The value of the first range slider handle.") - } - SecondColumnLayout { - SpinBox { - minimumValue: Math.min(backendValues.from.value, backendValues.to.value) - maximumValue: Math.max(backendValues.from.value, backendValues.to.value) - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.first_value - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Second Value") - tooltip: qsTr("The value of the second range slider handle.") - } - SecondColumnLayout { - SpinBox { - minimumValue: Math.min(backendValues.from.value, backendValues.to.value) - maximumValue: Math.max(backendValues.from.value, backendValues.to.value) - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.second_value - Layout.fillWidth: true - } - } - - Label { - text: qsTr("From") - tooltip: qsTr("The starting value of the range slider range.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.from - Layout.fillWidth: true - } - } - - Label { - text: qsTr("To") - tooltip: qsTr("The ending value of the range slider range.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.to - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Step Size") - tooltip: qsTr("The step size of the range slider.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.stepSize - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Snap Mode") - tooltip: qsTr("The snap mode of the range slider.") - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.snapMode - model: [ "NoSnap", "SnapOnRelease", "SnapAlways" ] - scope: "RangeSlider" - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Orientation") - tooltip: qsTr("The orientation of the range slider.") - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.orientation - model: [ "Horizontal", "Vertical" ] - scope: "Qt" - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Live") - tooltip: qsTr("Whether the range slider provides live value updates.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.live.valueToString - backendValue: backendValues.live - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Touch drag threshold") - tooltip: qsTr("The threshold (in logical pixels) at which a touch drag event will be initiated.") - } - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 10000 - decimals: 0 - backendValue: backendValues.touchDragThreshold - Layout.fillWidth: true - } - } - } - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/RoundButtonSpecifics.qml b/src/imports/controls/designer/RoundButtonSpecifics.qml deleted file mode 100644 index 58d34689..00000000 --- a/src/imports/controls/designer/RoundButtonSpecifics.qml +++ /dev/null @@ -1,84 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("RoundButton") - - SectionLayout { - Label { - text: qsTr("Radius") - tooltip: qsTr("Radius of the button.") - } - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 10000 - decimals: 0 - backendValue: backendValues.radius - Layout.fillWidth: true - } - } - } - } - - ButtonSection { - width: parent.width - } - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/ScrollViewSpecifics.qml b/src/imports/controls/designer/ScrollViewSpecifics.qml deleted file mode 100644 index ae525b74..00000000 --- a/src/imports/controls/designer/ScrollViewSpecifics.qml +++ /dev/null @@ -1,90 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("ScrollView") - - SectionLayout { - Label { - text: qsTr("Content Width") - tooltip: qsTr("Content height used for calculating the total implicit width.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.contentWidth - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Content Height") - tooltip: qsTr("Content height used for calculating the total implicit height.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.contentHeight - Layout.fillWidth: true - } - } - } - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/SliderSpecifics.qml b/src/imports/controls/designer/SliderSpecifics.qml deleted file mode 100644 index 3af20540..00000000 --- a/src/imports/controls/designer/SliderSpecifics.qml +++ /dev/null @@ -1,180 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Slider") - - SectionLayout { - Label { - text: qsTr("Value") - tooltip: qsTr("The current value of the slider.") - } - SecondColumnLayout { - SpinBox { - minimumValue: Math.min(backendValues.from.value, backendValues.to.value) - maximumValue: Math.max(backendValues.from.value, backendValues.to.value) - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.value - Layout.fillWidth: true - } - } - - Label { - text: qsTr("From") - tooltip: qsTr("The starting value of the slider range.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.from - Layout.fillWidth: true - } - } - - Label { - text: qsTr("To") - tooltip: qsTr("The ending value of the slider range.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.to - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Step Size") - tooltip: qsTr("The step size of the slider.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - stepSize: 0.1 - backendValue: backendValues.stepSize - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Snap Mode") - tooltip: qsTr("The snap mode of the slider.") - disabledState: !backendValues.snapMode.isAvailable - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.snapMode - model: [ "NoSnap", "SnapOnRelease", "SnapAlways" ] - scope: "Slider" - Layout.fillWidth: true - enabled: backendValue.isAvailable - } - } - - Label { - text: qsTr("Orientation") - tooltip: qsTr("The orientation of the slider.") - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.orientation - model: [ "Horizontal", "Vertical" ] - scope: "Qt" - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Live") - tooltip: qsTr("Whether the slider provides live value updates.") - disabledState: !backendValues.live.isAvailable - } - SecondColumnLayout { - CheckBox { - text: backendValues.live.valueToString - backendValue: backendValues.live - Layout.fillWidth: true - enabled: backendValue.isAvailable - } - } - - Label { - text: qsTr("Touch drag threshold") - tooltip: qsTr("The threshold (in logical pixels) at which a touch drag event will be initiated.") - disabledState: !backendValues.touchDragThreshold.isAvailable - } - SecondColumnLayout { - SpinBox { - minimumValue: 0 - maximumValue: 10000 - decimals: 0 - backendValue: backendValues.touchDragThreshold - Layout.fillWidth: true - enabled: backendValue.isAvailable - } - } - } - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/SpinBoxSpecifics.qml b/src/imports/controls/designer/SpinBoxSpecifics.qml deleted file mode 100644 index 9c07e8c5..00000000 --- a/src/imports/controls/designer/SpinBoxSpecifics.qml +++ /dev/null @@ -1,142 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("SpinBox") - - SectionLayout { - Label { - text: qsTr("Value") - tooltip: qsTr("The current value of the spinbox.") - } - SecondColumnLayout { - SpinBox { - minimumValue: Math.min(backendValues.from.value, backendValues.to.value) - maximumValue: Math.max(backendValues.from.value, backendValues.to.value) - decimals: 2 - backendValue: backendValues.value - Layout.fillWidth: true - } - } - - Label { - text: qsTr("From") - tooltip: qsTr("The starting value of the spinbox range.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - backendValue: backendValues.from - Layout.fillWidth: true - } - } - - Label { - text: qsTr("To") - tooltip: qsTr("The ending value of the spinbox range.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - backendValue: backendValues.to - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Step Size") - tooltip: qsTr("The step size of the spinbox.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 2 - backendValue: backendValues.stepSize - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Editable") - tooltip: qsTr("Whether the spinbox is editable.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.editable.valueToString - backendValue: backendValues.editable - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Wrap") - tooltip: qsTr("Whether the spinbox wraps.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.wrap.valueToString - backendValue: backendValues.wrap - Layout.fillWidth: true - } - } - } - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/StackViewSpecifics.qml b/src/imports/controls/designer/StackViewSpecifics.qml deleted file mode 100644 index 3937437b..00000000 --- a/src/imports/controls/designer/StackViewSpecifics.qml +++ /dev/null @@ -1,55 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/SwipeDelegateSpecifics.qml b/src/imports/controls/designer/SwipeDelegateSpecifics.qml deleted file mode 100644 index 1757521d..00000000 --- a/src/imports/controls/designer/SwipeDelegateSpecifics.qml +++ /dev/null @@ -1,63 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - ItemDelegateSection { - width: parent.width - } - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/SwipeViewSpecifics.qml b/src/imports/controls/designer/SwipeViewSpecifics.qml deleted file mode 100644 index a28a2917..00000000 --- a/src/imports/controls/designer/SwipeViewSpecifics.qml +++ /dev/null @@ -1,91 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("SwipeView") - - SectionLayout { - Label { - text: qsTr("Interactive") - tooltip: qsTr("Whether the view is interactive.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.interactive.valueToString - backendValue: backendValues.interactive - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Orientation") - tooltip: qsTr("Orientation of the view.") - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.orientation - model: [ "Horizontal", "Vertical" ] - scope: "Qt" - Layout.fillWidth: true - } - } - } - } - - ContainerSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/SwitchDelegateSpecifics.qml b/src/imports/controls/designer/SwitchDelegateSpecifics.qml deleted file mode 100644 index 4236de67..00000000 --- a/src/imports/controls/designer/SwitchDelegateSpecifics.qml +++ /dev/null @@ -1,59 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - ItemDelegateSection { - width: parent.width - } - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/SwitchSpecifics.qml b/src/imports/controls/designer/SwitchSpecifics.qml deleted file mode 100644 index df0af7e7..00000000 --- a/src/imports/controls/designer/SwitchSpecifics.qml +++ /dev/null @@ -1,59 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/TabBarSpecifics.qml b/src/imports/controls/designer/TabBarSpecifics.qml deleted file mode 100644 index 6f02cdaa..00000000 --- a/src/imports/controls/designer/TabBarSpecifics.qml +++ /dev/null @@ -1,107 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("TabBar") - - SectionLayout { - Label { - text: qsTr("Position") - tooltip: qsTr("Position of the tabbar.") - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.position - model: [ "Header", "Footer" ] - scope: "TabBar" - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Content Width") - tooltip: qsTr("Content height used for calculating the total implicit width.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.contentWidth - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Content Height") - tooltip: qsTr("Content height used for calculating the total implicit height.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.contentHeight - Layout.fillWidth: true - } - } - } - } - - ContainerSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/TabButtonSpecifics.qml b/src/imports/controls/designer/TabButtonSpecifics.qml deleted file mode 100644 index df0af7e7..00000000 --- a/src/imports/controls/designer/TabButtonSpecifics.qml +++ /dev/null @@ -1,59 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/TextAreaSpecifics.qml b/src/imports/controls/designer/TextAreaSpecifics.qml deleted file mode 100644 index 785d7a50..00000000 --- a/src/imports/controls/designer/TextAreaSpecifics.qml +++ /dev/null @@ -1,104 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("TextArea") - - SectionLayout { - Label { - text: qsTr("Placeholder") - tooltip: qsTr("Placeholder text displayed when the editor is empty.") - } - SecondColumnLayout { - LineEdit { - backendValue: backendValues.placeholderText - Layout.fillWidth: true - } - - } - - Label { - text: qsTr("Hover") - tooltip: qsTr("Whether text area accepts hover events.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.hoverEnabled.valueToString - backendValue: backendValues.hoverEnabled - Layout.fillWidth: true - } - } - } - } - - Section { - width: parent.width - caption: qsTr("Placeholder Text Color") - - ColorEditor { - caption: qsTr("Placeholder Text Color") - backendValue: backendValues.placeholderTextColor - supportGradient: false - } - } - - StandardTextSection { - width: parent.width - showIsWrapping: true - showFormatProperty: true - showVerticalAlignment: true - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } - - InsetSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/TextFieldSpecifics.qml b/src/imports/controls/designer/TextFieldSpecifics.qml deleted file mode 100644 index 33a90f2a..00000000 --- a/src/imports/controls/designer/TextFieldSpecifics.qml +++ /dev/null @@ -1,101 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("TextField") - - SectionLayout { - Label { - text: qsTr("Placeholder") - tooltip: qsTr("Placeholder text displayed when the editor is empty.") - } - SecondColumnLayout { - LineEdit { - backendValue: backendValues.placeholderText - Layout.fillWidth: true - } - - } - - Label { - text: qsTr("Hover") - tooltip: qsTr("Whether text field accepts hover events.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.hoverEnabled.valueToString - backendValue: backendValues.hoverEnabled - Layout.fillWidth: true - } - } - } - } - - Section { - width: parent.width - caption: qsTr("Placeholder Text Color") - - ColorEditor { - caption: qsTr("Placeholder Text Color") - backendValue: backendValues.placeholderTextColor - supportGradient: false - } - } - - StandardTextSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } - - InsetSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/ToolBarSpecifics.qml b/src/imports/controls/designer/ToolBarSpecifics.qml deleted file mode 100644 index 2b1b17d2..00000000 --- a/src/imports/controls/designer/ToolBarSpecifics.qml +++ /dev/null @@ -1,79 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("ToolBar") - - SectionLayout { - Label { - text: qsTr("Position") - tooltip: qsTr("Position of the toolbar.") - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.position - model: [ "Header", "Footer" ] - scope: "ToolBar" - Layout.fillWidth: true - } - } - } - } - - PaneSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/ToolButtonSpecifics.qml b/src/imports/controls/designer/ToolButtonSpecifics.qml deleted file mode 100644 index 5a46e72a..00000000 --- a/src/imports/controls/designer/ToolButtonSpecifics.qml +++ /dev/null @@ -1,63 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - ButtonSection { - width: parent.width - } - - AbstractButtonSection { - width: parent.width - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/ToolSeparatorSpecifics.qml b/src/imports/controls/designer/ToolSeparatorSpecifics.qml deleted file mode 100644 index a62147ec..00000000 --- a/src/imports/controls/designer/ToolSeparatorSpecifics.qml +++ /dev/null @@ -1,71 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("ToolSeparator") - - SectionLayout { - Label { - text: qsTr("Orientation") - tooltip: qsTr("The orientation of the separator.") - } - SecondColumnLayout { - ComboBox { - backendValue: backendValues.orientation - model: [ "Horizontal", "Vertical" ] - scope: "Qt" - Layout.fillWidth: true - } - } - } - } - - ControlSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/TumblerSpecifics.qml b/src/imports/controls/designer/TumblerSpecifics.qml deleted file mode 100644 index 25fb9275..00000000 --- a/src/imports/controls/designer/TumblerSpecifics.qml +++ /dev/null @@ -1,102 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import HelperWidgets -import QtQuick.Layouts - -Column { - width: parent.width - - Section { - width: parent.width - caption: qsTr("Tumbler") - - SectionLayout { - Label { - text: qsTr("Visible Count") - tooltip: qsTr("The count of visible items.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.visibleItemCount - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Current") - tooltip: qsTr("The index of the current item.") - } - SecondColumnLayout { - SpinBox { - maximumValue: 9999999 - minimumValue: -9999999 - decimals: 0 - backendValue: backendValues.currentIndex - Layout.fillWidth: true - } - } - - Label { - text: qsTr("Wrap") - tooltip: qsTr("Whether the tumbler wrap.") - } - SecondColumnLayout { - CheckBox { - text: backendValues.wrap.valueToString - backendValue: backendValues.wrap - Layout.fillWidth: true - } - } - } - } - - ControlSection { - width: parent.width - } - - FontSection { - width: parent.width - } - - PaddingSection { - width: parent.width - } -} diff --git a/src/imports/controls/designer/designer.pri b/src/imports/controls/designer/designer.pri deleted file mode 100644 index 6692b203..00000000 --- a/src/imports/controls/designer/designer.pri +++ /dev/null @@ -1,52 +0,0 @@ -AUX_QML_FILES += \ - $$PWD/qtquickcontrols2.metainfo - -AUX_QML_FILES += \ - $$PWD/AbstractButtonSection.qml \ - $$PWD/BusyIndicatorSpecifics.qml \ - $$PWD/ButtonSection.qml \ - $$PWD/ButtonSpecifics.qml \ - $$PWD/CheckBoxSpecifics.qml \ - $$PWD/CheckDelegateSpecifics.qml \ - $$PWD/CheckSection.qml \ - $$PWD/ComboBoxSpecifics.qml \ - $$PWD/ContainerSection.qml \ - $$PWD/ControlSection.qml \ - $$PWD/ControlSpecifics.qml \ - $$PWD/DelayButtonSpecifics.qml \ - $$PWD/DialSpecifics.qml \ - $$PWD/FrameSpecifics.qml \ - $$PWD/GroupBoxSpecifics.qml \ - $$PWD/InsetSection.qml \ - $$PWD/ItemDelegateSection.qml \ - $$PWD/ItemDelegateSpecifics.qml \ - $$PWD/LabelSpecifics.qml \ - $$PWD/PaddingSection.qml \ - $$PWD/PageSpecifics.qml \ - $$PWD/PageIndicatorSpecifics.qml \ - $$PWD/PaneSection.qml \ - $$PWD/PaneSpecifics.qml \ - $$PWD/ProgressBarSpecifics.qml \ - $$PWD/RadioButtonSpecifics.qml \ - $$PWD/RadioDelegateSpecifics.qml \ - $$PWD/RangeSliderSpecifics.qml \ - $$PWD/RoundButtonSpecifics.qml \ - $$PWD/ScrollViewSpecifics.qml \ - $$PWD/SliderSpecifics.qml \ - $$PWD/SpinBoxSpecifics.qml \ - $$PWD/StackViewSpecifics.qml \ - $$PWD/SwipeDelegateSpecifics.qml \ - $$PWD/SwipeViewSpecifics.qml \ - $$PWD/SwitchSpecifics.qml \ - $$PWD/SwitchDelegateSpecifics.qml \ - $$PWD/TabBarSpecifics.qml \ - $$PWD/TabButtonSpecifics.qml \ - $$PWD/TextAreaSpecifics.qml \ - $$PWD/TextFieldSpecifics.qml \ - $$PWD/ToolBarSpecifics.qml \ - $$PWD/ToolButtonSpecifics.qml \ - $$PWD/ToolSeparatorSpecifics.qml \ - $$PWD/TumblerSpecifics.qml - -AUX_QML_FILES += \ - $$files($$PWD/images/*.png) diff --git a/src/imports/controls/designer/images/busyindicator-icon.png b/src/imports/controls/designer/images/busyindicator-icon.png deleted file mode 100644 index 666d1ed9..00000000 Binary files a/src/imports/controls/designer/images/busyindicator-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/busyindicator-icon16.png b/src/imports/controls/designer/images/busyindicator-icon16.png deleted file mode 100644 index 5aa57d7f..00000000 Binary files a/src/imports/controls/designer/images/busyindicator-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/busyindicator-icon@2x.png b/src/imports/controls/designer/images/busyindicator-icon@2x.png deleted file mode 100644 index bb2278ff..00000000 Binary files a/src/imports/controls/designer/images/busyindicator-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/button-icon.png b/src/imports/controls/designer/images/button-icon.png deleted file mode 100644 index c44909f6..00000000 Binary files a/src/imports/controls/designer/images/button-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/button-icon16.png b/src/imports/controls/designer/images/button-icon16.png deleted file mode 100644 index 5c921deb..00000000 Binary files a/src/imports/controls/designer/images/button-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/button-icon@2x.png b/src/imports/controls/designer/images/button-icon@2x.png deleted file mode 100644 index f90a1ba7..00000000 Binary files a/src/imports/controls/designer/images/button-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/checkbox-icon.png b/src/imports/controls/designer/images/checkbox-icon.png deleted file mode 100644 index ee669b3a..00000000 Binary files a/src/imports/controls/designer/images/checkbox-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/checkbox-icon16.png b/src/imports/controls/designer/images/checkbox-icon16.png deleted file mode 100644 index 8d89eab8..00000000 Binary files a/src/imports/controls/designer/images/checkbox-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/checkbox-icon@2x.png b/src/imports/controls/designer/images/checkbox-icon@2x.png deleted file mode 100644 index 51c5601d..00000000 Binary files a/src/imports/controls/designer/images/checkbox-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/combobox-icon.png b/src/imports/controls/designer/images/combobox-icon.png deleted file mode 100644 index 2d31b17c..00000000 Binary files a/src/imports/controls/designer/images/combobox-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/combobox-icon16.png b/src/imports/controls/designer/images/combobox-icon16.png deleted file mode 100644 index 15fc3505..00000000 Binary files a/src/imports/controls/designer/images/combobox-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/combobox-icon@2x.png b/src/imports/controls/designer/images/combobox-icon@2x.png deleted file mode 100644 index 5f823905..00000000 Binary files a/src/imports/controls/designer/images/combobox-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/delaybutton-icon.png b/src/imports/controls/designer/images/delaybutton-icon.png deleted file mode 100644 index 5a55bd9f..00000000 Binary files a/src/imports/controls/designer/images/delaybutton-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/delaybutton-icon16.png b/src/imports/controls/designer/images/delaybutton-icon16.png deleted file mode 100644 index cd21394e..00000000 Binary files a/src/imports/controls/designer/images/delaybutton-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/delaybutton-icon@2x.png b/src/imports/controls/designer/images/delaybutton-icon@2x.png deleted file mode 100644 index 7beee2fa..00000000 Binary files a/src/imports/controls/designer/images/delaybutton-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/dial-icon.png b/src/imports/controls/designer/images/dial-icon.png deleted file mode 100644 index b3b63e35..00000000 Binary files a/src/imports/controls/designer/images/dial-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/dial-icon16.png b/src/imports/controls/designer/images/dial-icon16.png deleted file mode 100644 index 8d8c7c09..00000000 Binary files a/src/imports/controls/designer/images/dial-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/dial-icon@2x.png b/src/imports/controls/designer/images/dial-icon@2x.png deleted file mode 100644 index 22547a16..00000000 Binary files a/src/imports/controls/designer/images/dial-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/frame-icon.png b/src/imports/controls/designer/images/frame-icon.png deleted file mode 100644 index 32abc8bf..00000000 Binary files a/src/imports/controls/designer/images/frame-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/frame-icon16.png b/src/imports/controls/designer/images/frame-icon16.png deleted file mode 100644 index e5b65ad5..00000000 Binary files a/src/imports/controls/designer/images/frame-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/frame-icon@2x.png b/src/imports/controls/designer/images/frame-icon@2x.png deleted file mode 100644 index 8b876f38..00000000 Binary files a/src/imports/controls/designer/images/frame-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/groupbox-icon.png b/src/imports/controls/designer/images/groupbox-icon.png deleted file mode 100644 index 5542ecf8..00000000 Binary files a/src/imports/controls/designer/images/groupbox-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/groupbox-icon16.png b/src/imports/controls/designer/images/groupbox-icon16.png deleted file mode 100644 index 9cf43248..00000000 Binary files a/src/imports/controls/designer/images/groupbox-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/groupbox-icon@2x.png b/src/imports/controls/designer/images/groupbox-icon@2x.png deleted file mode 100644 index 80dab3c7..00000000 Binary files a/src/imports/controls/designer/images/groupbox-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/itemdelegate-icon.png b/src/imports/controls/designer/images/itemdelegate-icon.png deleted file mode 100644 index 822cf3e7..00000000 Binary files a/src/imports/controls/designer/images/itemdelegate-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/itemdelegate-icon16.png b/src/imports/controls/designer/images/itemdelegate-icon16.png deleted file mode 100644 index b3ed007a..00000000 Binary files a/src/imports/controls/designer/images/itemdelegate-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/itemdelegate-icon@2x.png b/src/imports/controls/designer/images/itemdelegate-icon@2x.png deleted file mode 100644 index cb81308f..00000000 Binary files a/src/imports/controls/designer/images/itemdelegate-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/label-icon.png b/src/imports/controls/designer/images/label-icon.png deleted file mode 100644 index 788bef07..00000000 Binary files a/src/imports/controls/designer/images/label-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/label-icon16.png b/src/imports/controls/designer/images/label-icon16.png deleted file mode 100644 index b68d3845..00000000 Binary files a/src/imports/controls/designer/images/label-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/label-icon@2x.png b/src/imports/controls/designer/images/label-icon@2x.png deleted file mode 100644 index 7001413d..00000000 Binary files a/src/imports/controls/designer/images/label-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/page-icon.png b/src/imports/controls/designer/images/page-icon.png deleted file mode 100644 index b5ac87e8..00000000 Binary files a/src/imports/controls/designer/images/page-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/page-icon16.png b/src/imports/controls/designer/images/page-icon16.png deleted file mode 100644 index bc6810b6..00000000 Binary files a/src/imports/controls/designer/images/page-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/page-icon@2x.png b/src/imports/controls/designer/images/page-icon@2x.png deleted file mode 100644 index 23db032f..00000000 Binary files a/src/imports/controls/designer/images/page-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/pageindicator-icon.png b/src/imports/controls/designer/images/pageindicator-icon.png deleted file mode 100644 index edb6b377..00000000 Binary files a/src/imports/controls/designer/images/pageindicator-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/pageindicator-icon16.png b/src/imports/controls/designer/images/pageindicator-icon16.png deleted file mode 100644 index 0fb89675..00000000 Binary files a/src/imports/controls/designer/images/pageindicator-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/pageindicator-icon@2x.png b/src/imports/controls/designer/images/pageindicator-icon@2x.png deleted file mode 100644 index 7be0ee81..00000000 Binary files a/src/imports/controls/designer/images/pageindicator-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/pane-icon.png b/src/imports/controls/designer/images/pane-icon.png deleted file mode 100644 index 62ebe487..00000000 Binary files a/src/imports/controls/designer/images/pane-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/pane-icon16.png b/src/imports/controls/designer/images/pane-icon16.png deleted file mode 100644 index 2b804844..00000000 Binary files a/src/imports/controls/designer/images/pane-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/pane-icon@2x.png b/src/imports/controls/designer/images/pane-icon@2x.png deleted file mode 100644 index 55bb116a..00000000 Binary files a/src/imports/controls/designer/images/pane-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/progressbar-icon.png b/src/imports/controls/designer/images/progressbar-icon.png deleted file mode 100644 index a023f73c..00000000 Binary files a/src/imports/controls/designer/images/progressbar-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/progressbar-icon16.png b/src/imports/controls/designer/images/progressbar-icon16.png deleted file mode 100644 index 6fede21d..00000000 Binary files a/src/imports/controls/designer/images/progressbar-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/progressbar-icon@2x.png b/src/imports/controls/designer/images/progressbar-icon@2x.png deleted file mode 100644 index 00694003..00000000 Binary files a/src/imports/controls/designer/images/progressbar-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/radiobutton-icon.png b/src/imports/controls/designer/images/radiobutton-icon.png deleted file mode 100644 index d38170e2..00000000 Binary files a/src/imports/controls/designer/images/radiobutton-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/radiobutton-icon16.png b/src/imports/controls/designer/images/radiobutton-icon16.png deleted file mode 100644 index 07b46a8a..00000000 Binary files a/src/imports/controls/designer/images/radiobutton-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/radiobutton-icon@2x.png b/src/imports/controls/designer/images/radiobutton-icon@2x.png deleted file mode 100644 index 4bbddda4..00000000 Binary files a/src/imports/controls/designer/images/radiobutton-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/rangeslider-icon.png b/src/imports/controls/designer/images/rangeslider-icon.png deleted file mode 100644 index 1c4c7b29..00000000 Binary files a/src/imports/controls/designer/images/rangeslider-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/rangeslider-icon16.png b/src/imports/controls/designer/images/rangeslider-icon16.png deleted file mode 100644 index 3be4624d..00000000 Binary files a/src/imports/controls/designer/images/rangeslider-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/rangeslider-icon@2x.png b/src/imports/controls/designer/images/rangeslider-icon@2x.png deleted file mode 100644 index aee69b33..00000000 Binary files a/src/imports/controls/designer/images/rangeslider-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/roundbutton-icon.png b/src/imports/controls/designer/images/roundbutton-icon.png deleted file mode 100644 index d4b470dc..00000000 Binary files a/src/imports/controls/designer/images/roundbutton-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/roundbutton-icon16.png b/src/imports/controls/designer/images/roundbutton-icon16.png deleted file mode 100644 index f6f36666..00000000 Binary files a/src/imports/controls/designer/images/roundbutton-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/roundbutton-icon@2x.png b/src/imports/controls/designer/images/roundbutton-icon@2x.png deleted file mode 100644 index 4553e165..00000000 Binary files a/src/imports/controls/designer/images/roundbutton-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/scrollview-icon.png b/src/imports/controls/designer/images/scrollview-icon.png deleted file mode 100644 index 5ef73ff1..00000000 Binary files a/src/imports/controls/designer/images/scrollview-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/scrollview-icon16.png b/src/imports/controls/designer/images/scrollview-icon16.png deleted file mode 100644 index f8ca7a36..00000000 Binary files a/src/imports/controls/designer/images/scrollview-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/scrollview-icon@2x.png b/src/imports/controls/designer/images/scrollview-icon@2x.png deleted file mode 100644 index 0eb7f966..00000000 Binary files a/src/imports/controls/designer/images/scrollview-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/slider-icon.png b/src/imports/controls/designer/images/slider-icon.png deleted file mode 100644 index bd0a9729..00000000 Binary files a/src/imports/controls/designer/images/slider-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/slider-icon16.png b/src/imports/controls/designer/images/slider-icon16.png deleted file mode 100644 index a08622df..00000000 Binary files a/src/imports/controls/designer/images/slider-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/slider-icon@2x.png b/src/imports/controls/designer/images/slider-icon@2x.png deleted file mode 100644 index 93842e4c..00000000 Binary files a/src/imports/controls/designer/images/slider-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/spinbox-icon.png b/src/imports/controls/designer/images/spinbox-icon.png deleted file mode 100644 index 37277c5e..00000000 Binary files a/src/imports/controls/designer/images/spinbox-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/spinbox-icon16.png b/src/imports/controls/designer/images/spinbox-icon16.png deleted file mode 100644 index f88711dd..00000000 Binary files a/src/imports/controls/designer/images/spinbox-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/spinbox-icon@2x.png b/src/imports/controls/designer/images/spinbox-icon@2x.png deleted file mode 100644 index b62a3bad..00000000 Binary files a/src/imports/controls/designer/images/spinbox-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/stackview-icon.png b/src/imports/controls/designer/images/stackview-icon.png deleted file mode 100644 index a6ced349..00000000 Binary files a/src/imports/controls/designer/images/stackview-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/stackview-icon16.png b/src/imports/controls/designer/images/stackview-icon16.png deleted file mode 100644 index 0f19d0ef..00000000 Binary files a/src/imports/controls/designer/images/stackview-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/stackview-icon@2x.png b/src/imports/controls/designer/images/stackview-icon@2x.png deleted file mode 100644 index 9b5ef951..00000000 Binary files a/src/imports/controls/designer/images/stackview-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/swipeview-icon.png b/src/imports/controls/designer/images/swipeview-icon.png deleted file mode 100644 index 031cb27c..00000000 Binary files a/src/imports/controls/designer/images/swipeview-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/swipeview-icon16.png b/src/imports/controls/designer/images/swipeview-icon16.png deleted file mode 100644 index 446c4696..00000000 Binary files a/src/imports/controls/designer/images/swipeview-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/swipeview-icon@2x.png b/src/imports/controls/designer/images/swipeview-icon@2x.png deleted file mode 100644 index 0ccb978c..00000000 Binary files a/src/imports/controls/designer/images/swipeview-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/switch-icon.png b/src/imports/controls/designer/images/switch-icon.png deleted file mode 100644 index e0181592..00000000 Binary files a/src/imports/controls/designer/images/switch-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/switch-icon16.png b/src/imports/controls/designer/images/switch-icon16.png deleted file mode 100644 index 9abd2756..00000000 Binary files a/src/imports/controls/designer/images/switch-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/switch-icon@2x.png b/src/imports/controls/designer/images/switch-icon@2x.png deleted file mode 100644 index 787f54ca..00000000 Binary files a/src/imports/controls/designer/images/switch-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/textarea-icon.png b/src/imports/controls/designer/images/textarea-icon.png deleted file mode 100644 index f1b2dc0f..00000000 Binary files a/src/imports/controls/designer/images/textarea-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/textarea-icon16.png b/src/imports/controls/designer/images/textarea-icon16.png deleted file mode 100644 index 4afc1fba..00000000 Binary files a/src/imports/controls/designer/images/textarea-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/textarea-icon@2x.png b/src/imports/controls/designer/images/textarea-icon@2x.png deleted file mode 100644 index c32ecc71..00000000 Binary files a/src/imports/controls/designer/images/textarea-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/textfield-icon.png b/src/imports/controls/designer/images/textfield-icon.png deleted file mode 100644 index ba5537ac..00000000 Binary files a/src/imports/controls/designer/images/textfield-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/textfield-icon16.png b/src/imports/controls/designer/images/textfield-icon16.png deleted file mode 100644 index c4a62a65..00000000 Binary files a/src/imports/controls/designer/images/textfield-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/textfield-icon@2x.png b/src/imports/controls/designer/images/textfield-icon@2x.png deleted file mode 100644 index e05fd41b..00000000 Binary files a/src/imports/controls/designer/images/textfield-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/toolbar-icon.png b/src/imports/controls/designer/images/toolbar-icon.png deleted file mode 100644 index 5cb5b2e1..00000000 Binary files a/src/imports/controls/designer/images/toolbar-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/toolbar-icon16.png b/src/imports/controls/designer/images/toolbar-icon16.png deleted file mode 100644 index 569373af..00000000 Binary files a/src/imports/controls/designer/images/toolbar-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/toolbar-icon@2x.png b/src/imports/controls/designer/images/toolbar-icon@2x.png deleted file mode 100644 index fd9e6cee..00000000 Binary files a/src/imports/controls/designer/images/toolbar-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/toolbutton-icon.png b/src/imports/controls/designer/images/toolbutton-icon.png deleted file mode 100644 index 3298f695..00000000 Binary files a/src/imports/controls/designer/images/toolbutton-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/toolbutton-icon16.png b/src/imports/controls/designer/images/toolbutton-icon16.png deleted file mode 100644 index 9ab7861c..00000000 Binary files a/src/imports/controls/designer/images/toolbutton-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/toolbutton-icon@2x.png b/src/imports/controls/designer/images/toolbutton-icon@2x.png deleted file mode 100644 index e5958cde..00000000 Binary files a/src/imports/controls/designer/images/toolbutton-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/toolseparator-icon.png b/src/imports/controls/designer/images/toolseparator-icon.png deleted file mode 100644 index 5e99f06f..00000000 Binary files a/src/imports/controls/designer/images/toolseparator-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/toolseparator-icon16.png b/src/imports/controls/designer/images/toolseparator-icon16.png deleted file mode 100644 index 68f22c5d..00000000 Binary files a/src/imports/controls/designer/images/toolseparator-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/toolseparator-icon@2x.png b/src/imports/controls/designer/images/toolseparator-icon@2x.png deleted file mode 100644 index 549c11c6..00000000 Binary files a/src/imports/controls/designer/images/toolseparator-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/images/tumbler-icon.png b/src/imports/controls/designer/images/tumbler-icon.png deleted file mode 100644 index 98eb8232..00000000 Binary files a/src/imports/controls/designer/images/tumbler-icon.png and /dev/null differ diff --git a/src/imports/controls/designer/images/tumbler-icon16.png b/src/imports/controls/designer/images/tumbler-icon16.png deleted file mode 100644 index ff5f95cf..00000000 Binary files a/src/imports/controls/designer/images/tumbler-icon16.png and /dev/null differ diff --git a/src/imports/controls/designer/images/tumbler-icon@2x.png b/src/imports/controls/designer/images/tumbler-icon@2x.png deleted file mode 100644 index 236abf0c..00000000 Binary files a/src/imports/controls/designer/images/tumbler-icon@2x.png and /dev/null differ diff --git a/src/imports/controls/designer/qtquickcontrols2.metainfo b/src/imports/controls/designer/qtquickcontrols2.metainfo deleted file mode 100644 index d27f1b90..00000000 --- a/src/imports/controls/designer/qtquickcontrols2.metainfo +++ /dev/null @@ -1,522 +0,0 @@ -MetaInfo { - Type { - name: "QtQuick.Controls.BusyIndicator" - icon: "images/busyindicator-icon16.png" - - ItemLibraryEntry { - name: "Busy Indicator" - category: "Qt Quick - Controls 2" - libraryIcon: "images/busyindicator-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - } - } - - Type { - name: "QtQuick.Controls.Button" - icon: "images/button-icon16.png" - - ItemLibraryEntry { - name: "Button" - category: "Qt Quick - Controls 2" - libraryIcon: "images/button-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "text"; type: "binding"; value: "qsTr(\"Button\")" } - } - } - - Type { - name: "QtQuick.Controls.CheckBox" - icon: "images/checkbox-icon16.png" - - ItemLibraryEntry { - name: "Check Box" - category: "Qt Quick - Controls 2" - libraryIcon: "images/checkbox-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "text"; type: "binding"; value: "qsTr(\"Check Box\")" } - } - } - - Type { - name: "QtQuick.Controls.CheckDelegate" - icon: "images/checkbox-icon16.png" - - ItemLibraryEntry { - name: "Check Delegate" - category: "Qt Quick - Controls 2" - libraryIcon: "images/checkbox-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "text"; type: "binding"; value: "qsTr(\"Check Delegate\")" } - } - } - - Type { - name: "QtQuick.Controls.ComboBox" - icon: "images/combobox-icon16.png" - - ItemLibraryEntry { - name: "Combo Box" - category: "Qt Quick - Controls 2" - libraryIcon: "images/combobox-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - } - } - - Type { - name: "QtQuick.Controls.DelayButton" - icon: "images/button-icon16.png" - - ItemLibraryEntry { - name: "Delay Button" - category: "Qt Quick - Controls 2" - libraryIcon: "images/delaybutton-icon.png" - version: "2.2" - requiredImport: "QtQuick.Controls" - - Property { name: "text"; type: "binding"; value: "qsTr(\"Delay Button\")" } - } - } - - Type { - name: "QtQuick.Controls.Dial" - icon: "images/dial-icon16.png" - - ItemLibraryEntry { - name: "Dial" - category: "Qt Quick - Controls 2" - libraryIcon: "images/dial-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - } - } - - Type { - name: "QtQuick.Controls.Frame" - icon: "images/frame-icon16.png" - - ItemLibraryEntry { - name: "Frame" - category: "Qt Quick - Controls 2" - libraryIcon: "images/frame-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "width"; type: "int"; value: 200 } - Property { name: "height"; type: "int"; value: 200 } - } - } - - Type { - name: "QtQuick.Controls.GroupBox" - icon: "images/groupbox-icon16.png" - - ItemLibraryEntry { - name: "Group Box" - category: "Qt Quick - Controls 2" - libraryIcon: "images/groupbox-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "width"; type: "int"; value: 200 } - Property { name: "height"; type: "int"; value: 200 } - Property { name: "title"; type: "binding"; value: "qsTr(\"Group Box\")" } - } - } - - Type { - name: "QtQuick.Controls.ItemDelegate" - icon: "images/itemdelegate-icon16.png" - - ItemLibraryEntry { - name: "Item Delegate" - category: "Qt Quick - Controls 2" - libraryIcon: "images/itemdelegate-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "text"; type: "binding"; value: "qsTr(\"Item Delegate\")" } - } - } - - Type { - name: "QtQuick.Controls.Label" - icon: "images/label-icon16.png" - - ItemLibraryEntry { - name: "Label" - category: "Qt Quick - Controls 2" - libraryIcon: "images/label-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "text"; type: "binding"; value: "qsTr(\"Label\")" } - } - } - - Type { - name: "QtQuick.Controls.Page" - icon: "images/page-icon16.png" - - ItemLibraryEntry { - name: "Page" - category: "Qt Quick - Controls 2" - libraryIcon: "images/page-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "width"; type: "int"; value: 200 } - Property { name: "height"; type: "int"; value: 200 } - } - } - - Type { - name: "QtQuick.Controls.PageIndicator" - icon: "images/pageindicator-icon16.png" - - ItemLibraryEntry { - name: "Page Indicator" - category: "Qt Quick - Controls 2" - libraryIcon: "images/pageindicator-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "count"; type: "int"; value: 3 } - } - } - - Type { - name: "QtQuick.Controls.Pane" - icon: "images/pane-icon16.png" - - ItemLibraryEntry { - name: "Pane" - category: "Qt Quick - Controls 2" - libraryIcon: "images/pane-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "width"; type: "int"; value: 200 } - Property { name: "height"; type: "int"; value: 200 } - } - } - - Type { - name: "QtQuick.Controls.ProgressBar" - icon: "images/progressbar-icon16.png" - - ItemLibraryEntry { - name: "Progress Bar" - category: "Qt Quick - Controls 2" - libraryIcon: "images/progressbar-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "value"; type: "real"; value: 0.5 } - } - } - - Type { - name: "QtQuick.Controls.RadioButton" - icon: "images/radiobutton-icon16.png" - - ItemLibraryEntry { - name: "Radio Button" - category: "Qt Quick - Controls 2" - libraryIcon: "images/radiobutton-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "text"; type: "binding"; value: "qsTr(\"Radio Button\")" } - } - } - - Type { - name: "QtQuick.Controls.RadioDelegate" - icon: "images/radiobutton-icon16.png" - - ItemLibraryEntry { - name: "Radio Delegate" - category: "Qt Quick - Controls 2" - libraryIcon: "images/radiobutton-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "text"; type: "binding"; value: "qsTr(\"Radio Delegate\")" } - } - } - - Type { - name: "QtQuick.Controls.RangeSlider" - icon: "images/rangeslider-icon16.png" - - ItemLibraryEntry { - name: "Range Slider" - category: "Qt Quick - Controls 2" - libraryIcon: "images/rangeslider-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "first.value"; type: "real"; value: 0.25 } - Property { name: "second.value"; type: "real"; value: 0.75 } - } - } - - Type { - name: "QtQuick.Controls.RoundButton" - icon: "images/roundbutton-icon16.png" - - ItemLibraryEntry { - name: "Round Button" - category: "Qt Quick - Controls 2" - libraryIcon: "images/roundbutton-icon.png" - version: "2.1" - requiredImport: "QtQuick.Controls" - Property { name: "text"; type: "string"; value: "+" } - } - } - - Type { - name: "QtQuick.Controls.Slider" - icon: "images/slider-icon16.png" - - ItemLibraryEntry { - name: "Slider" - category: "Qt Quick - Controls 2" - libraryIcon: "images/slider-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "value"; type: "real"; value: 0.5 } - } - } - - Type { - name: "QtQuick.Controls.SpinBox" - icon: "images/spinbox-icon16.png" - - ItemLibraryEntry { - name: "Spin Box" - category: "Qt Quick - Controls 2" - libraryIcon: "images/spinbox-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - } - } - - Type { - name: "QtQuick.Controls.ScrollView" - icon: "images/scrollview-icon16.png" - - ItemLibraryEntry { - name: "Scroll View" - category: "Qt Quick - Controls 2" - libraryIcon: "images/scrollview-icon.png" - version: "2.2" - requiredImport: "QtQuick.Controls" - - Property { name: "width"; type: "int"; value: 200 } - Property { name: "height"; type: "int"; value: 200 } - } - } - - Type { - name: "QtQuick.Controls.StackView" - icon: "images/stackview-icon16.png" - - ItemLibraryEntry { - name: "Stack View" - category: "Qt Quick - Controls 2" - libraryIcon: "images/stackview-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "width"; type: "int"; value: 200 } - Property { name: "height"; type: "int"; value: 200 } - } - } - - Type { - name: "QtQuick.Controls.SwipeDelegate" - icon: "images/itemdelegate-icon16.png" - - ItemLibraryEntry { - name: "Swipe Delegate" - category: "Qt Quick - Controls 2" - libraryIcon: "images/itemdelegate-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "text"; type: "binding"; value: "qsTr(\"Swipe Delegate\")" } - } - } - - Type { - name: "QtQuick.Controls.SwipeView" - icon: "images/swipeview-icon16.png" - - ItemLibraryEntry { - name: "Swipe View" - category: "Qt Quick - Controls 2" - libraryIcon: "images/swipeview-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "width"; type: "int"; value: 200 } - Property { name: "height"; type: "int"; value: 200 } - } - } - - Type { - name: "QtQuick.Controls.Switch" - icon: "images/switch-icon16.png" - - ItemLibraryEntry { - name: "Switch" - category: "Qt Quick - Controls 2" - libraryIcon: "images/switch-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "text"; type: "binding"; value: "qsTr(\"Switch\")" } - } - } - - Type { - name: "QtQuick.Controls.SwitchDelegate" - icon: "images/switch-icon16.png" - - ItemLibraryEntry { - name: "Switch Delegate" - category: "Qt Quick - Controls 2" - libraryIcon: "images/switch-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "text"; type: "binding"; value: "qsTr(\"Switch Delegate\")" } - } - } - - Type { - name: "QtQuick.Controls.TabBar" - icon: "images/toolbar-icon16.png" - - ItemLibraryEntry { - name: "Tab Bar" - category: "Qt Quick - Controls 2" - libraryIcon: "images/toolbar-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - Property { name: "width"; type: "int"; value: 240 } - } - } - - Type { - name: "QtQuick.Controls.TabButton" - icon: "images/toolbutton-icon16.png" - - ItemLibraryEntry { - name: "Tab Button" - category: "Qt Quick - Controls 2" - libraryIcon: "images/toolbutton-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - Property { name: "text"; type: "binding"; value: "qsTr(\"Tab Button\")" } - } - } - - Type { - name: "QtQuick.Controls.TextArea" - icon: "images/textarea-icon16.png" - - ItemLibraryEntry { - name: "Text Area" - category: "Qt Quick - Controls 2" - libraryIcon: "images/textarea-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "placeholderText"; type: "binding"; value: "qsTr(\"Text Area\")" } - } - } - - Type { - name: "QtQuick.Controls.TextField" - icon: "images/textfield-icon16.png" - - ItemLibraryEntry { - name: "Text Field" - category: "Qt Quick - Controls 2" - libraryIcon: "images/textfield-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "placeholderText"; type: "binding"; value: "qsTr(\"Text Field\")" } - } - } - - Type { - name: "QtQuick.Controls.ToolBar" - icon: "images/toolbar-icon16.png" - - ItemLibraryEntry { - name: "Tool Bar" - category: "Qt Quick - Controls 2" - libraryIcon: "images/toolbar-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "width"; type: "int"; value: 360 } - } - } - - Type { - name: "QtQuick.Controls.ToolButton" - icon: "images/toolbutton-icon16.png" - - ItemLibraryEntry { - name: "Tool Button" - category: "Qt Quick - Controls 2" - libraryIcon: "images/toolbutton-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "text"; type: "binding"; value: "qsTr(\"Tool Button\")" } - } - } - - Type { - name: "QtQuick.Controls.ToolSeparator" - icon: "images/toolseparator-icon16.png" - - ItemLibraryEntry { - name: "Tool Separator" - category: "Qt Quick - Controls 2" - libraryIcon: "images/toolseparator-icon.png" - version: "2.1" - requiredImport: "QtQuick.Controls" - } - } - - Type { - name: "QtQuick.Controls.Tumbler" - icon: "images/tumbler-icon16.png" - - ItemLibraryEntry { - name: "Tumbler" - category: "Qt Quick - Controls 2" - libraryIcon: "images/tumbler-icon.png" - version: "2.0" - requiredImport: "QtQuick.Controls" - - Property { name: "model"; type: "int"; value: "10" } - } - } -} diff --git a/src/imports/controls/doc/doc.pri b/src/imports/controls/doc/doc.pri deleted file mode 100644 index 4bd8bd95..00000000 --- a/src/imports/controls/doc/doc.pri +++ /dev/null @@ -1,6 +0,0 @@ -QMAKE_DOCS = $$PWD/qtquickcontrols.qdocconf - -OTHER_FILES += \ - $$files($$PWD/snippets/*.qml) \ - $$files($$PWD/src/*.qdoc) \ - $$files($$PWD/src/templates/*.qdoc) diff --git a/src/imports/controls/doc/images/qtquickcontrols2-applicationwindow-wireframe.png b/src/imports/controls/doc/images/qtquickcontrols2-applicationwindow-wireframe.png deleted file mode 100644 index f3137800..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-applicationwindow-wireframe.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-basic-thumbnail.png b/src/imports/controls/doc/images/qtquickcontrols2-basic-thumbnail.png deleted file mode 100644 index e971a7aa..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-basic-thumbnail.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-basic.png b/src/imports/controls/doc/images/qtquickcontrols2-basic.png deleted file mode 100644 index 099db170..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-basic.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-busyindicator-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-busyindicator-custom.png deleted file mode 100644 index fefae223..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-busyindicator-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-busyindicator.gif b/src/imports/controls/doc/images/qtquickcontrols2-busyindicator.gif deleted file mode 100644 index 653d200f..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-busyindicator.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-busyindicator.png b/src/imports/controls/doc/images/qtquickcontrols2-busyindicator.png deleted file mode 100644 index 4be09579..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-busyindicator.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-button-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-button-custom.png deleted file mode 100644 index 46d3e3eb..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-button-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-button-flat.gif b/src/imports/controls/doc/images/qtquickcontrols2-button-flat.gif deleted file mode 100644 index e2bd8b6f..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-button-flat.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-button-highlighted.gif b/src/imports/controls/doc/images/qtquickcontrols2-button-highlighted.gif deleted file mode 100644 index 7de076d3..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-button-highlighted.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-button-icononly.png b/src/imports/controls/doc/images/qtquickcontrols2-button-icononly.png deleted file mode 100644 index 9c8dd0f4..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-button-icononly.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-button-textbesideicon.png b/src/imports/controls/doc/images/qtquickcontrols2-button-textbesideicon.png deleted file mode 100644 index 3dc64fb9..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-button-textbesideicon.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-button-textonly.png b/src/imports/controls/doc/images/qtquickcontrols2-button-textonly.png deleted file mode 100644 index 737beb16..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-button-textonly.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-button-textundericon.png b/src/imports/controls/doc/images/qtquickcontrols2-button-textundericon.png deleted file mode 100644 index 37c40c7c..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-button-textundericon.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-button.gif b/src/imports/controls/doc/images/qtquickcontrols2-button.gif deleted file mode 100644 index 10d626a3..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-button.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-checkbox-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-checkbox-custom.png deleted file mode 100644 index c6c3d1bc..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-checkbox-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-checkbox-group.png b/src/imports/controls/doc/images/qtquickcontrols2-checkbox-group.png deleted file mode 100644 index d5a0d51b..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-checkbox-group.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-checkbox-tristate.gif b/src/imports/controls/doc/images/qtquickcontrols2-checkbox-tristate.gif deleted file mode 100644 index 56a15867..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-checkbox-tristate.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-checkbox.gif b/src/imports/controls/doc/images/qtquickcontrols2-checkbox.gif deleted file mode 100644 index d70c0ee4..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-checkbox.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-checkdelegate-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-checkdelegate-custom.png deleted file mode 100644 index c0dd0689..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-checkdelegate-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-checkdelegate-tristate.gif b/src/imports/controls/doc/images/qtquickcontrols2-checkdelegate-tristate.gif deleted file mode 100644 index 8d058d6c..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-checkdelegate-tristate.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-checkdelegate.gif b/src/imports/controls/doc/images/qtquickcontrols2-checkdelegate.gif deleted file mode 100644 index da3fab98..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-checkdelegate.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-combobox-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-combobox-custom.png deleted file mode 100644 index 4f7206dc..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-combobox-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-combobox-delegate.png b/src/imports/controls/doc/images/qtquickcontrols2-combobox-delegate.png deleted file mode 100644 index cf310648..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-combobox-delegate.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-combobox-popup.png b/src/imports/controls/doc/images/qtquickcontrols2-combobox-popup.png deleted file mode 100644 index cf310648..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-combobox-popup.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-combobox.gif b/src/imports/controls/doc/images/qtquickcontrols2-combobox.gif deleted file mode 100644 index 966a2d4a..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-combobox.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-control.png b/src/imports/controls/doc/images/qtquickcontrols2-control.png deleted file mode 100644 index 0f004a89..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-control.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-control.svg b/src/imports/controls/doc/images/qtquickcontrols2-control.svg deleted file mode 100644 index 4b2057d1..00000000 --- a/src/imports/controls/doc/images/qtquickcontrols2-control.svg +++ /dev/null @@ -1,936 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - Background  - Content item Width - - Height Popup Bottompadding Toppadding Right padding Left padding - - Top inset Left inset - - Bottom inset - Right inset - - - - Window - - Topmargin Rightmargin - Bottommargin - Leftmargin - diff --git a/src/imports/controls/doc/images/qtquickcontrols2-customize-buttons.png b/src/imports/controls/doc/images/qtquickcontrols2-customize-buttons.png deleted file mode 100644 index 551e8a0c..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-customize-buttons.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-delaybutton-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-delaybutton-custom.png deleted file mode 100644 index a7bd7c19..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-delaybutton-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-delaybutton.gif b/src/imports/controls/doc/images/qtquickcontrols2-delaybutton.gif deleted file mode 100644 index 16a198f9..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-delaybutton.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-dial-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-dial-custom.png deleted file mode 100644 index 6312c999..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-dial-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-dial-handle.png b/src/imports/controls/doc/images/qtquickcontrols2-dial-handle.png deleted file mode 100644 index 9e22b2e7..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-dial-handle.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-dial-inputMode.svgz b/src/imports/controls/doc/images/qtquickcontrols2-dial-inputMode.svgz deleted file mode 100644 index 005ab7b3..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-dial-inputMode.svgz and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-dial-inputmode.png b/src/imports/controls/doc/images/qtquickcontrols2-dial-inputmode.png deleted file mode 100644 index 5bbc41a4..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-dial-inputmode.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-dial-no-wrap.gif b/src/imports/controls/doc/images/qtquickcontrols2-dial-no-wrap.gif deleted file mode 100644 index 24f6790b..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-dial-no-wrap.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-dial-wrap.gif b/src/imports/controls/doc/images/qtquickcontrols2-dial-wrap.gif deleted file mode 100644 index cfb1fb5b..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-dial-wrap.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-dial.png b/src/imports/controls/doc/images/qtquickcontrols2-dial.png deleted file mode 100644 index 71c54113..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-dial.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-dialogbuttonbox-attached.png b/src/imports/controls/doc/images/qtquickcontrols2-dialogbuttonbox-attached.png deleted file mode 100644 index c17f38ac..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-dialogbuttonbox-attached.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-dialogbuttonbox.png b/src/imports/controls/doc/images/qtquickcontrols2-dialogbuttonbox.png deleted file mode 100644 index 33b5f45f..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-dialogbuttonbox.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-drawer-expanded-wireframe.png b/src/imports/controls/doc/images/qtquickcontrols2-drawer-expanded-wireframe.png deleted file mode 100644 index 0c92f865..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-drawer-expanded-wireframe.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-drawer-wireframe.png b/src/imports/controls/doc/images/qtquickcontrols2-drawer-wireframe.png deleted file mode 100644 index 74806f17..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-drawer-wireframe.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-drawer.gif b/src/imports/controls/doc/images/qtquickcontrols2-drawer.gif deleted file mode 100644 index 736f34f6..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-drawer.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-frame-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-frame-custom.png deleted file mode 100644 index f628b20c..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-frame-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-frame.png b/src/imports/controls/doc/images/qtquickcontrols2-frame.png deleted file mode 100644 index e3cb31dc..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-frame.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-fusion-palettes.png b/src/imports/controls/doc/images/qtquickcontrols2-fusion-palettes.png deleted file mode 100644 index d8061161..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-fusion-palettes.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-fusion-thumbnail.png b/src/imports/controls/doc/images/qtquickcontrols2-fusion-thumbnail.png deleted file mode 100644 index c270c6ef..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-fusion-thumbnail.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-fusion-violet.png b/src/imports/controls/doc/images/qtquickcontrols2-fusion-violet.png deleted file mode 100644 index 99e5b597..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-fusion-violet.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-fusion.png b/src/imports/controls/doc/images/qtquickcontrols2-fusion.png deleted file mode 100644 index 7119ef22..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-fusion.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-groupbox-checkable.png b/src/imports/controls/doc/images/qtquickcontrols2-groupbox-checkable.png deleted file mode 100644 index 820ad79c..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-groupbox-checkable.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-groupbox-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-groupbox-custom.png deleted file mode 100644 index 029679ce..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-groupbox-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-groupbox-label.png b/src/imports/controls/doc/images/qtquickcontrols2-groupbox-label.png deleted file mode 100644 index c26795a7..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-groupbox-label.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-groupbox.png b/src/imports/controls/doc/images/qtquickcontrols2-groupbox.png deleted file mode 100644 index ea2f9ea5..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-groupbox.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-4x.png b/src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-4x.png deleted file mode 100644 index bab99a5e..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-4x.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-inset-boundaries.png b/src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-inset-boundaries.png deleted file mode 100644 index c42df81e..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-inset-boundaries.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-inset.png b/src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-inset.png deleted file mode 100644 index 0627d085..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-inset.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-resized-padding.png b/src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-resized-padding.png deleted file mode 100644 index 0a606c99..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-resized-padding.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-resized-stretchable.png b/src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-resized-stretchable.png deleted file mode 100644 index 9598b13a..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-resized-stretchable.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-size.png b/src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-size.png deleted file mode 100644 index db645375..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch-size.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch.svgz b/src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch.svgz deleted file mode 100644 index 5a1a1094..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-imagine-9-patch.svgz and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-imagine-customization-dark.png b/src/imports/controls/doc/images/qtquickcontrols2-imagine-customization-dark.png deleted file mode 100644 index 144ac97c..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-imagine-customization-dark.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-imagine-customization.svgz b/src/imports/controls/doc/images/qtquickcontrols2-imagine-customization.svgz deleted file mode 100644 index fb830563..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-imagine-customization.svgz and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-imagine-thumbnail.png b/src/imports/controls/doc/images/qtquickcontrols2-imagine-thumbnail.png deleted file mode 100644 index ecf2bb16..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-imagine-thumbnail.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-imagine.png b/src/imports/controls/doc/images/qtquickcontrols2-imagine.png deleted file mode 100644 index ffe2c267..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-imagine.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-itemdelegate-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-itemdelegate-custom.png deleted file mode 100644 index 35f8892f..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-itemdelegate-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-itemdelegate.gif b/src/imports/controls/doc/images/qtquickcontrols2-itemdelegate.gif deleted file mode 100644 index dccb6efc..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-itemdelegate.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-itemdelegate.png b/src/imports/controls/doc/images/qtquickcontrols2-itemdelegate.png deleted file mode 100644 index 7242f343..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-itemdelegate.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-label-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-label-custom.png deleted file mode 100644 index 5730ff23..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-label-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-label.png b/src/imports/controls/doc/images/qtquickcontrols2-label.png deleted file mode 100644 index 0bafcf86..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-label.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-macos-dark.png b/src/imports/controls/doc/images/qtquickcontrols2-macos-dark.png deleted file mode 100644 index 97d8a5a4..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-macos-dark.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-macos-light.png b/src/imports/controls/doc/images/qtquickcontrols2-macos-light.png deleted file mode 100644 index 4a598ad4..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-macos-light.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-macos-thumbnail.png b/src/imports/controls/doc/images/qtquickcontrols2-macos-thumbnail.png deleted file mode 100644 index 57fd98d6..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-macos-thumbnail.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-material-accent.png b/src/imports/controls/doc/images/qtquickcontrols2-material-accent.png deleted file mode 100644 index a85afc68..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-material-accent.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-material-attributes.png b/src/imports/controls/doc/images/qtquickcontrols2-material-attributes.png deleted file mode 100644 index bb54071d..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-material-attributes.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-material-background.png b/src/imports/controls/doc/images/qtquickcontrols2-material-background.png deleted file mode 100644 index 62028f52..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-material-background.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-material-dark.png b/src/imports/controls/doc/images/qtquickcontrols2-material-dark.png deleted file mode 100644 index f6e45b3b..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-material-dark.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-material-elevation.png b/src/imports/controls/doc/images/qtquickcontrols2-material-elevation.png deleted file mode 100644 index d152f145..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-material-elevation.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-material-foreground.png b/src/imports/controls/doc/images/qtquickcontrols2-material-foreground.png deleted file mode 100644 index 0d0e1b65..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-material-foreground.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-material-light.png b/src/imports/controls/doc/images/qtquickcontrols2-material-light.png deleted file mode 100644 index c9abe2cb..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-material-light.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-material-purple.png b/src/imports/controls/doc/images/qtquickcontrols2-material-purple.png deleted file mode 100644 index b955736b..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-material-purple.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-material-theme.png b/src/imports/controls/doc/images/qtquickcontrols2-material-theme.png deleted file mode 100644 index 1d09a825..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-material-theme.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-material-thumbnail.png b/src/imports/controls/doc/images/qtquickcontrols2-material-thumbnail.png deleted file mode 100644 index d758ff18..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-material-thumbnail.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-material-variant-dense.png b/src/imports/controls/doc/images/qtquickcontrols2-material-variant-dense.png deleted file mode 100644 index 02f39b78..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-material-variant-dense.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-material-variant-normal.png b/src/imports/controls/doc/images/qtquickcontrols2-material-variant-normal.png deleted file mode 100644 index c1e366c5..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-material-variant-normal.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-menu-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-menu-custom.png deleted file mode 100644 index 922bf591..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-menu-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-menu.gif b/src/imports/controls/doc/images/qtquickcontrols2-menu.gif deleted file mode 100644 index 93a873a3..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-menu.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-menu.png b/src/imports/controls/doc/images/qtquickcontrols2-menu.png deleted file mode 100644 index 926c33ee..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-menu.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-menubar-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-menubar-custom.png deleted file mode 100644 index b6007e46..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-menubar-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-menubar.png b/src/imports/controls/doc/images/qtquickcontrols2-menubar.png deleted file mode 100644 index 873b7a19..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-menubar.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-menuseparator-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-menuseparator-custom.png deleted file mode 100644 index 78635b9c..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-menuseparator-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-menuseparator.png b/src/imports/controls/doc/images/qtquickcontrols2-menuseparator.png deleted file mode 100644 index 35307817..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-menuseparator.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-page-wireframe.png b/src/imports/controls/doc/images/qtquickcontrols2-page-wireframe.png deleted file mode 100644 index f612c243..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-page-wireframe.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-pageindicator-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-pageindicator-custom.png deleted file mode 100644 index a767a51a..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-pageindicator-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-pageindicator-delegate.png b/src/imports/controls/doc/images/qtquickcontrols2-pageindicator-delegate.png deleted file mode 100644 index 95acde70..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-pageindicator-delegate.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-pageindicator.png b/src/imports/controls/doc/images/qtquickcontrols2-pageindicator.png deleted file mode 100644 index e2a0a157..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-pageindicator.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-pane-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-pane-custom.png deleted file mode 100644 index 03a0369f..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-pane-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-pane.png b/src/imports/controls/doc/images/qtquickcontrols2-pane.png deleted file mode 100644 index 3801cc3e..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-pane.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-popup-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-popup-custom.png deleted file mode 100644 index cb7813d3..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-popup-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-popup-settings.png b/src/imports/controls/doc/images/qtquickcontrols2-popup-settings.png deleted file mode 100644 index 5122158e..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-popup-settings.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-popup-transformorigin.png b/src/imports/controls/doc/images/qtquickcontrols2-popup-transformorigin.png deleted file mode 100644 index 16d26177..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-popup-transformorigin.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-popup.png b/src/imports/controls/doc/images/qtquickcontrols2-popup.png deleted file mode 100644 index 8fc424a8..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-popup.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-popup.svg b/src/imports/controls/doc/images/qtquickcontrols2-popup.svg deleted file mode 100644 index e39f3dce..00000000 --- a/src/imports/controls/doc/images/qtquickcontrols2-popup.svg +++ /dev/null @@ -1,712 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - Background  - Content item Width - - Height Control Bottompadding Toppadding Right padding Left padding - - Top inset Left inset - - Bottom inset - Right inset - - - - diff --git a/src/imports/controls/doc/images/qtquickcontrols2-progressbar-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-progressbar-custom.png deleted file mode 100644 index 9d73df2c..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-progressbar-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-progressbar-indeterminate.gif b/src/imports/controls/doc/images/qtquickcontrols2-progressbar-indeterminate.gif deleted file mode 100644 index d6756d16..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-progressbar-indeterminate.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-progressbar.gif b/src/imports/controls/doc/images/qtquickcontrols2-progressbar.gif deleted file mode 100644 index 49af5f45..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-progressbar.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-radiobutton-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-radiobutton-custom.png deleted file mode 100644 index 5c85179f..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-radiobutton-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-radiobutton.gif b/src/imports/controls/doc/images/qtquickcontrols2-radiobutton.gif deleted file mode 100644 index 4cbf3ed9..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-radiobutton.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-radiodelegate-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-radiodelegate-custom.png deleted file mode 100644 index 7d32699b..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-radiodelegate-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-radiodelegate.gif b/src/imports/controls/doc/images/qtquickcontrols2-radiodelegate.gif deleted file mode 100644 index b6afd6fe..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-radiodelegate.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-rangeslider-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-rangeslider-custom.png deleted file mode 100644 index 47379a30..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-rangeslider-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-rangeslider.gif b/src/imports/controls/doc/images/qtquickcontrols2-rangeslider.gif deleted file mode 100644 index db565b0a..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-rangeslider.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-roundbutton.png b/src/imports/controls/doc/images/qtquickcontrols2-roundbutton.png deleted file mode 100644 index 4dce37f2..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-roundbutton.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-scrollbar-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-scrollbar-custom.png deleted file mode 100644 index 690bc8be..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-scrollbar-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-scrollbar-non-attached.png b/src/imports/controls/doc/images/qtquickcontrols2-scrollbar-non-attached.png deleted file mode 100644 index eba363dd..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-scrollbar-non-attached.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-scrollbar-nosnap.gif b/src/imports/controls/doc/images/qtquickcontrols2-scrollbar-nosnap.gif deleted file mode 100644 index f61ac5b4..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-scrollbar-nosnap.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-scrollbar-snapalways.gif b/src/imports/controls/doc/images/qtquickcontrols2-scrollbar-snapalways.gif deleted file mode 100644 index 438d4a33..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-scrollbar-snapalways.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-scrollbar-snaponrelease.gif b/src/imports/controls/doc/images/qtquickcontrols2-scrollbar-snaponrelease.gif deleted file mode 100644 index c2fa67b0..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-scrollbar-snaponrelease.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-scrollbar.gif b/src/imports/controls/doc/images/qtquickcontrols2-scrollbar.gif deleted file mode 100644 index ed3ab607..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-scrollbar.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-scrollindicator-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-scrollindicator-custom.png deleted file mode 100644 index b1183bc5..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-scrollindicator-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-scrollindicator-non-attached.png b/src/imports/controls/doc/images/qtquickcontrols2-scrollindicator-non-attached.png deleted file mode 100644 index a61e0487..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-scrollindicator-non-attached.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-scrollindicator.gif b/src/imports/controls/doc/images/qtquickcontrols2-scrollindicator.gif deleted file mode 100644 index 73007820..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-scrollindicator.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-scrollview-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-scrollview-custom.png deleted file mode 100644 index 8f4bd928..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-scrollview-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-scrollview-wireframe.png b/src/imports/controls/doc/images/qtquickcontrols2-scrollview-wireframe.png deleted file mode 100644 index 8a39056a..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-scrollview-wireframe.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-scrollview.png b/src/imports/controls/doc/images/qtquickcontrols2-scrollview.png deleted file mode 100644 index 1a4039e1..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-scrollview.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-slider-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-slider-custom.png deleted file mode 100644 index dbbacb34..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-slider-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-slider-handle.png b/src/imports/controls/doc/images/qtquickcontrols2-slider-handle.png deleted file mode 100644 index 5450d574..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-slider-handle.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-slider-nosnap.gif b/src/imports/controls/doc/images/qtquickcontrols2-slider-nosnap.gif deleted file mode 100644 index ab233c5b..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-slider-nosnap.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-slider-snapalways.gif b/src/imports/controls/doc/images/qtquickcontrols2-slider-snapalways.gif deleted file mode 100644 index 8eb4011f..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-slider-snapalways.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-slider-snaponrelease.gif b/src/imports/controls/doc/images/qtquickcontrols2-slider-snaponrelease.gif deleted file mode 100644 index f3b1d5c7..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-slider-snaponrelease.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-slider.gif b/src/imports/controls/doc/images/qtquickcontrols2-slider.gif deleted file mode 100644 index 2ee56334..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-slider.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-spinbox-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-spinbox-custom.png deleted file mode 100644 index d1e883fc..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-spinbox-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-spinbox-double.png b/src/imports/controls/doc/images/qtquickcontrols2-spinbox-double.png deleted file mode 100644 index d3f5876c..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-spinbox-double.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-spinbox-down.png b/src/imports/controls/doc/images/qtquickcontrols2-spinbox-down.png deleted file mode 100644 index 1d5dcf7b..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-spinbox-down.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-spinbox-textual.png b/src/imports/controls/doc/images/qtquickcontrols2-spinbox-textual.png deleted file mode 100644 index 5513d6e6..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-spinbox-textual.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-spinbox-up.png b/src/imports/controls/doc/images/qtquickcontrols2-spinbox-up.png deleted file mode 100644 index 1ee1c479..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-spinbox-up.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-spinbox.png b/src/imports/controls/doc/images/qtquickcontrols2-spinbox.png deleted file mode 100644 index 835bb1d6..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-spinbox.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-splitview-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-splitview-custom.png deleted file mode 100644 index da820cca..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-splitview-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-stackview-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-stackview-custom.png deleted file mode 100644 index 5ee6049e..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-stackview-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-stackview-pop.gif b/src/imports/controls/doc/images/qtquickcontrols2-stackview-pop.gif deleted file mode 100644 index 1971c2e0..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-stackview-pop.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-stackview-push.gif b/src/imports/controls/doc/images/qtquickcontrols2-stackview-push.gif deleted file mode 100644 index 0218cc0f..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-stackview-push.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-stackview-replace.gif b/src/imports/controls/doc/images/qtquickcontrols2-stackview-replace.gif deleted file mode 100644 index 63a6b2b4..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-stackview-replace.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-stackview-unwind.gif b/src/imports/controls/doc/images/qtquickcontrols2-stackview-unwind.gif deleted file mode 100644 index 28c051d8..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-stackview-unwind.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-stackview-visible.png b/src/imports/controls/doc/images/qtquickcontrols2-stackview-visible.png deleted file mode 100644 index d937b417..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-stackview-visible.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-stackview-wireframe.png b/src/imports/controls/doc/images/qtquickcontrols2-stackview-wireframe.png deleted file mode 100644 index f28b5c67..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-stackview-wireframe.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-styles.png b/src/imports/controls/doc/images/qtquickcontrols2-styles.png deleted file mode 100644 index 992dd47e..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-styles.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-swipedelegate-behind.gif b/src/imports/controls/doc/images/qtquickcontrols2-swipedelegate-behind.gif deleted file mode 100644 index 97d6a592..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-swipedelegate-behind.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-swipedelegate-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-swipedelegate-custom.png deleted file mode 100644 index 5813b73c..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-swipedelegate-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-swipedelegate-leading-trailing.gif b/src/imports/controls/doc/images/qtquickcontrols2-swipedelegate-leading-trailing.gif deleted file mode 100644 index 0641bd14..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-swipedelegate-leading-trailing.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-swipedelegate.gif b/src/imports/controls/doc/images/qtquickcontrols2-swipedelegate.gif deleted file mode 100644 index 86c380b7..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-swipedelegate.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-swipeview-indicator.png b/src/imports/controls/doc/images/qtquickcontrols2-swipeview-indicator.png deleted file mode 100644 index 998ec9f7..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-swipeview-indicator.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-swipeview-wireframe.png b/src/imports/controls/doc/images/qtquickcontrols2-swipeview-wireframe.png deleted file mode 100644 index 3cc2b83c..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-swipeview-wireframe.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-swipeview.gif b/src/imports/controls/doc/images/qtquickcontrols2-swipeview.gif deleted file mode 100644 index 4af26c10..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-swipeview.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-switch-checked.png b/src/imports/controls/doc/images/qtquickcontrols2-switch-checked.png deleted file mode 100644 index 7a0cde1b..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-switch-checked.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-switch-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-switch-custom.png deleted file mode 100644 index 6d535ef9..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-switch-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-switch.gif b/src/imports/controls/doc/images/qtquickcontrols2-switch.gif deleted file mode 100644 index 5f956304..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-switch.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-switch.png b/src/imports/controls/doc/images/qtquickcontrols2-switch.png deleted file mode 100644 index 7f613f33..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-switch.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-switchdelegate-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-switchdelegate-custom.png deleted file mode 100644 index f5337e2c..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-switchdelegate-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-switchdelegate.gif b/src/imports/controls/doc/images/qtquickcontrols2-switchdelegate.gif deleted file mode 100644 index 950b1073..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-switchdelegate.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-tabbar-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-tabbar-custom.png deleted file mode 100644 index 8c8e4acc..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-tabbar-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-tabbar-explicit.png b/src/imports/controls/doc/images/qtquickcontrols2-tabbar-explicit.png deleted file mode 100644 index b1de5f71..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-tabbar-explicit.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-tabbar-flickable.png b/src/imports/controls/doc/images/qtquickcontrols2-tabbar-flickable.png deleted file mode 100644 index 0c253f82..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-tabbar-flickable.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-tabbar-wireframe.png b/src/imports/controls/doc/images/qtquickcontrols2-tabbar-wireframe.png deleted file mode 100644 index 35a64ae2..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-tabbar-wireframe.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-tabbar.gif b/src/imports/controls/doc/images/qtquickcontrols2-tabbar.gif deleted file mode 100644 index 31db1f9e..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-tabbar.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-tabbar.png b/src/imports/controls/doc/images/qtquickcontrols2-tabbar.png deleted file mode 100644 index 9f113497..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-tabbar.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-tabbutton.png b/src/imports/controls/doc/images/qtquickcontrols2-tabbutton.png deleted file mode 100644 index 3df2f531..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-tabbutton.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-textarea-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-textarea-custom.png deleted file mode 100644 index 6220a13f..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-textarea-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-textarea-scrollable.png b/src/imports/controls/doc/images/qtquickcontrols2-textarea-scrollable.png deleted file mode 100644 index ae868a27..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-textarea-scrollable.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-textarea.png b/src/imports/controls/doc/images/qtquickcontrols2-textarea.png deleted file mode 100644 index fc221bd7..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-textarea.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-textfield-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-textfield-custom.png deleted file mode 100644 index 91023170..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-textfield-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-textfield-disabled.png b/src/imports/controls/doc/images/qtquickcontrols2-textfield-disabled.png deleted file mode 100644 index b143d210..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-textfield-disabled.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-textfield-focused.png b/src/imports/controls/doc/images/qtquickcontrols2-textfield-focused.png deleted file mode 100644 index de7f9599..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-textfield-focused.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-textfield-normal.png b/src/imports/controls/doc/images/qtquickcontrols2-textfield-normal.png deleted file mode 100644 index 4229c706..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-textfield-normal.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-textfield.png b/src/imports/controls/doc/images/qtquickcontrols2-textfield.png deleted file mode 100644 index a008383a..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-textfield.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-toolbar-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-toolbar-custom.png deleted file mode 100644 index 425e5f8c..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-toolbar-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-toolbar.png b/src/imports/controls/doc/images/qtquickcontrols2-toolbar.png deleted file mode 100644 index e5a33eee..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-toolbar.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-toolbutton-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-toolbutton-custom.png deleted file mode 100644 index b78269d0..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-toolbutton-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-toolbutton.png b/src/imports/controls/doc/images/qtquickcontrols2-toolbutton.png deleted file mode 100644 index 610c1a7c..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-toolbutton.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-toolseparator-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-toolseparator-custom.png deleted file mode 100644 index 6703eeba..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-toolseparator-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-toolseparator.png b/src/imports/controls/doc/images/qtquickcontrols2-toolseparator.png deleted file mode 100644 index 88ced123..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-toolseparator.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-tooltip-delay.png b/src/imports/controls/doc/images/qtquickcontrols2-tooltip-delay.png deleted file mode 100644 index 59813835..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-tooltip-delay.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-tooltip-hover.png b/src/imports/controls/doc/images/qtquickcontrols2-tooltip-hover.png deleted file mode 100644 index 62a9cf84..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-tooltip-hover.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-tooltip-pressandhold.png b/src/imports/controls/doc/images/qtquickcontrols2-tooltip-pressandhold.png deleted file mode 100644 index 62a9cf84..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-tooltip-pressandhold.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-tooltip-slider.png b/src/imports/controls/doc/images/qtquickcontrols2-tooltip-slider.png deleted file mode 100644 index a15e723a..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-tooltip-slider.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-tooltip.png b/src/imports/controls/doc/images/qtquickcontrols2-tooltip.png deleted file mode 100644 index 4238d52a..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-tooltip.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-tumbler-custom.png b/src/imports/controls/doc/images/qtquickcontrols2-tumbler-custom.png deleted file mode 100644 index bbfa9b0c..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-tumbler-custom.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-tumbler-delegate.png b/src/imports/controls/doc/images/qtquickcontrols2-tumbler-delegate.png deleted file mode 100644 index a28da93e..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-tumbler-delegate.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-tumbler-wrap.gif b/src/imports/controls/doc/images/qtquickcontrols2-tumbler-wrap.gif deleted file mode 100644 index 8f59eedc..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-tumbler-wrap.gif and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-tumbler.png b/src/imports/controls/doc/images/qtquickcontrols2-tumbler.png deleted file mode 100644 index 38339dfa..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-tumbler.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-universal-accent.png b/src/imports/controls/doc/images/qtquickcontrols2-universal-accent.png deleted file mode 100644 index e1d74f7a..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-universal-accent.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-universal-attributes.png b/src/imports/controls/doc/images/qtquickcontrols2-universal-attributes.png deleted file mode 100644 index 7a7ef347..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-universal-attributes.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-universal-background.png b/src/imports/controls/doc/images/qtquickcontrols2-universal-background.png deleted file mode 100644 index 4f1bfbd2..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-universal-background.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-universal-button.png b/src/imports/controls/doc/images/qtquickcontrols2-universal-button.png deleted file mode 100644 index 6c764ec9..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-universal-button.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-universal-dark.png b/src/imports/controls/doc/images/qtquickcontrols2-universal-dark.png deleted file mode 100644 index 952651dc..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-universal-dark.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-universal-foreground.png b/src/imports/controls/doc/images/qtquickcontrols2-universal-foreground.png deleted file mode 100644 index b0ecf23a..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-universal-foreground.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-universal-light.png b/src/imports/controls/doc/images/qtquickcontrols2-universal-light.png deleted file mode 100644 index e65447a4..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-universal-light.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-universal-theme.png b/src/imports/controls/doc/images/qtquickcontrols2-universal-theme.png deleted file mode 100644 index d1281346..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-universal-theme.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-universal-thumbnail.png b/src/imports/controls/doc/images/qtquickcontrols2-universal-thumbnail.png deleted file mode 100644 index db7fe5b0..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-universal-thumbnail.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-universal-violet.png b/src/imports/controls/doc/images/qtquickcontrols2-universal-violet.png deleted file mode 100644 index ec459457..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-universal-violet.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-windows-thumbnail.png b/src/imports/controls/doc/images/qtquickcontrols2-windows-thumbnail.png deleted file mode 100644 index 15408d3b..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-windows-thumbnail.png and /dev/null differ diff --git a/src/imports/controls/doc/images/qtquickcontrols2-windows.png b/src/imports/controls/doc/images/qtquickcontrols2-windows.png deleted file mode 100644 index 324a0341..00000000 Binary files a/src/imports/controls/doc/images/qtquickcontrols2-windows.png and /dev/null differ diff --git a/src/imports/controls/doc/manifest-meta.qdocconf b/src/imports/controls/doc/manifest-meta.qdocconf deleted file mode 100644 index 30400da5..00000000 --- a/src/imports/controls/doc/manifest-meta.qdocconf +++ /dev/null @@ -1,31 +0,0 @@ -# Additional meta information (attributes for matched entries, as well as tags) -# to be added to manifest.xml files. -# -# manifestmeta.filters = ,,... -# -# manifestmeta..names = /,/,.. -# manifestmeta..attributes = ,,.. -# manifestmeta..tags = ,,.. -# -# .names specify all the module/name combinations to apply the -# attributes/tags to. You can use simple wildcard matching by appending -# '*' at the end of name. -# -# Note: You cannot use operators (+, =, -) in the names. -# -# Examples: add a 'isHighlighted' attribute for two 'Analog Clock' examples, -# add a 'database' tag for QtSql examples, and a 'qt5' tag for all examples -# -# manifestmeta.filters = highlighted sql global -# -# manifestmeta.highlighted.names = "QtGui/Analog Clock Window Example" \ -# "QtWidgets/Analog Clock Example" -# manifestmeta.highlighted.attributes = isHighlighted:true -# -# manifestmeta.sql.names = "QtSql/*" -# manifestmeta.sql.tags = database -# -# manifestmeta.global.names = * -# manifestmeta.global.tags = qt5 - -manifestmeta.highlighted.names = "QtQuickControls/Qt Quick Controls - Gallery" diff --git a/src/imports/controls/doc/qtquickcontrols.qdocconf b/src/imports/controls/doc/qtquickcontrols.qdocconf deleted file mode 100644 index b90be4e2..00000000 --- a/src/imports/controls/doc/qtquickcontrols.qdocconf +++ /dev/null @@ -1,104 +0,0 @@ -include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf) -include($QT_INSTALL_DOCS/config/exampleurl-qtquickcontrols2.qdocconf) -include(manifest-meta.qdocconf) - -moduleheader = QtQuickControls2 - -project = QtQuickControls -description = Qt Quick Controls Reference Documentation -version = $QT_VERSION - -qhp.projects = QtQuickControls - -qhp.QtQuickControls.file = qtquickcontrols.qhp -qhp.QtQuickControls.namespace = org.qt-project.qtquickcontrols.$QT_VERSION_TAG -qhp.QtQuickControls.virtualFolder = qtquickcontrols -qhp.QtQuickControls.indexTitle = Qt Quick Controls -qhp.QtQuickControls.indexRoot = - -qhp.QtQuickControls.filterAttributes = qtquickcontrols $QT_VERSION qtrefdoc -qhp.QtQuickControls.customFilters.Qt.name = QtQuickControls $QT_VERSION -qhp.QtQuickControls.customFilters.Qt.filterAttributes = qtquickcontrols $QT_VERSION - -qhp.QtQuickControls.subprojects = qmltypes classes examples -qhp.QtQuickControls.subprojects.qmltypes.title = QML Types -qhp.QtQuickControls.subprojects.qmltypes.indexTitle = Qt Quick Controls QML Types -qhp.QtQuickControls.subprojects.qmltypes.selectors = qmlclass -qhp.QtQuickControls.subprojects.qmltypes.sortPages = true -qhp.QtQuickControls.subprojects.classes.title = C++ Classes -qhp.QtQuickControls.subprojects.classes.indexTitle = Qt Quick Controls C++ Classes -qhp.QtQuickControls.subprojects.classes.selectors = class fake:headerfile -qhp.QtQuickControls.subprojects.classes.sortPages = true -qhp.QtQuickControls.subprojects.examples.title = Examples -qhp.QtQuickControls.subprojects.examples.indexTitle = Qt Quick Controls Examples -qhp.QtQuickControls.subprojects.examples.selectors = fake:example - -depends = qtcore qtgui qtdoc qtqml qtqmlmodels qtquick qtsql qtwidgets qtlabsplatform qmake qtcmake - -# Specify the install path under QT_INSTALL_EXAMPLES -# Note: paths passed to \example command must contain the parent directory, e.g. -# \example controls/tabs -exampledirs += ../../../../examples/quickcontrols2 \ - ../../../quicktemplates2 \ - snippets - -examples.fileextensions += "*.conf" - -examplesinstallpath = quickcontrols2 - -headerdirs += ../../../quicktemplates2 \ - ../../../quickcontrols2 - -sourcedirs += ../../../quicktemplates2 \ - ../../../quickcontrols2 \ - ../../templates/doc/src \ - src - -# Exclude .qml files from the doc build to prevent conflicts with .qml files -# in style-specific directories; all types are documented in .cpp/.qdoc files -sources.fileextensions = "*.c++ *.cc *.cpp *.cxx *.mm *.qdoc" - -imagedirs += images \ - .. - -navigation.landingpage = "Qt Quick Controls" -navigation.qmltypespage = "Qt Quick Controls QML Types" -navigation.cppclassespage = "Qt Quick Controls C++ Classes" - -tagfile = qtquickcontrols.tags - -# \styleimport {QtQuick.Controls.Universal 2.0} -macro.styleimport.HTML = "
Import Statement: import \1
Since: \2
" - -# \styleproperty {Universal.accent} {enumeration} {html-target-id} -# \target html-target-id -# This property holds ... -# (empty line) -# \endstyleproperty -macro.styleproperty.HTML = "

\1 : \2

" -macro.endstyleproperty = "\\br" - -# \stylemethod {returntype} {methodname} {argtype} {argname} {html-target-id} -# \target html-target-id -# This property holds ... -# (empty line) -# \endstylemethod -macro.stylemethod.HTML = "

\1 \2(\3 \4)

" -macro.endstylemethod = "\\br" - -# \stylemethod2 {returntype} {methodname} {arg1type} {arg1name} {arg2type} {arg2name} {html-target-id} -# \target html-target-id -# This method returns ... -# (empty line) -# \endstylemethod2 -macro.stylemethod2.HTML = "

\1 \2(\3 \4, \5 \6)

" -macro.endstylemethod2 = "\\br" - -# \stylecolor {#6A00FF} {(default)} -macro.stylecolor.HTML = "
\1 \2
" - -macro.nbsp.HTML = " " - -#Add output suffix to the html filenames -outputsuffixes = QML -outputsuffixes.QML = 2 diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-action.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-action.qml deleted file mode 100644 index 1b65a824..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-action.qml +++ /dev/null @@ -1,56 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -Item { - //! [action] - Action { - id: copyAction - text: qsTr("&Copy") - icon.name: "edit-copy" - shortcut: StandardKey.Copy - onTriggered: window.activeFocusItem.copy() - } - //! [action] - - //! [toolbutton] - ToolButton { - id: toolButton - action: copyAction - } - //! [toolbutton] - - //! [menuitem] - MenuItem { - id: menuItem - action: copyAction - text: qsTr("&Copy selected Text") - } - //! [menuitem] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-busyindicator-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-busyindicator-custom.qml deleted file mode 100644 index 8daffed7..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-busyindicator-custom.qml +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -BusyIndicator { - id: control - - contentItem: Item { - implicitWidth: 64 - implicitHeight: 64 - - Item { - id: item - x: parent.width / 2 - 32 - y: parent.height / 2 - 32 - width: 64 - height: 64 - opacity: control.running ? 1 : 0 - - Behavior on opacity { - OpacityAnimator { - duration: 250 - } - } - - RotationAnimator { - target: item - running: control.visible && control.running - from: 0 - to: 360 - loops: Animation.Infinite - duration: 1250 - } - - Repeater { - id: repeater - model: 6 - - Rectangle { - x: item.width / 2 - width / 2 - y: item.height / 2 - height / 2 - implicitWidth: 10 - implicitHeight: 10 - radius: 5 - color: "#21be2b" - transform: [ - Translate { - y: -Math.min(item.width, item.height) * 0.5 + 5 - }, - Rotation { - angle: index / repeater.count * 360 - origin.x: 5 - origin.y: 5 - } - ] - } - } - } - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-button-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-button-custom.qml deleted file mode 100644 index 095657b5..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-button-custom.qml +++ /dev/null @@ -1,55 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -Button { - id: control - text: qsTr("Button") - - contentItem: Text { - text: control.text - font: control.font - opacity: enabled ? 1.0 : 0.3 - color: control.down ? "#17a81a" : "#21be2b" - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - elide: Text.ElideRight - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 40 - opacity: enabled ? 1 : 0.3 - border.color: control.down ? "#17a81a" : "#21be2b" - border.width: 1 - radius: 2 - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-button-icononly.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-button-icononly.qml deleted file mode 100644 index d7400005..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-button-icononly.qml +++ /dev/null @@ -1,34 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -Button { - icon.source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png" - display: Button.IconOnly -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-button-textbesideicon.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-button-textbesideicon.qml deleted file mode 100644 index 3e2aa619..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-button-textbesideicon.qml +++ /dev/null @@ -1,35 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -Button { - text: "Button" - icon.source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png" - display: Button.TextBesideIcon -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-button-textonly.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-button-textonly.qml deleted file mode 100644 index 59054f77..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-button-textonly.qml +++ /dev/null @@ -1,34 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -Button { - text: "Button" - display: Button.TextOnly -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-checkbox-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-checkbox-custom.qml deleted file mode 100644 index 93ebe46d..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-checkbox-custom.qml +++ /dev/null @@ -1,65 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -CheckBox { - id: control - text: qsTr("CheckBox") - checked: true - - indicator: Rectangle { - implicitWidth: 26 - implicitHeight: 26 - x: control.leftPadding - y: parent.height / 2 - height / 2 - radius: 3 - border.color: control.down ? "#17a81a" : "#21be2b" - - Rectangle { - width: 14 - height: 14 - x: 6 - y: 6 - radius: 2 - color: control.down ? "#17a81a" : "#21be2b" - visible: control.checked - } - } - - contentItem: Text { - text: control.text - font: control.font - opacity: enabled ? 1.0 : 0.3 - color: control.down ? "#17a81a" : "#21be2b" - verticalAlignment: Text.AlignVCenter - leftPadding: control.indicator.width + control.spacing - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-checkbox-group.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-checkbox-group.qml deleted file mode 100644 index c5032165..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-checkbox-group.qml +++ /dev/null @@ -1,58 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [1] -Column { - ButtonGroup { - id: childGroup - exclusive: false - checkState: parentBox.checkState - } - - CheckBox { - id: parentBox - text: qsTr("Parent") - checkState: childGroup.checkState - } - - CheckBox { - checked: true - text: qsTr("Child 1") - leftPadding: indicator.width - ButtonGroup.group: childGroup - } - - CheckBox { - text: qsTr("Child 2") - leftPadding: indicator.width - ButtonGroup.group: childGroup - } -} -//! [1] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-checkdelegate-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-checkdelegate-custom.qml deleted file mode 100644 index 91970f52..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-checkdelegate-custom.qml +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -CheckDelegate { - id: control - text: qsTr("CheckDelegate") - checked: true - - contentItem: Text { - rightPadding: control.indicator.width + control.spacing - text: control.text - font: control.font - opacity: enabled ? 1.0 : 0.3 - color: control.down ? "#17a81a" : "#21be2b" - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } - - indicator: Rectangle { - implicitWidth: 26 - implicitHeight: 26 - x: control.width - width - control.rightPadding - y: control.topPadding + control.availableHeight / 2 - height / 2 - radius: 3 - color: "transparent" - border.color: control.down ? "#17a81a" : "#21be2b" - - Rectangle { - width: 14 - height: 14 - x: 6 - y: 6 - radius: 2 - color: control.down ? "#17a81a" : "#21be2b" - visible: control.checked - } - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 40 - visible: control.down || control.highlighted - color: control.down ? "#bdbebf" : "#eeeeee" - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-combobox-accepted.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-combobox-accepted.qml deleted file mode 100644 index b420e3a5..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-combobox-accepted.qml +++ /dev/null @@ -1,45 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2019 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [combobox] -ComboBox { - editable: true - model: ListModel { - id: model - ListElement { text: "Banana" } - ListElement { text: "Apple" } - ListElement { text: "Coconut" } - } - onAccepted: { - if (find(editText) === -1) - model.append({text: editText}) - } -} -//! [combobox] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-combobox-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-combobox-custom.qml deleted file mode 100644 index fea7e6d5..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-combobox-custom.qml +++ /dev/null @@ -1,112 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -ComboBox { - id: control - model: ["First", "Second", "Third"] - - delegate: ItemDelegate { - width: control.width - contentItem: Text { - text: modelData - color: "#21be2b" - font: control.font - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } - highlighted: control.highlightedIndex === index - } - - indicator: Canvas { - id: canvas - x: control.width - width - control.rightPadding - y: control.topPadding + (control.availableHeight - height) / 2 - width: 12 - height: 8 - contextType: "2d" - - Connections { - target: control - function onPressedChanged() { canvas.requestPaint(); } - } - - onPaint: { - context.reset(); - context.moveTo(0, 0); - context.lineTo(width, 0); - context.lineTo(width / 2, height); - context.closePath(); - context.fillStyle = control.pressed ? "#17a81a" : "#21be2b"; - context.fill(); - } - } - - contentItem: Text { - leftPadding: 0 - rightPadding: control.indicator.width + control.spacing - - text: control.displayText - font: control.font - color: control.pressed ? "#17a81a" : "#21be2b" - verticalAlignment: Text.AlignVCenter - elide: Text.ElideRight - } - - background: Rectangle { - implicitWidth: 120 - implicitHeight: 40 - border.color: control.pressed ? "#17a81a" : "#21be2b" - border.width: control.visualFocus ? 2 : 1 - radius: 2 - } - - popup: Popup { - y: control.height - 1 - width: control.width - implicitHeight: contentItem.implicitHeight - padding: 1 - - contentItem: ListView { - clip: true - implicitHeight: contentHeight - model: control.popup.visible ? control.delegateModel : null - currentIndex: control.highlightedIndex - - ScrollIndicator.vertical: ScrollIndicator { } - } - - background: Rectangle { - border.color: "#21be2b" - radius: 2 - } - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-combobox-valuerole.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-combobox-valuerole.qml deleted file mode 100644 index a4c40c0f..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-combobox-valuerole.qml +++ /dev/null @@ -1,58 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2019 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [file] -ApplicationWindow { - width: 640 - height: 480 - visible: true - - // Used as an example of a backend - this would usually be - // e.g. a C++ type exposed to QML. - QtObject { - id: backend - property int modifier - } - - ComboBox { - textRole: "text" - valueRole: "value" - // When an item is selected, update the backend. - onActivated: backend.modifier = currentValue - // Set the initial currentIndex to the value stored in the backend. - Component.onCompleted: currentIndex = indexOfValue(backend.modifier) - model: [ - { value: Qt.NoModifier, text: qsTr("No modifier") }, - { value: Qt.ShiftModifier, text: qsTr("Shift") }, - { value: Qt.ControlModifier, text: qsTr("Control") } - ] - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-delaybutton-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-delaybutton-custom.qml deleted file mode 100644 index 0b86f1d0..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-delaybutton-custom.qml +++ /dev/null @@ -1,82 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -DelayButton { - id: control - checked: true - text: qsTr("Delay\nButton") - - contentItem: Text { - text: control.text - font: control.font - opacity: enabled ? 1.0 : 0.3 - color: "white" - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - elide: Text.ElideRight - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 100 - opacity: enabled ? 1 : 0.3 - color: control.down ? "#17a81a" : "#21be2b" - radius: size / 2 - - readonly property real size: Math.min(control.width, control.height) - width: size - height: size - anchors.centerIn: parent - - Canvas { - id: canvas - anchors.fill: parent - - Connections { - target: control - function onProgressChanged() { canvas.requestPaint(); } - } - - onPaint: { - var ctx = getContext("2d") - ctx.clearRect(0, 0, width, height) - ctx.strokeStyle = "white" - ctx.lineWidth = parent.size / 20 - ctx.beginPath() - var startAngle = Math.PI / 5 * 3 - var endAngle = startAngle + control.progress * Math.PI / 5 * 9 - ctx.arc(width / 2, height / 2, width / 2 - ctx.lineWidth / 2 - 2, startAngle, endAngle) - ctx.stroke() - } - } - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-dial-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-dial-custom.qml deleted file mode 100644 index 170e9ccf..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-dial-custom.qml +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -Dial { - id: control - background: Rectangle { - x: control.width / 2 - width / 2 - y: control.height / 2 - height / 2 - width: Math.max(64, Math.min(control.width, control.height)) - height: width - color: "transparent" - radius: width / 2 - border.color: control.pressed ? "#17a81a" : "#21be2b" - opacity: control.enabled ? 1 : 0.3 - } - - handle: Rectangle { - id: handleItem - x: control.background.x + control.background.width / 2 - width / 2 - y: control.background.y + control.background.height / 2 - height / 2 - width: 16 - height: 16 - color: control.pressed ? "#17a81a" : "#21be2b" - radius: 8 - antialiasing: true - opacity: control.enabled ? 1 : 0.3 - transform: [ - Translate { - y: -Math.min(control.background.width, control.background.height) * 0.4 + handleItem.height / 2 - }, - Rotation { - angle: control.angle - origin.x: handleItem.width / 2 - origin.y: handleItem.height / 2 - } - ] - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-dialog-modal.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-dialog-modal.qml deleted file mode 100644 index d60e4e30..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-dialog-modal.qml +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -Item { - width: dialog.implicitWidth - height: dialog.implicitHeight -//! [1] -Dialog { - id: dialog - modal: true - standardButtons: Dialog.Ok -} -//! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-dialog-modeless.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-dialog-modeless.qml deleted file mode 100644 index 6acb74e5..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-dialog-modeless.qml +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -Item { - width: dialog.implicitWidth - height: dialog.implicitHeight -//! [1] -Dialog { - id: dialog - modal: false - standardButtons: Dialog.Ok -} -//! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-dialog.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-dialog.qml deleted file mode 100644 index 13fbb0e8..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-dialog.qml +++ /dev/null @@ -1,44 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -Item { - width: dialog.implicitWidth - height: dialog.implicitHeight -//! [1] -Dialog { - id: dialog - title: "Title" - standardButtons: Dialog.Ok | Dialog.Cancel - - onAccepted: console.log("Ok clicked") - onRejected: console.log("Cancel clicked") -} -//! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-dialogbuttonbox-attached.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-dialogbuttonbox-attached.qml deleted file mode 100644 index 45a0b9e9..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-dialogbuttonbox-attached.qml +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [1] -DialogButtonBox { - Button { - text: qsTr("Save") - DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole - } - Button { - text: qsTr("Close") - DialogButtonBox.buttonRole: DialogButtonBox.DestructiveRole - } -} -//! [1] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-dialogbuttonbox.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-dialogbuttonbox.qml deleted file mode 100644 index bcfd405b..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-dialogbuttonbox.qml +++ /dev/null @@ -1,38 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [1] -DialogButtonBox { - standardButtons: DialogButtonBox.Ok | DialogButtonBox.Cancel - - onAccepted: console.log("Ok clicked") - onRejected: console.log("Cancel clicked") -} -//! [1] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-frame-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-frame-custom.qml deleted file mode 100644 index 798f95da..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-frame-custom.qml +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -Frame { - background: Rectangle { - color: "transparent" - border.color: "#21be2b" - radius: 2 - } - - Label { - text: qsTr("Content goes here!") - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-frame.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-frame.qml deleted file mode 100644 index 71b9b310..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-frame.qml +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Layouts -import QtQuick.Controls - -//! [1] -Frame { - ColumnLayout { - anchors.fill: parent - CheckBox { text: qsTr("E-mail") } - CheckBox { text: qsTr("Calendar") } - CheckBox { text: qsTr("Contacts") } - } -} -//! [1] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-groupbox-checkable.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-groupbox-checkable.qml deleted file mode 100644 index 91689d9f..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-groupbox-checkable.qml +++ /dev/null @@ -1,48 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Layouts -import QtQuick.Controls - -//! [1] -GroupBox { - label: CheckBox { - id: checkBox - checked: true - text: qsTr("Synchronize") - } - - ColumnLayout { - anchors.fill: parent - enabled: checkBox.checked - CheckBox { text: qsTr("E-mail") } - CheckBox { text: qsTr("Calendar") } - CheckBox { text: qsTr("Contacts") } - } -} -//! [1] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-groupbox-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-groupbox-custom.qml deleted file mode 100644 index e3355b23..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-groupbox-custom.qml +++ /dev/null @@ -1,57 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -GroupBox { - id: control - title: qsTr("GroupBox") - - background: Rectangle { - y: control.topPadding - control.bottomPadding - width: parent.width - height: parent.height - control.topPadding + control.bottomPadding - color: "transparent" - border.color: "#21be2b" - radius: 2 - } - - label: Label { - x: control.leftPadding - width: control.availableWidth - text: control.title - color: "#21be2b" - elide: Text.ElideRight - } - - Label { - text: qsTr("Content goes here!") - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-groupbox.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-groupbox.qml deleted file mode 100644 index e9f1c7dc..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-groupbox.qml +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Layouts -import QtQuick.Controls - -//! [1] -GroupBox { - title: qsTr("Synchronize") - ColumnLayout { - anchors.fill: parent - CheckBox { text: qsTr("E-mail") } - CheckBox { text: qsTr("Calendar") } - CheckBox { text: qsTr("Contacts") } - } -} -//! [1] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-headerview-simple.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-headerview-simple.qml deleted file mode 100644 index 6878904f..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-headerview-simple.qml +++ /dev/null @@ -1,119 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** BSD License Usage -** Alternatively, you may use this file under the terms of the BSD license -** as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of The Qt Company Ltd nor the names of its -** contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//![file] -import QtQuick -import QtQuick.Controls -import Qt.labs.qmlmodels - -ApplicationWindow { - visible: true - width: 640 - height: 480 - - //! [horizontal] - HorizontalHeaderView { - id: horizontalHeader - syncView: tableView - anchors.left: tableView.left - } - //! [horizontal] - - //! [vertical] - VerticalHeaderView { - id: verticalHeader - syncView: tableView - anchors.top: tableView.top - } - //! [vertical] - - TableView { - id: tableView - anchors.fill: parent - anchors.topMargin: horizontalHeader.height - anchors.leftMargin: verticalHeader.width - columnSpacing: 1 - rowSpacing: 1 - clip: true - - model: TableModel { - TableModelColumn { display: "name" } - TableModelColumn { display: "color" } - - rows: [ - { - "name": "cat", - "color": "black" - }, - { - "name": "dog", - "color": "brown" - }, - { - "name": "bird", - "color": "white" - } - ] - } - - delegate: Rectangle { - implicitWidth: 100 - implicitHeight: 50 - border.width: 1 - - Text { - text: display - anchors.centerIn: parent - } - } - } -} - -//![file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-itemdelegate-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-itemdelegate-custom.qml deleted file mode 100644 index fd52b46f..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-itemdelegate-custom.qml +++ /dev/null @@ -1,59 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -ItemDelegate { - id: control - text: qsTr("ItemDelegate") - - contentItem: Text { - rightPadding: control.spacing - text: control.text - font: control.font - color: control.enabled ? (control.down ? "#17a81a" : "#21be2b") : "#bdbebf" - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 40 - opacity: enabled ? 1 : 0.3 - color: control.down ? "#dddedf" : "#eeeeee" - - Rectangle { - width: parent.width - height: 1 - color: control.down ? "#17a81a" : "#21be2b" - anchors.bottom: parent.bottom - } - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-itemdelegate.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-itemdelegate.qml deleted file mode 100644 index 70d6104f..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-itemdelegate.qml +++ /dev/null @@ -1,46 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [1] -ListView { - width: 160 - height: 240 - - model: Qt.fontFamilies() - - delegate: ItemDelegate { - text: modelData - width: parent.width - onClicked: console.log("clicked:", modelData) - } - - ScrollIndicator.vertical: ScrollIndicator { } -} -//! [1] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-label-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-label-custom.qml deleted file mode 100644 index cc88d00f..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-label-custom.qml +++ /dev/null @@ -1,36 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -Label { - text: qsTr("Label") - color: "#21be2b" -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-label.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-label.qml deleted file mode 100644 index c492af50..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-label.qml +++ /dev/null @@ -1,35 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [1] -Label { - text: "Label" -} -//! [1] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-material-accent.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-material-accent.qml deleted file mode 100644 index aa4c62b8..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-material-accent.qml +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Layouts -import QtQuick.Controls -import QtQuick.Controls.Material - -Pane { - padding: 4 - -//! [1] -Button { - text: qsTr("Button") - highlighted: true - Material.accent: Material.Orange -} -//! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-material-background.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-material-background.qml deleted file mode 100644 index f64e48d2..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-material-background.qml +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.Material - -Pane { - padding: 4 - -//! [1] -Button { - text: qsTr("Button") - highlighted: true - Material.background: Material.Teal -} -//! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-material-elevation.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-material-elevation.qml deleted file mode 100644 index f9e189f1..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-material-elevation.qml +++ /dev/null @@ -1,51 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.Material - -Pane { - contentWidth: 120 - contentHeight: 120 - padding: 10 - bottomPadding: 20 - -//! [1] -Pane { - width: 120 - height: 120 - - Material.elevation: 6 - - Label { - text: qsTr("I'm a card!") - anchors.centerIn: parent - } -} -//! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-material-foreground.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-material-foreground.qml deleted file mode 100644 index 070576f5..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-material-foreground.qml +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.Material - -Pane { - padding: 4 - -//! [1] -Button { - text: qsTr("Button") - Material.foreground: Material.Pink -} -//! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-material-theme.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-material-theme.qml deleted file mode 100644 index 586433c3..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-material-theme.qml +++ /dev/null @@ -1,44 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.Material - -Pane { - padding: 10 - -//! [1] -Pane { - Material.theme: Material.Dark - - Button { - text: qsTr("Button") - } -} -//! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-material-variant.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-material-variant.qml deleted file mode 100644 index 1283fb43..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-material-variant.qml +++ /dev/null @@ -1,212 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.Material -import QtQuick.Layouts - -Pane { - implicitWidth: 400 - implicitHeight: 600 - padding: 10 - - readonly property color measurementColor: "darkorange" - readonly property int barLeftMargin: 10 - readonly property int textTopMargin: 12 - - Component { - id: measurementComponent - - Rectangle { - color: measurementColor - width: 1 - height: parent.height - - Rectangle { - width: 5 - height: 1 - color: measurementColor - anchors.horizontalCenter: parent.horizontalCenter - } - - Rectangle { - width: 5 - height: 1 - color: measurementColor - anchors.horizontalCenter: parent.horizontalCenter - anchors.bottom: parent.bottom - } - - Text { - x: 8 - text: parent.height - height: parent.height - color: measurementColor - verticalAlignment: Text.AlignVCenter - } - } - } - - ColumnLayout { - anchors.fill: parent - spacing: 20 - - ColumnLayout { - spacing: textTopMargin - - Button { - id: button - text: qsTr("Button") - - Loader { - sourceComponent: measurementComponent - height: parent.height - anchors.left: parent.right - anchors.leftMargin: barLeftMargin - } - - } - Text { - text: "Roboto " + button.font.pixelSize - color: measurementColor - } - } - - ColumnLayout { - spacing: textTopMargin - - ItemDelegate { - id: itemDelegate - text: qsTr("ItemDelegate") - - Loader { - sourceComponent: measurementComponent - height: parent.height - anchors.left: parent.right - anchors.leftMargin: barLeftMargin - } - - } - Text { - text: "Roboto " + itemDelegate.font.pixelSize - color: measurementColor - } - } - - ColumnLayout { - spacing: textTopMargin - - CheckDelegate { - id: checkDelegate - text: qsTr("CheckDelegate") - - Loader { - sourceComponent: measurementComponent - height: parent.height - anchors.left: parent.right - anchors.leftMargin: barLeftMargin - } - - } - Text { - text: "Roboto " + checkDelegate.font.pixelSize - color: measurementColor - } - } - - ColumnLayout { - spacing: textTopMargin - - RadioDelegate { - id: radioDelegate - text: qsTr("RadioDelegate") - - Loader { - sourceComponent: measurementComponent - height: parent.height - anchors.left: parent.right - anchors.leftMargin: barLeftMargin - } - - } - Text { - text: "Roboto " + radioDelegate.font.pixelSize - color: measurementColor - } - } - - ColumnLayout { - spacing: textTopMargin - - ComboBox { - id: comboBox - model: [ qsTr("ComboBox") ] - - Loader { - sourceComponent: measurementComponent - height: parent.height - anchors.left: parent.right - anchors.leftMargin: barLeftMargin - } - - } - Text { - text: "Roboto " + comboBox.font.pixelSize - color: measurementColor - } - } - - ColumnLayout { - spacing: textTopMargin - - Item { - implicitWidth: groupBox.implicitWidth - implicitHeight: groupBox.implicitHeight - - GroupBox { - id: groupBox - title: qsTr("GroupBox") - } - Loader { - sourceComponent: measurementComponent - height: parent.height - anchors.left: parent.right - anchors.leftMargin: barLeftMargin - } - } - Text { - text: "Roboto " + groupBox.font.pixelSize - color: measurementColor - } - } - - Item { - Layout.fillHeight: true - } - } -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-menu-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-menu-custom.qml deleted file mode 100644 index 3e766e8a..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-menu-custom.qml +++ /dev/null @@ -1,133 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -ApplicationWindow { - id: window - width: menu.width - height: menu.height - visible: true - - Component.onCompleted: menu.popup(menu.itemAt(1)) - -// Indent it like this so that the indenting in the generated doc is normal. -Menu { - id: menu - - Action { text: qsTr("Tool Bar"); checkable: true } - Action { text: qsTr("Side Bar"); checkable: true; checked: true } - Action { text: qsTr("Status Bar"); checkable: true; checked: true } - - MenuSeparator { - contentItem: Rectangle { - implicitWidth: 200 - implicitHeight: 1 - color: "#21be2b" - } - } - - Menu { - title: qsTr("Advanced") - // ... - } - - topPadding: 2 - bottomPadding: 2 - - delegate: MenuItem { - id: menuItem - implicitWidth: 200 - implicitHeight: 40 - - arrow: Canvas { - x: parent.width - width - implicitWidth: 40 - implicitHeight: 40 - visible: menuItem.subMenu - onPaint: { - var ctx = getContext("2d") - ctx.fillStyle = menuItem.highlighted ? "#ffffff" : "#21be2b" - ctx.moveTo(15, 15) - ctx.lineTo(width - 15, height / 2) - ctx.lineTo(15, height - 15) - ctx.closePath() - ctx.fill() - } - } - - indicator: Item { - implicitWidth: 40 - implicitHeight: 40 - Rectangle { - width: 26 - height: 26 - anchors.centerIn: parent - visible: menuItem.checkable - border.color: "#21be2b" - radius: 3 - Rectangle { - width: 14 - height: 14 - anchors.centerIn: parent - visible: menuItem.checked - color: "#21be2b" - radius: 2 - } - } - } - - contentItem: Text { - leftPadding: menuItem.indicator.width - rightPadding: menuItem.arrow.width - text: menuItem.text - font: menuItem.font - opacity: enabled ? 1.0 : 0.3 - color: menuItem.highlighted ? "#ffffff" : "#21be2b" - horizontalAlignment: Text.AlignLeft - verticalAlignment: Text.AlignVCenter - elide: Text.ElideRight - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 40 - opacity: enabled ? 1 : 0.3 - color: menuItem.highlighted ? "#21be2b" : "transparent" - } - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 40 - color: "#ffffff" - border.color: "#21be2b" - radius: 2 - } -} -} //! [eof] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-menubar-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-menubar-custom.qml deleted file mode 100644 index 4b3d641e..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-menubar-custom.qml +++ /dev/null @@ -1,84 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -ApplicationWindow { - id: window - visible: true - width: menuBar.implicitWidth - height: menuBar.height - - Component.onCompleted: menuBar.itemAt(1).highlighted = true - - header: - -// Indent it like this so that the indenting in the generated doc is normal. -MenuBar { - id: menuBar - - Menu { title: qsTr("File") } - Menu { title: qsTr("Edit") } - Menu { title: qsTr("View") } - Menu { title: qsTr("Help") } - - delegate: MenuBarItem { - id: menuBarItem - - contentItem: Text { - text: menuBarItem.text - font: menuBarItem.font - opacity: enabled ? 1.0 : 0.3 - color: menuBarItem.highlighted ? "#ffffff" : "#21be2b" - horizontalAlignment: Text.AlignLeft - verticalAlignment: Text.AlignVCenter - elide: Text.ElideRight - } - - background: Rectangle { - implicitWidth: 40 - implicitHeight: 40 - opacity: enabled ? 1 : 0.3 - color: menuBarItem.highlighted ? "#21be2b" : "transparent" - } - } - - background: Rectangle { - implicitWidth: 40 - implicitHeight: 40 - color: "#ffffff" - - Rectangle { - color: "#21be2b" - width: parent.width - height: 1 - anchors.bottom: parent.bottom - } - } -} -} //! [eof] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-menubar.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-menubar.qml deleted file mode 100644 index 7ae22ae8..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-menubar.qml +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [begin] -ApplicationWindow { - id: window - width: 320 - height: 260 - visible: true - - //! [skipfrom] - Component.onCompleted: { - menuBar.itemAt(0).triggered() - menuBar.itemAt(0).menu.itemAt(2).highlighted = true - } - //! [skipto] - - menuBar: MenuBar { - Menu { - title: qsTr("&File") - Action { text: qsTr("&New...") } - Action { text: qsTr("&Open...") } - Action { text: qsTr("&Save") } - Action { text: qsTr("Save &As...") } - MenuSeparator { } - Action { text: qsTr("&Quit") } - } - Menu { - title: qsTr("&Edit") - Action { text: qsTr("Cu&t") } - Action { text: qsTr("&Copy") } - Action { text: qsTr("&Paste") } - } - Menu { - title: qsTr("&Help") - Action { text: qsTr("&About") } - } - } -} -//! [end] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-menuseparator-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-menuseparator-custom.qml deleted file mode 100644 index fa7fa14a..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-menuseparator-custom.qml +++ /dev/null @@ -1,69 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -Item { - id: window - width: menu.contentItem.width - height: menu.contentItem.height - visible: true - -// Indent it like this so that the indenting in the generated doc is normal. -Menu { - id: menu - contentItem.parent: window - - MenuItem { - text: qsTr("New...") - } - MenuItem { - text: qsTr("Open...") - } - MenuItem { - text: qsTr("Save") - } - - MenuSeparator { - padding: 0 - topPadding: 12 - bottomPadding: 12 - contentItem: Rectangle { - implicitWidth: 200 - implicitHeight: 1 - color: "#1E000000" - } - } - - MenuItem { - text: qsTr("Exit") - } -} -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-menuseparator.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-menuseparator.qml deleted file mode 100644 index cd5d5441..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-menuseparator.qml +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -Item { - id: window - width: menu.contentItem.width - height: menu.contentItem.height - visible: true - -// Indent it like this so that the indenting in the generated doc is normal. -Menu { - id: menu - contentItem.parent: window - - MenuItem { - text: qsTr("New...") - } - MenuItem { - text: qsTr("Open...") - } - MenuItem { - text: qsTr("Save") - } - - MenuSeparator {} - - MenuItem { - text: qsTr("Exit") - } -} -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-overlay-modal.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-overlay-modal.qml deleted file mode 100644 index 9751f057..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-overlay-modal.qml +++ /dev/null @@ -1,55 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls -import QtQuick.Window - -Item { - id: root - width: 200 - height: 200 - - Binding { - target: popup - property: "visible" - value: root.Window.active - } -//! [1] -Popup { - id: popup - width: 400 - height: 400 - modal: true - visible: true - - Overlay.modal: Rectangle { - color: "#aacfdbe7" - } -} -//! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-overlay-modeless.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-overlay-modeless.qml deleted file mode 100644 index a4951d13..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-overlay-modeless.qml +++ /dev/null @@ -1,55 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls -import QtQuick.Window - -Item { - id: root - width: 200 - height: 200 - - Binding { - target: popup - property: "visible" - value: root.Window.active - } -//! [1] -Popup { - id: popup - width: 400 - height: 400 - dim: true - visible: true - - Overlay.modeless: Rectangle { - color: "#aacfdbe7" - } -} -//! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-overview.cmake b/src/imports/controls/doc/snippets/qtquickcontrols2-overview.cmake deleted file mode 100644 index 5bbbcff5..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-overview.cmake +++ /dev/null @@ -1,4 +0,0 @@ -#! [0] -find_package(Qt6 COMPONENTS QuickControls2 REQUIRED) -target_link_libraries(mytarget PRIVATE Qt6::QuickControls2) -#! [0] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-pageindicator-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-pageindicator-custom.qml deleted file mode 100644 index ba0d2db9..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-pageindicator-custom.qml +++ /dev/null @@ -1,53 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -PageIndicator { - id: control - count: 5 - currentIndex: 2 - - delegate: Rectangle { - implicitWidth: 8 - implicitHeight: 8 - - radius: width / 2 - color: "#21be2b" - - opacity: index === control.currentIndex ? 0.95 : pressed ? 0.7 : 0.45 - - Behavior on opacity { - OpacityAnimator { - duration: 100 - } - } - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-pageindicator-interactive.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-pageindicator-interactive.qml deleted file mode 100644 index 8f2221ee..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-pageindicator-interactive.qml +++ /dev/null @@ -1,58 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick.Controls - -Pane { -//! [1] -SwipeView { - id: view - currentIndex: pageIndicator.currentIndex - anchors.fill: parent - - Page { - title: qsTr("Home") - } - Page { - title: qsTr("Discover") - } - Page { - title: qsTr("Activity") - } -} - -PageIndicator { - id: pageIndicator - interactive: true - count: view.count - currentIndex: view.currentIndex - - anchors.bottom: parent.bottom - anchors.horizontalCenter: parent.horizontalCenter -} -//! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-pageindicator.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-pageindicator.qml deleted file mode 100644 index b3912efe..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-pageindicator.qml +++ /dev/null @@ -1,35 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ -import QtQuick -import QtQuick.Controls - -//! [1] -PageIndicator { - count: 5 - currentIndex: 2 -} -//! [1] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-pane-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-pane-custom.qml deleted file mode 100644 index 855423c4..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-pane-custom.qml +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -Pane { - background: Rectangle { - color: "#eeeeee" - } - - Label { - text: qsTr("Content goes here!") - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-pane.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-pane.qml deleted file mode 100644 index a8c8672e..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-pane.qml +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Layouts -import QtQuick.Controls - -//! [1] -Pane { - ColumnLayout { - anchors.fill: parent - CheckBox { text: qsTr("E-mail") } - CheckBox { text: qsTr("Calendar") } - CheckBox { text: qsTr("Contacts") } - } -} -//! [1] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-popup-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-popup-custom.qml deleted file mode 100644 index ad5481e3..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-popup-custom.qml +++ /dev/null @@ -1,53 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls -import QtQuick.Window - -Item { - id: root - width: 200 - height: 200 - - Binding { - target: popup - property: "visible" - value: root.Window.active - } -//! [1] -Popup { - id: popup - background: Rectangle { - implicitWidth: 200 - implicitHeight: 200 - border.color: "#444" - } - contentItem: Column {} -} -//! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-popup.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-popup.qml deleted file mode 100644 index 76ec20cd..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-popup.qml +++ /dev/null @@ -1,46 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -Item { -//! [centerIn] -ApplicationWindow { - id: window - // ... - - Pane { - // ... - - Popup { - anchors.centerIn: Overlay.overlay - } - } -} -//! [centerIn] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-progressbar-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-progressbar-custom.qml deleted file mode 100644 index d9616157..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-progressbar-custom.qml +++ /dev/null @@ -1,56 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -ProgressBar { - id: control - value: 0.5 - padding: 2 - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 6 - color: "#e6e6e6" - radius: 3 - } - - contentItem: Item { - implicitWidth: 200 - implicitHeight: 4 - - Rectangle { - width: control.visualPosition * parent.width - height: parent.height - radius: 2 - color: "#17a81a" - } - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-radiobutton-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-radiobutton-custom.qml deleted file mode 100644 index b33ce6b6..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-radiobutton-custom.qml +++ /dev/null @@ -1,65 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -RadioButton { - id: control - text: qsTr("RadioButton") - checked: true - - indicator: Rectangle { - implicitWidth: 26 - implicitHeight: 26 - x: control.leftPadding - y: parent.height / 2 - height / 2 - radius: 13 - border.color: control.down ? "#17a81a" : "#21be2b" - - Rectangle { - width: 14 - height: 14 - x: 6 - y: 6 - radius: 7 - color: control.down ? "#17a81a" : "#21be2b" - visible: control.checked - } - } - - contentItem: Text { - text: control.text - font: control.font - opacity: enabled ? 1.0 : 0.3 - color: control.down ? "#17a81a" : "#21be2b" - verticalAlignment: Text.AlignVCenter - leftPadding: control.indicator.width + control.spacing - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-radiodelegate-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-radiodelegate-custom.qml deleted file mode 100644 index ed3dae67..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-radiodelegate-custom.qml +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -RadioDelegate { - id: control - text: qsTr("RadioDelegate") - checked: true - - contentItem: Text { - rightPadding: control.indicator.width + control.spacing - text: control.text - font: control.font - opacity: enabled ? 1.0 : 0.3 - color: control.down ? "#17a81a" : "#21be2b" - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } - - indicator: Rectangle { - implicitWidth: 26 - implicitHeight: 26 - x: control.width - width - control.rightPadding - y: parent.height / 2 - height / 2 - radius: 13 - color: "transparent" - border.color: control.down ? "#17a81a" : "#21be2b" - - Rectangle { - width: 14 - height: 14 - x: 6 - y: 6 - radius: 7 - color: control.down ? "#17a81a" : "#21be2b" - visible: control.checked - } - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 40 - visible: control.down || control.highlighted - color: control.down ? "#bdbebf" : "#eeeeee" - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-rangeslider-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-rangeslider-custom.qml deleted file mode 100644 index fcddc400..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-rangeslider-custom.qml +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -RangeSlider { - id: control - first.value: 0.25 - second.value: 0.75 - - background: Rectangle { - x: control.leftPadding - y: control.topPadding + control.availableHeight / 2 - height / 2 - implicitWidth: 200 - implicitHeight: 4 - width: control.availableWidth - height: implicitHeight - radius: 2 - color: "#bdbebf" - - Rectangle { - x: control.first.visualPosition * parent.width - width: control.second.visualPosition * parent.width - x - height: parent.height - color: "#21be2b" - radius: 2 - } - } - - first.handle: Rectangle { - x: control.leftPadding + control.first.visualPosition * (control.availableWidth - width) - y: control.topPadding + control.availableHeight / 2 - height / 2 - implicitWidth: 26 - implicitHeight: 26 - radius: 13 - color: control.first.pressed ? "#f0f0f0" : "#f6f6f6" - border.color: "#bdbebf" - } - - second.handle: Rectangle { - x: control.leftPadding + control.second.visualPosition * (control.availableWidth - width) - y: control.topPadding + control.availableHeight / 2 - height / 2 - implicitWidth: 26 - implicitHeight: 26 - radius: 13 - color: control.second.pressed ? "#f0f0f0" : "#f6f6f6" - border.color: "#bdbebf" - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-roundbutton.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-roundbutton.qml deleted file mode 100644 index 201ee244..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-roundbutton.qml +++ /dev/null @@ -1,36 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [1] -RoundButton { - text: "\u2713" // Unicode Character 'CHECK MARK' - onClicked: textArea.readOnly = true -} -//! [1] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollbar-active.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-scrollbar-active.qml deleted file mode 100644 index bd417955..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollbar-active.qml +++ /dev/null @@ -1,46 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -Item { - width: 100 - height: 100 - - //! [1] - Flickable { - anchors.fill: parent - - contentWidth: parent.width * 2 - contentHeight: parent.height * 2 - - ScrollBar.horizontal: ScrollBar { id: hbar; active: vbar.active } - ScrollBar.vertical: ScrollBar { id: vbar; active: hbar.active } - } - //! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollbar-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-scrollbar-custom.qml deleted file mode 100644 index 0aea2572..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollbar-custom.qml +++ /dev/null @@ -1,46 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -ScrollBar { - id: control - size: 0.3 - position: 0.2 - active: true - orientation: Qt.Vertical - - contentItem: Rectangle { - implicitWidth: 6 - implicitHeight: 100 - radius: width / 2 - color: control.pressed ? "#81e889" : "#c2f4c6" - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollbar-non-attached.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-scrollbar-non-attached.qml deleted file mode 100644 index 7ca66615..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollbar-non-attached.qml +++ /dev/null @@ -1,80 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -Item { - width: 200 - height: 200 - -//! [1] -Rectangle { - id: frame - clip: true - width: 160 - height: 160 - border.color: "black" - anchors.centerIn: parent - - Text { - id: content - text: "ABC" - font.pixelSize: 160 - x: -hbar.position * width - y: -vbar.position * height - } - - ScrollBar { - id: vbar - hoverEnabled: true - active: hovered || pressed - orientation: Qt.Vertical - size: frame.height / content.height - anchors.top: parent.top - anchors.right: parent.right - anchors.bottom: parent.bottom - } - - ScrollBar { - id: hbar - hoverEnabled: true - active: hovered || pressed - orientation: Qt.Horizontal - size: frame.width / content.width - anchors.left: parent.left - anchors.right: parent.right - anchors.bottom: parent.bottom - } -} -//! [1] - -Component.onCompleted: { - hbar.active = true - vbar.active = true -} -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollbar-policy.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-scrollbar-policy.qml deleted file mode 100644 index c608dac4..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollbar-policy.qml +++ /dev/null @@ -1,38 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [1] -Flickable { - contentHeight: 2000 - ScrollBar.vertical: ScrollBar { - policy: ScrollBar.AlwaysOn - } -} -//! [1] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollindicator-active.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-scrollindicator-active.qml deleted file mode 100644 index 719b9393..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollindicator-active.qml +++ /dev/null @@ -1,46 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -Item { - width: 100 - height: 100 - - //! [1] - Flickable { - anchors.fill: parent - - contentWidth: parent.width * 2 - contentHeight: parent.height * 2 - - ScrollIndicator.horizontal: ScrollIndicator { id: hbar; active: vbar.active } - ScrollIndicator.vertical: ScrollIndicator { id: vbar; active: hbar.active } - } - //! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollindicator-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-scrollindicator-custom.qml deleted file mode 100644 index b18d391c..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollindicator-custom.qml +++ /dev/null @@ -1,45 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -ScrollIndicator { - id: control - size: 0.3 - position: 0.2 - active: true - orientation: Qt.Vertical - - contentItem: Rectangle { - implicitWidth: 2 - implicitHeight: 100 - color: "#c2f4c6" - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollindicator-non-attached.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-scrollindicator-non-attached.qml deleted file mode 100644 index 0d6c4529..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollindicator-non-attached.qml +++ /dev/null @@ -1,84 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -Item { - width: 200 - height: 200 - -//! [1] -Rectangle { - id: frame - clip: true - width: 160 - height: 160 - border.color: "black" - anchors.centerIn: parent - - Text { - id: content - text: "ABC" - font.pixelSize: 169 - - MouseArea { - id: mouseArea - drag.target: content - drag.minimumX: frame.width - width - drag.minimumY: frame.height - height - drag.maximumX: 0 - drag.maximumY: 0 - anchors.fill: content - } - } - - ScrollIndicator { - id: verticalIndicator - active: mouseArea.pressed - orientation: Qt.Vertical - size: frame.height / content.height - position: -content.y / content.height - anchors { top: parent.top; right: parent.right; bottom: parent.bottom } - } - - ScrollIndicator { - id: horizontalIndicator - active: mouseArea.pressed - orientation: Qt.Horizontal - size: frame.width / content.width - position: -content.x / content.width - anchors { left: parent.left; right: parent.right; bottom: parent.bottom } - } -} -//! [1] - -Component.onCompleted: { - horizontalIndicator.active = true; - verticalIndicator.active = true; -} -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollview-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-scrollview-custom.qml deleted file mode 100644 index 1a80d263..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollview-custom.qml +++ /dev/null @@ -1,81 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -Item { - width: 200 - height: 200 - - Binding { - target: control.ScrollBar.horizontal - property: "active" - value: true - } - - Binding { - target: control.ScrollBar.vertical - property: "active" - value: true - } - -//! [file] -ScrollView { - id: control - - width: 200 - height: 200 - focus: true - - Label { - text: "ABC" - font.pixelSize: 224 - } - - ScrollBar.vertical: ScrollBar { - parent: control - x: control.mirrored ? 0 : control.width - width - y: control.topPadding - height: control.availableHeight - active: control.ScrollBar.horizontal.active - } - - ScrollBar.horizontal: ScrollBar { - parent: control - x: control.leftPadding - y: control.height - height - width: control.availableWidth - active: control.ScrollBar.vertical.active - } - - background: Rectangle { - border.color: control.activeFocus ? "#21be2b" : "#bdbebf" - } -} -//! [file] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollview-interactive.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-scrollview-interactive.qml deleted file mode 100644 index 83861720..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollview-interactive.qml +++ /dev/null @@ -1,38 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [file] -ScrollView { - // ... - ScrollBar.horizontal.interactive: true - ScrollBar.vertical.interactive: true -} -//! [file] - diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollview-listview.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-scrollview-listview.qml deleted file mode 100644 index f1fbb627..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollview-listview.qml +++ /dev/null @@ -1,61 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -Item { - id: root - width: 200 - height: 200 - - Binding { - target: root.children[0].ScrollBar.horizontal - property: "active" - value: true - } - - Binding { - target: root.children[0].ScrollBar.vertical - property: "active" - value: true - } - -//! [file] -ScrollView { - width: 200 - height: 200 - - ListView { - model: 20 - delegate: ItemDelegate { - text: "Item " + index - } - } -} -//! [file] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollview-policy.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-scrollview-policy.qml deleted file mode 100644 index 78098eaa..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollview-policy.qml +++ /dev/null @@ -1,38 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [file] -ScrollView { - // ... - ScrollBar.horizontal.policy: ScrollBar.AlwaysOff - ScrollBar.vertical.policy: ScrollBar.AlwaysOn -} -//! [file] - diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollview.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-scrollview.qml deleted file mode 100644 index c96ae1ed..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-scrollview.qml +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -Rectangle { - id: root - width: 200 - height: 200 - border.color: "#ddd" - - Binding { - target: root.children[0].ScrollBar.horizontal - property: "active" - value: true - } - - Binding { - target: root.children[0].ScrollBar.vertical - property: "active" - value: true - } - -//! [file] -ScrollView { - width: 200 - height: 200 - - Label { - text: "ABC" - font.pixelSize: 224 - } -} -//! [file] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-slider-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-slider-custom.qml deleted file mode 100644 index c3d7f4b2..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-slider-custom.qml +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -Slider { - id: control - value: 0.5 - - background: Rectangle { - x: control.leftPadding - y: control.topPadding + control.availableHeight / 2 - height / 2 - implicitWidth: 200 - implicitHeight: 4 - width: control.availableWidth - height: implicitHeight - radius: 2 - color: "#bdbebf" - - Rectangle { - width: control.visualPosition * parent.width - height: parent.height - color: "#21be2b" - radius: 2 - } - } - - handle: Rectangle { - x: control.leftPadding + control.visualPosition * (control.availableWidth - width) - y: control.topPadding + control.availableHeight / 2 - height / 2 - implicitWidth: 26 - implicitHeight: 26 - radius: 13 - color: control.pressed ? "#f0f0f0" : "#f6f6f6" - border.color: "#bdbebf" - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-spinbox-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-spinbox-custom.qml deleted file mode 100644 index 89f6244f..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-spinbox-custom.qml +++ /dev/null @@ -1,96 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -SpinBox { - id: control - value: 50 - editable: true - - contentItem: TextInput { - z: 2 - text: control.textFromValue(control.value, control.locale) - - font: control.font - color: "#21be2b" - selectionColor: "#21be2b" - selectedTextColor: "#ffffff" - horizontalAlignment: Qt.AlignHCenter - verticalAlignment: Qt.AlignVCenter - - readOnly: !control.editable - validator: control.validator - inputMethodHints: Qt.ImhFormattedNumbersOnly - } - - up.indicator: Rectangle { - x: control.mirrored ? 0 : parent.width - width - height: parent.height - implicitWidth: 40 - implicitHeight: 40 - color: control.up.pressed ? "#e4e4e4" : "#f6f6f6" - border.color: enabled ? "#21be2b" : "#bdbebf" - - Text { - text: "+" - font.pixelSize: control.font.pixelSize * 2 - color: "#21be2b" - anchors.fill: parent - fontSizeMode: Text.Fit - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - } - } - - down.indicator: Rectangle { - x: control.mirrored ? parent.width - width : 0 - height: parent.height - implicitWidth: 40 - implicitHeight: 40 - color: control.down.pressed ? "#e4e4e4" : "#f6f6f6" - border.color: enabled ? "#21be2b" : "#bdbebf" - - Text { - text: "-" - font.pixelSize: control.font.pixelSize * 2 - color: "#21be2b" - anchors.fill: parent - fontSizeMode: Text.Fit - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - } - } - - background: Rectangle { - implicitWidth: 140 - border.color: "#bdbebf" - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-spinbox-double.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-spinbox-double.qml deleted file mode 100644 index 852ee5be..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-spinbox-double.qml +++ /dev/null @@ -1,56 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [1] -SpinBox { - id: spinbox - from: 0 - value: 110 - to: 100 * 100 - stepSize: 100 - anchors.centerIn: parent - - property int decimals: 2 - property real realValue: value / 100 - - validator: DoubleValidator { - bottom: Math.min(spinbox.from, spinbox.to) - top: Math.max(spinbox.from, spinbox.to) - } - - textFromValue: function(value, locale) { - return Number(value / 100).toLocaleString(locale, 'f', spinbox.decimals) - } - - valueFromText: function(text, locale) { - return Number.fromLocaleString(locale, text) * 100 - } -} -//! [1] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-spinbox-textual.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-spinbox-textual.qml deleted file mode 100644 index c1879d93..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-spinbox-textual.qml +++ /dev/null @@ -1,55 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [1] -SpinBox { - from: 0 - to: items.length - 1 - value: 1 // "Medium" - - property var items: ["Small", "Medium", "Large"] - - validator: RegularExpressionValidator { - regularExpression: new RegExp("(Small|Medium|Large)", "i") - } - - textFromValue: function(value) { - return items[value]; - } - - valueFromText: function(text) { - for (var i = 0; i < items.length; ++i) { - if (items[i].toLowerCase().indexOf(text.toLowerCase()) === 0) - return i - } - return sb.value - } -} -//! [1] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-spinbox.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-spinbox.qml deleted file mode 100644 index 87722749..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-spinbox.qml +++ /dev/null @@ -1,35 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [1] -SpinBox { - value: 50 -} -//! [1] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-splitview-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-splitview-custom.qml deleted file mode 100644 index 570c3acd..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-splitview-custom.qml +++ /dev/null @@ -1,57 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -Item { - width: 200 - height: 100 - - //! [1] - SplitView { - id: splitView - anchors.fill: parent - - handle: Rectangle { - implicitWidth: 4 - implicitHeight: 4 - color: SplitHandle.pressed ? "#81e889" - : (SplitHandle.hovered ? Qt.lighter("#c2f4c6", 1.1) : "#c2f4c6") - } - - Rectangle { - implicitWidth: 150 - color: "#444" - } - Rectangle { - implicitWidth: 50 - color: "#666" - } - } - //! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-stackview-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-stackview-custom.qml deleted file mode 100644 index 64cdb3ce..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-stackview-custom.qml +++ /dev/null @@ -1,53 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -StackView { - id: control - - popEnter: Transition { - XAnimator { - from: (control.mirrored ? -1 : 1) * -control.width - to: 0 - duration: 400 - easing.type: Easing.OutCubic - } - } - - popExit: Transition { - XAnimator { - from: 0 - to: (control.mirrored ? -1 : 1) * control.width - duration: 400 - easing.type: Easing.OutCubic - } - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-stackview-visible.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-stackview-visible.qml deleted file mode 100644 index 0e1a0dd4..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-stackview-visible.qml +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [1] -StackView { - id: stackView - property real offset: 10 - width: 100; height: 100 - - initialItem: Component { - id: page - Rectangle { - property real pos: StackView.index * stackView.offset - property real hue: Math.random() - color: Qt.hsla(hue, 0.5, 0.8, 0.6) - border.color: Qt.hsla(hue, 0.5, 0.5, 0.9) - StackView.visible: true - } - } - - pushEnter: Transition { - id: pushEnter - ParallelAnimation { - PropertyAction { property: "x"; value: pushEnter.ViewTransition.item.pos } - NumberAnimation { properties: "y"; from: pushEnter.ViewTransition.item.pos + stackView.offset; to: pushEnter.ViewTransition.item.pos; duration: 400; easing.type: Easing.OutCubic } - NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 400; easing.type: Easing.OutCubic } - } - } - popExit: Transition { - id: popExit - ParallelAnimation { - PropertyAction { property: "x"; value: popExit.ViewTransition.item.pos } - NumberAnimation { properties: "y"; from: popExit.ViewTransition.item.pos; to: popExit.ViewTransition.item.pos + stackView.offset; duration: 400; easing.type: Easing.OutCubic } - NumberAnimation { property: "opacity"; from: 1; to: 0; duration: 400; easing.type: Easing.OutCubic } - } - } - - pushExit: Transition { - id: pushExit - PropertyAction { property: "x"; value: pushExit.ViewTransition.item.pos } - PropertyAction { property: "y"; value: pushExit.ViewTransition.item.pos } - } - popEnter: Transition { - id: popEnter - PropertyAction { property: "x"; value: popEnter.ViewTransition.item.pos } - PropertyAction { property: "y"; value: popEnter.ViewTransition.item.pos } - } -} -//! [1] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-swipedelegate-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-swipedelegate-custom.qml deleted file mode 100644 index c89b96a4..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-swipedelegate-custom.qml +++ /dev/null @@ -1,72 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -SwipeDelegate { - id: control - text: qsTr("SwipeDelegate") - - Component { - id: component - - Rectangle { - color: SwipeDelegate.pressed ? "#333" : "#444" - width: parent.width - height: parent.height - clip: true - - Label { - text: qsTr("Press me!") - color: "#21be2b" - anchors.centerIn: parent - } - } - } - - swipe.left: component - swipe.right: component - - contentItem: Text { - text: control.text - font: control.font - color: control.enabled ? (control.down ? "#17a81a" : "#21be2b") : "#bdbebf" - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - - Behavior on x { - enabled: !control.down - NumberAnimation { - easing.type: Easing.InOutCubic - duration: 400 - } - } - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-swipedelegate-transition.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-swipedelegate-transition.qml deleted file mode 100644 index dc0d58a2..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-swipedelegate-transition.qml +++ /dev/null @@ -1,37 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [1] -SwipeDelegate { - swipe.transition: Transition { - SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } - } -} -//! [1] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-swipedelegate.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-swipedelegate.qml deleted file mode 100644 index dcab908e..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-swipedelegate.qml +++ /dev/null @@ -1,82 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [1] -ListView { - id: listView - anchors.fill: parent - model: ListModel { - ListElement { sender: "Bob Bobbleton"; title: "How are you going?" } - ListElement { sender: "Rug Emporium"; title: "SALE! All rugs MUST go!" } - ListElement { sender: "Electric Co."; title: "Electricity bill 15/07/2016 overdue" } - ListElement { sender: "Tips"; title: "Five ways this tip will save your life" } - } - delegate: SwipeDelegate { - id: swipeDelegate - text: model.sender + " - " + model.title - width: parent.width - - ListView.onRemove: SequentialAnimation { - PropertyAction { - target: swipeDelegate - property: "ListView.delayRemove" - value: true - } - NumberAnimation { - target: swipeDelegate - property: "height" - to: 0 - easing.type: Easing.InOutQuad - } - PropertyAction { - target: swipeDelegate - property: "ListView.delayRemove" - value: false - } - } - - swipe.right: Label { - id: deleteLabel - text: qsTr("Delete") - color: "white" - verticalAlignment: Label.AlignVCenter - padding: 12 - height: parent.height - anchors.right: parent.right - - SwipeDelegate.onClicked: listView.model.remove(index) - - background: Rectangle { - color: deleteLabel.SwipeDelegate.pressed ? Qt.darker("tomato", 1.1) : "tomato" - } - } - } -} -//! [1] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-swipeview-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-swipeview-custom.qml deleted file mode 100644 index b8cddb31..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-swipeview-custom.qml +++ /dev/null @@ -1,39 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -SwipeView { - id: control - - background: Rectangle { - color: "#eeeeee" - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-swipeview-indicator.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-swipeview-indicator.qml deleted file mode 100644 index 98b381f1..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-swipeview-indicator.qml +++ /dev/null @@ -1,63 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -Item { - width: 200 - height: 320 - - //! [1] - SwipeView { - id: view - - currentIndex: 1 - anchors.fill: parent - - Item { - id: firstPage - } - Item { - id: secondPage - } - Item { - id: thirdPage - } - } - - PageIndicator { - id: indicator - - count: view.count - currentIndex: view.currentIndex - - anchors.bottom: view.bottom - anchors.horizontalCenter: parent.horizontalCenter - } - //! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-switch-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-switch-custom.qml deleted file mode 100644 index 9adccbed..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-switch-custom.qml +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -Switch { - id: control - text: qsTr("Switch") - - indicator: Rectangle { - implicitWidth: 48 - implicitHeight: 26 - x: control.leftPadding - y: parent.height / 2 - height / 2 - radius: 13 - color: control.checked ? "#17a81a" : "#ffffff" - border.color: control.checked ? "#17a81a" : "#cccccc" - - Rectangle { - x: control.checked ? parent.width - width : 0 - width: 26 - height: 26 - radius: 13 - color: control.down ? "#cccccc" : "#ffffff" - border.color: control.checked ? (control.down ? "#17a81a" : "#21be2b") : "#999999" - } - } - - contentItem: Text { - text: control.text - font: control.font - opacity: enabled ? 1.0 : 0.3 - color: control.down ? "#17a81a" : "#21be2b" - verticalAlignment: Text.AlignVCenter - leftPadding: control.indicator.width + control.spacing - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-switchdelegate-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-switchdelegate-custom.qml deleted file mode 100644 index bea35f29..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-switchdelegate-custom.qml +++ /dev/null @@ -1,73 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -SwitchDelegate { - id: control - text: qsTr("SwitchDelegate") - checked: true - - contentItem: Text { - rightPadding: control.indicator.width + control.spacing - text: control.text - font: control.font - opacity: enabled ? 1.0 : 0.3 - color: control.down ? "#17a81a" : "#21be2b" - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } - - indicator: Rectangle { - implicitWidth: 48 - implicitHeight: 26 - x: control.width - width - control.rightPadding - y: parent.height / 2 - height / 2 - radius: 13 - color: control.checked ? "#17a81a" : "transparent" - border.color: control.checked ? "#17a81a" : "#cccccc" - - Rectangle { - x: control.checked ? parent.width - width : 0 - width: 26 - height: 26 - radius: 13 - color: control.down ? "#cccccc" : "#ffffff" - border.color: control.checked ? (control.down ? "#17a81a" : "#21be2b") : "#999999" - } - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 40 - visible: control.down || control.highlighted - color: control.down ? "#bdbebf" : "#eeeeee" - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-tabbar-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-tabbar-custom.qml deleted file mode 100644 index eba48256..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-tabbar-custom.qml +++ /dev/null @@ -1,49 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -TabBar { - id: control - - background: Rectangle { - color: "#eeeeee" - } - - TabButton { - text: qsTr("Home") - } - TabButton { - text: qsTr("Discover") - } - TabButton { - text: qsTr("Activity") - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-tabbar-explicit.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-tabbar-explicit.qml deleted file mode 100644 index 5f548255..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-tabbar-explicit.qml +++ /dev/null @@ -1,52 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -Item { - width: 360 - height: childrenRect.height - -//! [1] -TabBar { - width: parent.width - TabButton { - text: "First" - width: implicitWidth - } - TabButton { - text: "Second" - width: implicitWidth - } - TabButton { - text: "Third" - width: implicitWidth - } -} -//! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-tabbar-flickable.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-tabbar-flickable.qml deleted file mode 100644 index 8e41bbf0..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-tabbar-flickable.qml +++ /dev/null @@ -1,50 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -Item { - width: 360 - height: bar.height - -//! [1] -TabBar { - id: bar - width: parent.width - - Repeater { - model: ["First", "Second", "Third", "Fourth", "Fifth"] - - TabButton { - text: modelData - width: Math.max(100, bar.width / 5) - } - } -} -//! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-tabbar.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-tabbar.qml deleted file mode 100644 index 7a02f375..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-tabbar.qml +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Layouts -import QtQuick.Controls - -Column { - width: 300 - - //! [1] - TabBar { - id: bar - width: parent.width - TabButton { - text: qsTr("Home") - } - TabButton { - text: qsTr("Discover") - } - TabButton { - text: qsTr("Activity") - } - } - - StackLayout { - width: parent.width - currentIndex: bar.currentIndex - Item { - id: homeTab - } - Item { - id: discoverTab - } - Item { - id: activityTab - } - } - //! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-tabbutton.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-tabbutton.qml deleted file mode 100644 index e7240db4..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-tabbutton.qml +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [1] -TabBar { - TabButton { - text: qsTr("Home") - } - TabButton { - text: qsTr("Discover") - } - TabButton { - text: qsTr("Activity") - } -} -//! [1] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-textarea-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-textarea-custom.qml deleted file mode 100644 index e4f1b397..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-textarea-custom.qml +++ /dev/null @@ -1,42 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -TextArea { - id: control - placeholderText: qsTr("Enter description") - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 40 - border.color: control.enabled ? "#21be2b" : "transparent" - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-textarea-scrollable.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-textarea-scrollable.qml deleted file mode 100644 index 52d9996e..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-textarea-scrollable.qml +++ /dev/null @@ -1,47 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -Item { - width: 100 - height: 100 - - Binding { target: view.ScrollBar.vertical; property: "active"; value: true } - - //! [1] - ScrollView { - id: view - anchors.fill: parent - - TextArea { - text: "TextArea\n...\n...\n...\n...\n...\n...\n" - } - } - //! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-textfield-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-textfield-custom.qml deleted file mode 100644 index 8f1aba23..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-textfield-custom.qml +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -TextField { - id: control - placeholderText: qsTr("Enter description") - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 40 - color: control.enabled ? "transparent" : "#353637" - border.color: control.enabled ? "#21be2b" : "transparent" - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-textfield-disabled.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-textfield-disabled.qml deleted file mode 100644 index 3d92b647..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-textfield-disabled.qml +++ /dev/null @@ -1,35 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -TextField { - width: 80 - text: "Disabled" - enabled: false -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-textfield-focused.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-textfield-focused.qml deleted file mode 100644 index f2761988..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-textfield-focused.qml +++ /dev/null @@ -1,35 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -TextField { - width: 80 - text: "Focused" - focus: true -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-textfield-normal.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-textfield-normal.qml deleted file mode 100644 index c9208c0e..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-textfield-normal.qml +++ /dev/null @@ -1,34 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -TextField { - width: 80 - text: "Normal" -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-toolbar-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-toolbar-custom.qml deleted file mode 100644 index 2cb9d0c5..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-toolbar-custom.qml +++ /dev/null @@ -1,59 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Layouts -import QtQuick.Controls - -//! [file] -ToolBar { - id: control - - background: Rectangle { - implicitHeight: 40 - color: "#eeeeee" - - Rectangle { - width: parent.width - height: 1 - anchors.bottom: parent.bottom - color: "transparent" - border.color: "#21be2b" - } - } - - RowLayout { - anchors.fill: parent - ToolButton { - text: qsTr("Undo") - } - ToolButton { - text: qsTr("Redo") - } - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-toolbar.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-toolbar.qml deleted file mode 100644 index 2ed5c23f..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-toolbar.qml +++ /dev/null @@ -1,62 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Layouts -import QtQuick.Controls - -Item { - width: children[0].implicitWidth * 2 - height: children[0].implicitHeight - Binding { - target: children[0] - property: "width" - value: width - } -//! [1] -ToolBar { - RowLayout { - anchors.fill: parent - ToolButton { - text: qsTr("‹") - onClicked: stack.pop() - } - Label { - text: "Title" - elide: Label.ElideRight - horizontalAlignment: Qt.AlignHCenter - verticalAlignment: Qt.AlignVCenter - Layout.fillWidth: true - } - ToolButton { - text: qsTr("â‹®") - onClicked: menu.open() - } - } -} -//! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-toolbutton-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-toolbutton-custom.qml deleted file mode 100644 index 8eb27430..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-toolbutton-custom.qml +++ /dev/null @@ -1,55 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -ToolButton { - id: control - text: qsTr("ToolButton") - width: 120 - - contentItem: Text { - text: control.text - font: control.font - opacity: enabled ? 1.0 : 0.3 - color: control.down ? "#17a81a" : "#21be2b" - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - elide: Text.ElideRight - } - - background: Rectangle { - implicitWidth: 40 - implicitHeight: 40 - color: Qt.darker("#33333333", control.enabled && (control.checked || control.highlighted) ? 1.5 : 1.0) - opacity: enabled ? 1 : 0.3 - visible: control.down || (control.enabled && (control.checked || control.highlighted)) - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-toolseparator-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-toolseparator-custom.qml deleted file mode 100644 index f630256d..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-toolseparator-custom.qml +++ /dev/null @@ -1,69 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Layouts -import QtQuick.Window -import QtQuick.Controls - -//! [file] -ToolBar { - RowLayout { - anchors.fill: parent - - ToolButton { - text: qsTr("Action 1") - } - ToolButton { - text: qsTr("Action 2") - } - - ToolSeparator { - padding: vertical ? 10 : 2 - topPadding: vertical ? 2 : 10 - bottomPadding: vertical ? 2 : 10 - - contentItem: Rectangle { - implicitWidth: parent.vertical ? 1 : 24 - implicitHeight: parent.vertical ? 24 : 1 - color: "#c3c3c3" - } - } - - ToolButton { - text: qsTr("Action 3") - } - ToolButton { - text: qsTr("Action 4") - } - - Item { - Layout.fillWidth: true - } - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-toolseparator.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-toolseparator.qml deleted file mode 100644 index 514b97fa..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-toolseparator.qml +++ /dev/null @@ -1,68 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Layouts -import QtQuick.Window -import QtQuick.Controls - -//! [1] -ToolBar { - RowLayout { - anchors.fill: parent - - ToolButton { - text: qsTr("Action 1") - } - ToolButton { - text: qsTr("Action 2") - } - - ToolSeparator {} - - ToolButton { - text: qsTr("Action 3") - } - ToolButton { - text: qsTr("Action 4") - } - - ToolSeparator {} - - ToolButton { - text: qsTr("Action 5") - } - ToolButton { - text: qsTr("Action 6") - } - - Item { - Layout.fillWidth: true - } - } -} -//! [1] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-tooltip-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-tooltip-custom.qml deleted file mode 100644 index 7b40c974..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-tooltip-custom.qml +++ /dev/null @@ -1,48 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -Item { -ToolTip { - id: control - text: qsTr("A descriptive tool tip of what the button does") - - contentItem: Text { - text: control.text - font: control.font - color: "#21be2b" - } - - background: Rectangle { - border.color: "#21be2b" - } -} -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-tooltip-hover.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-tooltip-hover.qml deleted file mode 100644 index 6d1ee4c4..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-tooltip-hover.qml +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [1] -Button { - text: qsTr("Button") - hoverEnabled: true - - ToolTip.delay: 1000 - ToolTip.timeout: 5000 - ToolTip.visible: hovered - ToolTip.text: qsTr("This tool tip is shown after hovering the button for a second.") -} -//! [1] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-tooltip-pressandhold.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-tooltip-pressandhold.qml deleted file mode 100644 index cea49553..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-tooltip-pressandhold.qml +++ /dev/null @@ -1,39 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [1] -Button { - text: qsTr("Button") - - ToolTip.visible: pressed - ToolTip.delay: Qt.styleHints.mousePressAndHoldInterval - ToolTip.text: qsTr("This tool tip is shown after pressing and holding the button down.") -} -//! [1] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-tooltip-slider.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-tooltip-slider.qml deleted file mode 100644 index 5f408224..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-tooltip-slider.qml +++ /dev/null @@ -1,53 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Window -import QtQuick.Controls - -Item { - id: root - width: slider.width - height: slider.height * 2.0 - - Binding { target: slider.anchors; property: "centerIn"; value: root } - Binding { target: slider.anchors; property: "verticalCenterOffset"; value: slider.height / 2 } - Binding { target: slider; property: "pressed"; value: root.Window.active } - - //! [1] - Slider { - id: slider - value: 0.5 - - ToolTip { - parent: slider.handle - visible: slider.pressed - text: slider.value.toFixed(1) - } - } - //! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-tooltip.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-tooltip.qml deleted file mode 100644 index 2e5231dc..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-tooltip.qml +++ /dev/null @@ -1,51 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Window -import QtQuick.Controls - -Item { - id: root - width: 360 - height: button.height * 2 - - property Button button: children[0] - - Binding { target: button; property: "down"; value: root.Window.active } - Binding { target: button.anchors; property: "bottom"; value: root.bottom } - Binding { target: button.anchors; property: "horizontalCenter"; value: root.horizontalCenter } - - //! [1] - Button { - text: qsTr("Save") - - ToolTip.visible: down - ToolTip.text: qsTr("Save the active project") - } - //! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-tumbler-custom.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-tumbler-custom.qml deleted file mode 100644 index 792e0e14..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-tumbler-custom.qml +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [file] -import QtQuick -import QtQuick.Controls - -Tumbler { - id: control - model: 15 - - background: Item { - Rectangle { - opacity: control.enabled ? 0.2 : 0.1 - border.color: "#000000" - width: parent.width - height: 1 - anchors.top: parent.top - } - - Rectangle { - opacity: control.enabled ? 0.2 : 0.1 - border.color: "#000000" - width: parent.width - height: 1 - anchors.bottom: parent.bottom - } - } - - delegate: Text { - text: qsTr("Item %1").arg(modelData + 1) - font: control.font - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - opacity: 1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2) - } - - Rectangle { - anchors.horizontalCenter: control.horizontalCenter - y: control.height * 0.4 - width: 40 - height: 1 - color: "#21be2b" - } - - Rectangle { - anchors.horizontalCenter: control.horizontalCenter - y: control.height * 0.6 - width: 40 - height: 1 - color: "#21be2b" - } -} -//! [file] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-tumbler-listView.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-tumbler-listView.qml deleted file mode 100644 index 54ce78af..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-tumbler-listView.qml +++ /dev/null @@ -1,46 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [contentItem] -Tumbler { - id: tumbler - - contentItem: ListView { - model: tumbler.model - delegate: tumbler.delegate - - snapMode: ListView.SnapToItem - highlightRangeMode: ListView.StrictlyEnforceRange - preferredHighlightBegin: height / 2 - (height / tumbler.visibleItemCount / 2) - preferredHighlightEnd: height / 2 + (height / tumbler.visibleItemCount / 2) - clip: true - } -} -//! [contentItem] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-tumbler-pathView.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-tumbler-pathView.qml deleted file mode 100644 index 408b7479..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-tumbler-pathView.qml +++ /dev/null @@ -1,57 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls - -//! [contentItem] -Tumbler { - id: tumbler - - contentItem: PathView { - id: pathView - model: tumbler.model - delegate: tumbler.delegate - clip: true - pathItemCount: tumbler.visibleItemCount + 1 - preferredHighlightBegin: 0.5 - preferredHighlightEnd: 0.5 - dragMargin: width / 2 - - path: Path { - startX: pathView.width / 2 - startY: -pathView.delegateHeight / 2 - PathLine { - x: pathView.width / 2 - y: pathView.pathItemCount * pathView.delegateHeight - pathView.delegateHeight / 2 - } - } - - property real delegateHeight: tumbler.availableHeight / tumbler.visibleItemCount - } -} -//! [contentItem] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-tumbler-timePicker.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-tumbler-timePicker.qml deleted file mode 100644 index d9edb2cb..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-tumbler-timePicker.qml +++ /dev/null @@ -1,86 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -//! [tumbler] -import QtQuick -import QtQuick.Window -import QtQuick.Controls - -Rectangle { - width: frame.implicitWidth + 10 - height: frame.implicitHeight + 10 - - function formatText(count, modelData) { - var data = count === 12 ? modelData + 1 : modelData; - return data.toString().length < 2 ? "0" + data : data; - } - - FontMetrics { - id: fontMetrics - } - - Component { - id: delegateComponent - - Label { - text: formatText(Tumbler.tumbler.count, modelData) - opacity: 1.0 - Math.abs(Tumbler.displacement) / (Tumbler.tumbler.visibleItemCount / 2) - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - font.pixelSize: fontMetrics.font.pixelSize * 1.25 - } - } - - Frame { - id: frame - padding: 0 - anchors.centerIn: parent - - Row { - id: row - - Tumbler { - id: hoursTumbler - model: 12 - delegate: delegateComponent - } - - Tumbler { - id: minutesTumbler - model: 60 - delegate: delegateComponent - } - - Tumbler { - id: amPmTumbler - model: ["AM", "PM"] - delegate: delegateComponent - } - } - } -} -//! [tumbler] diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-universal-accent.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-universal-accent.qml deleted file mode 100644 index f429359e..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-universal-accent.qml +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Layouts -import QtQuick.Controls -import QtQuick.Controls.Universal - -Pane { - padding: 10 - -//! [1] -Button { - text: qsTr("Button") - highlighted: true - Universal.accent: Universal.Orange -} -//! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-universal-background.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-universal-background.qml deleted file mode 100644 index 558618e6..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-universal-background.qml +++ /dev/null @@ -1,44 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.Universal - -Pane { - padding: 10 - -//! [1] -Pane { - Universal.background: Universal.Steel - - Button { - text: qsTr("Button") - } -} -//! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-universal-foreground.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-universal-foreground.qml deleted file mode 100644 index 39a292d8..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-universal-foreground.qml +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.Universal - -Pane { - padding: 10 - -//! [1] -Button { - text: qsTr("Button") - Universal.foreground: Universal.Pink -} -//! [1] -} diff --git a/src/imports/controls/doc/snippets/qtquickcontrols2-universal-theme.qml b/src/imports/controls/doc/snippets/qtquickcontrols2-universal-theme.qml deleted file mode 100644 index b55bf188..00000000 --- a/src/imports/controls/doc/snippets/qtquickcontrols2-universal-theme.qml +++ /dev/null @@ -1,44 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.Universal - -Pane { - padding: 10 - -//! [1] -Pane { - Universal.theme: Universal.Dark - - Button { - text: qsTr("Button") - } -} -//! [1] -} diff --git a/src/imports/controls/doc/src/external-pages.qdoc b/src/imports/controls/doc/src/external-pages.qdoc deleted file mode 100644 index 05005798..00000000 --- a/src/imports/controls/doc/src/external-pages.qdoc +++ /dev/null @@ -1,36 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \externalpage https://doc.qt.io/qt-5/qtquickcontrols2-differences.html - \title Qt 5.15: Qt Quick Controls vs Qt Quick Controls 1 -*/ - -/*! - \externalpage https://doc.qt.io/qtcreator/creator-project-creating.html#selecting-project-type - \title Qt Creator: Project Types -*/ diff --git a/src/imports/controls/doc/src/includes/customize-button-background.qdocinc b/src/imports/controls/doc/src/includes/customize-button-background.qdocinc deleted file mode 100644 index 0acad02d..00000000 --- a/src/imports/controls/doc/src/includes/customize-button-background.qdocinc +++ /dev/null @@ -1,25 +0,0 @@ -//! [file] -\qml -import QtQuick -import QtQuick.Controls - -ApplicationWindow { - width: 400 - height: 400 - visible: true - - Button { - id: button - text: "A Special Button" - background: Rectangle { - implicitWidth: 100 - implicitHeight: 40 - color: button.down ? "#d6d6d6" : "#f6f6f6" - border.color: "#26282a" - border.width: 1 - radius: 4 - } - } -} -\endqml -//! [file] diff --git a/src/imports/controls/doc/src/includes/inputmethodhints.qdocinc b/src/imports/controls/doc/src/includes/inputmethodhints.qdocinc deleted file mode 100644 index 73710e1e..00000000 --- a/src/imports/controls/doc/src/includes/inputmethodhints.qdocinc +++ /dev/null @@ -1,38 +0,0 @@ -//! [flags] -The value is a bit-wise combination of flags or \c Qt.ImhNone if no hints are set. - -Flags that alter behavior are: - -\list -\li Qt.ImhHiddenText - Characters should be hidden, as is typically used when entering passwords. -\li Qt.ImhSensitiveData - Typed text should not be stored by the active input method - in any persistent storage like predictive user dictionary. -\li Qt.ImhNoAutoUppercase - The input method should not try to automatically switch to upper case - when a sentence ends. -\li Qt.ImhPreferNumbers - Numbers are preferred (but not required). -\li Qt.ImhPreferUppercase - Upper case letters are preferred (but not required). -\li Qt.ImhPreferLowercase - Lower case letters are preferred (but not required). -\li Qt.ImhNoPredictiveText - Do not use predictive text (i.e. dictionary lookup) while typing. - -\li Qt.ImhDate - The text editor functions as a date field. -\li Qt.ImhTime - The text editor functions as a time field. -\endlist - -Flags that restrict input (exclusive flags) are: - -\list -\li Qt.ImhDigitsOnly - Only digits are allowed. -\li Qt.ImhFormattedNumbersOnly - Only number input is allowed. This includes decimal point and minus sign. -\li Qt.ImhUppercaseOnly - Only upper case letter input is allowed. -\li Qt.ImhLowercaseOnly - Only lower case letter input is allowed. -\li Qt.ImhDialableCharactersOnly - Only characters suitable for phone dialing are allowed. -\li Qt.ImhEmailCharactersOnly - Only characters suitable for email addresses are allowed. -\li Qt.ImhUrlCharactersOnly - Only characters suitable for URLs are allowed. -\endlist - -Masks: - -\list -\li Qt.ImhExclusiveInputMask - This mask yields nonzero if any of the exclusive flags are used. -\endlist -//! [flags] diff --git a/src/imports/controls/doc/src/includes/qquickcontrol-background.qdocinc b/src/imports/controls/doc/src/includes/qquickcontrol-background.qdocinc deleted file mode 100644 index 02d92de0..00000000 --- a/src/imports/controls/doc/src/includes/qquickcontrol-background.qdocinc +++ /dev/null @@ -1,13 +0,0 @@ -//! [notes] - -\note If the background item has no explicit size specified, it automatically - follows the control's size. In most cases, there is no need to specify - width or height for a background item. - -\note Most controls use the implicit size of the background item to calculate -the implicit size of the control itself. If you replace the background item -with a custom one, you should also consider providing a sensible implicit -size for it (unless it is an item like \l Image which has its own implicit -size). - -//! [notes] diff --git a/src/imports/controls/doc/src/includes/qquickcontrol-focusreason.qdocinc b/src/imports/controls/doc/src/includes/qquickcontrol-focusreason.qdocinc deleted file mode 100644 index b69e9e60..00000000 --- a/src/imports/controls/doc/src/includes/qquickcontrol-focusreason.qdocinc +++ /dev/null @@ -1,15 +0,0 @@ -This property holds the reason of the last focus change. - -\note This property does not indicate whether the control has \l {Item::activeFocus} - {active focus}, but the reason why the control either gained or lost focus. - -\value Qt.MouseFocusReason A mouse action occurred. -\value Qt.TabFocusReason The Tab key was pressed. -\value Qt.BacktabFocusReason A Backtab occurred. The input for this may include the Shift or Control keys; e.g. Shift+Tab. -\value Qt.ActiveWindowFocusReason The window system made this window either active or inactive. -\value Qt.PopupFocusReason The application opened/closed a pop-up that grabbed/released the keyboard focus. -\value Qt.ShortcutFocusReason The user typed a label's buddy shortcut -\value Qt.MenuBarFocusReason The menu bar took focus. -\value Qt.OtherFocusReason Another reason, usually application-specific. - -\sa Item::activeFocus diff --git a/src/imports/controls/doc/src/includes/qquickdial.qdocinc b/src/imports/controls/doc/src/includes/qquickdial.qdocinc deleted file mode 100644 index 3370b3d8..00000000 --- a/src/imports/controls/doc/src/includes/qquickdial.qdocinc +++ /dev/null @@ -1,13 +0,0 @@ -//! [inputMode] -Dial supports three \l {inputMode}{input modes}: \c Dial.Circular, -\c Dial.Horizontal and \c Dial.Vertical. The circular input mode operates on an -absolute input system, where the position of the cursor within the dial -directly reflects its value. The horizontal and vertical input modes use a -relative input system, where changes in the cursor's position are "added" to -the value of the dial. - -The following image illustrates the directions in which the various input modes -track movement: - -\image qtquickcontrols2-dial-inputmode.png -//! [inputMode] diff --git a/src/imports/controls/doc/src/includes/qquickicon.qdocinc b/src/imports/controls/doc/src/includes/qquickicon.qdocinc deleted file mode 100644 index beef5624..00000000 --- a/src/imports/controls/doc/src/includes/qquickicon.qdocinc +++ /dev/null @@ -1,50 +0,0 @@ -//! [grouped-properties] -\table -\header - \li Name - \li Description -\row - \li name - \li This property holds the name of the icon to use. - - The icon will be loaded from the platform theme. If the icon is found - in the theme, it will always be used; even if \l icon.source is also set. - If the icon is not found, \l icon.source will be used instead. - - For more information on theme icons, see \l {QIcon::fromTheme()}. -\row - \li source - \li This property holds the name of the icon to use. - - The icon will be loaded as a regular image. - - If \l icon.name is set and refers to a valid theme icon, it will always - be used instead of this property. -\row - \li width - \li This property holds the width of the icon. - - The icon's width will never exceed this value, though it will - shrink when necessary. -\row - \li height - \li This property holds the height of the icon. - - The icon's height will never exceed this value, though it will - shrink when necessary. -\row - \li color - \li This property holds the color of the icon. - - The icon is tinted with the specified color, unless the color is - set to \c "transparent". - -\row - \li cache - \li This property specifies whether the icon should be cached. - - The default value is true. - - This property was introduced in QtQuick.Controls 2.13. -\endtable -//! [grouped-properties] diff --git a/src/imports/controls/doc/src/includes/qquickimaginestyle.qdocinc b/src/imports/controls/doc/src/includes/qquickimaginestyle.qdocinc deleted file mode 100644 index f6fe5a97..00000000 --- a/src/imports/controls/doc/src/includes/qquickimaginestyle.qdocinc +++ /dev/null @@ -1,57 +0,0 @@ -//! [conf] -\table - \header - \li Variable - \li Description - \row - \li \c Path - \li Specifies the \l {imagine-path-attached-prop}{path} to the directory that contains - the Imagine style assets. If not specified, the built-in assets are used. - - For example, to specify a path to a directory stored in the - \l {The Qt Resource System}{resource system}: - - \badcode - [Imagine] - Path=:/imagine-assets - \endcode - - To specify a relative path to a local directory: - - \badcode - [Imagine] - Path=imagine-assets - \endcode - - \note Due to a technical limitation, the path should not be named - \e "imagine" if it is relative to the \c qtquickcontrols2.conf file. -\endtable -//! [conf] - -//! [env] -\table - \header - \li Variable - \li Description - \row - \li \c QT_QUICK_CONTROLS_IMAGINE_PATH - \li Specifies the path to the directory that contains the Imagine style assets. - If not specified, the built-in assets are used. - - For example, to specify a path to a directory stored in the - \l {The Qt Resource System}{resource system}: - - \badcode - QT_QUICK_CONTROLS_IMAGINE_PATH=:/imagine-assets - \endcode - - To specify a relative path to a local directory: - - \badcode - QT_QUICK_CONTROLS_IMAGINE_PATH=imagine-assets - \endcode - - \note Due to a technical limitation, the path should not be named - \e "imagine" if it is relative to the \c qtquickcontrols2.conf file. -\endtable -//! [env] diff --git a/src/imports/controls/doc/src/includes/qquickmaterialstyle.qdocinc b/src/imports/controls/doc/src/includes/qquickmaterialstyle.qdocinc deleted file mode 100644 index 72c97bb6..00000000 --- a/src/imports/controls/doc/src/includes/qquickmaterialstyle.qdocinc +++ /dev/null @@ -1,79 +0,0 @@ -//! [conf] -\table - \header - \li Variable - \li Description - \row - \li \c Theme - \li Specifies the default \l {material-theme-attached-prop}{Material theme}. - The value can be one of the available themes, for example \c "Dark". - \row - \li \c Variant - \li Specifies the Material variant. The Material Design has two - variants: a normal variant designed for touch devices, and a dense - variant for desktop. The dense variant uses smaller sizes for - controls and their fonts. - - The value can be \c "Normal" or \c "Dense". - \row - \li \c Accent - \li Specifies the default \l {material-accent-attached-prop}{Material accent color}. - The value can be any \l {colorbasictypedocs}{color}, but it is recommended to use - one of the \l {pre-defined Material colors}, for example \c "Teal". - \row - \li \c Primary - \li Specifies the default \l {material-primary-attached-prop}{Material primary color}. - The value can be any \l {colorbasictypedocs}{color}, but it is recommended to use - one of the \l {pre-defined Material colors}, for example \c "BlueGrey". - \row - \li \c Foreground - \li Specifies the default \l {material-foreground-attached-prop}{Material foreground color}. - The value can be any \l {colorbasictypedocs}{color}, or one of the \l {pre-defined Material colors}, - for example \c "Brown". - \row - \li \c Background - \li Specifies the default \l {material-background-attached-prop}{Material background color}. - The value can be any \l {colorbasictypedocs}{color}, or one of the \l {pre-defined Material colors}, - for example \c "Grey". -\endtable -//! [conf] - -//! [env] -\table - \header - \li Variable - \li Description - \row - \li \c QT_QUICK_CONTROLS_MATERIAL_THEME - \li Specifies the default \l {material-theme-attached-prop}{Material theme}. - The value can be one of the available themes, for example \c "Dark". - \row - \li \c QT_QUICK_CONTROLS_MATERIAL_VARIANT - \li Specifies the Material variant. The Material Design has two - variants: a normal variant designed for touch devices, and a dense - variant for desktop. The dense variant uses smaller sizes for - controls and their fonts. - - The value can be \c "Normal" or \c "Dense". - \row - \li \c QT_QUICK_CONTROLS_MATERIAL_ACCENT - \li Specifies the default \l {material-accent-attached-prop}{Material accent color}. - The value can be any \l {colorbasictypedocs}{color}, but it is recommended to use - one of the \l {pre-defined Material colors}, for example \c "Teal". - \row - \li \c QT_QUICK_CONTROLS_MATERIAL_PRIMARY - \li Specifies the default \l {material-primary-attached-prop}{Material primary color}. - The value can be any \l {colorbasictypedocs}{color}, but it is recommended to use - one of the \l {pre-defined Material colors}, for example \c "BlueGrey". - \row - \li \c QT_QUICK_CONTROLS_MATERIAL_FOREGROUND - \li Specifies the default \l {material-foreground-attached-prop}{Material foreground color}. - The value can be any \l {colorbasictypedocs}{color}, or one of the \l {pre-defined Material colors}, - for example \c "Brown". - \row - \li \c QT_QUICK_CONTROLS_MATERIAL_BACKGROUND - \li Specifies the default \l {material-background-attached-prop}{Material background color}. - The value can be any \l {colorbasictypedocs}{color}, or one of the \l {pre-defined Material colors}, - for example \c "Grey". -\endtable -//! [env] diff --git a/src/imports/controls/doc/src/includes/qquickoverlay-popup-parent.qdocinc b/src/imports/controls/doc/src/includes/qquickoverlay-popup-parent.qdocinc deleted file mode 100644 index 5562f6a0..00000000 --- a/src/imports/controls/doc/src/includes/qquickoverlay-popup-parent.qdocinc +++ /dev/null @@ -1,20 +0,0 @@ -The following example uses the attached \l {Overlay::overlay}{Overlay.overlay} -property to position a popup in the center of the window, despite the position -of the button that opens the popup: - -\code -Button { - onClicked: popup.open() - - Popup { - id: popup - - parent: Overlay.overlay - - x: Math.round((parent.width - width) / 2) - y: Math.round((parent.height - height) / 2) - width: 100 - height: 100 - } -} -\endcode diff --git a/src/imports/controls/doc/src/includes/qquickpopup-padding.qdocinc b/src/imports/controls/doc/src/includes/qquickpopup-padding.qdocinc deleted file mode 100644 index 31f5d2db..00000000 --- a/src/imports/controls/doc/src/includes/qquickpopup-padding.qdocinc +++ /dev/null @@ -1,10 +0,0 @@ -//! [padding] - -The padding properties are used to control the geometry of the -\l {contentItem}{content item}. - -Popup uses the same approach to padding as \l {Control::padding}{Control}. -For a visual explanation of the padding system, see the \l {Control Layout} -section of the documentation. - -//! [padding] diff --git a/src/imports/controls/doc/src/includes/qquickstackview.qdocinc b/src/imports/controls/doc/src/includes/qquickstackview.qdocinc deleted file mode 100644 index 20c9bdc3..00000000 --- a/src/imports/controls/doc/src/includes/qquickstackview.qdocinc +++ /dev/null @@ -1,5 +0,0 @@ -//! [pop-ownership] -Only items that StackView created itself (from a \l Component or \l [QML] -url) will be destroyed when popped. See \l {Item Ownership} for more -information. -//! [pop-ownership] diff --git a/src/imports/controls/doc/src/includes/qquickswipedelegate-interaction.qdocinc b/src/imports/controls/doc/src/includes/qquickswipedelegate-interaction.qdocinc deleted file mode 100644 index 05aeadb6..00000000 --- a/src/imports/controls/doc/src/includes/qquickswipedelegate-interaction.qdocinc +++ /dev/null @@ -1,5 +0,0 @@ -Both interactive and non-interactive items can be used here. Normal -event handling rules apply; if an interactive control like \l Button -is used, interaction signals of SwipeDelegate such as -\l {AbstractButton::}{clicked()} will not get emitted if the button -is clicked. diff --git a/src/imports/controls/doc/src/includes/qquickswitch.qdocinc b/src/imports/controls/doc/src/includes/qquickswitch.qdocinc deleted file mode 100644 index 985f85d9..00000000 --- a/src/imports/controls/doc/src/includes/qquickswitch.qdocinc +++ /dev/null @@ -1,28 +0,0 @@ -//! [position] - -This property holds the logical position of the thumb indicator. - -The position is expressed as a fraction of the indicator's size, in the range -\c 0.0 - \c 1.0. The position can be used for example to determine whether -the thumb has been dragged past the halfway point. For visualizing a thumb -indicator, the right-to-left aware \l visualPosition should be used instead. - -\sa visualPosition - -//! [position] - - -//! [visualPosition] - -This property holds the visual position of the thumb indicator. - -The position is expressed as a fraction of the indicator's size, in the range -\c 0.0 - \c 1.0. When the control is \l {Control::mirrored}{mirrored}, the -value is equal to \c {1.0 - position}. This makes the value suitable for -visualizing the thumb indicator taking right-to-left support into account. -In order to for example determine whether the thumb has been dragged past -the halfway point, the logical \l position should be used instead. - -\sa position - -//! [visualPosition] diff --git a/src/imports/controls/doc/src/includes/qquickuniversalstyle.qdocinc b/src/imports/controls/doc/src/includes/qquickuniversalstyle.qdocinc deleted file mode 100644 index a7ecbaef..00000000 --- a/src/imports/controls/doc/src/includes/qquickuniversalstyle.qdocinc +++ /dev/null @@ -1,53 +0,0 @@ -//! [conf] -\table - \header - \li Variable - \li Description - \row - \li \c Theme - \li Specifies the default \l {universal-theme-attached-prop}{Universal theme}. - The value can be one of the available themes, for example \c "Dark". - \row - \li \c Accent - \li Specifies the default \l {universal-accent-attached-prop}{Universal accent color}. - The value can be any \l {colorbasictypedocs}{color}, but it is recommended to use - one of the \l {pre-defined Universal colors}, for example \c "Violet". - \row - \li \c Foreground - \li Specifies the default \l {universal-foreground-attached-prop}{Universal foreground color}. - The value can be any \l {colorbasictypedocs}{color}, or one of the \l {pre-defined Universal colors}, - for example \c "Brown". - \row - \li \c Background - \li Specifies the default \l {universal-background-attached-prop}{Universal background color}. - The value can be any \l {colorbasictypedocs}{color}, or one of the \l {pre-defined Universal colors}, - for example \c "Steel". -\endtable -//! [conf] - -//! [env] -\table - \header - \li Variable - \li Description - \row - \li \c QT_QUICK_CONTROLS_UNIVERSAL_THEME - \li Specifies the default \l {universal-theme-attached-prop}{Universal theme}. - The value can be one of the available themes, for example \c "Dark". - \row - \li \c QT_QUICK_CONTROLS_UNIVERSAL_ACCENT - \li Specifies the default \l {universal-accent-attached-prop}{Universal accent color}. - The value can be any \l {colorbasictypedocs}{color}, but it is recommended to use - one of the \l {pre-defined Universal colors}, for example \c "Violet". - \row - \li \c QT_QUICK_CONTROLS_UNIVERSAL_FOREGROUND - \li Specifies the default \l {universal-foreground-attached-prop}{Universal foreground color}. - The value can be any \l {colorbasictypedocs}{color}, or one of the \l {pre-defined Universal colors}, - for example \c "Brown". - \row - \li \c QT_QUICK_CONTROLS_UNIVERSAL_BACKGROUND - \li Specifies the default \l {universal-background-attached-prop}{Universal background color}. - The value can be any \l {colorbasictypedocs}{color}, or one of the \l {pre-defined Universal colors}, - for example \c "Steel". -\endtable -//! [env] diff --git a/src/imports/controls/doc/src/qt6-changes.qdoc b/src/imports/controls/doc/src/qt6-changes.qdoc deleted file mode 100644 index efc1b84b..00000000 --- a/src/imports/controls/doc/src/qt6-changes.qdoc +++ /dev/null @@ -1,305 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols-changes-qt6.html - \title Changes to Qt Quick Controls - \ingroup changes-qt-5-to-6 - \brief Migrate Qt Quick Controls to Qt 6. - - Qt 6 is a result of the conscious effort to make the framework more - efficient and easy to use. - - We try to maintain compatibility for all the public APIs in each release. - Some changes were inevitable in an effort to make Qt a better framework. - - In this topic we summarize those changes in Qt Quick Controls, and provide - guidance to handle them. - - \section1 Migrating from Qt Quick Controls 1 - - Qt Quick Controls 1 was deprecated in Qt 5.11 and is removed from - Qt 6.0. Use Qt Quick Controls (previously known as Qt Quick Controls 2) - instead. For more information, refer to the - \l{Qt 5.15: Qt Quick Controls vs Qt Quick Controls 1} topic in the Qt 5 - documentation. - - \section1 Type registration changes - - Qt Quick Controls has undergone some large, mostly internal changes in Qt - 6. By making use of the improved type registration introduced in Qt 5.15, - we pave the way for compilation of the module's QML files to C++ and enable - tooling to become more effective. In particular, Qt Creator's QML code - model should have a more complete picture of types, making its completion - and error checking of Qt Quick Controls code more reliable. Static analysis - tools like qmllint and qmlformat also benefit by becoming aware of the - types that are now declared at compile time in C++. - - As a result of these changes, some things are done a little differently. - - \section2 Custom styles are now proper QML modules - - To enable compile time type registration, each Qt Quick Controls style is - now a proper QML module. Previously, a single \c Button.qml was sufficient - to create your own style. While convenient, this required some non-standard - API, which in turn required adaptation in tooling like Qt Designer. - - Now, all QML types that a style implements must be declared in that style's - qmldir file: - - \code - module MyStyle - Button 1.0 Button.qml - \endcode - - \omit - TODO: Once we have documentation for the CMake function qt6_add_qml_module, - this would be a good place to link to it, stating that you don't have to - manually write the qmldir files. - \endomit - - By unifying this with the rest of the QML world, styles become more - familiar to developers and hopefully easier to understand for beginners. As - a consequence, the following API had to be removed: - - \list - \li QQuickStyle::addStylePath() - \li QQuickStyle::availableStyles() - \li QQuickStyle::path() - \li QQuickStyle::stylePathList() - \li QT_QUICK_CONTROLS_STYLE_PATH - \endlist - - Now that the styles are required to be found in the QML engine's import - path like any other QML module, it is no longer necessary or possible to - support this API. - - \section3 Style names - - In addition, there is now only one valid, case-sensitive form for style - names: "Material", "MyStyle", and so on. That is: the style name must - exactly match the name of the QML module. This also applies to file - selectors, where previously, all style names were lower case. For example, - where the following was a valid structure for a Qt 5 project: - - \badcode - MyProject - ├── main.qml - ├── HomePage.qml - └── +material - └───HomePage.qml - \endcode - - In Qt 6, \c +material becomes \c +Material: - - \badcode - MyProject - ├── main.qml - ├── HomePage.qml - └── +Material - └───HomePage.qml - \endcode - - All of the existing ways to \l {Using Styles in Qt Quick Controls}{run an - application with a specific style} are still supported. - - \section2 Runtime and compile time style selection - - Importing a style now has extra meaning due to the way that imports work - internally. Previously, importing \c QtQuick.Controls would register the - control types from the current style with the QML engine: - - \qml - import QtQuick.Controls - \endqml - - We refer to this as runtime style selection, as the style is selected at - runtime. - - Explicitly importing \c QtQuick.Controls.Material would then simply expose - any extra API provided by that style (for example, the attached Material - type): - - \qml - import QtQuick.Controls.Material - \endqml - - Now, explicitly importing a style does both. - - This effectively means that the control types (like Button) from the last - imported style will be used. We refer to this as compile time style - selection. - - This has implications for existing code. Namely, if your application - supports more than one style, move these imports into their own QML files - that are file-selected. - - For example, if you have the following \c main.qml: - - \qml - import QtQuick.Controls - import QtQuick.Controls.Material - import QtQuick.Controls.Universal - - ApplicationWindow { - width: 600 - height: 400 - visible: true - - Material.theme: darkMode ? Material.Dark : Material.Light - Universal.theme: darkMode ? Universal.Dark : Universal.Light - - // Child items, etc. - } - \endqml - - You can move the common code into a "base" component: - - \qml - // MainWindow.qml - - import QtQuick.Controls - - ApplicationWindow {} - \endqml - - Then, add a \c +Material subdirectory, and in it, add the Material-specific code into \c MainWindow.qml: - - \qml - // +Material/MainWindow.qml - - import QtQuick.Controls.Material - - ApplicationWindow { - Material.theme: darkMode ? Material.Dark : Material.Light - } - \endqml - - Do the same for Universal: - - \qml - // +Universal/MainWindow.qml - - import QtQuick.Controls.Universal - - ApplicationWindow { - Universal.theme: darkMode ? Universal.Dark : Universal.Light - } - \endqml - - Then, in \c main.qml: - - \qml - import QtQuick.Controls - - MainWindow { - width: 600 - height: 400 - visible: true - - // Child items, etc. - } - \endqml - - See also: \l {Using File Selectors with Qt Quick Controls}. - - \section1 Default Style - - The Default style was renamed to "Basic", as it is no longer the default - style. Instead, the default style is now chosen based on the platform - that Qt was built for: - - \list - \li Android: \l {Material Style} - \li Linux: \l {Fusion Style} - \li macOS: \macos Style - \li Windows: Windows Style - \li All other platforms: \l {Basic Style} - \endlist - - Therefore, applications that didn't specify a style in Qt 5 and have customized - controls should \l {Using Styles in Qt Quick Controls}{explicitly specify} - the Basic style in Qt 6 to ensure that those controls look and behave as - they did with Qt 5. - - \section1 Palette - - The palette API was moved to QQuickItem. The various APIs that use palettes - in Qt Quick Controls are unchanged. - - \section1 Controls - - \section2 ApplicationWindow - - The deprecated overlay properties and attached API were removed. Use the - \l Overlay attached type instead. - - \section2 ComboBox - - The \l {ComboBox::}{pressed} property is now read-only. To modify the - visual pressed state of a ComboBox, use the \l {ComboBox::}{down} property - instead. - - \section2 Container - - The deprecated \c removeItem(var) function was removed. - \l {Container::}{removeItem(Item)} or \l {Container::}{takeItem(int)} can - be used instead. - - \section2 Dialog - - \l {Dialog}'s \l {Dialog::}{accepted()} and \l {Dialog::}{rejected()} - signals are now emitted before \l {Popup::}{closed()} when calling - \l {Dialog::}{done()}, \l {Dialog::}{accept()} and \l {Dialog::}{reject()}. - - \section2 Menu - - The deprecated \c removeItem(var) function was removed. - \l {Menu::}{removeItem(Item)} or \l {Menu::}{takeItem(int)} can be used - instead. - - \section2 ToolTip - - \l {ToolTip}'s timeout now begins only after \l {Popup::}{opened()} has - been emitted. This results in tooltips with enter transitions being visible - for the entire duration of the timeout property. This means that they are - visible slightly longer than they were before, so it may be worthwhile to - visually check tooltips in your application and adjust timeouts if - necessary. - - \section2 StackView - - The StackView.Transition enum value was deprecated. The operation argument - can be omitted in order to use the default transition for any given - operation. - - \section2 Tumbler - - \l {Item::}{implicitWidth} and \l {Item::}{implicitHeight} must now be - provided for \l {Tumbler}'s \l {Control::}{contentItem}, making it - consistent with all other controls. -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-basic.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-basic.qdoc deleted file mode 100644 index ee8d3ce4..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-basic.qdoc +++ /dev/null @@ -1,55 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-basic.html - \title Basic Style - - The Basic style is a basic all-round style. - - The Basic style is a simple and light-weight style that offers the maximum - performance for Qt Quick Controls. It is built with a minimal amount of Qt - Quick primitives, and keeps animations and transitions to the minimum. - - \image qtquickcontrols2-basic.png - - The style is selected by default when running Qt Quick Controls applications. - It is built into the module's resources, so by default it is shipped with - any application that depends on the Qt Quick Controls module - - \note The Basic style is used as a fallback for other styles. If a style - does not implement a certain control, the Basic style implementation of - that control is selected. - - \b {See also} \l {Material Style}, \l {Universal Style} - - \section1 Related Information - - \list - \li \l{Styling Qt Quick Controls} - \endlist -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-buttons.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-buttons.qdoc deleted file mode 100644 index 6a4c5926..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-buttons.qdoc +++ /dev/null @@ -1,191 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-buttons.html - \title Button Controls - \ingroup qtquickcontrols2-guidelines - \brief Guidelines for button controls - - Qt Quick Controls offers a selection of button-like controls. - - \annotatedlist qtquickcontrols2-buttons - - Each type of button has its own specific use case. The following - sections offer guidelines for choosing the appropriate type of button, - depending on the use case. - - \section1 Button Control - - \l Button is a clickable control that starts an action, or opens or - closes a popup. A button usually has a text label but it can also - contain an icon. - - Button is a very suitable control when a popup or dialog needs - to perform an action. The most common examples are Apply, Cancel, - Save, Close and Help. - - \image qtquickcontrols2-button.gif - - Recommendations: - - \list - \li The button's text should be a verb describing the action, or a noun matching - the title of the popup that will be opened. - \li Don't use a button to set state. \l Switch is more suitable for that. - \li Use the default font unless you have UI guidelines specifying otherwise. - \li If the text is localized, consider the influence of a longer text on the layout. - \endlist - - \b {See also} \l Button and \l AbstractButton - - \section1 CheckBox Control - - \image qtquickcontrols2-checkbox.gif - - \l CheckBox is used to build multi-selection option lists. Any number of - options can be selected, including none, but the options should - not be mutually exclusive. - - Use a single CheckBox for a yes/no choice, such as when you have - to accept the terms of service agreement in a form. - - For a single yes/no choice, it is also possible to use a switch. If the choice - concerns an option, it is best to use a CheckBox. If it concerns action to - be taken, a switch is recommended. - - When options can be grouped, you can use a partially checked CheckBox to - represent the whole group. Use the checkbox's - \l {CheckBox::checkState}{partially checked state} when a user selects - some, but not all, sub-items in the group. - - The three availables check states are: checked, partially checked and - unchecked. - - The checkable options are often listed vertically. - - Recommendations: - \list - \li The checkbox label should be a statement that the check mark makes true, - and that the absence of a check mark makes false. - \li The checkbox label should not contain a negative statement. - \li Use the default font, unless you have UI guidelines specifying otherwise. - \li If the text is localized, consider the influence of a longer text on the layout. - \endlist - - \b {See also} \l CheckBox - - \section1 DelayButton Control - - \l DelayButton is a button that incorporates a delay before triggering an action. - This delay prevents accidental presses. - - \image qtquickcontrols2-delaybutton.gif - - Recommendations: - \list - \li Use in touch user interfaces. - \li Use for actions that must be triggered with care. - \endlist - - \b {See also} \l Button and \l AbstractButton - - \section1 RadioButton Control - - \image qtquickcontrols2-radiobutton.gif - - \l RadioButton is used to select only one option from a set of options. - Selecting one option automatically deselects the one selected before. - - If there are only two mutually exclusive options, combine them into a - single checkbox or a switch. - - Recommendations: - - \list - \li Limit the label text to one line. - \li Ensure that a sensible default option is checked. - \li List RadioButton options vertically. - \li If the text is localized, consider the influence of a longer text on the layout. - \li Use the default font, unless you have UI guidelines that specify otherwise. - \li Just like with CheckBox, do not make the list too large. - \li In order to avoid confusion, do not put two groups of radio buttons next to each - other. - \endlist - - \b {See also} \l RadioButton - - \section1 RoundButton Control - - \l RoundButton is a clickable control that starts an action, or opens or - closes a popup. A round button with a square image icon or one-letter font - icon is circular. A circular RoundButton takes less space than a normal - \l Button, and can also be used as a floating action button. - - \image qtquickcontrols2-roundbutton.png - - Recommendations: - - \list - \li Keep labels short and concise. - \li If the text is localized, consider the influence of a longer text on the layout. - \endlist - - \b {See also} \l RoundButton - - \section1 Switch Control - - \image qtquickcontrols2-switch.png - - \l Switch represents a physical switch that allows users to choose between an "on" - or "off" state. - Use a switch for binary operations that take effect immediately after it has been - switched on. For example, a switch to turn WIFI on or off. - - Recommendations: - - \list - \li Keep labels short and concise. - \li If the text is localized, consider the influence of a longer text on the layout. - \endlist - - \b {See also} \l Switch - - \section1 ToolButton Control - - \image qtquickcontrols2-toolbutton.png - - \l ToolButton is nearly identical to \l Button, but it has a graphical - appearance that makes it more suitable for insertion into a \l ToolBar. - - \b {See also} \l ToolButton - - \section1 Related Information - \list - \li \l {Qt Quick Controls Guidelines} - \endlist -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-configuration.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-configuration.qdoc deleted file mode 100644 index 8ac2b275..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-configuration.qdoc +++ /dev/null @@ -1,204 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-configuration.html - \keyword Qt Quick Controls Configuration File - \title Qt Quick Controls Configuration File - \keyword Qt Quick Controls 2 Configuration File - - Qt Quick Controls support a special configuration file, \c qtquickcontrols2.conf, - which is built into an application's resources. - - The configuration file can specify the preferred style and certain style-specific - attributes. The following example specifies that the preferred style is the \l {Material style}. - Furthermore, when the application is run with the Material style, its theme is light and the - accent and primary colors are teal and blue grey, respectively. However, if the application - is run with the \l {Universal style} instead, the accent color is red and the appropriate theme - is chosen based on the system theme colors. - - \code - [Controls] - Style=Material - - [Universal] - Theme=System - Accent=Red - - [Material] - Theme=Light - Accent=Teal - Primary=BlueGrey - \endcode - - It is possible to specify a custom location for the configuration file with - the \l {Supported Environment Variables in Qt Quick Controls} - {QT_QUICK_CONTROLS_CONF} environment variable. - - \section1 Controls Section - - The following values can be specified in a \c Controls section of the - configuration file: - - \table - \header - \li Variable - \li Description - \row - \li \c Style - \li Specifies the style to run the application with. - The value can be the name of one of the \l {Available Styles}{built-in styles} - or a \l {Creating a Custom Style}{custom style}. - \row - \li \c FallbackStyle - \li Specifies the style to use for controls that are not implemented. - The style must be one of the \l {Available Styles}{built-in styles}. - By default, the \l {Basic Style}{Basic} style is used. - \endtable - - \section1 Imagine Section - - The following table lists values that can be used to configure the - \l {Imagine style} in an \c Imagine section of the configuration file: - - \include qquickimaginestyle.qdocinc conf - - \section1 Material Section - - The following table lists values that can be used to configure the - \l {Material style} in a \c Material section of the configuration file: - - \include qquickmaterialstyle.qdocinc conf - - \section1 Universal Section - - The following table lists values that can be used to configure the - \l {Universal style} in a \c Universal section of the configuration file: - - \include qquickuniversalstyle.qdocinc conf - - \section1 Font Configuration - - The default \l {Control::font}{font} can be specified in a \c Font sub-group - in each style's section in the configuration file. The \c Font sub-group can - be defined in two alternative ways: - - \code - [Basic] - Font\Family=Open Sans - Font\PixelSize=20 - - [Material\Font] - Family=Open Sans - PixelSize=20 - \endcode - - Supported font attributes: - \table - \header - \li Variable - \li Description - \row - \li \c Family - \li The \l {QFont::family}{font family}. - \row - \li \c PointSize - \li The \l {QFont::pointSizeF}{point size}. - \row - \li \c PixelSize - \li The \l {QFont::pixelSize}{pixel size}. - \row - \li \c StyleHint - \li The \l {QFont::styleHint}{style hint}. - Available values: \c SansSerif, \c Helvetica, \c Serif, \c Times, \c TypeWriter, \c Courier, - \c OldEnglish, \c Decorative, \c Monospace, \c Fantasy, \c Cursive. - \row - \li \c Weight - \li The \l {QFont::}{weight}. Qt uses a weighting scale from \c 1 to \c 1000 compatible with OpenType. A weight of \c 1 will be thin, - whilst \c 1000 will be extremely black. - Available pre-defined weights: \c Thin (100), \c ExtraLight (200), \c Light (300), \c Normal (400), - \c Medium (500), \c DemiBold (600), \c Bold (700), \c ExtraBold (800), - \c Black (900). - \row - \li \c Style - \li The \l {QFont::}{style}. - Available values: \c StyleNormal, \c StyleItalic, \c StyleOblique. - \endtable - - \section1 Palette Configuration - - The default \c palette can be configured for each style using the - \c Palette sub-group in the configuration file. The \c Palette sub-group can be - defined in two alternative ways: - - \code - [Fusion] - Palette\Window=#dedede - Palette\WindowText=#212121 - \endcode - - or: - \code - [Fusion\Palette] - Window=#dedede - WindowText=#212121 - \endcode - - See \l [QtQuick]{Palette} QML type for more information. - - \section1 Using the Configuration File in a Project - - In order to make it possible for Qt Quick Controls to find the configuration file, - it must be built into application's resources using the \l {The Qt Resource System}. - Here's an example \c .qrc file: - - \code - - - qtquickcontrols2.conf - - - \endcode - - \note Qt Quick Controls uses a file selector to load the configuration file. It - is possible to provide a different configuration file for different platforms and - locales. See \l QFileSelector documentation for more details. - - Finally, the \c .qrc file must be listed in the application's \c .pro file so that - the build system knows about it. For example: - - \code - RESOURCES = application.qrc - \endcode - - \section1 Related Information - - \list - \li \l{Styling Qt Quick Controls} - \li \l{Supported Environment Variables in Qt Quick Controls} - \endlist -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-containers.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-containers.qdoc deleted file mode 100644 index 81e24c26..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-containers.qdoc +++ /dev/null @@ -1,113 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-containers.html - \title Container Controls - \ingroup qtquickcontrols2-guidelines - \brief Guidelines for container controls - - Qt Quick Controls offers a selection of container-like controls. - - \annotatedlist qtquickcontrols2-containers - - Each type of container can be used to group a set of controls together. - The following sections offer guidelines for choosing the appropriate type - of container, depending on the use case. - - \section1 ApplicationWindow Control - - \image qtquickcontrols2-applicationwindow-wireframe.png - - \l ApplicationWindow creates the root window of an application, and makes - it easy to add an optional header and footer to that window. - - \section1 Frame Control - - \image qtquickcontrols2-frame.png - - \l Frame is used to layout a logical group of controls together, within - a visual frame. - - \section1 GroupBox Control - - \image qtquickcontrols2-groupbox.png - - \l GroupBox is used to layout a logical group of controls together, - within a titled visual frame. - - \section1 Page Control - - \image qtquickcontrols2-page-wireframe.png - - \l Page provides page-specific header and footer items. - It is perfectly possible to use ApplicationWindow for setting the header - and the footer, but if you have a header and footer which varies per - screen, then it is better to use \l Page. - - \section1 Pane Control - - \image qtquickcontrols2-pane.png - - \l Pane provides a background color that matches with the application - style and theme. Pane does not provide a layout of its own, but requires - you to position its contents, for instance by using a \l RowLayout or - a \l ColumnLayout. - - \section1 ScrollView Control - - \image qtquickcontrols2-scrollview-wireframe.png - - \l ScrollView provides scrolling for user-defined content. - - \section1 StackView Control - - \image qtquickcontrols2-stackview-wireframe.png - - \l StackView organizes content pages into a stack using a last-in-first-out - principle: the last item to be "pushed" onto the stack is the first one to - be removed, and the top-most item is always the one that is visible. - - \section1 SwipeView Control - - \image qtquickcontrols2-swipeview-wireframe.png - - \l SwipeView organizes content pages into a swipable strip. - - \section1 TabBar Control - - \image qtquickcontrols2-tabbar-wireframe.png - - \l TabBar organizes content pages into tabs. - - \section1 ToolBar Control - - \image qtquickcontrols2-toolbar.png - - \l ToolBar is a container of application-wide and context-sensitive - actions and controls. -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-cppclasses.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-cppclasses.qdoc deleted file mode 100644 index 293ac6de..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-cppclasses.qdoc +++ /dev/null @@ -1,58 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \module QtQuickControls2 - \keyword Qt Quick Controls C++ Classes - \title Qt Quick Controls C++ Classes - \keyword Qt Quick Controls 2 C++ Classes - \ingroup modules - \qtcmakepackage QuickControls2 - \qtvariable quickcontrols2 - - \brief Provides classes for setting up the controls from C++. - - The C++ types can be included into your application using the following - include statement: - - \code - #include - \endcode - - \note If you are using a few classes from this module, we recommend including - those specific classes only instead of the module. - - To link against the corresponding C++ libraries, add the following to your - qmake project file: - - \code - QT += quickcontrols2 - \endcode - - The \l{Qt Quick Controls} page contains information about how to use the - module. -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-customize.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-customize.qdoc deleted file mode 100644 index ba62425f..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-customize.qdoc +++ /dev/null @@ -1,986 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-customize.html - \keyword Customizing Qt Quick Controls 2 - \title Customizing Qt Quick Controls - \brief A set of UI controls to create user interfaces in Qt Quick - - Qt Quick Controls consist of a hierarchy (tree) of items. In order to - provide a custom look and feel, the default QML implementation of each - item can be replaced with a custom one. - - \section1 Customizing a Control - - Sometimes you'll want to create a "one-off" look for a specific part of - your UI, and use a complete style everywhere else. Perhaps you're happy - with the style you're using, but there's a certain button that has some - special significance. - - The first way to create this button is to simply define it in-place, - wherever it is needed. For example, perhaps you're not satisfied with the - Basic style's Button having square corners. To make them rounded, you - can override the \l {Control::}{background} item and set the radius - property of Rectangle: - - \include customize-button-background.qdocinc file - - The second way to create the button is good if you plan to use your rounded - button in several places. It involves moving the code into its own QML file - within your project. - - For this approach, we'll copy the background code from the Basic style's - \c Button.qml. This file can be found in the following path in your Qt - installation: - - \c {$QTDIR/qml/QtQuick/Controls/Basic/Button.qml} - - After doing that, we'll simply add the following line: - - \code - radius: 4 - \endcode - - To avoid confusion with the controls in the - module itself, we'll call the file \c MyButton.qml. To use the control in - your application, refer to it by its filename: - - \qml - import QtQuick.Controls - - ApplicationWindow { - MyButton { - text: qsTr("A Special Button") - } - } - \endqml - - The third way to create the button is a bit more structured, both in terms - of where the file sits in the file system and how it is used in QML. First, - copy an existing file as you did above, but this time, put it into a - subfolder in your project named (for example) \c controls. To use the - control, first import the folder into a namespace: - - \qml - import QtQuick.Controls - import "controls" as MyControls - - ApplicationWindow { - MyControls.Button { - text: qsTr("A Special Button") - } - } - \endqml - - As you now have the \c MyControls namespace, you can name the controls after - their actual counterparts in the Qt Quick Controls module. You can repeat - this process for any control that you wish to add. - - An added benefit of these three methods is that it's not necessary to - implement the template from scratch. - - \section1 Creating a Custom Style - - There are several ways to go about creating your own styles. Below, we'll - explain the various approaches. - - \section2 Definition of a Style - - In Qt Quick Controls, a style is essentially a set of QML files within a - single directory. There are four requirements for a style to be - \l {Using Styles in Qt Quick Controls}{usable}: - - \list - \li At least one QML file whose name matches a control (for example, - \c Button.qml) must exist. - \li Each QML file must contain the relevant type from the \l {Qt Quick Templates 2} - {QtQuick.Templates} import as the root item. For example, - Button.qml must contain a Button template as its root item. - - If we instead used the corresponding type from the \l {Qt Quick Controls} - {QtQuick.Controls} import as we did in the previous section, it would not work: - the control we were defining would try to derive from itself. - \li A \l {Module Definition qmldir Files}{qmldir} file must exist alongside - the QML file(s). Below is an example of a simple \c qmldir file for a style that - provides a button: - - \badcode - module MyStyle - Button 2.15 Button.qml - \endcode - - If you're using \l {Compile-Time Style Selection}{compile-time style - selection}, the qmldir should also import the fallback style: - - \badcode - # ... - import QtQuick.Controls.Basic auto - \endcode - - This can also be done for \l {Run-Time Style Selection}{run-time style selection} - instead of using, for example, \l QQuickStyle::setFallbackStyle(). - - The directory structure for such a style looks like this: - - \badcode - MyStyle - ├─── Button.qml - └─── qmldir - \endcode - \li The files must be in a directory that is findable via the \l {QML Import Path}. - - For example, if the path to \e MyStyle directory mentioned above was - \c /home/user/MyApp/MyStyle, then \c /home/user/MyApp must be added to - the QML import path. - - To \l {Using Styles in Qt Quick Controls}{use} \e MyStyle in \e MyApp, - refer to it by name: - - \list - \li \c {./MyApp -style MyStyle} - \endlist - - The style name must match the casing of the style directory; passing - \e mystyle or \e MYSTYLE is not supported. - \endlist - - By default, the styling system uses the Basic style as a fallback for - controls that aren't implemented. To customize or extend any other built-in - style, it is possible to specify a different fallback style using - \l[QtQuickControls2]{QQuickStyle}. - - What this means is that you can implement as many controls as you like for - your custom style, and place them almost anywhere. It also allows users to - create their own styles for your application. - - \section3 Previewing Custom Styles in Qt Quick Designer - - Using the approach above, it is possible to preview a custom style - in Qt Quick Designer. In order to do so, - ensure that the project has a - \l {Qt Quick Controls Configuration File}{qtquickcontrols2.conf} file, - and that the following entry exists: - - \badcode - [Controls] - Style=MyStyle - \endcode - - For more information, take a look at the - \l {Qt Quick Controls - Flat Style}{Flat Style example}. - - \section2 Style-specific C++ Extensions - - Sometimes you may need to use C++ to extend your custom style. There are two - ways to expose such types to QML: - - \list - \li If the style that uses the type is the only style used by an application, - it's enough to register it with the QML engine via qmlRegisterType(): - - \code - qmlRegisterType("MyApp", 1, 0, "ACoolItem"); - \endcode - - See \l {Using C++ Data From QML} for more information about this. - \li If the style that uses the type is one of many styles used by an - application, it may be better to only register it when necessary. This - is the point at which it would make sense to implement your own - \l {Creating C++ Plugins for QML}{QML plugin}. - - Using a plugin as part of your style is not that much different from - using a set of QML files. The only difference is that the plugin and - its \c qmldir file must be present in the same directory as the QML - files. - \endlist - - \section3 Considerations for custom styles - - When implementing your own style and customizing controls, there are some - points to keep in mind to ensure that your application is as performant as - possible. - - \section4 Avoid assigning an id to styles' implementations of item delegates - - As explained in \l {Definition of a Style}, when you implement your - own style for a control, you start off with the relevant template for - that control. For example, a style's \c Button.qml will be structured - similarly to this: - - \qml - T.Button { - // ... - - background: Rectangle { - // ... - } - - contentItem: Text { - // ... - } - - // ... - } - \endqml - - When you use a Button in your application, the \c background and - \c contentItem items will be created and parented to the root \c Button - item: - - \qml - // Creates the Button root item, the Rectangle background, - // and the Text contentItem. - Button { - text: qsTr("Confirm") - } - \endqml - - Suppose you then needed to do a one-off customization of the Button (as - explained in \l {Customizing a Control}): - - \include customize-button-background.qdocinc file - - In QML, this would normally result in both the default \c background - implementation and the one-off, custom \c background items being created. - Qt Quick Controls uses a technique that avoids creating both items, and - instead only creates the custom \c background, greatly improving the - creation performance of controls. - - This technique relies on the absence of an \l {The id Attribute}{id} in the - style's implementation of that item. If an id is assigned, the technique - cannot work, and both items will be created. For example, it can be - tempting to assign an id to the \c background or \c contentItem so that - other objects within the file can refer to those items: - - \qml - T.Button { - // ... - - background: Rectangle { - id: backgroundRect - // ... - } - - contentItem: Text { - // Use backgroundRect in some way... - } - - // ... - } - \endqml - - With this code, every time a Button instance with a customized background - is created, both backgrounds will be created, resulting in sub-optimal - creation performance. - - Prior to Qt 5.15, the old, unused background would be deleted to release - the resources associated with it. However, as the control does not own the - items, it should not delete them. As of Qt 5.15, old items are no longer - deleted, and so the \c backgroundRect item will live longer than it needs - to—typically until the application exits. Although the old item will be - hidden, visually unparented from the control, and removed from the - accessibility tree, it is important to keep the creation time and memory - usage of these unused items in mind when assigning an id in this context. - - \section4 Avoid imperative assignments of custom items - - The technique mentioned in the section above only works when an item is - \l {Prefer Declarative Bindings Over Imperative Assignments}{declaratively} - assigned for the first time, and so imperative assignments will result in - orphaned items. Always use declarative bindings to assign custom items - when possible. - - \section3 Attached properties - - It is common for a style to have certain properties or attributes that - apply to all controls. \l {Attached Properties and Attached Signal - Handlers}{Attached properties} are a great way of extending an item in QML - without having to modify any existing C++ belonging to that item. For - example, both the \l {Material Style}{Material} and \l {Universal - Style}{Universal} styles have an attached theme property that controls - whether an item and its children will be rendered in a light or dark theme. - - As an example, let's add an attached property that controls elevation. Our - style will illustrate the elevation with a drop shadow; the higher the - elevation, the larger the shadow. - - The first step is to \l {Qt Creator: Project Types}{create a new Qt Quick - Controls application} in Qt Creator. After that, we - \l {Qt Creator: Creating C++ Classes}{add a C++ type} that stores the elevation. Since - the type will be used for every control supported by our style, and because - we may wish to add other attached properties later on, we'll call it - MyStyle. Here is \c MyStyle.h: - - \code - #ifndef MYSTYLE_H - #define MYSTYLE_H - - #include - #include - - class MyStyle : public QObject - { - Q_OBJECT - Q_PROPERTY(int elevation READ elevation WRITE setElevation NOTIFY elevationChanged) - - public: - explicit MyStyle(QObject *parent = nullptr); - - static MyStyle *qmlAttachedProperties(QObject *object); - - int elevation() const; - void setElevation(int elevation); - - signals: - void elevationChanged(); - - private: - int m_elevation; - }; - - QML_DECLARE_TYPEINFO(MyStyle, QML_HAS_ATTACHED_PROPERTIES) - - #endif // MYSTYLE_H - \endcode - - \c MyStyle.cpp: - - \code - #include "mystyle.h" - - MyStyle::MyStyle(QObject *parent) : - QObject(parent), - m_elevation(0) - { - } - - MyStyle *MyStyle::qmlAttachedProperties(QObject *object) - { - return new MyStyle(object); - } - - int MyStyle::elevation() const - { - return m_elevation; - } - - void MyStyle::setElevation(int elevation) - { - if (elevation == m_elevation) - return; - - m_elevation = elevation; - emit elevationChanged(); - } - \endcode - - The \c MyStyle type is special in the sense that it shouldn't be - instantiated, but rather used for its attached properties. For that reason, - we register it in the following manner in \c main.cpp: - - \code - #include - #include - - #include "mystyle.h" - - int main(int argc, char *argv[]) - { - QGuiApplication app(argc, argv); - - qmlRegisterUncreatableType("MyStyle", 1, 0, "MyStyle", "MyStyle is an attached property"); - - QQmlApplicationEngine engine; - // Make the directory containing our style known to the QML engine. - engine.addImportPath(":/"); - engine.load(QUrl(QLatin1String("qrc:/main.qml"))); - - return app.exec(); - } - \endcode - - We then copy \c Button.qml from the Basic style in - \c {$QTDIR/qml/QtQuick/Controls/Basic/} into a new \c myproject folder in our - project directory. Add the newly copied \c Button.qml to \c qml.qrc, which is - the resource file that contains our QML files. - - Next, we add a drop shadow to the \l {Control::}{background} delegate of - the Button: - - \code - // ... - import QtGraphicalEffects - import MyStyle - // ... - - background: Rectangle { - // ... - - layer.enabled: control.enabled && control.MyStyle.elevation > 0 - layer.effect: DropShadow { - verticalOffset: 1 - color: control.visualFocus ? "#330066ff" : "#aaaaaa" - samples: control.MyStyle.elevation - spread: 0.5 - } - } - \endcode - - Note that we: - - \list - \li Don't bother using the drop shadow when the elevation is \c 0 - \li Change the shadow's color depending on whether or not the button has - focus - \li Make the size of the shadow depend on the elevation - \endlist - - To try out the attached property, we create a \l Row with two Buttons in - \c main.qml: - - \qml - import QtQuick - import QtQuick.Controls - - import MyStyle 1.0 - - ApplicationWindow { - id: window - width: 400 - height: 400 - visible: true - - Row { - spacing: 20 - anchors.centerIn: parent - - Button { - text: "Button 1" - } - Button { - text: "Button 2" - MyStyle.elevation: 10 - } - } - } - \endqml - - One button has no elevation, and the other has an elevation of \c 10. - - With that in place, we can run our example. To tell the application to - use our new style, we pass \c {-style MyStyle} as an application - argument, but there are \l {Using Styles in Qt Quick Controls}{many - ways} to specify the style to use. - - The end result: - - \image qtquickcontrols2-customize-buttons.png - - Note that the \c {import MyStyle 1.0} statement is only necessary - because we are using the attached property belonging to \c MyStyle. - Both buttons will use our custom style, even if we were to remove the - import. - - \section1 Customization Reference - - The following snippets present examples where the Basic style's controls - have been customized using the same approach as the - \l {Customizing a Control} section. The code can be used as a starting - point to implement a custom look and feel. - - \section2 Customizing ApplicationWindow - - ApplicationWindow consists of one visual item: - \l {ApplicationWindow::background}{background}. - - \code - import - import QtQuick.Controls - - ApplicationWindow { - visible: true - - background: Rectangle { - gradient: Gradient { - GradientStop { position: 0; color: "#ffffff" } - GradientStop { position: 1; color: "#c1bbf9" } - } - } - } - \endcode - - - \section2 Customizing BusyIndicator - - BusyIndicator consists of two visual items: \l {Control::background}{background} - and \l {Control::contentItem}{contentItem}. - - \image qtquickcontrols2-busyindicator-custom.png - - \snippet qtquickcontrols2-busyindicator-custom.qml file - - - \section2 Customizing Button - - Button consists of two visual items: \l {Control::background}{background} - and \l {Control::contentItem}{content item}. - - \image qtquickcontrols2-button-custom.png - - \snippet qtquickcontrols2-button-custom.qml file - - - \section2 Customizing CheckBox - - CheckBox consists of three visual items: \l {Control::background}{background}, - \l {Control::contentItem}{contentItem} and \l {AbstractButton::indicator}{indicator}. - - \image qtquickcontrols2-checkbox-custom.png - - \snippet qtquickcontrols2-checkbox-custom.qml file - - \section2 Customizing CheckDelegate - - CheckDelegate consists of three visual items: \l {Control::background}{background}, - \l {Control::contentItem}{contentItem} and \l {AbstractButton::indicator}{indicator}. - - \image qtquickcontrols2-checkdelegate-custom.png - - \snippet qtquickcontrols2-checkdelegate-custom.qml file - - - \section2 Customizing ComboBox - - ComboBox consists of \l {Control::background}{background}, - \l {Control::contentItem}{content item}, \l {ComboBox::popup}{popup}, - \l {ComboBox::indicator}{indicator}, and \l {ComboBox::delegate}{delegate}. - - \image qtquickcontrols2-combobox-custom.png - - \snippet qtquickcontrols2-combobox-custom.qml file - - - \section2 Customizing DelayButton - - DelayButton consists of two visual items: \l {Control::background}{background} - and \l {Control::contentItem}{content item}. - - \image qtquickcontrols2-delaybutton-custom.png - - \snippet qtquickcontrols2-delaybutton-custom.qml file - - - \section2 Customizing Dial - - Dial consists of two visual items: \l {Control::background}{background} - and \l {Dial::handle}{handle}. - - \image qtquickcontrols2-dial-custom.png - - \snippet qtquickcontrols2-dial-custom.qml file - - - \section2 Customizing Drawer - - Drawer can have a visual \l {Control::background}{background} - item. - - \code - background: Rectangle { - Rectangle { - x: parent.width - 1 - width: 1 - height: parent.height - color: "#21be2b" - } - } - \endcode - - - \section2 Customizing Frame - - Frame consists of one visual item: \l {Control::background}{background}. - - \image qtquickcontrols2-frame-custom.png - - \snippet qtquickcontrols2-frame-custom.qml file - - - \section2 Customizing GroupBox - - GroupBox consists of two visual items: \l {Control::background}{background} - and \l {GroupBox::label}{label}. - - \image qtquickcontrols2-groupbox-custom.png - - \snippet qtquickcontrols2-groupbox-custom.qml file - - - \section2 Customizing ItemDelegate - - ItemDelegate consists of two visual items: \l {Control::background}{background} - and \l {Control::contentItem}{content item}. - - \image qtquickcontrols2-itemdelegate-custom.png - - \snippet qtquickcontrols2-itemdelegate-custom.qml file - - - \section2 Customizing Label - - Label can have a visual \l {Label::background}{background} item. - - \image qtquickcontrols2-label-custom.png - - \snippet qtquickcontrols2-label-custom.qml file - - - \section2 Customizing Menu - - \list - \li \l Menu consists of a visual \l {Popup::background}{background} item. - \li \l MenuItem consists of four visual items: \l {Control::background}{background}, - \l {Control::contentItem}{content item}, \l {AbstractButton::}{indicator}, and - \l {MenuItem::}{arrow}. - \li \l MenuSeparator consists of a visual \l {Control::background}{background} and - \l {Control::contentItem}{content item}. - \endlist - - \image qtquickcontrols2-menu-custom.png - - \quotefromfile qtquickcontrols2-menu-custom.qml - \skipto import QtQuick - \printuntil import QtQuick.Controls - \skipto Menu - \printto eof - - - \section2 Customizing MenuBar - - MenuBar can have a visual \l {Control::background}{background} item, - and MenuBarItem consists of two visual items: \l {Control::background} - {background} and \l {Control::contentItem}{content item}. - - \image qtquickcontrols2-menubar-custom.png - - \quotefromfile qtquickcontrols2-menubar-custom.qml - \skipto import QtQuick - \printuntil import QtQuick.Controls - \skipto MenuBar - \printto eof - - - \section2 Customizing PageIndicator - - PageIndicator consists of a \l {Control::background}{background}, \l {Control::contentItem}{content item}, and \l {PageIndicator::delegate}{delegate}. - - \image qtquickcontrols2-pageindicator-custom.png - - \snippet qtquickcontrols2-pageindicator-custom.qml file - - - \section2 Customizing Pane - - Pane consists of a \l {Control::background}{background}. - - \image qtquickcontrols2-pane-custom.png - - \snippet qtquickcontrols2-pane-custom.qml file - - - \section2 Customizing Popup - - Popup consists of a \l {Popup::background}{background} and - \l {Popup::contentItem}{content item}. - - \image qtquickcontrols2-popup-custom.png - - \quotefromfile qtquickcontrols2-popup-custom.qml - \skipto import QtQuick - \printuntil import QtQuick.Controls - \codeline - \skipto Popup - \printuntil { - \printuntil } - \printuntil } - \printuntil } - - - \section2 Customizing ProgressBar - - ProgressBar consists of two visual items: \l {Control::background}{background} - and \l {Control::contentItem}{content item}. - - \image qtquickcontrols2-progressbar-custom.png - - \snippet qtquickcontrols2-progressbar-custom.qml file - - - \section2 Customizing RadioButton - - RadioButton consists of three visual items: \l {Control::background}{background}, - \l {Control::contentItem}{content item} and \l {AbstractButton::indicator}{indicator}. - - \image qtquickcontrols2-radiobutton-custom.png - - \snippet qtquickcontrols2-radiobutton-custom.qml file - - - \section2 Customizing RadioDelegate - - RadioDelegate consists of three visual items: \l {Control::background}{background}, - \l {Control::contentItem}{contentItem} and \l {AbstractButton::indicator}{indicator}. - - \image qtquickcontrols2-radiodelegate-custom.png - - \snippet qtquickcontrols2-radiodelegate-custom.qml file - - - \section2 Customizing RangeSlider - - RangeSlider consists of three visual items: - \l {Control::background}{background}, - \l {RangeSlider::first}{first.handle} and - \l {RangeSlider::second.handle}{second.handle}. - - \image qtquickcontrols2-rangeslider-custom.png - - \snippet qtquickcontrols2-rangeslider-custom.qml file - - - \section2 Customizing RoundButton - - RoundButton can be customized in the same manner as - \l {Customizing Button}{Button}. - - - \section2 Customizing ScrollBar - - ScrollBar consists of two visual items: \l {Control::background}{background} - and \l {Control::contentItem}{content item}. - - \image qtquickcontrols2-scrollbar-custom.png - - \snippet qtquickcontrols2-scrollbar-custom.qml file - - - \section2 Customizing ScrollIndicator - - ScrollIndicator consists of two visual items: \l {Control::background}{background} - and \l {Control::contentItem}{content item}. - - \image qtquickcontrols2-scrollindicator-custom.png - - \snippet qtquickcontrols2-scrollindicator-custom.qml file - - - \section2 Customizing ScrollView - - ScrollView consists of a \l {Control::background}{background} item, - and horizontal and vertical scroll bars. - - \image qtquickcontrols2-scrollview-custom.png - - \snippet qtquickcontrols2-scrollview-custom.qml file - - - \section2 Customizing Slider - - Slider consists of two visual items: \l {Control::background}{background}, - and \l {Slider::handle}{handle}. - - \image qtquickcontrols2-slider-custom.png - - \snippet qtquickcontrols2-slider-custom.qml file - - - \section2 Customizing SpinBox - - SpinBox consists of four visual items: \l {Control::background}{background}, - \l {Control::contentItem}{contentItem}, \l {SpinBox::up.indicator}{up indicator}, - and \l {SpinBox::down.indicator}{down indicator}. - - \image qtquickcontrols2-spinbox-custom.png - - \snippet qtquickcontrols2-spinbox-custom.qml file - - - \section2 Customizing SplitView - - SplitView consists of a visual \l {SplitView::handle}{handle} delegate. - - \image qtquickcontrols2-splitview-custom.png - - \snippet qtquickcontrols2-splitview-custom.qml 1 - - - \section2 Customizing StackView - - StackView can have a visual \l {Control::background}{background} - item, and it allows customizing the transitions that are used for - push, pop, and replace operations. - - \snippet qtquickcontrols2-stackview-custom.qml file - - - \section2 Customizing SwipeDelegate - - SwipeDelegate consists of six visual items: \l {Control::background}{background}, - \l {Control::contentItem}{content item}, \l {AbstractButton::indicator}{indicator}, - \c swipe.left, \c swipe.right, and \c swipe.behind. - - \image qtquickcontrols2-swipedelegate-custom.png - - \snippet qtquickcontrols2-swipedelegate-custom.qml file - - - \section2 Customizing SwipeView - - SwipeView can have a visual \l {Control::background}{background} - item. The navigation is implemented by the \l {Control::contentItem} - {content item}. - - \snippet qtquickcontrols2-swipeview-custom.qml file - - - \section2 Customizing Switch - - Switch consists of three visual items: \l {Control::background}{background}, - \l {Control::contentItem}{content item} and \l {AbstractButton::indicator}{indicator}. - - \image qtquickcontrols2-switch-custom.png - - \snippet qtquickcontrols2-switch-custom.qml file - - \section2 Customizing SwitchDelegate - - SwitchDelegate consists of three visual items: \l {Control::background}{background}, - \l {Control::contentItem}{contentItem} and \l {AbstractButton::indicator}{indicator}. - - \image qtquickcontrols2-switchdelegate-custom.png - - \snippet qtquickcontrols2-switchdelegate-custom.qml file - - - \section2 Customizing TabBar - - TabBar consists of two visual items: \l {Control::background}{background}, - and \l {Control::contentItem}{contentItem}. - - \image qtquickcontrols2-tabbar-custom.png - - \snippet qtquickcontrols2-tabbar-custom.qml file - - - \section2 Customizing TabButton - - TabButton can be customized in the same manner as - \l {Customizing Button}{Button}. - - - \section2 Customizing TextArea - - TextArea consists of a \l {TextArea::background}{background} item. - - \image qtquickcontrols2-textarea-custom.png - - \snippet qtquickcontrols2-textarea-custom.qml file - - - \section2 Customizing TextField - - TextField consists of a \l {TextField::background}{background} item. - - \image qtquickcontrols2-textfield-custom.png - - \snippet qtquickcontrols2-textfield-custom.qml file - - - \section2 Customizing ToolBar - - ToolBar consists of one visual item: \l {Control::background}{background}. - - \image qtquickcontrols2-toolbar-custom.png - - \snippet qtquickcontrols2-toolbar-custom.qml file - - - \section2 Customizing ToolButton - - ToolButton consists of two visual items: \l {Control::background}{background} - and \l {Control::contentItem}{content item}. - - \image qtquickcontrols2-toolbutton-custom.png - - \snippet qtquickcontrols2-toolbutton-custom.qml file - - - \section2 Customizing ToolSeparator - - ToolSeparator consists of two visual items: \l {Control::background}{background} - and \l {Control::contentItem}{content item}. - - \image qtquickcontrols2-toolseparator-custom.png - - \snippet qtquickcontrols2-toolseparator-custom.qml file - - - \section2 Customizing ToolTip - - ToolTip consists of two visual items: \l {Popup::background}{background} - and \l {Popup::contentItem}{content item}. - - \quotefromfile qtquickcontrols2-tooltip-custom.qml - \skipto import QtQuick - \printuntil import QtQuick.Controls - \skipto ToolTip - \printuntil } - \printuntil } - \printuntil } - - - \section2 Customizing Tumbler - - Tumbler consists of three visual items: - \l {Control::background}{background}, - \l {Control::contentItem}{contentItem}, and - \l {Tumbler::delegate}{delegate}. - - \image qtquickcontrols2-tumbler-custom.png - - \snippet qtquickcontrols2-tumbler-custom.qml file - - If you want to define your own contentItem, use either a \l ListView or - \l PathView as the root item. For a wrapping Tumbler, use PathView: - - \snippet qtquickcontrols2-tumbler-pathView.qml contentItem - - For a non-wrapping Tumbler, use ListView: - - \snippet qtquickcontrols2-tumbler-listView.qml contentItem -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-delegates.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-delegates.qdoc deleted file mode 100644 index bea87abf..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-delegates.qdoc +++ /dev/null @@ -1,79 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-delegates.html - \title Delegate Controls - \ingroup qtquickcontrols2-guidelines - \brief Guidelines for delegate controls - - Qt Quick Controls offers a selection of controls that are used as - delegates in views. - - \annotatedlist qtquickcontrols2-delegates - - Each type of delegate has its own specific target use case. The following - sections offer guidelines for choosing the appropriate type of delegate, - depending on the use case. - - \section1 ItemDelegate Control - - \image qtquickcontrols2-itemdelegate.gif - - \l ItemDelegate presents a checkable control that can be pressed and - clicked by the user. - - \section1 RadioDelegate Control - - \image qtquickcontrols2-radiodelegate.gif - - \l RadioDelegate presents a checkable control that can be toggled on - (checked) or off (unchecked). Radio delegates are typically used to select - one option from a set of options. - - \b {See also} \l {RadioButton Control}. - - \section1 SwipeDelegate Control - - \image qtquickcontrols2-swipedelegate.gif - - \l SwipeDelegate presents a view item that can be swiped left or right to - expose more options or information. - - \section1 SwitchDelegate Control - - \image qtquickcontrols2-switchdelegate.gif - - \l SwitchDelegate presents a switchable delegate that can be toggled on or off. - - \b {See also} \l {Switch Control}. - - \section1 Related Information - \list - \li \l {Qt Quick Controls Guidelines} - \endlist -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-deployment.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-deployment.qdoc deleted file mode 100644 index a84d0d87..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-deployment.qdoc +++ /dev/null @@ -1,97 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-deployment.html - \title Deploying Qt Quick Controls Applications - - Deployment of Qt Quick Controls applications is very similar to - deployment of other types of Qt applications. However, there are a few - factors to consider. - - \section1 Deploying an Application with Several Styles - - Suppose you have an application that will be deployed to both Android and - Windows devices. To ensure that only the minimum set of files that are - necessary for the application to run are deployed to each device, you can - use file selectors. For example, your directory structure could look like - this: - - \code - resources.qrc - main.qml - +windows/MyPage.qml - +windows/qtquickcontrols2.conf - +android/MyPage.qml - +android/qtquickcontrols2.conf - \endcode - - In the project above, \c main.qml would import \c QtQuick.Controls, for - example, but shouldn't import, say, \c QtQuick.Controls.Material. Any code - that is style-specific is moved out into separate files; just as we've done - for \c MyPage.qml. - - The \c +windows/qtquickcontrols2.conf file would contain configuration - options specific to the Universal style: - - \code - [Controls] - Style=Universal - - [Universal] - Theme=Dark - Accent=Red - \endcode - - The \c +android/qtquickcontrols2.conf file would contain configuration - options specific to the Material style: - - \code - [Controls] - Style=Material - - [Material] - Theme=Light - Accent=Brown - \endcode - - \section1 Static Builds - - For dynamically built applications, it is not necessary to import a - specific style that should be usable by that application. For statically - built applications, Qt's build system must be involved to ensure that - QML plugins function as expected. Specifically, \c qmake uses - \c qmlimportscanner to scan the QML files in your application for import - statements. For this reason, any styles that should be usable by a - statically built application must explicitly import that style. Where the - import occurs is up to the developer, but it is recommended to follow the - approach mentioned in the \l {Deploying an Application with Several Styles} - section, so that only the minimum set of files that are necessary for a - particular device are deployed. - - \sa {Deploying Qt Applications}, {Using Styles in Qt Quick Controls} -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-environment.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-environment.qdoc deleted file mode 100644 index 4484acf3..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-environment.qdoc +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-environment.html - \title Supported Environment Variables in Qt Quick Controls - - This page contains a list of all environment variables that Qt Quick Controls - supports. The environment variables are primarily meant for testing purposes, but - they can also be used to set system-wide defaults. - - \table - \header - \li Variable - \li Description - \row - \li \c QT_QUICK_CONTROLS_STYLE - \li Specifies the default \l {Styling Qt Quick Controls}{Qt Quick Controls style}. - The value can be either one of the built-in styles, for example \c "Material", - or a custom style such as \c "MyStyle". - \row - \li \c QT_QUICK_CONTROLS_FALLBACK_STYLE - \li Specifies a fallback style for \l {Creating a Custom Style}{custom styles}. - The value can be one of the built-in styles, for example \c "Material", - \row - \li \c QT_QUICK_CONTROLS_CONF - \li Specifies the location of the \l {Qt Quick Controls configuration file}. - By default, the configuration file is loaded from the application's - resources in \c ":/qtquickcontrols2.conf". - \row - \li \c QT_QUICK_CONTROLS_HOVER_ENABLED - \li Specifies whether Qt Quick Controls use \l {Control::hoverEnabled}{hover effects}. - The value can be set to \c 0 or \c 1 to disable or enable hover effects, respectively. - \endtable - - \l {Imagine style} specific environment variables: - - \include qquickimaginestyle.qdocinc env - - \l {Material style} specific environment variables: - - \include qquickmaterialstyle.qdocinc env - - \l {Universal style} specific environment variables: - - \include qquickuniversalstyle.qdocinc env - - \section1 Related Information - - \list - \li \l{Styling Qt Quick Controls} - \li \l{Qt Quick Controls Configuration File} - \endlist -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-examples.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-examples.qdoc deleted file mode 100644 index 2924114f..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-examples.qdoc +++ /dev/null @@ -1,37 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \group qtquickcontrols2-examples - \ingroup all-examples - \keyword Qt Quick Controls Examples - \title Qt Quick Controls Examples - \keyword Qt Quick Controls 2 Examples - \brief A collection of examples for \l {Qt Quick Controls} - - These examples demonstrate creating user interfaces using \l {Qt Quick Controls}. -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-fileselectors.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-fileselectors.qdoc deleted file mode 100644 index 4c782de1..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-fileselectors.qdoc +++ /dev/null @@ -1,140 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-fileselectors.html - \title Using File Selectors with Qt Quick Controls - - \l {QFileSelector}{File selectors} provide a convenient way of selecting - file variants. Qt offers the platform name and the locale as built-in - selectors. Qt Quick Controls extends the built-in selectors with the name - (lowercase) of the style that an application is running with. - - By using file selectors, style-specific tweaks can be applied without - creating a hard dependency to a style. From the available file variants, - only the selected QML file is loaded by the QML engine. Each file variant - can assume the context, that is, a specific style. This typically leads - to some code duplication, but on the other hand, cuts the aforementioned - hard dependency to the style, and leads to simpler and more efficient - QML code. - - The following example demonstrates a custom rounded button that has a - styled drop shadow in the \l {Material Style}{Material style}, and looks - flat in other styles. The files are organized so that the Material version - of \c CustomButton.qml is placed into a \c +Material sub-directory. - - \code - :/main.qml - :/CustomButton.qml - :/+Material/CustomButton.qml - \endcode - - By default, \c main.qml will use \c CustomButton.qml for the \c CustomButton - type. However, when the application is run with the Material style, the - \c Material selector will be present and the \c +Material/CustomButton.qml - version will be used instead. - - \code - // main.qml - import QtQuick - import QtQuick.Controls - - ApplicationWindow { - id: window - visible: true - - CustomButton { - text: "Button" - anchors.centerIn: parent - } - } - \endcode - - The base implementation of the custom button is a simple rounded - flat button. - - \code - // CustomButton.qml - import QtQuick - import QtQuick.Controls - - Button { - id: control - - background: Rectangle { - radius: width / 2 - implicitWidth: 36 - implicitHeight: 36 - color: control.pressed ? "#ccc" : "#eee" - } - } - \endcode - - The Material style's implementation of the custom button imports the - Material style, requests a dark theme to get light text, and creates - a drop shadow for the background. - - \code - // +Material/CustomButton.qml - import QtQuick - import QtGraphicalEffects - import QtQuick.Controls - import QtQuick.Controls.Material - - Button { - id: control - - Material.theme: Material.Dark - - background: Rectangle { - implicitWidth: 48 - implicitHeight: 48 - color: Material.accentColor - radius: width / 2 - - layer.enabled: control.enabled - layer.effect: DropShadow { - verticalOffset: 1 - color: Material.dropShadowColor - samples: control.pressed ? 20 : 10 - spread: 0.5 - } - } - } - \endcode - - \note It is recommended to use \l QQmlApplicationEngine, which internally - creates a \l QQmlFileSelector instance. This is all that is needed to take - QML file selectors into use. - - \section1 Related Information - \list - \li \l {QFileSelector} - \li \l {QQmlFileSelector} - \li \l {Styling Qt Quick Controls} - \endlist -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-focus.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-focus.qdoc deleted file mode 100644 index 77bc9883..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-focus.qdoc +++ /dev/null @@ -1,48 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-focus.html - \keyword Focus Management in Qt Quick Controls 2 - \title Focus Management in Qt Quick Controls - \brief Overview of focus handling with Qt Quick Controls - - Qt Quick Controls follows the standard - \l {Keyboard Focus in Qt Quick}{Qt Quick focus system}, while also - providing some added convenience. For example, the - \l {Control::}{focusPolicy} property can be used to control the ways in - which a control receives focus. - - \section1 Focus Scope Controls - - Qt Quick Controls offers a selection of controls that act as - \l {Acquiring Focus and Focus Scopes}{focus scopes}: - - \annotatedlist qtquickcontrols2-focusscopes - - \sa {Keyboard Focus in Qt Quick} -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-fusion.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-fusion.qdoc deleted file mode 100644 index ca67985f..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-fusion.qdoc +++ /dev/null @@ -1,93 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-fusion.html - \title Fusion Style - - The Fusion style is a desktop-oriented style. - - The Fusion style is a platform-agnostic style that offers a desktop-oriented - look and feel. It implements the same design language as the - \l {Qt Widget Gallery}{Fusion style for Qt Widgets}. - - \image qtquickcontrols2-fusion.png - - To run an application with the Fusion style, see - \l {Using Styles in Qt Quick Controls}. - - \note The Fusion style is not a native desktop style. The style runs on any - platform, and looks similar everywhere. Minor differences may occur due to - differences in the standard system palettes, available fonts, and font - rendering engines. - - \section2 Customization - - The Fusion style uses the standard system \l[QtQuick]{Palette} - to provide colors that match the desktop environment. - - \image qtquickcontrols2-fusion-palettes.png - - Custom palettes can be specified for any control, - \l{Popup::palette}{popup}, or \l{Window::palette}{application window}. - Explicit palette attributes are automatically propagated from parent to children, - overriding any system defaults for that attribute. In the following example, - the window and all three switches appear with a violet highlight color: - - \table - \row - \li - \qml - import QtQuick 2.12 - import QtQuick.Controls 2.12 - - ApplicationWindow { - visible: true - - palette.highlight: "violet" - - Column { - anchors.centerIn: parent - - Switch { text: qsTr("First"); checked: true } - Switch { text: qsTr("Second"); checked: true } - Switch { text: qsTr("Third") } - } - } - \endqml - \li - \image qtquickcontrols2-fusion-violet.png - \endtable - - \b {See also} \l {Basic Style}, \l {Material Style}, \l {Universal Style} - - \section1 Related Information - - \list - \li \l{Styling Qt Quick Controls} - \endlist -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-gettingstarted.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-gettingstarted.qdoc deleted file mode 100644 index 09209d21..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-gettingstarted.qdoc +++ /dev/null @@ -1,86 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-gettingstarted.html - \keyword Getting Started with Qt Quick Controls 2 - \title Getting Started with Qt Quick Controls - - A basic example of a QML file that makes use of controls is shown here: - - \qml - import QtQuick - import QtQuick.Controls - - ApplicationWindow { - title: "My Application" - width: 640 - height: 480 - visible: true - - Button { - text: "Push Me" - anchors.centerIn: parent - } - } - \endqml - - \section1 Setting Up Controls from C++ - - Although QQuickView has traditionally been used to display QML files in a - C++ application, doing this means you can only set window properties from - C++. - - With Qt Quick Controls, declare an ApplicationWindow as the root item of - your application and launch it by using QQmlApplicationEngine instead. - This ensures that you can control top level window properties from QML. - - A basic example of a source file that makes use of controls is shown here: - - \code - #include - #include - - int main(int argc, char *argv[]) - { - QGuiApplication app(argc, argv); - QQmlApplicationEngine engine; - engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); - return app.exec(); - } - \endcode - - \section2 Using C++ Data From QML - - If you need to register a C++ class to use from QML, you can call - qmlRegisterType() before declaring your QQmlApplicationEngine. - See \l [QtQml] {Defining QML Types from C++} for more information. - - If you need to expose data to QML components, you need to make them - available to the context of the current QML engine. See QQmlContext for - more information. -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-guidelines.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-guidelines.qdoc deleted file mode 100644 index 83d6db93..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-guidelines.qdoc +++ /dev/null @@ -1,46 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-guidelines.html - \keyword Qt Quick Controls Guidelines - \title Qt Quick Controls Guidelines - \keyword Qt Quick Controls 2 Guidelines - - Qt Quick Controls offers a selection of controls that can be used to - build complete interfaces in Qt Quick. - - Below you will find practical guidelines on how and when to use - the controls. - - \annotatedlist qtquickcontrols2-guidelines - - \section1 Related Information - \list - \li \l{Qt Quick Controls QML Types}{All Qt Quick Controls QML Types} - \endlist -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-icons.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-icons.qdoc deleted file mode 100644 index ea8579dc..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-icons.qdoc +++ /dev/null @@ -1,166 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-icons.html - \keyword Icons in Qt Quick Controls 2 - \title Icons in Qt Quick Controls - - Qt Quick Controls comes with support for icons since Qt 5.10. This means, - Buttons, item delegates, and menu items are now capable of presenting an - icon in addition to a text label. - - \section1 Using Icons - - \l {AbstractButton::icon}{AbstractButton} and \l {Action::icon}{Action} provide - the following properties through which icons can be set: - \list - \li \c icon.name - \li \c icon.source - \li \c icon.width - \li \c icon.height - \li \c icon.color - \li \c icon.cache - \endlist - - Theme icons are referenced by a name, and regular icons by a source URL. Both - \c icon.name and \c icon.source can be set to ensure that an icon will always - be found. If the icon is found in the theme, it will always be used; even if - \c icon.source is also set. If the icon is not found in the theme, \c icon.source - will be used instead. - - \code - Button { - icon.name: "edit-cut" - icon.source: "images/cut.png" - } - \endcode - - Each \l {Styling Qt Quick Controls}{Qt Quick Controls 2 style} requests a - default icon size and color according to their guidelines, but it is possible - to override these by setting the \c icon.width, \c icon.height, and \c icon.color - properties. - - The image that is loaded by an icon whose \c width and \c height are not set - depends on the type of icon in use. For theme icons, the closest available size - will be chosen. For regular icons, the behavior is the same as the \l {Image::} - {sourceSize} property of \l Image. - - The icon color is specified by default so that it matches the text color in - different states. In order to use an icon with the original colors, set the - color to \c "transparent". - - \code - Button { - icon.color: "transparent" - icon.source: "images/logo.png" - } - \endcode - - For buttons, the \l {AbstractButton::}{display} property can be used to control - how the icon and text are displayed within the button. - - \section1 Icon Themes - - Compliant icon themes must follow the freedesktop icon theme specification, - which can be obtained here: \l {http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html}. - - Traditionally, only Linux and UNIX support icon themes on the platform level, - but it is possible to bundle a compliant icon theme in an application to use - themed icons on any platform. - - The default \l {QIcon::themeSearchPaths()}{icon theme search paths} depend on - the platform. On Linux and UNIX, the search path will use the \c XDG_DATA_DIRS - environment variable if available. All platforms have the resource directory - \c :/icons as a fallback. Custom icon theme search paths can be set with - \l QIcon::setThemeSearchPaths(). - - The following example bundles an icon theme called \e mytheme into the application's - resources using \l {The Qt Resource System}{Qt's resource system}. - - \badcode - - - icons/mytheme/index.theme - icons/mytheme/32x32/myicon.png - icons/mytheme/32x32@2/myicon.png - - - \endcode - - The \c index.theme file describes the general attributes of the icon theme, and - lists the available theme icon directories: - - \badcode - [Icon Theme] - Name=mytheme - Comment=My Icon Theme - - Directories=32x32,32x32@2 - - [32x32] - Size=32 - Type=Fixed - - [32x32@2] - Size=32 - Scale=2 - Type=Fixed - \endcode - - In order to use the bundled icon theme, an application should call \l QIcon::setThemeName() - before loading the main QML file: - - \code - #include - #include - #include - - int main(int argc, char *argv[]) - { - QGuiApplication app(argc, argv); - - QIcon::setThemeName("mytheme"); // <-- - - QQmlApplicationEngine engine; - engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); - return app.exec(); - } - \endcode - - Now it is possible to use named icons from the bundled icon theme without having - to specify any fallback source: - - \code - Button { - icon.name: "myicon" - } - \endcode - - The \l {Qt Quick Controls - Gallery}{Gallery example} and \l {Qt Quick Controls 2 - Wearable Demo} - {Wearable Demo} provide complete runnable applications with a bundled icon theme. -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-imagine.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-imagine.qdoc deleted file mode 100644 index 15730ba3..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-imagine.qdoc +++ /dev/null @@ -1,2524 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-imagine.html - \title Imagine Style - - The Imagine Style is based on configurable image assets. \l{detailed-desc-imagine}{More...} - - \styleimport {QtQuick.Controls.Imagine 2.12} {Qt 5.10} - - \section1 Attached Properties - - \list - \li \l {imagine-path-attached-prop}{\b path} : string - \endlist - - \section1 Detailed Description - \target detailed-desc-imagine - - The Imagine style is based on image assets. The style comes with a default - set of images, but the images can be easily changed by providing a directory - with images using a predefined naming convention. - - \image qtquickcontrols2-imagine.png - \caption The Imagine style with the default images - - To run an application with the Imagine style, see - \l {Using Styles in Qt Quick Controls}. - - \section2 File Names - - The image files are named using the following convention: - - \c -- - - The \c and \c sections are mandatory, but the - \c section is optional. For example, if a single file named - \c "button-background.9.png" is provided for \l {Button}, it will be used - for every state that \c Button supports. It is up to the developer to - decide the set of states that they will provide images for. However, it - is recommended to provide images for the most common control states where - possible, such as \c disabled, \c pressed, etc. This will ensure that - interactive controls visually behave as the end user would expect them to. - - \section2 Element Reference - - The following table lists which elements are supported for each control, - along with the possible states for that element, and the file extension - that it expects. An element is an image that represents a certain visual - part of the control. For example, \c {Button}'s \c "background" element - represents its \l {Control::}{background}. - - \table - \header - \li Control - \li Element - \li States - \li Extension - \row - \li \l ApplicationWindow - \li background - \li active - \li .9.png (or .png) - \row - \li \l BusyIndicator - \li animation - \li disabled, running, mirrored, hovered - \li .webp - \row - \li - \li background - \li same as above - \li .webp - \row - \li \l Button - \li background - \li disabled, pressed, checked, checkable, focused, highlighted, flat, mirrored, hovered - \li .9.png - \row - \li \l CheckBox - \li background - \li disabled, pressed, checked, partially-checked, focused, mirrored, hovered - \li .9.png (or .png) - \row - \li - \li indicator - \li same as above - \li .png - \row - \li \l CheckDelegate - \li background - \li disabled, pressed, checked, partially-checked, focused, highlighted, mirrored, hovered - \li .9.png (or .png) - \row - \li - \li indicator - \li same as above - \li .png - \row - \li \l ComboBox - \li background - \li disabled, pressed, editable, open, focused, mirrored, hovered, flat - \li .9.png (or .png) - \row - \li - \li indicator - \li same as above - \li .png - \row - \li - \li popup - \li same as above - \li .9.png (or .png) - \row - \li \l DelayButton - \li background - \li disabled, pressed, checked, checkable, focused, mirrored, hovered - \li .9.png (or .png) - \row - \li - \li progress - \li same as above - \li .9.png (or .png) - \row - \li - \li mask - \li same as above - \li .9.png (or .png) - \row - \li \l Dial - \li background - \li disabled, pressed, focused, mirrored, hovered - \li .9.png (or .png) - \row - \li - \li handle - \li same as above - \li .9.png (or .png) - \row - \li \l Dialog - \li background - \li modal, dim - \li .9.png (or .png) - \row - \li - \li title - \li same as above - \li .9.png (or .png) - \row - \li - \li overlay - \li modal - \li .9.png (or .png) - \row - \li \l DialogButtonBox - \li background - \li disabled, mirrored - \li .9.png (or .png) - \row - \li \l Drawer - \li background - \li modal, dim, top, left, right, bottom - \li .9.png (or .png) - \row - \li - \li overlay - \li modal - \li .9.png (or .png) - \row - \li \l Frame - \li background - \li disabled, mirrored - \li .9.png (or .png) - \row - \li \l GroupBox - \li background - \li disabled, mirrored - \li .9.png (or .png) - \row - \li - \li title - \li same as above - \li .9.png (or .png) - \row - \li \l ItemDelegate - \li background - \li disabled, pressed, focused, highlighted, mirrored, hovered - \li .9.png (or .png) - \row - \li \l Label - \li background - \li disabled, mirrored, hovered - \li .9.png (or .png) - \row - \li \l Menu - \li background - \li modal, dim - \li .9.png (or .png) - \row - \li - \li overlay - \li modal - \li .9.png (or .png) - \row - \li \l MenuItem - \li arrow - \li disabled, pressed, checked, focused, highlighted, mirrored, hovered - \li .png - \row - \li - \li background - \li same as above - \li .9.png (or .png) - \row - \li - \li indicator - \li same as above - \li .png - \row - \li \l MenuSeparator - \li background - \li disabled, mirrored - \li .9.png (or .png) - \row - \li - \li separator - \li same as above - \li .9.png (or .png) - \row - \li \l Page - \li background - \li disabled, mirrored - \li .9.png (or .png) - \row - \li \l PageIndicator - \li background - \li disabled, mirrored, hovered - \li .9.png (or .png) - \row - \li - \li delegate - \li disabled, pressed, current, mirrored, hovered - \li .png - \row - \li \l Pane - \li background - \li disabled, mirrored - \li .9.png (or .png) - \row - \li \l Popup - \li background - \li modal, dim - \li .9.png (or .png) - \row - \li - \li overlay - \li modal - \li .9.png (or .png) - \row - \li \l ProgressBar - \li animation - \li disabled, mirrored, hovered - \li .png - \row - \li - \li background - \li disabled, indeterminate, mirrored, hovered - \li .9.png (or .png) - \row - \li - \li mask - \li same as above - \li .9.png (or .png) - \row - \li - \li progress - \li same as above - \li .9.png (or .png) - \row - \li \l RadioButton - \li background - \li disabled, pressed, checked, focused, mirrored, hovered - \li .9.png (or .png) - \row - \li - \li indicator - \li same as above - \li .png - \row - \li \l RadioDelegate - \li background - \li disabled, pressed, checked, focused, highlighted, mirrored, hovered - \li .9.png (or .png) - \row - \li - \li indicator - \li same as above - \li .png - \row - \li \l RangeSlider - \li background - \li vertical, horizontal, disabled, focused, mirrored, hovered - \li .9.png (or .png) - \row - \li \l RangeSlider - \li progress - \li same as above - \li .9.png (or .png) - \row - \li - \li handle - \li first, second, vertical, horizontal, disabled, pressed, focused, mirrored, hovered - \li .png - \row - \li \l RoundButton - \li background - \li disabled, pressed, checked, checkable, focused, highlighted, flat, mirrored, hovered - \li .9.png (or .png) - \row - \li \l ScrollBar - \li background - \li vertical, horizontal, disabled, interactive, pressed, mirrored, hovered - \li .9.png (or .png) - \row - \li - \li handle - \li same as above - \li .9.png (or .png) - \row - \li \l ScrollIndicator - \li background - \li vertical, horizontal, disabled, mirrored, hovered - \li .9.png (or .png) - \row - \li - \li handle - \li same as above - \li .9.png (or .png) - \row - \li \l ScrollView - \li background - \li disabled, mirrored - \li .9.png (or .png) - \row - \li \l Slider - \li background - \li vertical, horizontal, disabled, pressed, focused, mirrored, hovered - \li .9.png (or .png) - \row - \li - \li handle - \li same as above - \li .9.png (or .png) - \row - \li - \li progress - \li same as above - \li .9.png (or .png) - \row - \li \l SpinBox - \li background - \li disabled, editable, focused, mirrored, hovered - \li .9.png (or .png) - \row - \li - \li editor - \li disabled, focused, mirrored, hovered - \li .9.png (or .png) - \row - \li - \li indicator - \li up, down, disabled, editable, pressed, focused, mirrored, hovered - \li .9.png (or .png) - \row - \li \l StackView - \li background - \li disabled, mirrored - \li .9.png (or .png) - \row - \li \l SwipeDelegate - \li background - \li disabled, pressed, focused, highlighted, mirrored, hovered - \li .9.png (or .png) - \row - \li \l SwipeView - \li background - \li vertical, horizontal, disabled, interactive, focused, mirrored - \li .9.png (or .png) - \row - \li \l Switch - \li background - \li disabled, pressed, checked, focused, mirrored, hovered - \li .9.png (or .png) - \row - \li - \li handle - \li same as above - \li .9.png (or .png) - \row - \li - \li indicator - \li same as above - \li .9.png (or .png) - \row - \li \l SwitchDelegate - \li background - \li disabled, pressed, checked, focused, highlighted, mirrored, hovered - \li .9.png (or .png) - \row - \li - \li handle - \li same as above - \li .9.png (or .png) - \row - \li - \li indicator - \li same as above - \li .9.png (or .png) - \row - \li \l TabBar - \li background - \li disabled, header, footer, mirrored - \li .9.png (or .png) - \row - \li \l TabButton - \li background - \li disabled, pressed, checked, focused, mirrored, hovered - \li .9.png (or .png) - \row - \li \l TextArea - \li background - \li disabled, focused, mirrored, hovered - \li .9.png (or .png) - \row - \li \l TextField - \li background - \li disabled, focused, mirrored, hovered - \li .9.png (or .png) - \row - \li \l ToolBar - \li background - \li disabled, header, footer, mirrored - \li .9.png (or .png) - \row - \li \l ToolButton - \li background - \li disabled, pressed, checked, checkable, focused, highlighted, flat, mirrored, hovered - \li .9.png (or .png) - \row - \li \l ToolSeparator - \li background - \li vertical, horizontal, disabled, mirrored - \li .9.png (or .png) - \row - \li - \li separator - \li same as above - \li .9.png (or .png) - \row - \li \l ToolTip - \li background - \li - \li .9.png (or .png) - \row - \li \l Tumbler - \li background - \li disabled, focused, mirrored, hovered - \li .9.png (or .png) - \endtable - - \section2 Asset Examples - - The following table lists examples of assets (taken from the default - Imagine style assets) for all controls. The list is not exhaustive, - as not all elements need assets, but it can be used as a guide - when creating your own assets. - - \table - \header - \li Control - \li Element - \li States - \li Asset - \li Notes - \row - \li \l ApplicationWindow - \li background - \li - \li \image imagine/images/applicationwindow-background.png - \li \l {sup1}{See footnote} \sup 1 - \row - \li - \li overlay - \li - \li \image imagine/images/applicationwindow-overlay.png - \li \l {sup1}{See footnote} \sup 1 - \row - \li - \li overlay - \li modal - \li \image imagine/images/applicationwindow-overlay-modal.png - \li \l {sup1}{See footnote} \sup 1 - \row - \li \l Button - \li background - \li - \li \image imagine/images/button-background.9.png - \li - \row - \li - \li background - \li disabled - \li \image imagine/images/button-background-disabled.9.png - \li - \row - \li - \li background - \li focused - \li \image imagine/images/button-background-focused.9.png - \li - \row - \li - \li background - \li pressed - \li \image imagine/images/button-background-pressed.9.png - \li - \row - \li - \li background - \li checked - \li \image imagine/images/button-background-checked.9.png - \li - \row - \li - \li background - \li checked, disabled - \li \image imagine/images/button-background-checked-disabled.9.png - \li - \row - \li - \li background - \li checked, focused - \li \image imagine/images/button-background-checked-focused.9.png - \li - \row - \li - \li background - \li checked, hovered - \li \image imagine/images/button-background-checked-hovered.9.png - \li - \row - \li - \li background - \li highlighted - \li \image imagine/images/button-background-highlighted.9.png - \li - \row - \li - \li background - \li highlighted, disabled - \li \image imagine/images/button-background-highlighted-disabled.9.png - \li - \row - \li - \li background - \li highlighted, focused - \li \image imagine/images/button-background-highlighted-focused.9.png - \li - \row - \li - \li background - \li highlighted, hovered - \li \image imagine/images/button-background-highlighted-hovered.9.png - \li - \row - \li - \li background - \li highlighted, pressed - \li \image imagine/images/button-background-highlighted-pressed.9.png - \li - \row - \li - \li background - \li highlighted, checked - \li \image imagine/images/button-background-highlighted-checked.9.png - \li - \row - \li - \li background - \li hovered - \li \image imagine/images/button-background-hovered.9.png - \li - \row - \li - \li background - \li flat - \li \image imagine/images/button-background-flat.9.png - \li - \row - \li - \li background - \li flat, disabled - \li \image imagine/images/button-background-flat-disabled.9.png - \li - \row - \li - \li background - \li flat, hovered - \li \image imagine/images/button-background-flat-hovered.9.png - \li - \row - \li - \li background - \li flat, pressed - \li \image imagine/images/button-background-flat-pressed.9.png - \li - \row - \li - \li background - \li flat, checked - \li \image imagine/images/button-background-flat-checked.9.png - \li - \row - \li \l CheckBox - \li indicator - \li - \li \image imagine/images/checkbox-indicator.png - \li - \row - \li - \li indicator - \li disabled - \li \image imagine/images/checkbox-indicator-disabled.png - \li - \row - \li - \li indicator - \li pressed - \li \image imagine/images/checkbox-indicator-pressed.png - \li - \row - \li - \li indicator - \li checked - \li \image imagine/images/checkbox-indicator-checked.png - \li - \row - \li - \li indicator - \li checked, pressed - \li \image imagine/images/checkbox-indicator-checked-pressed.png - \li - \row - \li - \li indicator - \li checked, hovered - \li \image imagine/images/checkbox-indicator-checked-hovered.png - \li - \row - \li - \li indicator - \li checked, focused - \li \image imagine/images/checkbox-indicator-checked-focused.png - \li - \row - \li - \li indicator - \li partially, checked - \li \image imagine/images/checkbox-indicator-partially-checked.png - \li - \row - \li - \li indicator - \li partially, checked, pressed - \li \image imagine/images/checkbox-indicator-partially-checked-pressed.png - \li - \row - \li - \li indicator - \li partially, checked, focused - \li \image imagine/images/checkbox-indicator-partially-checked-focused.png - \li - \row - \li - \li indicator - \li partially, checked, hovered - \li \image imagine/images/checkbox-indicator-partially-checked-hovered.png - \li - \row - \li - \li indicator - \li focused - \li \image imagine/images/checkbox-indicator-focused.png - \li - \row - \li - \li indicator - \li hovered - \li \image imagine/images/checkbox-indicator-hovered.png - \li - \row - \li \l CheckDelegate - \li background - \li - \li \image imagine/images/checkdelegate-background.9.png - \li - \row - \li - \li background - \li disabled - \li \image imagine/images/checkdelegate-background-disabled.9.png - \li - \row - \li - \li background - \li pressed - \li \image imagine/images/checkdelegate-background-pressed.9.png - \li - \row - \li - \li background - \li focused - \li \image imagine/images/checkdelegate-background-focused.9.png - \li - \row - \li - \li background - \li hovered - \li \image imagine/images/checkdelegate-background-hovered.9.png - \li - \row - \li - \li indicator - \li - \li \image imagine/images/checkdelegate-indicator.png - \li - \row - \li - \li indicator - \li disabled - \li \image imagine/images/checkdelegate-indicator-disabled.png - \li - \row - \li - \li indicator - \li pressed - \li \image imagine/images/checkdelegate-indicator-pressed.png - \li - \row - \li - \li indicator - \li checked - \li \image imagine/images/checkdelegate-indicator-checked.png - \li - \row - \li - \li indicator - \li checked, pressed - \li \image imagine/images/checkdelegate-indicator-checked-pressed.png - \li - \row - \li - \li indicator - \li checked, focused - \li \image imagine/images/checkdelegate-indicator-checked-focused.png - \li - \row - \li - \li indicator - \li checked, hovered - \li \image imagine/images/checkdelegate-indicator-checked-hovered.png - \li - \row - \li - \li indicator - \li focused - \li \image imagine/images/checkdelegate-indicator-focused.png - \li - \row - \li - \li indicator - \li hovered - \li \image imagine/images/checkdelegate-indicator-hovered.png - \li - \row - \li - \li indicator - \li partially, checked - \li \image imagine/images/checkdelegate-indicator-partially-checked.png - \li - \row - \li - \li indicator - \li partially, checked, pressed - \li \image imagine/images/checkdelegate-indicator-partially-checked-pressed.png - \li - \row - \li - \li indicator - \li partially, checked, focused - \li \image imagine/images/checkdelegate-indicator-partially-checked-focused.png - \li - \row - \li - \li indicator - \li partially, checked, hovered - \li \image imagine/images/checkdelegate-indicator-partially-checked-hovered.png - \li - \row - \li - \li indicator - \li hovered - \li \image imagine/images/checkdelegate-indicator-hovered.png - \li - \row - \li \l ComboBox - \li background - \li - \li \image imagine/images/combobox-background.9.png - \li - \row - \li - \li background - \li disabled - \li \image imagine/images/combobox-background-disabled.9.png - \li - \row - \li - \li background - \li focused - \li \image imagine/images/combobox-background-focused.9.png - \li - \row - \li - \li background - \li hovered - \li \image imagine/images/combobox-background-hovered.9.png - \li - \row - \li - \li background - \li pressed - \li \image imagine/images/combobox-background-pressed.9.png - \li - \row - \li - \li background - \li open - \li \image imagine/images/combobox-background-open.9.png - \li - \row - \li - \li background - \li editable - \li \image imagine/images/combobox-background-editable.9.png - \li - \row - \li - \li background - \li editable, focused - \li \image imagine/images/combobox-background-editable-focused.9.png - \li - \row - \li - \li background - \li editable, disabled - \li \image imagine/images/combobox-background-editable-disabled.9.png - \li - \row - \li - \li indicator - \li - \li \image imagine/images/combobox-indicator.png - \li - \row - \li - \li indicator - \li disabled - \li \image imagine/images/combobox-indicator-disabled.png - \li - \row - \li - \li indicator - \li editable - \li \image imagine/images/combobox-indicator-editable.png - \li - \row - \li - \li indicator - \li editable, disabled - \li \image imagine/images/combobox-indicator-editable-disabled.png - \li - \row - \li - \li indicator - \li editable, mirrored - \li \image imagine/images/combobox-indicator-editable-mirrored.png - \li - \row - \li - \li indicator - \li editable, mirrored, disabled - \li \image imagine/images/combobox-indicator-editable-mirrored-disabled.png - \li - \row - \li - \li popup - \li - \li \image imagine/images/combobox-popup.9.png - \li - \row - \li \l DelayButton - \li background - \li - \li \image imagine/images/delaybutton-background.9.png - \li - \row - \li - \li background - \li disabled - \li \image imagine/images/delaybutton-background-disabled.9.png - \li - \row - \li - \li background - \li disabled, checked - \li \image imagine/images/delaybutton-background-disabled-checked.9.png - \li - \row - \li - \li background - \li focused - \li \image imagine/images/delaybutton-background-focused.9.png - \li - \row - \li - \li background - \li pressed - \li \image imagine/images/delaybutton-background-pressed.9.png - \li - \row - \li - \li background - \li checked - \li \image imagine/images/delaybutton-background-checked.9.png - \li - \row - \li - \li background - \li checked, focused - \li \image imagine/images/delaybutton-background-checked-focused.9.png - \li - \row - \li - \li background - \li checked, hovered - \li \image imagine/images/delaybutton-background-checked-hovered.9.png - \li - \row - \li - \li background - \li hovered - \li \image imagine/images/delaybutton-background-hovered.9.png - \li - \row - \li - \li progress - \li - \li \image imagine/images/delaybutton-progress.9.png - \li - \row - \li - \li progress - \li disabled - \li \image imagine/images/delaybutton-progress-disabled.9.png - \li - \row - \li - \li mask - \li - \li \image imagine/images/delaybutton-mask.9.png - \li - \row - \li \l Dial - \li background - \li - \li \image imagine/images/dial-background.png - \li - \row - \li - \li background - \li disabled - \li \image imagine/images/dial-background-disabled.png - \li - \row - \li - \li background - \li focused - \li \image imagine/images/dial-background-focused.png - \li - \row - \li - \li handle - \li - \li \image imagine/images/dial-handle.png - \li - \row - \li - \li handle - \li disabled - \li \image imagine/images/dial-handle-disabled.png - \li - \row - \li - \li handle - \li focused - \li \image imagine/images/dial-handle-focused.png - \li - \row - \li - \li handle - \li focused, pressed - \li \image imagine/images/dial-handle-focused-pressed.png - \li - \row - \li - \li handle - \li focused, hovered - \li \image imagine/images/dial-handle-focused-hovered.png - \li - \row - \li - \li handle - \li pressed - \li \image imagine/images/dial-handle-pressed.png - \li - \row - \li - \li handle - \li hovered - \li \image imagine/images/dial-handle-hovered.png - \li - \row - \li \l Dialog - \li background - \li - \li \image imagine/images/dialog-background.9.png - \li - \row - \li - \li overlay - \li - \li \image imagine/images/dialog-overlay.png - \li \l {sup1}{See footnote} \sup 1 - \row - \li - \li overlay - \li modal - \li \image imagine/images/dialog-overlay-modal.png - \li \l {sup1}{See footnote} \sup 1 - \row - \li \l DialogButtonBox - \li background - \li - \li \image imagine/images/dialogbuttonbox-background.9.png - \li - \row - \li \l Drawer - \li background - \li left - \li \image imagine/images/drawer-background-left.9.png - \li - \row - \li - \li background - \li right - \li \image imagine/images/drawer-background-right.9.png - \li - \row - \li - \li background - \li top - \li \image imagine/images/drawer-background-top.9.png - \li - \row - \li - \li background - \li bottom - \li \image imagine/images/drawer-background-bottom.9.png - \li - \row - \li - \li overlay - \li - \li \image imagine/images/drawer-overlay.png - \li \l {sup1}{See footnote} \sup 1 - \row - \li - \li overlay - \li modal - \li \image imagine/images/drawer-overlay-modal.png - \li \l {sup1}{See footnote} \sup 1 - \row - \li \l Frame - \li background - \li - \li \image imagine/images/frame-background.9.png - \li - \row - \li \l GroupBox - \li background - \li - \li \image imagine/images/groupbox-background.9.png - \li - \row - \li - \li title - \li - \li \image imagine/images/groupbox-title.9.png - \li - \row - \li \l ItemDelegate - \li background - \li - \li \image imagine/images/itemdelegate-background.9.png - \li - \row - \li - \li background - \li disabled - \li \image imagine/images/itemdelegate-background-disabled.9.png - \li - \row - \li - \li background - \li pressed - \li \image imagine/images/itemdelegate-background-pressed.9.png - \li - \row - \li - \li background - \li focused - \li \image imagine/images/itemdelegate-background-focused.9.png - \li - \row - \li - \li background - \li hovered - \li \image imagine/images/itemdelegate-background-hovered.9.png - \li - \row - \li - \li background - \li highlighted - \li \image imagine/images/itemdelegate-background-highlighted.9.png - \li - \row - \li \l Menu - \li background - \li - \li \image imagine/images/menu-background.9.png - \li - \row - \li \l MenuItem - \li background - \li - \li \image imagine/images/menuitem-background.9.png - \li - \row - \li - \li background - \li highlighted - \li \image imagine/images/menuitem-background-highlighted.9.png - \li - \row - \li - \li arrow - \li - \li \image imagine/images/menuitem-arrow.png - \li - \row - \li - \li arrow - \li mirrored - \li \image imagine/images/menuitem-arrow-mirrored.png - \li - \row - \li - \li arrow - \li disabled - \li \image imagine/images/menuitem-arrow-disabled.png - \li - \row - \li - \li arrow - \li mirrored, disabled - \li \image imagine/images/menuitem-arrow-mirrored-disabled.png - \li - \row - \li - \li indicator - \li - \li \image imagine/images/menuitem-indicator.png - \li - \row - \li - \li indicator - \li disabled - \li \image imagine/images/menuitem-indicator-disabled.png - \li - \row - \li - \li indicator - \li pressed - \li \image imagine/images/menuitem-indicator-pressed.png - \li - \row - \li - \li indicator - \li checked - \li \image imagine/images/menuitem-indicator-checked.png - \li - \row - \li - \li indicator - \li checked, pressed - \li \image imagine/images/menuitem-indicator-checked-pressed.png - \li - \row - \li - \li indicator - \li checked, focused - \li \image imagine/images/menuitem-indicator-checked-focused.png - \li - \row - \li - \li indicator - \li checked, hovered - \li \image imagine/images/menuitem-indicator-checked-hovered.png - \li - \row - \li - \li indicator - \li focused - \li \image imagine/images/menuitem-indicator-focused.png - \li - \row - \li - \li indicator - \li hovered - \li \image imagine/images/menuitem-indicator-hovered.png - \li - \row - \li \l MenuSeparator - \li separator - \li - \li \image imagine/images/menuseparator-separator.9.png - \li - \row - \li \l Page - \li background - \li - \li \image imagine/images/page-background.png - \li \l {sup1}{See footnote} \sup 1 - \row - \li \l PageIndicator - \li delegate - \li - \li \image imagine/images/pageindicator-delegate.png - \li - \row - \li - \li delegate - \li disabled - \li \image imagine/images/pageindicator-delegate-disabled.png - \li - \row - \li - \li delegate - \li disabled, current - \li \image imagine/images/pageindicator-delegate-disabled-current.png - \li - \row - \li - \li delegate - \li pressed - \li \image imagine/images/pageindicator-delegate-pressed.png - \li - \row - \li - \li delegate - \li current - \li \image imagine/images/pageindicator-delegate-current.png - \li - \row - \li \l Pane - \li background - \li - \li \image imagine/images/pane-background.9.png - \li - \row - \li \l Popup - \li background - \li - \li \image imagine/images/popup-background.9.png - \li \l {sup1}{See footnote} \sup 1 - \row - \li - \li overlay - \li - \li \image imagine/images/popup-overlay.png - \li \l {sup1}{See footnote} \sup 1 - \row - \li - \li overlay - \li modal - \li \image imagine/images/popup-overlay-modal.png - \li - \row - \li \l ProgressBar - \li background - \li - \li \image imagine/images/progressbar-background.9.png - \li - \row - \li - \li progress - \li - \li \image imagine/images/progressbar-progress.png - \li - \row - \li - \li mask - \li - \li \image imagine/images/progressbar-mask.9.png - \li - \row - \li \l RadioButton - \li indicator - \li - \li \image imagine/images/radiobutton-indicator.png - \li - \row - \li - \li indicator - \li disabled - \li \image imagine/images/radiobutton-indicator-disabled.png - \li - \row - \li - \li indicator - \li pressed - \li \image imagine/images/radiobutton-indicator-pressed.png - \li - \row - \li - \li indicator - \li checked - \li \image imagine/images/radiobutton-indicator-checked.png - \li - \row - \li - \li indicator - \li checked, focused - \li \image imagine/images/radiobutton-indicator-checked-focused.png - \li - \row - \li - \li indicator - \li checked, hovered - \li \image imagine/images/radiobutton-indicator-checked-hovered.png - \li - \row - \li - \li indicator - \li checked, pressed - \li \image imagine/images/radiobutton-indicator-checked-pressed.png - \li - \row - \li - \li indicator - \li focused - \li \image imagine/images/radiobutton-indicator-focused.png - \li - \row - \li - \li indicator - \li hovered - \li \image imagine/images/radiobutton-indicator-hovered.png - \li - \row - \li \l RadioDelegate - \li background - \li - \li \image imagine/images/radiodelegate-background.9.png - \li - \row - \li - \li background - \li disabled - \li \image imagine/images/radiodelegate-background-disabled.9.png - \li - \row - \li - \li background - \li pressed - \li \image imagine/images/radiodelegate-background-pressed.9.png - \li - \row - \li - \li background - \li focused - \li \image imagine/images/radiodelegate-background-focused.9.png - \li - \row - \li - \li background - \li hovered - \li \image imagine/images/radiodelegate-background-hovered.9.png - \li - \row - \li - \li indicator - \li - \li \image imagine/images/radiodelegate-indicator.png - \li - \row - \li - \li indicator - \li disabled - \li \image imagine/images/radiodelegate-indicator-disabled.png - \li - \row - \li - \li indicator - \li pressed - \li \image imagine/images/radiodelegate-indicator-pressed.png - \li - \row - \li - \li indicator - \li checked - \li \image imagine/images/radiodelegate-indicator-checked.png - \li - \row - \li - \li indicator - \li checked, focused - \li \image imagine/images/radiodelegate-indicator-checked-focused.png - \li - \row - \li - \li indicator - \li checked, hovered - \li \image imagine/images/radiodelegate-indicator-checked-hovered.png - \li - \row - \li - \li indicator - \li checked, pressed - \li \image imagine/images/radiodelegate-indicator-checked-pressed.png - \li - \row - \li - \li indicator - \li focused - \li \image imagine/images/radiodelegate-indicator-focused.png - \li - \row - \li - \li indicator - \li hovered - \li \image imagine/images/radiodelegate-indicator-hovered.png - \li - \row - \li \l RangeSlider - \li background - \li vertical - \li \image imagine/images/rangeslider-background-vertical.9.png - \li - \row - \li - \li background - \li horizontal - \li \image imagine/images/rangeslider-background-horizontal.9.png - \li - \row - \li - \li progress - \li vertical - \li \image imagine/images/rangeslider-progress-vertical.9.png - \li - \row - \li - \li progress - \li vertical, disabled - \li \image imagine/images/rangeslider-progress-vertical-disabled.9.png - \li - \row - \li - \li progress - \li horizontal - \li \image imagine/images/rangeslider-progress-horizontal.9.png - \li - \row - \li - \li progress - \li horizontal, disabled - \li \image imagine/images/rangeslider-progress-horizontal-disabled.9.png - \li - \row - \li - \li handle - \li - \li \image imagine/images/rangeslider-handle.png - \li - \row - \li - \li handle - \li disabled - \li \image imagine/images/rangeslider-handle-disabled.png - \li - \row - \li - \li handle - \li focused - \li \image imagine/images/rangeslider-handle-focused.png - \li - \row - \li - \li handle - \li focused, hovered - \li \image imagine/images/rangeslider-handle-focused-hovered.png - \li - \row - \li - \li handle - \li focused, pressed - \li \image imagine/images/rangeslider-handle-focused-pressed.png - \li - \row - \li - \li handle - \li hovered - \li \image imagine/images/rangeslider-handle-hovered.png - \li - \row - \li - \li handle - \li pressed - \li \image imagine/images/rangeslider-handle-pressed.png - \li - \row - \li \l RoundButton - \li background - \li - \li \image imagine/images/roundbutton-background.png - \li - \row - \li - \li background - \li disabled - \li \image imagine/images/roundbutton-background-disabled.png - \li - \row - \li - \li background - \li disabled, checked - \li \image imagine/images/roundbutton-background-disabled-checked.png - \li - \row - \li - \li background - \li focused - \li \image imagine/images/roundbutton-background-focused.png - \li - \row - \li - \li background - \li pressed - \li \image imagine/images/roundbutton-background-pressed.png - \li - \row - \li - \li background - \li checked - \li \image imagine/images/roundbutton-background-checked.png - \li - \row - \li - \li background - \li checked, focused - \li \image imagine/images/roundbutton-background-checked-focused.png - \li - \row - \li - \li background - \li checked, hovered - \li \image imagine/images/roundbutton-background-checked-hovered.png - \li - \row - \li - \li background - \li highlighted - \li \image imagine/images/roundbutton-background-highlighted.png - \li - \row - \li - \li background - \li highlighted, pressed - \li \image imagine/images/roundbutton-background-highlighted-pressed.png - \li - \row - \li - \li background - \li highlighted, focused - \li \image imagine/images/roundbutton-background-highlighted-focused.png - \li - \row - \li - \li background - \li highlighted, hovered - \li \image imagine/images/roundbutton-background-highlighted-hovered.png - \li - \row - \li - \li background - \li hovered - \li \image imagine/images/roundbutton-background-hovered.png - \li - \row - \li \l ScrollBar - \li handle - \li - \li \image imagine/images/scrollbar-handle.png - \li - \row - \li - \li handle - \li disabled - \li \image imagine/images/scrollbar-handle-disabled.png - \li - \row - \li - \li handle - \li interactive - \li \image imagine/images/scrollbar-handle-interactive.png - \li - \row - \li - \li handle - \li interactive, disabled - \li \image imagine/images/scrollbar-handle-interactive-disabled.png - \li - \row - \li - \li handle - \li interactive, pressed - \li \image imagine/images/scrollbar-handle-interactive-pressed.png - \li - \row - \li - \li handle - \li interactive, hovered - \li \image imagine/images/scrollbar-handle-interactive-hovered.png - \li - \row - \li \l ScrollIndicator - \li handle - \li - \li \image imagine/images/scrollindicator-handle.png - \li - \row - \li \l Slider - \li background - \li vertical - \li \image imagine/images/slider-background-vertical.9.png - \li - \row - \li - \li background - \li horizontal - \li \image imagine/images/slider-background-horizontal.9.png - \li - \row - \li - \li progress - \li vertical - \li \image imagine/images/slider-progress-vertical.9.png - \li - \row - \li - \li progress - \li vertical, disabled - \li \image imagine/images/slider-progress-vertical-disabled.9.png - \li - \row - \li - \li progress - \li horizontal - \li \image imagine/images/slider-progress-horizontal.9.png - \li - \row - \li - \li progress - \li horizontal, disabled - \li \image imagine/images/slider-progress-horizontal-disabled.9.png - \li - \row - \li - \li handle - \li - \li \image imagine/images/slider-handle.png - \li - \row - \li - \li handle - \li disabled - \li \image imagine/images/slider-handle-disabled.png - \li - \row - \li - \li handle - \li focused - \li \image imagine/images/slider-handle-focused.png - \li - \row - \li - \li handle - \li focused, hovered - \li \image imagine/images/slider-handle-focused-hovered.png - \li - \row - \li - \li handle - \li focused, pressed - \li \image imagine/images/slider-handle-focused-pressed.png - \li - \row - \li - \li handle - \li hovered - \li \image imagine/images/slider-handle-hovered.png - \li - \row - \li - \li handle - \li pressed - \li \image imagine/images/slider-handle-pressed.png - \li - \row - \li \l SpinBox - \li background - \li - \li \image imagine/images/spinbox-background.9.png - \li - \row - \li - \li background - \li disabled - \li \image imagine/images/spinbox-background-disabled.9.png - \li - \row - \li - \li background - \li focused - \li \image imagine/images/spinbox-background-focused.9.png - \li - \row - \li - \li background - \li editable - \li \image imagine/images/spinbox-background-editable.9.png - \li - \row - \li - \li indicator - \li up - \li \image imagine/images/spinbox-indicator-up.9.png - \li - \row - \li - \li indicator - \li up, disabled - \li \image imagine/images/spinbox-indicator-up-disabled.9.png - \li - \row - \li - \li indicator - \li up, pressed - \li \image imagine/images/spinbox-indicator-up-pressed.9.png - \li - \row - \li - \li indicator - \li up, focused - \li \image imagine/images/spinbox-indicator-up-focused.9.png - \li - \row - \li - \li indicator - \li up, mirrored - \li \image imagine/images/spinbox-indicator-up-mirrored.9.png - \li - \row - \li - \li indicator - \li up, hovered - \li \image imagine/images/spinbox-indicator-up-hovered.9.png - \li - \row - \li - \li indicator - \li up, editable - \li \image imagine/images/spinbox-indicator-up-editable.9.png - \li - \row - \li - \li indicator - \li up, editable, pressed - \li \image imagine/images/spinbox-indicator-up-editable-pressed.9.png - \li - \row - \li - \li indicator - \li up, editable, focused - \li \image imagine/images/spinbox-indicator-up-editable-focused.9.png - \li - \row - \li - \li indicator - \li up, editable, mirrored - \li \image imagine/images/spinbox-indicator-up-editable-mirrored.9.png - \li - \row - \li - \li indicator - \li up, editable, hovered - \li \image imagine/images/spinbox-indicator-up-editable-hovered.9.png - \li - \row - \li - \li indicator - \li down - \li \image imagine/images/spinbox-indicator-down.9.png - \li - \row - \li - \li indicator - \li down, disabled - \li \image imagine/images/spinbox-indicator-down-disabled.9.png - \li - \row - \li - \li indicator - \li down, pressed - \li \image imagine/images/spinbox-indicator-down-pressed.9.png - \li - \row - \li - \li indicator - \li down, focused - \li \image imagine/images/spinbox-indicator-down-focused.9.png - \li - \row - \li - \li indicator - \li down, mirrored - \li \image imagine/images/spinbox-indicator-down-mirrored.9.png - \li - \row - \li - \li indicator - \li down, hovered - \li \image imagine/images/spinbox-indicator-down-hovered.9.png - \li - \row - \li - \li indicator - \li down, editable - \li \image imagine/images/spinbox-indicator-down-editable.9.png - \li - \row - \li - \li indicator - \li down, editable, pressed - \li \image imagine/images/spinbox-indicator-down-editable-pressed.9.png - \li - \row - \li - \li indicator - \li down, editable, focused - \li \image imagine/images/spinbox-indicator-down-editable-focused.9.png - \li - \row - \li - \li indicator - \li down, editable, mirrored - \li \image imagine/images/spinbox-indicator-down-editable-mirrored.9.png - \li - \row - \li - \li indicator - \li down, editable, hovered - \li \image imagine/images/spinbox-indicator-down-editable-hovered.9.png - \li - \row - \li \l SwipeDelegate - \li background - \li - \li \image imagine/images/swipedelegate-background.9.png - \li - \row - \li - \li background - \li disabled - \li \image imagine/images/swipedelegate-background-disabled.9.png - \li - \row - \li - \li background - \li pressed - \li \image imagine/images/swipedelegate-background-pressed.9.png - \li - \row - \li - \li background - \li focused - \li \image imagine/images/swipedelegate-background-focused.9.png - \li - \row - \li - \li background - \li hovered - \li \image imagine/images/swipedelegate-background-hovered.9.png - \li - \row - \li \l Switch - \li indicator - \li - \li \image imagine/images/switch-indicator.png - \li - \row - \li - \li indicator - \li disabled - \li \image imagine/images/switch-indicator-disabled.png - \li - \row - \li - \li indicator - \li pressed - \li \image imagine/images/switch-indicator-pressed.png - \li - \row - \li - \li indicator - \li checked - \li \image imagine/images/switch-indicator-checked.png - \li - \row - \li - \li indicator - \li checked, focused - \li \image imagine/images/switch-indicator-checked-focused.png - \li - \row - \li - \li indicator - \li checked, hovered - \li \image imagine/images/switch-indicator-checked-hovered.png - \li - \row - \li - \li indicator - \li checked, pressed - \li \image imagine/images/switch-indicator-checked-pressed.png - \li - \row - \li - \li indicator - \li focused - \li \image imagine/images/switch-indicator-focused.png - \li - \row - \li - \li indicator - \li hovered - \li \image imagine/images/switch-indicator-hovered.png - \li - \row - \li - \li handle - \li - \li \image imagine/images/switch-handle.png - \li - \row - \li - \li handle - \li disabled - \li \image imagine/images/switch-handle-disabled.png - \li - \row - \li - \li handle - \li pressed - \li \image imagine/images/switch-handle-pressed.png - \li - \row - \li \l SwitchDelegate - \li background - \li - \li \image imagine/images/switchdelegate-background.9.png - \li - \row - \li - \li background - \li disabled - \li \image imagine/images/switchdelegate-background-disabled.9.png - \li - \row - \li - \li background - \li pressed - \li \image imagine/images/switchdelegate-background-pressed.9.png - \li - \row - \li - \li background - \li focused - \li \image imagine/images/switchdelegate-background-focused.9.png - \li - \row - \li - \li background - \li hovered - \li \image imagine/images/switchdelegate-background-hovered.9.png - \li - \row - \li - \li indicator - \li - \li \image imagine/images/switchdelegate-indicator.png - \li - \row - \li - \li indicator - \li disabled - \li \image imagine/images/switchdelegate-indicator-disabled.png - \li - \row - \li - \li indicator - \li pressed - \li \image imagine/images/switchdelegate-indicator-pressed.png - \li - \row - \li - \li indicator - \li checked - \li \image imagine/images/switchdelegate-indicator-checked.png - \li - \row - \li - \li indicator - \li checked, focused - \li \image imagine/images/switchdelegate-indicator-checked-focused.png - \li - \row - \li - \li indicator - \li checked, hovered - \li \image imagine/images/switchdelegate-indicator-checked-hovered.png - \li - \row - \li - \li indicator - \li checked, pressed - \li \image imagine/images/switchdelegate-indicator-checked-pressed.png - \li - \row - \li - \li indicator - \li focused - \li \image imagine/images/switchdelegate-indicator-focused.png - \li - \row - \li - \li indicator - \li hovered - \li \image imagine/images/switchdelegate-indicator-hovered.png - \li - \row - \li - \li handle - \li - \li \image imagine/images/switchdelegate-handle.png - \li - \row - \li - \li handle - \li disabled - \li \image imagine/images/switchdelegate-handle-disabled.png - \li - \row - \li \l TabBar - \li background - \li - \li \image imagine/images/tabbar-background.png - \li - \row - \li \l TabButton - \li background - \li - \li \image imagine/images/tabbutton-background.9.png - \li - \row - \li - \li background - \li disabled - \li \image imagine/images/tabbutton-background-disabled.9.png - \li - \row - \li - \li background - \li pressed - \li \image imagine/images/tabbutton-background-pressed.9.png - \li - \row - \li - \li background - \li checked - \li \image imagine/images/tabbutton-background-checked.9.png - \li - \row - \li - \li background - \li hovered - \li \image imagine/images/tabbutton-background-hovered.9.png - \li - \row - \li - \li background - \li disabled, checked - \li \image imagine/images/tabbutton-background-disabled-checked.9.png - \li - \row - \li \l TextArea - \li background - \li - \li \image imagine/images/textarea-background.9.png - \li - \row - \li - \li background - \li disabled - \li \image imagine/images/textarea-background-disabled.9.png - \li - \row - \li - \li background - \li focused - \li \image imagine/images/textarea-background-focused.9.png - \li - \row - \li \l TextField - \li background - \li - \li \image imagine/images/textfield-background.9.png - \li - \row - \li - \li background - \li disabled - \li \image imagine/images/textfield-background-disabled.9.png - \li - \row - \li - \li background - \li focused - \li \image imagine/images/textfield-background-focused.9.png - \li - \row - \li \l ToolBar - \li background - \li - \li \image imagine/images/toolbar-background.png - \li - \row - \li \l ToolButton - \li background - \li - \li \image imagine/images/toolbutton-background.9.png - \li - \row - \li - \li background - \li disabled, checked - \li \image imagine/images/toolbutton-background-disabled-checked.9.png - \li - \row - \li - \li background - \li focused - \li \image imagine/images/toolbutton-background-focused.9.png - \li - \row - \li - \li background - \li pressed - \li \image imagine/images/toolbutton-background-pressed.9.png - \li - \row - \li - \li background - \li checked - \li \image imagine/images/toolbutton-background-checked.9.png - \li - \row - \li - \li background - \li checked, focused - \li \image imagine/images/toolbutton-background-checked-focused.9.png - \li - \row - \li - \li background - \li checked, hovered - \li \image imagine/images/toolbutton-background-checked-hovered.9.png - \li - \row - \li - \li background - \li hovered - \li \image imagine/images/toolbutton-background-hovered.9.png - \li - \row - \li \l ToolSeparator - \li separator - \li horizontal - \li \image imagine/images/toolseparator-separator-horizontal.9.png - \li - \row - \li - \li separator - \li vertical - \li \image imagine/images/toolseparator-separator-vertical.9.png - \li - \row - \li \l ToolTip - \li background - \li - \li \image imagine/images/tooltip-background.9.png - \li - \endtable - - \target sup1 - \sup 1 A 1x1 image containing one color, stretched to fill the control. - - \section2 9-Patch Images - - The Imagine style uses \l - {https://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch}{9-patch - images} in order to give designers control over how a particular element - responds to being resized. Here is an example of a 9-patch image that - represents a \l {Button}'s \l {Control::}{background}, alongside a - magnified version (to make it easier to see the 9-patch lines): - - \image qtquickcontrols2-imagine-9-patch-4x.png - - The content of the image is 44 pixels wide by 32 pixels high. Every 9-patch - image needs a one pixel thick line (collectively referred to as - "9-patch lines") around every side, so the actual size of the image becomes - 46 pixels wide by 34 pixels high. Note that the 9-patch lines must be one - pixel thick regardless of the target DPI of the image. For example, - the 9-patch lines for button-background.9.png and button-background@2x.9.png - must both be one pixel thick. - - The 9-patch lines must be black, and the remaining areas must be transparent - or white: - - \image qtquickcontrols2-imagine-9-patch-size.png - - \section3 Stretchable Areas - - The 9-patch lines on the top and left edges determine which parts of the - image are stretched when it is resized. - - Below are examples of the 9-patch image being resized to one and a half - times its original size in various dimensions: - - \image qtquickcontrols2-imagine-9-patch-resized-stretchable.png - - Notice how the the rounded corners keep their original size, as they are - outside the range of the lines. - - \section3 Padding Areas - - The 9-patch lines on the right and bottom edges determine how much space - is available for the control's \l {Control::}{contentItem}, which means it - can also be thought of as controlling the \l {Control::}{padding}. For a - diagram that illustrates padding, see \l {Control Layout}. - - Below are more examples of the 9-patch image being resized, but this time - demonstrating how the padding 9-patch lines work. - - \image qtquickcontrols2-imagine-9-patch-resized-padding.png - - The \c contentItem can take up as much space as it needs within the shaded - areas. If the padding lines are left out, the \c contentItem will take as - much space as it needs without exceeding the stretchable areas. - - \section3 Inset Areas - - In some cases it is necessary for a control to have a drop shadow, for - example. However, if we were to add a drop shadow to the button above, it - would affect its size, which presents problems for both layouting and - mouse/touch input boundaries. - - Inset areas accounts for this by telling the control that a certain area of - the 9-patch image should go outside of the control: - - \image qtquickcontrols2-imagine-9-patch-inset.png - - In the image below, the dashed line represents the button's clickable area, - as well as the space that it will take up in a layout. The shadow is marked - by the striped area behind it: - - \image qtquickcontrols2-imagine-9-patch-inset-boundaries.png - - \section3 Exporting 9-Patch Images - - Various vector and bitmap editors can be used to create 9-patch images - suitable for use with the Imagine style. The following sections briefly - explain the export process for each editor, and the last section explains - how to ensure the exported images are 9-patch-conformant. - - \section4 Illustrator - - See Adobe's - \l {https://helpx.adobe.com/in/illustrator/using/collect-assets-export-for-screens.html#panel} - {Asset Export panel} documentation. - - \section4 Inkscape - - The \l {https://github.com/mitchcurtis/inkscape-9-patch-export} - {Inkscape 9-Patch Export Extension} can be used to export assets with - Inkscape. - - \section4 Photoshop - - See Adobe's - \l {https://helpx.adobe.com/photoshop/using/generate-assets-layers.html} - {Generate image assets from layers} documentation. - - \section4 Sketch - - See Sketch's \l {https://sketchapp.com/docs/exporting/}{Exporting} documentation. - - Qt Quick Controls also provides a - \l {http://code.qt.io/cgit/qt/qtquickcontrols2.git/tree/src/imports/controls/imagine/design} - {plugin} for Sketch that automatically fixes the thickness of the 9-patch lines - after the assets are exported. To install this file, double-click on it. - Once Sketch has confirmed that the 9-patch export plugin has been installed, - the plugin will automatically process images when they are exported. - - \section4 Fixing 9-Patch Lines - - When exporting 9-patch images in several DPI variants (\c {@2x}, \c {@3x}, - etc.), the 9-patch lines will typically be scaled up along with the image. - There are several ways to fix this, but perhaps the simplest approach is - to use \l {https://www.imagemagick.org/script/mogrify.php}{ImageMagick's mogrify} - tool. The tool has a \c -shave feature that can be used to crop the image - to reduce the thickness of the 9-patch lines: - - \badcode - mogrify -shave 1x1 -path path/to/images *@2x.9.png - mogrify -shave 2x2 -path path/to/images *@3x.9.png - mogrify -shave 3x3 -path path/to/images *@4x.9.png - \endcode - - Regular DPI images (those without the \c @Nx prefix) are not affected, so it - is only necessary to run the command on images intended for high DPI displays. - - \section2 Animated Images - - The \l {https://developers.google.com/speed/webp/}{WebP} and GIF animated - image formats are supported by the Imagine style. - - \section2 Customization - - \section3 Path - - The Imagine style allows customizing the \l {imagine-path-attached-prop}{path} - that is used to do the image asset selection. The path can be specified for any - window or item, and it automatically propagates to children in the same manner as - \l {Control::font}{fonts}. In the following example, the window and all three radio - buttons appear with dark image assets (files that are located in "qrc:/themes/dark"). - - \table - \row - \li - \qml - import QtQuick 2.12 - import QtQuick.Controls 2.12 - import QtQuick.Controls.Imagine 2.12 - - ApplicationWindow { - visible: true - - Imagine.path: "qrc:/themes/dark" - - Column { - anchors.centerIn: parent - - RadioButton { text: qsTr("Small") } - RadioButton { text: qsTr("Medium"); checked: true } - RadioButton { text: qsTr("Large") } - } - } - \endqml - \li - \image qtquickcontrols2-imagine-customization-dark.png - \endtable - - In addition to specifying the path in QML, it is also possible to specify - it via an \l {imagine-customization-environment-variable}{environment variable} - or in a \l {imagine-customization-configuration-file}{configuration file}. - Attributes specified in QML take precedence over all other methods. - - \section4 Configuration File - \target imagine-customization-configuration-file - - \include qquickimaginestyle.qdocinc conf - - See \l {Qt Quick Controls Configuration File} for more details about the - configuration file. - - \section4 Environment Variables - \target imagine-customization-environment-variable - - \include qquickimaginestyle.qdocinc env - - See \l {Supported Environment Variables in Qt Quick Controls} for the full - list of supported environment variables. - - \section3 Palette - - The Imagine style supports palette customization via the \l {Item::}{palette} - property and the \l {Palette Configuration}{qtquickcontrols2.conf} file. - As with other styles, the exact \l[QML]{Palette}{palette roles} - that the Imagine style uses are style-dependent. However, as most of the visual - appearance of controls (for example: backgrounds) are managed through image assets, - only the roles that are typically used for text will have an effect. - - \section3 Font - - Custom fonts can be set via the \l {Control::}{font} property and the - \l {Font Configuration}{configuration} file. - - \section2 Dependency - - The Imagine style must be separately imported to gain access to the - attributes that are specific to the Imagine style. It should be noted - that regardless of the references to the Imagine style, the same - application code runs with any other style. Imagine-specific attributes - only have an effect when the application is run with the Imagine style. - - If the Imagine style is imported in a QML file that is always loaded, the - Imagine style must be deployed with the application in order to be able - to run the application regardless of which style the application is run with. - By using \l {Using File Selectors with Qt Quick Controls}{file selectors}, - style-specific tweaks can be applied without creating a hard dependency to - a style. - - \b {See also} \l {Styling Qt Quick Controls} - - \section1 Attached Property Documentation - - \styleproperty {Imagine.path} {string} {imagine-path-attached-prop} - \target imagine-path-attached-prop - This attached property holds the path to the image assets... - - \code - Button { - Imagine.path: "qrc:/themes/dark" - } - \endcode - - \endstyleproperty - - \section1 Related Information - - \list - \li \l{Styling Qt Quick Controls} - \li \l{Qt Quick Controls - Imagine Style Example: Automotive}{Automotive Example} - \li \l{Qt Quick Controls - Imagine Style Example: Music Player}{Music Player Example} - \endlist -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-index.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-index.qdoc deleted file mode 100644 index 7b64e776..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-index.qdoc +++ /dev/null @@ -1,204 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols-index.html - \keyword Qt Quick Controls 2 - \title Qt Quick Controls - - \brief Provides a set of UI controls for Qt Quick. - - Qt Quick Controls provides a set of controls that can be used - to build complete interfaces in Qt Quick. The module was introduced - in Qt 5.7. - - \image qtquickcontrols2-styles.png - - Qt Quick Controls comes with a selection customizable styles. - See \l {Styling Qt Quick Controls} for more details. - - - \section1 Using the Module - - \section2 QML API - - The \l{Qt Quick Controls QML Types}{QML types} can be imported into your - application using the following import statement in your \c {.qml} file: - - \qml - import QtQuick.Controls - \endqml - - \section2 C++ API - - Using the \l{Qt Quick Controls C++ Classes}{C++ API} requires linking against the module library, - either directly or through other dependencies. - Several build tools have dedicated support for this, including CMake and qmake. - - \section3 Building with CMake - Use the \c find_package() command to locate the needed module components in the Qt6 package: - - \snippet qtquickcontrols2-overview.cmake 0 - - See also the \l{Build with CMake} overview. - - \section3 Building with qmake - To configure the module for building with qmake, - add the module as a value of the QT variable in the project's .pro file: - - \code - QT += quickcontrols2 - \endcode - - \section2 Building From Source - - The \b{Qt Image Formats} module is recommended, but not - required. It provides support for the \c {.webp} format used by the - \l {Animated Images}{Imagine style}. - - \section1 Versions - - Qt Quick Controls 2.0 was introduced in Qt 5.7. Subsequent minor Qt releases - increment the import version of the Qt Quick Controls modules by one, - until Qt 5.12, where the import versions match Qt's minor version. - - In Qt 6, both the major and minor versions match, and version numbers may - be omitted from imports in QML. If the version is omitted, the latest - version will be used. - - The experimental Qt Labs modules use import version 1.0. - - \table - \header - \li \c Qt - \li \l {Qt Quick QML Types}{\c QtQuick} - \li \l {Qt Quick Controls QML Types}{\c QtQuick.Controls},\br - \l {Material Style}{\c QtQuick.Controls.Material},\br - \l {Universal Style}{\c QtQuick.Controls.Universal},\br - \l {Qt Quick Templates 2 QML Types}{\c QtQuick.Templates} - \li \l {Qt Labs Platform QML Types}{\c Qt.labs.platform} - \row - \li 5.7 - \li 2.7 - \li 2.0 - \li 1.0 - \row - \li 5.8 - \li 2.8 - \li 2.1 - \li 1.0 - \row - \li 5.9 - \li 2.9 - \li 2.2 - \li 1.0 - \row - \li 5.10 - \li 2.10 - \li 2.3 - \li 1.0 - \row - \li 5.11 - \li 2.11 - \li 2.4 - \li 1.0 - \row - \li 5.12 - \li 2.12 - \li 2.12 - \li 1.0 - \row - \li 6.0 - \li 6.0 - \li 6.0 - \li 1.0 - \row - \li ... - \li ... - \li ... - \li ... - \endtable - - \section1 Module Evolution - \l{Changes to Qt Quick Controls} lists important changes in the - module API and functionality that were done for the Qt 6 series of Qt. - - \section1 License and Attributions - - Qt Quick Controls is available under commercial licenses from \l{The Qt Company}. - In addition, it is available under the - \l{GNU Lesser General Public License, version 3}, or - the \l{GNU General Public License, version 2}. - See \l{Qt Licensing} for further details. - - Furthermore Qt Quick Controls potentially contains third party - modules under following permissive licenses: - - \generatelist{groupsbymodule attributions-qtquickcontrols} - - \section1 Topics - - \list - \li \l{Getting Started with Qt Quick Controls}{Getting Started} - \li \l{Qt Quick Controls Guidelines}{Guidelines} - \li \l{Styling Qt Quick Controls}{Styling} - \li \l{Icons in Qt Quick Controls}{Icons} - \li \l{Customizing Qt Quick Controls}{Customization} - \li \l{Using File Selectors with Qt Quick Controls}{Using File Selectors} - \li \l{Deploying Qt Quick Controls Applications}{Deployment} - \li \l{Qt Quick Controls Configuration File}{Configuration File} - \li \l{Supported Environment Variables in Qt Quick Controls}{Environment Variables} - \endlist - - \section1 Reference - - \list - \li \l{Qt Quick Controls QML Types}{QML Types} - \li \l{Qt Quick Controls C++ Classes}{C++ Classes} - \endlist - - \section1 Examples - - \list - \li \l{Qt Quick Controls - Gallery}{Gallery} - \li \l{Qt Quick Controls - Chat Tutorial}{Chat Tutorial} - \li \l{Qt Quick Controls - Text Editor}{Text Editor} - \li \l{Qt Quick Controls - Wearable Demo}{Wearable Demo} - \li \l{Qt Quick Controls - Imagine Style Example: Automotive}{Automotive Example} - \li \l{Qt Quick Controls - Imagine Style Example: Music Player}{Music Player Example} - \li \l{Qt Quick Controls Examples}{All Examples} - \endlist - - \section1 Related Modules - - \list - \li \l{Qt Quick} - \li \l{Qt Quick Layouts} - \li \l{Qt Quick Templates 2} - \li \l{Qt Labs Platform} - \endlist -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-indicators.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-indicators.qdoc deleted file mode 100644 index 9f9e357b..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-indicators.qdoc +++ /dev/null @@ -1,83 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-indicators.html - \title Indicator Controls - \ingroup qtquickcontrols2-guidelines - \brief Guidelines for indicator controls - - Qt Quick Controls offers a selection of indicator-like controls. - - \annotatedlist qtquickcontrols2-indicators - - Each type of indicator has its own specific target use case. The following - sections offer guidelines for choosing the appropriate type of indicator, - depending on the use case. - - \section1 BusyIndicator Control - - \image qtquickcontrols2-busyindicator.png - - BusyIndicator can be used to show that an operation is in progress, - and that the UI has to wait for the operation to complete. - - \section1 PageIndicator Control - - \image qtquickcontrols2-pageindicator.png - - \l PageIndicator is used to indicate the currently active page in - a container of multiple pages. - - \section1 ProgressBar Control - - \image qtquickcontrols2-progressbar.gif - - \l ProgressBar indicates the progress of an operation. The value should be - updated regularly. - - \section1 ScrollBar Control - - \image qtquickcontrols2-scrollbar.gif - - \l ScrollBar is an interactive bar that indicates the current scroll - position, and can be used to scroll to a specific position in a - \l Flickable. - - \section1 ScrollIndicator Control - - \image qtquickcontrols2-scrollindicator.gif - - \l ScrollIndicator is a non-interactive indicator that indicates the - current scroll position, and can be used to scroll to a specific position in a - \l {Flickable}. - - \section1 Related Information - \list - \li \l {Qt Quick Controls Guidelines} - \endlist -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-input.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-input.qdoc deleted file mode 100644 index 6bc037e0..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-input.qdoc +++ /dev/null @@ -1,123 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-input.html - \title Input Controls - \ingroup qtquickcontrols2-guidelines - \brief Guidelines for input controls - - Qt Quick Controls offers a variety of input controls for both numeric - and textual input. - - \annotatedlist qtquickcontrols2-input - - Each type of input control has its own specific target use case. The - following sections offer guidelines for choosing the appropriate type - of input control, depending on the use case. - - \section1 ComboBox Control - - \image qtquickcontrols2-combobox.gif - - \l ComboBox is used to select a value from a static multiple-line drop-down list. - It is not possible to add new values, and only one option can be selected. - - Recommendations: - \list - \li If the number of values is very large, consider applying a filter. - \li If the list is very limited, consider using RadioButton. This has the - advantage that the user can see all options at the same time. - \li Select a default value, the value that will be chosen most often. - \endlist - - \b {See also} \l {CheckBox Control}, \l {Tumbler Control}. - - \section1 Dial Control - - \image qtquickcontrols2-dial.png - - \l Dial is similar to a traditional dial knob that is found on devices such - as stereos or industrial equipment. - - The dial is rotated by clicking and dragging, with the handle indicating the - value of the dial. - - For applications where fast input is important, the circular - \l {Dial::inputMode}{input mode} is useful, as clicking on the dial will - move it directly to that position. - - For applications where precise input is important, the horizontal and - vertical input modes are recommended, as these allow small adjustments to - be made relative to where the dial is clicked. These modes are also better - for dials where large jumps in values could be unsafe, such as a dial that - controls audio volume. - - \b {See also} \l {Tumbler Control}. - - \section1 TextArea Control - - \image qtquickcontrols2-textarea.png - - \l TextArea is a multi-line text editor. - - \section1 TextField Control - - \image qtquickcontrols2-textfield.png - - \l TextField is a single line text editor. - - \b {See also} \l {Tumbler Control}. - - \section1 Slider Control - - \image qtquickcontrols2-slider.gif - - \l Slider is used to select a value by sliding a handle along a track. - - \section1 RangeSlider Control - - \image qtquickcontrols2-rangeslider.gif - - \l RangeSlider is used to select a range specified by two values, - by sliding each handle along a track. - - \b {See also} \l {Slider Control}. - - \section1 Tumbler Control - - \image qtquickcontrols2-tumbler.png - - \l Tumbler is a spinnable wheel of items that can be selected. - - \b {See also} \l {ComboBox Control}. - - \section1 Related Information - \list - \li \l {Qt Quick Controls Guidelines} - \endlist -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-macos.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-macos.qdoc deleted file mode 100644 index 382a23a6..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-macos.qdoc +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2021 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-macOS.html - \title macOS Style - - The macOS style is a style that looks native on macOS. - \l {detailed-desc-macOS}{More...} - - \styleimport {QtQuick.Controls.macOS} {Qt 6.0} - - \target detailed-desc-macOS - - The macOS style is a style that looks native on macOS. The controls are drawn run-time using - native frameworks, and is therefore only available for applications running on macOS. - - \note Be aware that the apperance of this style can change from one minor Qt version to the - next, to better blend in with native applications on the platform. - - \table - \row - \li \image qtquickcontrols2-macos-light.png - \caption The macOS style in light theme - \li \image qtquickcontrols2-macos-dark.png - \caption The macOS style in dark theme - \endtable - - To run an application with the macOS style, see - \l {Using Styles in Qt Quick Controls}. - - \section2 Current state - - The macOS style is under development, and some controls are not yet supported. Those - controls are: \l BusyIndicator, \l DelayButton, \l PageIndicator, \l RangeSlider, \l Switch, \l TabBar and - \l Tumbler. Those will fall back to use the \l {Fusion Style}. - - \section2 Customization - - The goal of the macOS style is to for the controls look and feel as similar as possible to the - native controls in UIKit. The style will follow the theme and colors configured globally from - System Preferences, and does not come with a separate customization API on top of that. - - \note If you want to style a control, you should set both the - \l {Control::background}{background} and the \l {Control::contentItem}{contentItem}, rather than - just one of them. This is because the macOS style will in some cases draw both the contents and - the background into the default background item, which will not look good if the application - combines this with a custom contentItem. By setting them both, you are guaranteed that the - control will look the same on all platforms, for all styles. - - \b {See also} \l {Styling Qt Quick Controls} -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-material.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-material.qdoc deleted file mode 100644 index f08c5ec3..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-material.qdoc +++ /dev/null @@ -1,404 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-material.html - \title Material Style - - The Material Style is based on the Google Material Design Guidelines. - \l{detailed-desc-material}{More...} - - \styleimport {QtQuick.Controls.Material 2.12} {Qt 5.7} - - \section1 Attached Properties - - \list - \li \l {material-accent-attached-prop}{\b accent} : color - \li \l {material-background-attached-prop}{\b background} : color - \li \l {material-elevation-attached-prop}{\b elevation} : int - \li \l {material-foreground-attached-prop}{\b foreground} : color - \li \l {material-primary-attached-prop}{\b primary} : color - \li \l {material-theme-attached-prop}{\b theme} : enumeration - \endlist - - \section1 Attached Methods - - \list - \li color \l {material-color-attached-method}{\b color}(enumeration predefined, enumeration shade) - \endlist - - \section1 Detailed Description - \target detailed-desc-material - - The Material style is based on the \l {https://www.google.com/design/spec/material-design/introduction.html} - {Google Material Design Guidelines}. It allows for a unified experience - across platforms and device sizes. - - \table - \row - \li \image qtquickcontrols2-material-light.png - \caption The Material style in light theme - \li \image qtquickcontrols2-material-dark.png - \caption The Material style in dark theme - \endtable - - To run an application with the Material style, see - \l {Using Styles in Qt Quick Controls}. - - \note The Material style is not a native Android style. The Material - style is a 100% cross-platform Qt Quick Controls style implementation that - follows the Google Material Design Guidelines. The style runs on any - platform, and looks more or less identical everywhere. Minor differences - may occur due to differences in available system fonts and font rendering - engines. - - \section2 Customization - - The Material style allows customizing five attributes, \l {material-theme-attached-prop}{theme}, - \l {material-primary-attached-prop}{primary}, \l {material-accent-attached-prop}{accent}, - \l {material-foreground-attached-prop}{foreground}, and \l {material-background-attached-prop}{background}. - - \image qtquickcontrols2-material-attributes.png - - All attributes can be specified for any window or item, and they automatically - propagate to children in the same manner as \l {Control::font}{fonts}. In the - following example, the window and all three radio buttons appear in the dark - theme using a purple accent color: - - \table - \row - \li - \qml - import QtQuick 2.12 - import QtQuick.Controls 2.12 - import QtQuick.Controls.Material 2.12 - - ApplicationWindow { - visible: true - - Material.theme: Material.Dark - Material.accent: Material.Purple - - Column { - anchors.centerIn: parent - - RadioButton { text: qsTr("Small") } - RadioButton { text: qsTr("Medium"); checked: true } - RadioButton { text: qsTr("Large") } - } - } - \endqml - \li - \image qtquickcontrols2-material-purple.png - \endtable - - In addition to specifying the attributes in QML, it is also possible to - specify them via environment variables or in a configuration file. Attributes - specified in QML take precedence over all other methods. - - \section3 Configuration File - - \include qquickmaterialstyle.qdocinc conf - - See \l {Qt Quick Controls Configuration File} for more details about the - configuration file. - - \section3 Environment Variables - - \include qquickmaterialstyle.qdocinc env - - See \l {Supported Environment Variables in Qt Quick Controls} for the full - list of supported environment variables. - - \section2 Dependency - - The Material style must be separately imported to gain access to the - attributes that are specific to the Material style. It should be noted - that regardless of the references to the Material style, the same - application code runs with any other style. Material-specific attributes - only have an effect when the application is run with the Material style. - - If the Material style is imported in a QML file that is always loaded, the - Material style must be deployed with the application in order to be able - to run the application regardless of which style the application is run with. - By using \l {Using File Selectors with Qt Quick Controls}{file selectors}, - style-specific tweaks can be applied without creating a hard dependency to - a style. - - \section2 Pre-defined Material Colors - - Even though primary and accent can be any \l {colorbasictypedocs}{color}, it - is recommended to use one of the pre-defined colors that have been designed - to work well with the rest of the Material style palette: - - Available pre-defined colors: - \value Material.Red \stylecolor {#F44336} {} - \value Material.Pink \stylecolor {#E91E63} {(default accent)} - \value Material.Purple \stylecolor {#9C27B0} {} - \value Material.DeepPurple \stylecolor {#673AB7} {} - \value Material.Indigo \stylecolor {#3F51B5} {(default primary)} - \value Material.Blue \stylecolor {#2196F3} {} - \value Material.LightBlue \stylecolor {#03A9F4} {} - \value Material.Cyan \stylecolor {#00BCD4} {} - \value Material.Teal \stylecolor {#009688} {} - \value Material.Green \stylecolor {#4CAF50} {} - \value Material.LightGreen \stylecolor {#8BC34A} {} - \value Material.Lime \stylecolor {#CDDC39} {} - \value Material.Yellow \stylecolor {#FFEB3B} {} - \value Material.Amber \stylecolor {#FFC107} {} - \value Material.Orange \stylecolor {#FF9800} {} - \value Material.DeepOrange \stylecolor {#FF5722} {} - \value Material.Brown \stylecolor {#795548} {} - \value Material.Grey \stylecolor {#9E9E9E} {} - \value Material.BlueGrey \stylecolor {#607D8B} {} - - When the dark theme is in use, different \l {Pre-defined Shades}{shades} of - the pre-defined colors are used by default: - - \value Material.Red \stylecolor {#EF9A9A} {} - \value Material.Pink \stylecolor {#F48FB1} {(default accent)} - \value Material.Purple \stylecolor {#CE93D8} {} - \value Material.DeepPurple \stylecolor {#B39DDB} {} - \value Material.Indigo \stylecolor {#9FA8DA} {(default primary)} - \value Material.Blue \stylecolor {#90CAF9} {} - \value Material.LightBlue \stylecolor {#81D4FA} {} - \value Material.Cyan \stylecolor {#80DEEA} {} - \value Material.Teal \stylecolor {#80CBC4} {} - \value Material.Green \stylecolor {#A5D6A7} {} - \value Material.LightGreen \stylecolor {#C5E1A5} {} - \value Material.Lime \stylecolor {#E6EE9C} {} - \value Material.Yellow \stylecolor {#FFF59D} {} - \value Material.Amber \stylecolor {#FFE082} {} - \value Material.Orange \stylecolor {#FFCC80} {} - \value Material.DeepOrange \stylecolor {#FFAB91} {} - \value Material.Brown \stylecolor {#BCAAA4} {} - \value Material.Grey \stylecolor {#EEEEEE} {} - \value Material.BlueGrey \stylecolor {#B0BEC5} {} - - \section2 Pre-defined Shades - - There are several different - \l {https://material.google.com/style/color.html#color-color-palette}{shades} - of each \l {Pre-defined Material Colors}{pre-defined color} that can be passed - to the \l {material-color-attached-method}{Material.color()} function: - \value Material.Shade50 - \value Material.Shade100 - \value Material.Shade200 - \value Material.Shade300 - \value Material.Shade400 - \value Material.Shade500 - \value Material.Shade600 - \value Material.Shade700 - \value Material.Shade800 - \value Material.Shade900 - \value Material.ShadeA100 - \value Material.ShadeA200 - \value Material.ShadeA400 - \value Material.ShadeA700 - - \b {See also} \l {Basic Style}, \l {Universal Style} - - \section2 Variants - - The Material style also supports a dense variant, where controls like - buttons and delegates are smaller in height and use smaller font sizes. - It is recommended to use the dense variant on desktop platforms, where - a mouse and keyboard allow more precise and flexible user interaction. - - To use the dense variant, either set the - \c QT_QUICK_CONTROLS_MATERIAL_VARIANT environment variable to \c Dense, - or specify \c Variant=Dense in the - \l {Qt Quick Controls Configuration File}{qtquickcontrols2.conf} file. - The default value in both cases is \c Normal. - - The following images illustrate the differences between some of the - controls when using the normal and dense variants: - - \table - \row - \li - \image qtquickcontrols2-material-variant-normal.png - \li - \image qtquickcontrols2-material-variant-dense.png - \endtable - - Note that the heights shown above may vary based on differences in fonts - across platforms. - - \section1 Attached Property Documentation - - \styleproperty {Material.accent} {color} {material-accent-attached-prop} - \target material-accent-attached-prop - This attached property holds the accent color of the theme. The property - can be attached to any window or item. The value is propagated to children. - - The default value is \c Material.Pink. - - In the following example, the accent color of the highlighted button is - changed to \c Material.Orange: - - \table - \row - \li - \snippet qtquickcontrols2-material-accent.qml 1 - \li - \image qtquickcontrols2-material-accent.png - \endtable - - \note Even though the accent can be any \l {colorbasictypedocs}{color}, it is - recommended to use one of the \l {pre-defined Material colors} that have been - designed to work well with the rest of the Material style palette. - - \endstyleproperty - - \styleproperty {Material.background} {color} {material-background-attached-prop} - \target material-background-attached-prop - This attached property holds the background color of the theme. The property - can be attached to any window or item. The value is propagated to children. - - The default value is theme-specific (light or dark). - - In the following example, the background color of the button is changed to - \c Material.Teal: - - \table - \row - \li - \snippet qtquickcontrols2-material-background.qml 1 - \li - \image qtquickcontrols2-material-background.png - \endtable - - \endstyleproperty - - \styleproperty {Material.elevation} {int} {material-elevation-attached-prop} - \target material-elevation-attached-prop - This attached property holds the elevation of the control. The higher the - elevation, the deeper the shadow. The property can be attached to any control, - but not all controls visualize elevation. - - The default value is control-specific. - - In the following example, the elevation of the pane is set to \c 6 - in order to achieve the look of an - \l {https://material.google.com/components/cards.html}{elevated card}: - - \table - \row - \li - \snippet qtquickcontrols2-material-elevation.qml 1 - \li - \image qtquickcontrols2-material-elevation.png - \endtable - - \endstyleproperty - - \styleproperty {Material.foreground} {color} {material-foreground-attached-prop} - \target material-foreground-attached-prop - This attached property holds the foreground color of the theme. The property - can be attached to any window or item. The value is propagated to children. - - The default value is theme-specific (light or dark). - - In the following example, the foreground color of the button is set to \c - Material.Pink: - - \table - \row - \li - \snippet qtquickcontrols2-material-foreground.qml 1 - \li - \image qtquickcontrols2-material-foreground.png - \endtable - - \endstyleproperty - - \styleproperty {Material.primary} {color} {material-primary-attached-prop} - \target material-primary-attached-prop - This attached property holds the primary color of the theme. The property - can be attached to any window or item. The value is propagated to children. - - The primary color is used as the background color of ToolBar by default. - - The default value is \c Material.Indigo. - - \note Even though the primary can be any \l {colorbasictypedocs}{color}, it is - recommended to use one of the \l {pre-defined Material colors} that have been - designed to work well with the rest of the Material style palette. - - \endstyleproperty - - \styleproperty {Material.theme} {enumeration} {material-theme-attached-prop} - \target material-theme-attached-prop - This attached property holds whether the theme is light or dark. The property - can be attached to any window or item. The value is propagated to children. - - Available themes: - \value Material.Light Light theme (default) - \value Material.Dark Dark theme - \value Material.System System theme - - Setting the theme to \c System chooses either the light or dark theme based - on the system theme colors. However, when reading the value of the theme - property, the value is never \c System, but the actual theme. - - In the following example, the theme for both the pane and the button is set - to \c Material.Dark: - - \table - \row - \li - \snippet qtquickcontrols2-material-theme.qml 1 - \li - \image qtquickcontrols2-material-theme.png - \endtable - - \endstyleproperty - - \section1 Attached Method Documentation - - \stylemethod2 {color} {color} {enumeration} {predefined} {enumeration} {shade} {material-color-attached-method} - \target material-color-attached-method - This attached method returns the effective color value of the specified - \l {pre-defined Material colors}{pre-defined Material color} combined with - the given \l {pre-defined shades}{shade}. If omitted, the shade argument - defaults to \c Material.Shade500. - - \qml - Rectangle { - color: Material.color(Material.Red) - } - \endqml - - \endstylemethod2 - - \section1 Related Information - - \list - \li \l{Styling Qt Quick Controls} - \endlist -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-menus.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-menus.qdoc deleted file mode 100644 index 43db2092..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-menus.qdoc +++ /dev/null @@ -1,68 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-menus.html - \title Menu Controls - \ingroup qtquickcontrols2-guidelines - \brief Guidelines for menu controls - - \annotatedlist qtquickcontrols2-menus - - Each type of menu control has its own specific target use case. The - following sections offer guidelines for choosing the appropriate type - of menu control, depending on the use case. - - \section1 Menu Control - - \image qtquickcontrols2-menu.png - - \l Menu control can be used for context menus; for example, after - right-clicking. It can also be used for popup menus; for example, a - menu that is shown after clicking a button. - - \l MenuItem is an item in the Menu control. Each item in a menu: - \list - \li displays text to the user - \li allows checking/unchecking - \li is highlighted (for example, on keyboard navigation) - \li performs some action on activation - \endlist - - \section1 MenuBar Control - - \image qtquickcontrols2-menubar.png - - \l MenuBar control can be used for window menu bars. - - \l MenuBarItem is an item in the MenuBar control. Each item in a menu bar: - \list - \li displays text to the user - \li is highlighted (for example, on keyboard navigation) - \li pops up the respective menu on activation - \endlist -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-navigation.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-navigation.qdoc deleted file mode 100644 index 95928d13..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-navigation.qdoc +++ /dev/null @@ -1,70 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-navigation.html - \title Navigation Controls - \ingroup qtquickcontrols2-guidelines - \brief Guidelines for navigation controls - - Qt Quick Controls offers a selection of navigation models. - - \annotatedlist qtquickcontrols2-navigation - - The following sections offer guidelines for choosing the appropriate type - of navigation model, depending on the use case. - - \section1 StackView Control - - \image qtquickcontrols2-stackview-wireframe.png - - \l StackView provides a stack-based navigation model which can be used - with a set of interlinked pages. StackView works according to a last-in - first-out principle: the page pushed last on the stack is the one visible. - Popping a page removes the last page and makes the previous one visible. - - \section1 SwipeView Control - - \image qtquickcontrols2-swipeview-wireframe.png - - \l SwipeView provides a navigation model that simplifies horizontal paged - scrolling. The page indicator on the bottom shows which is the presently - active page. - - \section1 TabBar Control - - \image qtquickcontrols2-tabbar-wireframe.png - - \l TabBar is a bar with icons or text that allows the user to switch - between different subtasks, views, or modes. - - \section1 TabButton Control - - \image qtquickcontrols2-tabbutton.png - - \l TabButton is a button with a layout suitable for a TabBar control. -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-popups.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-popups.qdoc deleted file mode 100644 index c26b4c4b..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-popups.qdoc +++ /dev/null @@ -1,99 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-popups.html - \title Popup Controls - \ingroup qtquickcontrols2-guidelines - \brief Guidelines for popup controls - - \annotatedlist qtquickcontrols2-popups - - Each type of popup control has its own specific target use case. The - following sections offer guidelines for choosing the appropriate type - of popup control, depending on the use case. - - \section1 Drawer Control - - \image qtquickcontrols2-drawer-expanded-wireframe.png - - \l Drawer provides a swipe-based side panel, similar to those often used - in touch interfaces to provide a central location for navigation. - - The drawer can be positioned at any of the four edges of the screen. It allows - the user to add navigation without taking up valuable screen space. The user can - show and hide the drawer at any time with a simple swipe movement. - - \section1 Menu Control - - \image qtquickcontrols2-menu.png - - The \l Menu control displays a vertical list of items that can be selected. It can - be used for offering a list of actions that can be taken in a given context. - - \b {See also} \l {Drawer Control}. - - \section1 Popup Control - - \image qtquickcontrols2-popup-settings.png - - A \l Popup displays content over other application content. - It prompts the user to make a decision or enter information. - - Popups can be modal or non-modal. A modal popup blocks users from interacting - with the application until they have made a choice and closed the popup. - - A popup can be used for: - - \list - \li communicating a message to the user that they must read and acknowledge. - \li displaying an error message. - \li prompting the user to make a choice and/or enter a value. - \endlist - - \section1 ToolTip Control - - \image qtquickcontrols2-tooltip.png - - \l ToolTip shows a short piece of text that informs the user of a control's - function. It is typically placed above or below the parent control. - - Recommendations: - \list - \li Use a tooltip if a control has little or no descriptive text, or needs - a short explanation. - \li Use a tooltip only if the information on a particular control is not - available elsewhere in the screen. - \li Keep the tooltip text short so that it does not cover other content - while being displayed. - \endlist - - \section1 Related Information - \list - \li \l {Qt Quick Controls Guidelines} - \endlist -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-qmltypes.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-qmltypes.qdoc deleted file mode 100644 index 0251a6f9..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-qmltypes.qdoc +++ /dev/null @@ -1,130 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \qmlmodule QtQuick.Controls 2.\QtMinorVersion - \keyword Qt Quick Controls QML Types - \title Qt Quick Controls QML Types - \keyword Qt Quick Controls 2 QML Types - \ingroup qmlmodules - \brief Provides QML types for user interfaces (Qt Quick Controls). - - \l{Qt Quick Controls} provides QML types for creating user interfaces. - These QML types work in conjunction with \l{Qt Quick} and - \l{Qt Quick Layouts}. - - Qt Quick Controls QML types can be imported into your application - using the following import statement in your .qml file: - - \qml - import QtQuick.Controls - \endqml - - \section1 QML Types - \generatelist {qmltypesbymodule QtQuick.Controls} - \noautolist - - \section1 Using Qt Quick Controls types in property declarations - - As mentioned in \l {Qt Quick Templates 2 QML Types}, each type in Qt Quick - Controls is backed by a C++ "template" type. These types are \l {Qt Quick - Templates 2}{non-visual implementations of controls' logic and behavior}. - - For example, the \l Menu type's API and behavior is defined by the C++ - type in Qt Quick Templates. Each \l {Definition of a Style}{style} that - wants to provide a Menu must have a Menu.qml available, and the root - item in that file must be the Menu from Qt Quick Templates. When you - import QtQuick.Controls and create a Menu in QML, the type you get is - actually the QML Menu defined by the style's Menu.qml. - - In order to use a control as the type in a property declaration, you should - use the corresponding type from Qt Quick Templates. For example, suppose - you had a \c PopupOpener component, which was a Button that opened a - Popup: - - \qml - // PopupButton.qml - import QtQuick.Controls - - Button { - required property Popup popup - - onClicked: popup.open() - } - - // main.qml - PopupButton { - popup: saveChangesDialog - } - - Dialog { - id: saveChangesDialog - - // ... - } - \endqml - - Running this code will result in an error: - - \badcode - Unable to assign Dialog_QMLTYPE to Popup_QMLTYPE - \endcode - - This is because of the inheritance hierarchy: - - \badcode - Popup (C++ type in QtQuick.Templates) - │ └── Popup (QML type in QtQuick.Controls) - └── Dialog (C++ type in QtQuick.Templates) - └── Dialog (QML type in QtQuick.Controls) - \endcode - - Dialog from \c QtQuick.Controls does not derive from the Popup from - \c QtQuick.Controls, but from \c QtQuick.Templates. - - Instead, use the Popup from Qt Quick Templates as the property type: - - \qml - // PopupButton.qml - import QtQuick.Controls - import QtQuick.Templates as T - - Button { - required property T.Popup popup - - onClicked: popup.open() - } - \endqml - - For more information on the Qt Quick Controls module, see the - \l {Qt Quick Controls} module documentation. - - \section1 Related Information - \list - \li \l {Qt Quick Controls Guidelines} - \endlist -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-separators.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-separators.qdoc deleted file mode 100644 index 481a744e..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-separators.qdoc +++ /dev/null @@ -1,63 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-separators.html - \title Separator Controls - \ingroup qtquickcontrols2-guidelines - \brief Guidelines for separator controls - - Qt Quick Controls offers a selection of separators. - - \annotatedlist qtquickcontrols2-separators - - Each type of separator has its own specific use case. The following - sections offer guidelines for choosing the appropriate type of separator, - depending on the use case. - - \section1 MenuSeparator Control - - \image qtquickcontrols2-menuseparator.png - - \l MenuSeparator should be used to separate items (typically MenuItem - controls) in a Menu. Grouping related menu items together makes it easier - for the user to interact with the menu. For example, a typical desktop - user interface might have \c Undo and \c Redo items in one group, and - \c Cut, \c Copy and \c Paste in another. - - \section1 ToolSeparator Control - - \image qtquickcontrols2-toolseparator.png - - \l ToolSeparator should be used to separate items (typically ToolButton - controls) in a ToolBar. It can be used in horizontal or vertical toolbars. - - \section1 Related Information - \list - \li \l {Qt Quick Controls Guidelines} - \endlist -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-styles.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-styles.qdoc deleted file mode 100644 index 12993fbf..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-styles.qdoc +++ /dev/null @@ -1,209 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-styles.html - \title Styling Qt Quick Controls - - \section1 Available Styles - - Qt Quick Controls comes with a selection of styles. - - \section2 Basic Style - - \image qtquickcontrols2-basic-thumbnail.png - The \l {Basic Style} is a simple and light-weight all-round style that offers - the maximum performance for Qt Quick Controls. - - \section2 Fusion Style - - \image qtquickcontrols2-fusion-thumbnail.png - The \l {Fusion Style} is a platform-agnostic style that offers a desktop-oriented - look and feel for Qt Quick Controls. - - \section2 Imagine Style - - \image qtquickcontrols2-imagine-thumbnail.png - The \l {Imagine Style} is based on image assets. The style comes with a default - set of images which can easily be changed by providing a directory - with images using a predefined naming convention. - - \section2 macOS Style - - \image qtquickcontrols2-macos-thumbnail.png - The \l {macOS Style} is a native-looking style for macOS. - \note this style is only available for applications running on macOS. - - \section2 Material Style - - \image qtquickcontrols2-material-thumbnail.png - The \l {Material Style} offers an appealing design based on the - \l {https://www.google.com/design/spec/material-design/introduction.html} - {Google Material Design Guidelines}, but requires more system resources than - the Basic style. - - \section2 Universal Style - - \image qtquickcontrols2-universal-thumbnail.png - The \l {Universal Style} offers an appealing design based on the - \l {https://dev.windows.com/design}{Microsoft Universal Design Guidelines}, - but requires more system resources than the Basic style. - - \section2 Windows Style - - \image qtquickcontrols2-windows-thumbnail.png - The \l {Windows Style} is a native-looking style for Windows. - \note this style is only available for applications running on Windows. - - \section1 Using Styles in Qt Quick Controls - - There are two ways of using styles in Qt Quick Controls: - run-time style selection and compile-time style selection. - - \section2 Compile-Time Style Selection - - Compile-time style selection involves using QML imports to specify the - style. For example, to import the Material style: - - \qml - import QtQuick.Controls.Material - - ApplicationWindow { - // ... - } - \endqml - - Notice that QtQuick.Controls (which is responsible for run-time style - selection) is not imported. The fallback style is specified by the qmldir - of the style: - - \badcode - module QtQuick.Controls.Material - # ... - import QtQuick.Controls.Basic auto - \endcode - - The benefit of compile-time style selection is that the QtQuick.Controls plugin - is not used and therefore does not need to be deployed with the application. - - Explicit imports are also necessary if your application is built - \l {Static Builds}{statically}. - - \section2 Run-Time Style Selection - - Run-time style selection involves importing \c QtQuick.Controls: - - \qml - import QtQuick.Controls - \endqml - - The QtQuick.Controls plugin will import the style and fallback - style that were set at runtime via one of the following approaches: - - \list - \li \l[CPP]{QQuickStyle::setStyle()} - \li The \c -style command line argument - \li The \c QT_QUICK_CONTROLS_STYLE environment variable - \li The \c qtquickcontrols2.conf configuration file - \endlist - - The priority of these approaches follows the order they are listed, - from highest to lowest. That is, using \c QQuickStyle to set the style will - always take priority over using the command line argument, for example. - - The benefit of run-time style selection is that a single application binary - can support multiple styles, meaning that the end user can choose which - style to run the application with. - - \section3 Using QQuickStyle in C++ - - \l[CPP]{QQuickStyle} provides C++ API for configuring a specific - style. The following example runs a Qt Quick Controls application - with the Material style: - - \code - QQuickStyle::setStyle("Material"); - \endcode - - See the detailed description of \l[CPP]{QQuickStyle} for more - details. - - \section3 Command line argument - - Passing a \c -style command line argument is the convenient way to test different - styles. It takes precedence over the other methods listed below. The following - example runs a Qt Quick Controls application with the Material style: - - \code - ./app -style material - \endcode - - \section3 Environment variable - - Setting the \c QT_QUICK_CONTROLS_STYLE environment variable can be used to set - a system-wide style preference. It takes precedence over the configuration file - mentioned below. The following example runs a Qt Quick Controls application with - the Universal style: - - \code - QT_QUICK_CONTROLS_STYLE=universal ./app - \endcode - - See \l {Supported Environment Variables in Qt Quick Controls} for the full list - of supported environment variables. - - \section3 Configuration file - - Qt Quick Controls support a special configuration file, \c :/qtquickcontrols2.conf, - that is built into an application's resources. - - The configuration file can specify the preferred style (may be overridden by either - of the methods described earlier) and certain style-specific attributes. The following - example specifies that the preferred style is the Material style. - - \code - [Controls] - Style=Material - \endcode - - See \l {Qt Quick Controls Configuration File} for more details about the - configuration file. - - \section1 Related Information - \list - \li \l {Basic Style} - \li \l {Fusion Style} - \li \l {Imagine Style} - \li \l {Material Style} - \li \l {Universal Style} - \li \l {Customizing Qt Quick Controls} - \li \l {Using File Selectors with Qt Quick Controls} - \li \l {Deploying Qt Quick Controls Applications} - \li \l {Qt Quick Controls Configuration File} - \li \l {Supported Environment Variables in Qt Quick Controls} - \endlist -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-universal.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-universal.qdoc deleted file mode 100644 index 72267050..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-universal.qdoc +++ /dev/null @@ -1,288 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-universal.html - \title Universal Style - - The Universal Style is based on the Microsoft Universal Design Guidelines. - \l {detailed-desc-universal}{More...} - - \styleimport {QtQuick.Controls.Universal 2.12} {Qt 5.7} - - \section1 Attached Properties - - \list - \li \l {universal-accent-attached-prop}{\b accent} : color - \li \l {universal-background-attached-prop}{\b background} : color - \li \l {universal-foreground-attached-prop}{\b foreground} : color - \li \l {universal-theme-attached-prop}{\b theme} : enumeration - \endlist - - \section1 Attached Methods - - \list - \li color \l {color-attached-method}{\b color}(enumeration predefined) - \endlist - - \section1 Detailed Description - \target detailed-desc-universal - - The Universal style is a device-agnostic style based on the - \l {https://dev.windows.com/design}{Microsoft Universal Design Guidelines}. - The Universal style has been designed to look good on all devices, from - phones and tablets to PCs. - - \table - \row - \li \image qtquickcontrols2-universal-light.png - \caption The Universal style in light theme - \li \image qtquickcontrols2-universal-dark.png - \caption The Universal style in dark theme - \endtable - - To run an application with the Universal style, see - \l {Using Styles in Qt Quick Controls}. - - \note The Universal style is not a native Windows 10 style. The Universal - style is a 100% cross-platform Qt Quick Controls style implementation that - follows the Microsoft Universal Design Guidelines. The style runs on any - platform, and looks more or less identical everywhere. Minor differences - may occur due to differences in available system fonts and font rendering - engines. - - \section2 Customization - - The Universal style allows customizing four attributes, \l {universal-theme-attached-prop}{theme}, - \l {universal-accent-attached-prop}{accent}, \l {universal-foreground-attached-prop}{foreground}, and - \l {universal-background-attached-prop}{background}. - - \image qtquickcontrols2-universal-attributes.png - - Both attributes can be specified for any window or item, and they automatically - propagate to children in the same manner as \l {Control::font}{fonts}. In the - following example, the window and all three radio buttons appear in the dark - theme using a violet accent color: - - \table - \row - \li - \qml - import QtQuick 2.12 - import QtQuick.Controls 2.12 - import QtQuick.Controls.Universal 2.12 - - ApplicationWindow { - visible: true - - Universal.theme: Universal.Dark - Universal.accent: Universal.Violet - - Column { - anchors.centerIn: parent - - RadioButton { text: qsTr("Small") } - RadioButton { text: qsTr("Medium"); checked: true } - RadioButton { text: qsTr("Large") } - } - } - \endqml - \li - \image qtquickcontrols2-universal-violet.png - \endtable - - In addition to specifying the attributes in QML, it is also possible to - specify them via environment variables or in a configuration file. Attributes - specified in QML take precedence over all other methods. - - \section3 Configuration File - - \include qquickuniversalstyle.qdocinc conf - - See \l {Qt Quick Controls Configuration File} for more details about the - configuration file. - - \section3 Environment Variables - - \include qquickuniversalstyle.qdocinc env - - See \l {Supported Environment Variables in Qt Quick Controls} for the full - list of supported environment variables. - - \section2 Dependency - - The Universal style must be separately imported to gain access to the - attributes that are specific to the Universal style. It should be noted - that regardless of the references to the Universal style, the same - application code runs with any other style. Universal-specific attributes - only have an effect when the application is run with the Universal style. - - If the Universal style is imported in a QML file that is always loaded, the - Universal style must be deployed with the application in order to be able - to run the application regardless of which style the application is run with. - By using \l {Using File Selectors with Qt Quick Controls}{file selectors}, - style-specific tweaks can be applied without creating a hard dependency to - a style. - - \section2 Pre-defined Universal Colors - - Available pre-defined colors: - \value Universal.Lime \stylecolor {#A4C400} {} - \value Universal.Green \stylecolor {#60A917} {} - \value Universal.Emerald \stylecolor {#008A00} {} - \value Universal.Teal \stylecolor {#00ABA9} {} - \value Universal.Cyan \stylecolor {#1BA1E2} {} - \value Universal.Cobalt \stylecolor {#3E65FF} {(default accent)} - \value Universal.Indigo \stylecolor {#6A00FF} {} - \value Universal.Violet \stylecolor {#AA00FF} {} - \value Universal.Pink \stylecolor {#F472D0} {} - \value Universal.Magenta \stylecolor {#D80073} {} - \value Universal.Crimson \stylecolor {#A20025} {} - \value Universal.Red \stylecolor {#E51400} {} - \value Universal.Orange \stylecolor {#FA6800} {} - \value Universal.Amber \stylecolor {#F0A30A} {} - \value Universal.Yellow \stylecolor {#E3C800} {} - \value Universal.Brown \stylecolor {#825A2C} {} - \value Universal.Olive \stylecolor {#6D8764} {} - \value Universal.Steel \stylecolor {#647687} {} - \value Universal.Mauve \stylecolor {#76608A} {} - \value Universal.Taupe \stylecolor {#87794E} {} - - \b {See also} \l {Basic Style}, \l {Material Style} - - \section1 Attached Property Documentation - - \styleproperty {Universal.accent} {color} {universal-accent-attached-prop} - \target universal-accent-attached-prop - This attached property holds the accent color of the theme. The property - can be attached to any window or item. The value is propagated to children. - - The default value is \c Universal.Cobalt. - - In the following example, the accent color of the highlighted button is - changed to \c Universal.Orange: - - \table - \row - \li - \snippet qtquickcontrols2-universal-accent.qml 1 - \li - \image qtquickcontrols2-universal-accent.png - \endtable - - \note Even though the accent can be any \l {colorbasictypedocs}{color}, it is - recommended to use one of the \l {pre-defined Universal colors} that have been - designed to work well with the rest of the Universal style palette. - - \endstyleproperty - - \styleproperty {Universal.background} {color} {universal-background-attached-prop} - \target universal-background-attached-prop - This attached property holds the background color of the theme. The property - can be attached to any window or item. The value is propagated to children. - - The default value is theme-specific (light or dark). - - In the following example, the background color of the pane is changed to - \c Universal.Steel: - - \table - \row - \li - \snippet qtquickcontrols2-universal-background.qml 1 - \li - \image qtquickcontrols2-universal-background.png - \endtable - - \endstyleproperty - - \styleproperty {Universal.foreground} {color} {universal-foreground-attached-prop} - \target universal-foreground-attached-prop - This attached property holds the foreground color of the theme. The property - can be attached to any window or item. The value is propagated to children. - - The default value is theme-specific (light or dark). - - In the following example, the foreground color of the button is set to \c - Universal.Pink: - - \table - \row - \li - \snippet qtquickcontrols2-universal-foreground.qml 1 - \li - \image qtquickcontrols2-universal-foreground.png - \endtable - - \styleproperty {Universal.theme} {enumeration} {universal-theme-attached-prop} - \target universal-theme-attached-prop - This attached property holds whether the theme is light or dark. The property - can be attached to any window or item. The value is propagated to children. - - Available themes: - \value Universal.Light Light theme (default) - \value Universal.Dark Dark theme - \value Universal.System System theme - - Setting the theme to \c System chooses either the light or dark theme based - on the system theme colors. However, when reading the value of the theme - property, the value is never \c System, but the actual theme. - - In the following example, the theme for both the pane and the button is set - to \c Universal.Dark: - - \table - \row - \li - \snippet qtquickcontrols2-universal-theme.qml 1 - \li - \image qtquickcontrols2-universal-theme.png - \endtable - - \endstyleproperty - - \section1 Attached Method Documentation - - \stylemethod {color} {color} {enumeration} {predefined} {color-attached-method} - \target color-attached-method - This attached method returns the effective color value of the specified - \l {pre-defined Universal colors}{pre-defined Universal color}. - - \qml - Rectangle { - color: Universal.color(Universal.Red) - } - \endqml - - \endstylemethod - - \section1 Related Information - - \list - \li \l{Styling Qt Quick Controls} - \endlist -*/ diff --git a/src/imports/controls/doc/src/qtquickcontrols2-windows.qdoc b/src/imports/controls/doc/src/qtquickcontrols2-windows.qdoc deleted file mode 100644 index 8b63703b..00000000 --- a/src/imports/controls/doc/src/qtquickcontrols2-windows.qdoc +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2021 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquickcontrols2-Windows.html - \title Windows Style - - The Windows style is a style that looks native on Windows. - \l {detailed-desc-Windows}{More...} - - \styleimport {QtQuick.Controls.Windows} {Qt 6.0} - - \target detailed-desc-Windows - - The Windows style is a style that looks native on Windows. The controls are drawn run-time using - native libraries, and is therefore only available for applications running on Windows. - - \note Be aware that the apperance of this style can change from one minor Qt version to the - next, to better blend in with native applications on the platform. - - \table - \row - \li \image qtquickcontrols2-windows.png - \caption The Windows style - \endtable - - To run an application with the Windows style, see - \l {Using Styles in Qt Quick Controls}. - - \section2 Current state - - The Windows style is under development, and some controls are not yet supported. Those - controls are: \l BusyIndicator, \l DelayButton, \l PageIndicator, \l RangeSlider, \l Switch, \l TabBar and - \l Tumbler. Those will fall back to use the \l {Fusion Style}. - - \section2 Customization - - The goal of the Windows style is to for the controls look and feel as similar as possible to the - native controls on Windows. The style will follow the theme and colors configured globally from - Windows Settings, and does not come with a separate customization API on top of that. - - \note If you want to style a control, you should set both the - \l {Control::background}{background} and the \l {Control::contentItem}{contentItem}, rather than - just one of them. This is because the Windows style will in some cases draw both the contents and - the background into the default background item, which will not look good if the application - combines this with a custom contentItem. By setting them both, you are guaranteed that the - control will look the same on all platforms, for all styles. - - \b {See also} \l {Styling Qt Quick Controls} -*/ diff --git a/src/imports/controls/fusion/ApplicationWindow.qml b/src/imports/controls/fusion/ApplicationWindow.qml deleted file mode 100644 index 090d361c..00000000 --- a/src/imports/controls/fusion/ApplicationWindow.qml +++ /dev/null @@ -1,47 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Window -import QtQuick.Templates as T -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.ApplicationWindow { - id: window - - color: window.palette.window -} diff --git a/src/imports/controls/fusion/BusyIndicator.qml b/src/imports/controls/fusion/BusyIndicator.qml deleted file mode 100644 index f46900ea..00000000 --- a/src/imports/controls/fusion/BusyIndicator.qml +++ /dev/null @@ -1,70 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.BusyIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - - contentItem: BusyIndicatorImpl { - implicitWidth: 28 - implicitHeight: 28 - color: control.palette.text - - running: control.running - opacity: control.running ? 1 : 0 - Behavior on opacity { OpacityAnimator { duration: 250 } } - - RotationAnimator on rotation { - running: control.running || contentItem.visible - from: 0 - to: 360 - duration: 1000 - loops: Animation.Infinite - } - } -} diff --git a/src/imports/controls/fusion/Button.qml b/src/imports/controls/fusion/Button.qml deleted file mode 100644 index f635fe8b..00000000 --- a/src/imports/controls/fusion/Button.qml +++ /dev/null @@ -1,75 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Button { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 4 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.palette.buttonText - } - - background: ButtonPanel { - implicitWidth: 80 - implicitHeight: 24 - - control: control - visible: !control.flat || control.down || control.checked || control.highlighted || control.visualFocus || control.hovered - } -} diff --git a/src/imports/controls/fusion/CMakeLists.txt b/src/imports/controls/fusion/CMakeLists.txt deleted file mode 100644 index f2b755c5..00000000 --- a/src/imports/controls/fusion/CMakeLists.txt +++ /dev/null @@ -1,269 +0,0 @@ -# Generated from fusion.pro. - -##################################################################### -## qtquickcontrols2fusionstyleplugin Plugin: -##################################################################### - -qt_internal_add_qml_module(qtquickcontrols2fusionstyleplugin - URI "QtQuick.Controls.Fusion" - VERSION "${PROJECT_VERSION}" - CLASSNAME QtQuickControls2FusionStylePlugin - IMPORTS - QtQuick.Controls.Basic/auto - GENERATE_QMLTYPES - INSTALL_QMLTYPES - SOURCES - qquickfusionstyle.cpp qquickfusionstyle_p.h - qquickfusiontheme.cpp qquickfusiontheme_p.h - qtquickcontrols2fusionstyleplugin.cpp - DEFINES - QT_NO_CAST_FROM_ASCII - QT_NO_CAST_TO_ASCII - LIBRARIES - Qt::CorePrivate - Qt::GuiPrivate - Qt::QmlPrivate - Qt::QuickControls2Private - Qt::QuickPrivate - Qt::QuickTemplates2Private - PUBLIC_LIBRARIES - Qt::Core - Qt::Gui - Qt::Qml - Qt::Quick -) - -# Resources: -set(qtquickcontrols2fusionstyle_resource_files - "images/arrow.png" - "images/arrow@2x.png" - "images/arrow@3x.png" - "images/arrow@4x.png" - "images/checkmark.png" - "images/checkmark@2x.png" - "images/checkmark@3x.png" - "images/checkmark@4x.png" - "images/progressmask.png" - "images/progressmask@2x.png" - "images/progressmask@3x.png" - "images/progressmask@4x.png" -) - -qt_internal_add_resource(qtquickcontrols2fusionstyleplugin "qtquickcontrols2fusionstyle" - PREFIX - "/qt-project.org/imports/QtQuick/Controls/Fusion" - FILES - ${qtquickcontrols2fusionstyle_resource_files} -) - - -#### Keys ignored in scope 1:.:.:fusion.pro:: -# OTHER_FILES = "qmldir" "$$QML_FILES" -# QML_IMPORT_NAME = "QtQuick.Controls.Fusion" -# QML_IMPORT_VERSION = "$$QT_VERSION" -# TARGETPATH = "QtQuick/Controls/Fusion" -# _REQUIREMENTS = "qtConfig(quickcontrols2-fusion)" - -set(qml_files - "ApplicationWindow.qml" - "BusyIndicator.qml" - "Button.qml" - "CheckBox.qml" - "CheckDelegate.qml" - "ComboBox.qml" - "DelayButton.qml" - "Dial.qml" - "Dialog.qml" - "DialogButtonBox.qml" - "Drawer.qml" - "Frame.qml" - "GroupBox.qml" - "HorizontalHeaderView.qml" - "ItemDelegate.qml" - "Label.qml" - "Menu.qml" - "MenuBar.qml" - "MenuBarItem.qml" - "MenuItem.qml" - "MenuSeparator.qml" - "Page.qml" - "PageIndicator.qml" - "Pane.qml" - "Popup.qml" - "ProgressBar.qml" - "RadioButton.qml" - "RadioDelegate.qml" - "RangeSlider.qml" - "RoundButton.qml" - "ScrollBar.qml" - "ScrollView.qml" - "ScrollIndicator.qml" - "Slider.qml" - "SpinBox.qml" - "SplitView.qml" - "SwipeDelegate.qml" - "SwitchDelegate.qml" - "Switch.qml" - "TabBar.qml" - "TabButton.qml" - "TextArea.qml" - "TextField.qml" - "ToolBar.qml" - "ToolButton.qml" - "ToolSeparator.qml" - "ToolTip.qml" - "Tumbler.qml" - "VerticalHeaderView.qml" -) -set_source_files_properties(ApplicationWindow.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(BusyIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Button.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(CheckBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(CheckDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ComboBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(DelayButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.2;6.0" -) -set_source_files_properties(Dial.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Dialog.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(DialogButtonBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(Drawer.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Frame.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(GroupBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(HorizontalHeaderView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.15;6.0" -) -set_source_files_properties(ItemDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Label.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Menu.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(MenuBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.3;6.0" -) -set_source_files_properties(MenuBarItem.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.3;6.0" -) -set_source_files_properties(MenuItem.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(MenuSeparator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(Page.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(PageIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Pane.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Popup.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ProgressBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(RadioButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(RadioDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(RangeSlider.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(RoundButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(ScrollBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ScrollView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ScrollIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Slider.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SpinBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SplitView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.13;6.0" -) -set_source_files_properties(SwipeDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SwitchDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Switch.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TabBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TabButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TextArea.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TextField.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ToolBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ToolButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ToolSeparator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(ToolTip.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Tumbler.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(VerticalHeaderView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.15;6.0" -) - -qt6_target_qml_files(qtquickcontrols2fusionstyleplugin - FILES - ${qml_files} -) diff --git a/src/imports/controls/fusion/CheckBox.qml b/src/imports/controls/fusion/CheckBox.qml deleted file mode 100644 index ed49a144..00000000 --- a/src/imports/controls/fusion/CheckBox.qml +++ /dev/null @@ -1,71 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.CheckBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - indicator: CheckIndicator { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.palette.windowText - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } -} diff --git a/src/imports/controls/fusion/CheckDelegate.qml b/src/imports/controls/fusion/CheckDelegate.qml deleted file mode 100644 index 93c087e4..00000000 --- a/src/imports/controls/fusion/CheckDelegate.qml +++ /dev/null @@ -1,86 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.CheckDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - contentItem: IconLabel { - leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text - } - - indicator: CheckIndicator { - x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding - y: control.topPadding + (control.availableHeight - height) / 2 - - control: control - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 20 - color: control.down ? Fusion.buttonColor(control.palette, false, true, true) - : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base - } -} diff --git a/src/imports/controls/fusion/ComboBox.qml b/src/imports/controls/fusion/ComboBox.qml deleted file mode 100644 index dfe21f70..00000000 --- a/src/imports/controls/fusion/ComboBox.qml +++ /dev/null @@ -1,174 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Window -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.ComboBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) - rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) - - delegate: MenuItem { - width: ListView.view.width - text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData - font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal - highlighted: control.highlightedIndex === index - hoverEnabled: control.hoverEnabled - } - - indicator: ColorImage { - x: control.mirrored ? control.padding : control.width - width - control.padding - y: control.topPadding + (control.availableHeight - height) / 2 - color: control.editable ? control.palette.text : control.palette.buttonText - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/arrow.png" - width: 20 - fillMode: Image.Pad - } - - contentItem: T.TextField { - topPadding: 4 - leftPadding: 4 - control.padding - rightPadding: 4 - control.padding - bottomPadding: 4 - - text: control.editable ? control.editText : control.displayText - - enabled: control.editable - autoScroll: control.editable - readOnly: control.down - inputMethodHints: control.inputMethodHints - validator: control.validator - selectByMouse: control.selectTextByMouse - - font: control.font - color: control.editable ? control.palette.text : control.palette.buttonText - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - verticalAlignment: Text.AlignVCenter - - background: PaddedRectangle { - clip: true - radius: 2 - padding: 1 - leftPadding: control.mirrored ? -2 : padding - rightPadding: !control.mirrored ? -2 : padding - color: control.palette.base - visible: control.editable && !control.flat - - Rectangle { - x: parent.width - width - y: 1 - width: 1 - height: parent.height - 2 - color: Fusion.buttonOutline(control.palette, control.activeFocus, control.enabled) - } - - Rectangle { - x: 1 - y: 1 - width: parent.width - 3 - height: 1 - color: Fusion.topShadow - } - } - - Rectangle { - x: 1 - control.leftPadding - y: 1 - width: control.width - 2 - height: control.height - 2 - color: "transparent" - border.color: Color.transparent(Fusion.highlightedOutline(control.palette), 40 / 255) - visible: control.activeFocus - radius: 1.7 - } - } - - background: ButtonPanel { - implicitWidth: 120 - implicitHeight: 24 - - control: control - visible: !control.flat || control.down - // ### TODO: fix control.contentItem.activeFocus - highlighted: control.visualFocus || control.contentItem.activeFocus - } - - popup: T.Popup { - width: control.width - height: Math.min(contentItem.implicitHeight + 2, control.Window.height - topMargin - bottomMargin) - topMargin: 6 - bottomMargin: 6 - padding: 1 - - contentItem: ListView { - clip: true - implicitHeight: contentHeight - model: control.delegateModel - currentIndex: control.highlightedIndex - highlightRangeMode: ListView.ApplyRange - highlightMoveDuration: 0 - - T.ScrollBar.vertical: ScrollBar { } - } - - background: Rectangle { - color: control.popup.palette.window - border.color: Fusion.outline(control.palette) - - Rectangle { - z: -1 - x: 1; y: 1 - width: parent.width - height: parent.height - color: control.palette.shadow - opacity: 0.2 - } - } - } -} diff --git a/src/imports/controls/fusion/DelayButton.qml b/src/imports/controls/fusion/DelayButton.qml deleted file mode 100644 index 239ee6c8..00000000 --- a/src/imports/controls/fusion/DelayButton.qml +++ /dev/null @@ -1,115 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.DelayButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - - transition: Transition { - NumberAnimation { - duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress) - } - } - - contentItem: ItemGroup { - ClippedText { - clip: control.progress > 0 - clipX: -control.leftPadding + (control.mirrored ? 0 : control.progress * control.width) - clipWidth: control.width - visible: control.mirrored ? control.progress > 0 : control.progress < 1 - - text: control.text - font: control.font - color: control.mirrored ? control.palette.brightText : control.palette.buttonText - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - elide: Text.ElideRight - } - - ClippedText { - clip: control.progress > 0 - clipX: -control.leftPadding - clipWidth: (control.mirrored ? 1.0 - control.progress : control.progress) * control.width - visible: control.mirrored ? control.progress < 1 : control.progress > 0 - - text: control.text - font: control.font - color: control.mirrored ? control.palette.buttonText : control.palette.brightText - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - elide: Text.ElideRight - } - } - - background: ButtonPanel { - implicitWidth: 80 - implicitHeight: 24 - - control: control - highlighted: false - scale: control.mirrored ? -1 : 1 - - Rectangle { - width: control.progress * parent.width - height: parent.height - - radius: 2 - border.color: Qt.darker(Fusion.highlight(control.palette), 1.4) - gradient: Gradient { - GradientStop { - position: 0 - color: Qt.lighter(Fusion.highlight(control.palette), 1.2) - } - GradientStop { - position: 1 - color: Fusion.highlight(control.palette) - } - } - } - } -} diff --git a/src/imports/controls/fusion/Dial.qml b/src/imports/controls/fusion/Dial.qml deleted file mode 100644 index 71bab3a7..00000000 --- a/src/imports/controls/fusion/Dial.qml +++ /dev/null @@ -1,73 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Dial { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - background: DialImpl { - implicitWidth: 100 - implicitHeight: 100 - highlight: control.visualFocus - } - - handle: KnobImpl { - x: control.background.x + control.background.width / 2 - width / 2 - y: control.background.y + control.background.height / 2 - height / 2 - width: control.width / 7 - height: control.height / 7 - transform: [ - Translate { - y: -Math.min(control.background.width, control.background.height) * 0.42 + control.handle.height - }, - Rotation { - angle: control.angle - origin.x: control.handle.width / 2 - origin.y: control.handle.height / 2 - } - ] - } -} diff --git a/src/imports/controls/fusion/Dialog.qml b/src/imports/controls/fusion/Dialog.qml deleted file mode 100644 index af7fa492..00000000 --- a/src/imports/controls/fusion/Dialog.qml +++ /dev/null @@ -1,99 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Dialog { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - padding: 6 - - background: Rectangle { - color: control.palette.window - border.color: control.palette.mid - radius: 2 - - Rectangle { - z: -1 - x: 1; y: 1 - width: parent.width - height: parent.height - color: control.palette.shadow - opacity: 0.2 - radius: 2 - } - } - - header: Label { - text: control.title - visible: control.title - elide: Label.ElideRight - font.bold: true - padding: 6 - background: Rectangle { - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 1 - color: control.palette.window - radius: 2 - } - } - - footer: DialogButtonBox { - visible: count > 0 - } - - T.Overlay.modal: Rectangle { - color: Fusion.topShadow - } - - T.Overlay.modeless: Rectangle { - color: Fusion.topShadow - } -} diff --git a/src/imports/controls/fusion/DialogButtonBox.qml b/src/imports/controls/fusion/DialogButtonBox.qml deleted file mode 100644 index 4b62228f..00000000 --- a/src/imports/controls/fusion/DialogButtonBox.qml +++ /dev/null @@ -1,73 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.DialogButtonBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - spacing: 6 - padding: 6 - alignment: Qt.AlignRight - - delegate: Button { } - - contentItem: ListView { - model: control.contentModel - spacing: control.spacing - orientation: ListView.Horizontal - boundsBehavior: Flickable.StopAtBounds - snapMode: ListView.SnapToItem - } - - background: Rectangle { - implicitHeight: 32 - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - color: control.palette.window - radius: 2 - } -} diff --git a/src/imports/controls/fusion/Drawer.qml b/src/imports/controls/fusion/Drawer.qml deleted file mode 100644 index 85268b50..00000000 --- a/src/imports/controls/fusion/Drawer.qml +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Drawer { - id: control - - parent: T.Overlay.overlay - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: control.edge === Qt.BottomEdge - leftPadding: control.edge === Qt.RightEdge - rightPadding: control.edge === Qt.LeftEdge - bottomPadding: control.edge === Qt.TopEdge - - enter: Transition { SmoothedAnimation { velocity: 5 } } - exit: Transition { SmoothedAnimation { velocity: 5 } } - - background: Rectangle { - color: control.palette.window - readonly property bool horizontal: control.edge === Qt.LeftEdge || control.edge === Qt.RightEdge - Rectangle { - width: parent.horizontal ? 1 : parent.width - height: parent.horizontal ? parent.height : 1 - color: control.palette.mid - x: control.edge === Qt.LeftEdge ? parent.width - 1 : 0 - y: control.edge === Qt.TopEdge ? parent.height - 1 : 0 - } - Rectangle { - width: parent.horizontal ? 1 : parent.width - height: parent.horizontal ? parent.height : 1 - color: control.palette.shadow - opacity: 0.2 - x: control.edge === Qt.LeftEdge ? parent.width : 0 - y: control.edge === Qt.TopEdge ? parent.height : 0 - } - } - - T.Overlay.modal: Rectangle { - color: Fusion.topShadow - } - - T.Overlay.modeless: Rectangle { - color: Fusion.topShadow - } -} diff --git a/src/imports/controls/fusion/Frame.qml b/src/imports/controls/fusion/Frame.qml deleted file mode 100644 index 1e1916f1..00000000 --- a/src/imports/controls/fusion/Frame.qml +++ /dev/null @@ -1,57 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Frame { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 9 - - background: Rectangle { - color: "transparent" - border.color: Qt.lighter(Fusion.outline(control.palette), 1.08) - } -} diff --git a/src/imports/controls/fusion/GroupBox.qml b/src/imports/controls/fusion/GroupBox.qml deleted file mode 100644 index 943a2427..00000000 --- a/src/imports/controls/fusion/GroupBox.qml +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.GroupBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitLabelWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - spacing: 6 - padding: 9 - topPadding: padding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) - - label: Text { - x: control.leftPadding - width: control.availableWidth - - text: control.title - font: control.font - color: control.palette.windowText - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } - - background: Rectangle { - y: control.topPadding - control.bottomPadding - width: parent.width - height: parent.height - control.topPadding + control.bottomPadding - - radius: 2 - color: Color.transparent("black", 3 / 255) - border.color: Qt.lighter(Fusion.outline(control.palette), 1.08) - } -} diff --git a/src/imports/controls/fusion/HorizontalHeaderView.qml b/src/imports/controls/fusion/HorizontalHeaderView.qml deleted file mode 100644 index 76f42b29..00000000 --- a/src/imports/controls/fusion/HorizontalHeaderView.qml +++ /dev/null @@ -1,77 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T - -T.HorizontalHeaderView { - id: control - - implicitWidth: syncView ? syncView.width : 0 - implicitHeight: contentHeight - - delegate: Rectangle { - // Qt6: add cellPadding (and font etc) as public API in headerview - readonly property real cellPadding: 8 - - implicitWidth: text.implicitWidth + (cellPadding * 2) - implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2)) - border.color: "#cacaca" - - gradient: Gradient { - GradientStop { - position: 0 - color: "#fbfbfb" - } - GradientStop { - position: 1 - color: "#e0dfe0" - } - } - - Text { - id: text - text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] - : model[control.textRole]) - : modelData - width: parent.width - height: parent.height - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: "#ff26282a" - } - } -} diff --git a/src/imports/controls/fusion/ItemDelegate.qml b/src/imports/controls/fusion/ItemDelegate.qml deleted file mode 100644 index 12154d2f..00000000 --- a/src/imports/controls/fusion/ItemDelegate.qml +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.ItemDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 20 - color: control.down ? Fusion.buttonColor(control.palette, false, true, true) - : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base - } -} diff --git a/src/imports/controls/fusion/Label.qml b/src/imports/controls/fusion/Label.qml deleted file mode 100644 index 55db94f9..00000000 --- a/src/imports/controls/fusion/Label.qml +++ /dev/null @@ -1,48 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Label { - id: control - - color: control.palette.windowText - linkColor: control.palette.link -} diff --git a/src/imports/controls/fusion/Menu.qml b/src/imports/controls/fusion/Menu.qml deleted file mode 100644 index 7808850c..00000000 --- a/src/imports/controls/fusion/Menu.qml +++ /dev/null @@ -1,94 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl -import QtQuick.Window - -T.Menu { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - margins: 0 - padding: 1 - overlap: 2 - - delegate: MenuItem { } - - contentItem: ListView { - implicitHeight: contentHeight - model: control.contentModel - interactive: Window.window - ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height - : false - clip: true - currentIndex: control.currentIndex - - ScrollIndicator.vertical: ScrollIndicator {} - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 20 - - color: control.palette.base - border.color: Fusion.outline(control.palette) - - Rectangle { - z: -1 - x: 1; y: 1 - width: parent.width - height: parent.height - color: control.palette.shadow - opacity: 0.2 - } - } - - T.Overlay.modal: Rectangle { - color: Fusion.topShadow - } - - T.Overlay.modeless: Rectangle { - color: Fusion.topShadow - } -} diff --git a/src/imports/controls/fusion/MenuBar.qml b/src/imports/controls/fusion/MenuBar.qml deleted file mode 100644 index 7b6a628d..00000000 --- a/src/imports/controls/fusion/MenuBar.qml +++ /dev/null @@ -1,73 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.MenuBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - delegate: MenuBarItem { } - - contentItem: Row { - spacing: control.spacing - Repeater { - model: control.contentModel - } - } - - background: Rectangle { - implicitHeight: 20 - - color: control.palette.window - - Rectangle { - y: parent.height - height - width: parent.width - height: 1 - color: Fusion.mergedColors(Qt.darker(control.palette.window, 1.2), - Qt.lighter(Fusion.outline(control.palette), 1.4), 60) - } - } -} diff --git a/src/imports/controls/fusion/MenuBarItem.qml b/src/imports/controls/fusion/MenuBarItem.qml deleted file mode 100644 index 336fca0c..00000000 --- a/src/imports/controls/fusion/MenuBarItem.qml +++ /dev/null @@ -1,77 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.MenuBarItem { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.down || control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text - } - - background: Rectangle { - implicitWidth: 20 - implicitHeight: 20 - - color: Fusion.highlight(control.palette) - visible: control.down || control.highlighted - } -} diff --git a/src/imports/controls/fusion/MenuItem.qml b/src/imports/controls/fusion/MenuItem.qml deleted file mode 100644 index 79468f9d..00000000 --- a/src/imports/controls/fusion/MenuItem.qml +++ /dev/null @@ -1,102 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.MenuItem { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - contentItem: IconLabel { - readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0 - readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0 - leftPadding: !control.mirrored ? indicatorPadding : arrowPadding - rightPadding: control.mirrored ? indicatorPadding : arrowPadding - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.down || control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text - } - - arrow: ColorImage { - x: control.mirrored ? control.padding : control.width - width - control.padding - y: control.topPadding + (control.availableHeight - height) / 2 - width: 20 - - visible: control.subMenu - rotation: control.mirrored ? 90 : -90 - color: control.down || control.hovered || control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/arrow.png" - fillMode: Image.Pad - } - - indicator: CheckIndicator { - x: control.mirrored ? control.width - width - control.rightPadding : control.leftPadding - y: control.topPadding + (control.availableHeight - height) / 2 - - control: control - visible: control.checkable - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 20 - - color: Fusion.highlight(control.palette) - visible: control.down || control.highlighted - } -} diff --git a/src/imports/controls/fusion/MenuSeparator.qml b/src/imports/controls/fusion/MenuSeparator.qml deleted file mode 100644 index b8be640b..00000000 --- a/src/imports/controls/fusion/MenuSeparator.qml +++ /dev/null @@ -1,59 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.MenuSeparator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 5 - verticalPadding: 1 - - contentItem: Rectangle { - implicitWidth: 188 - implicitHeight: 1 - color: Qt.lighter(Fusion.darkShade, 1.06) - } -} diff --git a/src/imports/controls/fusion/Page.qml b/src/imports/controls/fusion/Page.qml deleted file mode 100644 index bf47e231..00000000 --- a/src/imports/controls/fusion/Page.qml +++ /dev/null @@ -1,58 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Page { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - background: Rectangle { - color: control.palette.window - } -} diff --git a/src/imports/controls/fusion/PageIndicator.qml b/src/imports/controls/fusion/PageIndicator.qml deleted file mode 100644 index 22ceabcc..00000000 --- a/src/imports/controls/fusion/PageIndicator.qml +++ /dev/null @@ -1,73 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.PageIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 4 - spacing: 4 - - delegate: Rectangle { - implicitWidth: 6 - implicitHeight: 6 - - radius: width / 2 - color: control.palette.shadow - - opacity: index === currentIndex ? 0.95 : pressed ? 0.75 : 0.45 - Behavior on opacity { OpacityAnimator { duration: 100 } } - } - - contentItem: Row { - spacing: control.spacing - - Repeater { - model: control.count - delegate: control.delegate - } - } -} diff --git a/src/imports/controls/fusion/Pane.qml b/src/imports/controls/fusion/Pane.qml deleted file mode 100644 index 9cc49917..00000000 --- a/src/imports/controls/fusion/Pane.qml +++ /dev/null @@ -1,56 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Pane { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 9 - - background: Rectangle { - color: control.palette.window - } -} diff --git a/src/imports/controls/fusion/Popup.qml b/src/imports/controls/fusion/Popup.qml deleted file mode 100644 index f77ea1d1..00000000 --- a/src/imports/controls/fusion/Popup.qml +++ /dev/null @@ -1,66 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Popup { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 6 - - background: Rectangle { - color: control.palette.window - border.color: control.palette.mid - radius: 2 - } - - T.Overlay.modal: Rectangle { - color: Fusion.topShadow - } - - T.Overlay.modeless: Rectangle { - color: Fusion.topShadow - } -} diff --git a/src/imports/controls/fusion/ProgressBar.qml b/src/imports/controls/fusion/ProgressBar.qml deleted file mode 100644 index 0ad6b483..00000000 --- a/src/imports/controls/fusion/ProgressBar.qml +++ /dev/null @@ -1,116 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.ProgressBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - contentItem: Item { - implicitWidth: 120 - implicitHeight: 24 - scale: control.mirrored ? -1 : 1 - - Rectangle { - height: parent.height - width: (control.indeterminate ? 1.0 : control.position) * parent.width - - radius: 2 - border.color: Qt.darker(Fusion.highlight(control.palette), 1.4) - gradient: Gradient { - GradientStop { - position: 0 - color: Qt.lighter(Fusion.highlight(control.palette), 1.2) - } - GradientStop { - position: 1 - color: Fusion.highlight(control.palette) - } - } - } - - Item { - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - visible: control.indeterminate - clip: true - - ColorImage { - width: Math.ceil(parent.width / implicitWidth + 1) * implicitWidth - height: parent.height - - mirror: control.mirrored - fillMode: Image.TileHorizontally - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/progressmask.png" - color: Color.transparent(Qt.lighter(Fusion.highlight(control.palette), 1.2), 160 / 255) - - visible: control.indeterminate - NumberAnimation on x { - running: control.indeterminate && control.visible - from: -31 // progressmask.png width - to: 0 - loops: Animation.Infinite - duration: 750 - } - } - } - } - - background: Rectangle { - implicitWidth: 120 - implicitHeight: 24 - - radius: 2 - color: control.palette.base - border.color: Fusion.outline(control.palette) - - Rectangle { - x: 1; y: 1; height: 1 - width: parent.width - 2 - color: Fusion.topShadow - } - } -} diff --git a/src/imports/controls/fusion/RadioButton.qml b/src/imports/controls/fusion/RadioButton.qml deleted file mode 100644 index c7796411..00000000 --- a/src/imports/controls/fusion/RadioButton.qml +++ /dev/null @@ -1,71 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.RadioButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - indicator: RadioIndicator { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.palette.windowText - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } -} diff --git a/src/imports/controls/fusion/RadioDelegate.qml b/src/imports/controls/fusion/RadioDelegate.qml deleted file mode 100644 index 4c0d936c..00000000 --- a/src/imports/controls/fusion/RadioDelegate.qml +++ /dev/null @@ -1,86 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.RadioDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - contentItem: IconLabel { - leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text - } - - indicator: RadioIndicator { - x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding - y: control.topPadding + (control.availableHeight - height) / 2 - - control: control - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 20 - color: control.down ? Fusion.buttonColor(control.palette, false, true, true) - : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base - } -} diff --git a/src/imports/controls/fusion/RangeSlider.qml b/src/imports/controls/fusion/RangeSlider.qml deleted file mode 100644 index 418bac77..00000000 --- a/src/imports/controls/fusion/RangeSlider.qml +++ /dev/null @@ -1,81 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.RangeSlider { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - Math.max(first.implicitHandleWidth, - second.implicitHandleWidth) + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - Math.max(first.implicitHandleHeight, - second.implicitHandleHeight) + topPadding + bottomPadding) - - first.handle: SliderHandle { - x: control.leftPadding + Math.round(control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + Math.round(control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height)) - - palette: control.palette - pressed: control.first.pressed - hovered: control.first.hovered - vertical: control.vertical - visualFocus: activeFocus - } - - second.handle: SliderHandle { - x: control.leftPadding + Math.round(control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + Math.round(control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height)) - - palette: control.palette - pressed: control.second.pressed - hovered: control.second.hovered - vertical: control.vertical - visualFocus: activeFocus - } - - background: SliderGroove { - control: control - offset: control.first.position - progress: control.second.position - visualProgress: control.second.visualPosition - } -} diff --git a/src/imports/controls/fusion/RoundButton.qml b/src/imports/controls/fusion/RoundButton.qml deleted file mode 100644 index 31217f71..00000000 --- a/src/imports/controls/fusion/RoundButton.qml +++ /dev/null @@ -1,98 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.RoundButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.palette.buttonText - } - - background: Rectangle { - implicitWidth: 32 - implicitHeight: 32 - visible: !control.flat || control.down || control.checked - - gradient: Gradient { - GradientStop { - position: 0 - color: control.down || control.checked ? Fusion.buttonColor(control.palette, control.highlighted, control.down || control.checked, control.hovered) - : Fusion.gradientStart(Fusion.buttonColor(control.palette, control.highlighted, control.down, control.hovered)) - } - GradientStop { - position: 1 - color: control.down || control.checked ? Fusion.buttonColor(control.palette, control.highlighted, control.down || control.checked, control.hovered) - : Fusion.gradientStop(Fusion.buttonColor(control.palette, control.highlighted, control.down, control.hovered)) - } - } - - radius: control.radius - border.color: Fusion.buttonOutline(control.palette, control.highlighted || control.visualFocus, control.enabled) - - Rectangle { - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - border.color: Fusion.innerContrastLine - color: "transparent" - radius: control.radius - } - } -} diff --git a/src/imports/controls/fusion/ScrollBar.qml b/src/imports/controls/fusion/ScrollBar.qml deleted file mode 100644 index b990d955..00000000 --- a/src/imports/controls/fusion/ScrollBar.qml +++ /dev/null @@ -1,77 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.ScrollBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 2 - visible: control.policy !== T.ScrollBar.AlwaysOff - minimumSize: orientation == Qt.Horizontal ? height / width : width / height - - contentItem: Rectangle { - implicitWidth: control.interactive ? 6 : 2 - implicitHeight: control.interactive ? 6 : 2 - - radius: width / 2 - color: control.pressed ? control.palette.dark : control.palette.mid - opacity: 0.0 - - states: State { - name: "active" - when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0) - PropertyChanges { target: 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/imports/controls/fusion/ScrollIndicator.qml b/src/imports/controls/fusion/ScrollIndicator.qml deleted file mode 100644 index bf386f6c..00000000 --- a/src/imports/controls/fusion/ScrollIndicator.qml +++ /dev/null @@ -1,77 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.ScrollIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 2 - - contentItem: Rectangle { - implicitWidth: 2 - implicitHeight: 2 - - color: control.palette.mid - visible: control.size < 1.0 - opacity: 0.0 - - states: State { - name: "active" - when: control.active - PropertyChanges { target: 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/imports/controls/fusion/ScrollView.qml b/src/imports/controls/fusion/ScrollView.qml deleted file mode 100644 index a6bba9de..00000000 --- a/src/imports/controls/fusion/ScrollView.qml +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ScrollView { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - ScrollBar.vertical: ScrollBar { - parent: control - x: control.mirrored ? 0 : control.width - width - y: control.topPadding - height: control.availableHeight - active: control.ScrollBar.horizontal.active - } - - ScrollBar.horizontal: ScrollBar { - parent: control - x: control.leftPadding - y: control.height - height - width: control.availableWidth - active: control.ScrollBar.vertical.active - } -} diff --git a/src/imports/controls/fusion/Slider.qml b/src/imports/controls/fusion/Slider.qml deleted file mode 100644 index 4e20dcfc..00000000 --- a/src/imports/controls/fusion/Slider.qml +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Slider { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitHandleWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitHandleHeight + topPadding + bottomPadding) - - handle: SliderHandle { - x: control.leftPadding + Math.round(control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + Math.round(control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)) - - palette: control.palette - pressed: control.pressed - hovered: control.hovered - vertical: control.vertical - visualFocus: control.visualFocus - } - - background: SliderGroove { - control: control - progress: control.position - visualProgress: control.visualPosition - } -} diff --git a/src/imports/controls/fusion/SpinBox.qml b/src/imports/controls/fusion/SpinBox.qml deleted file mode 100644 index e71aa428..00000000 --- a/src/imports/controls/fusion/SpinBox.qml +++ /dev/null @@ -1,181 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.SpinBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentItem.implicitWidth + 2 * padding + - Math.max(up.implicitIndicatorWidth, - down.implicitIndicatorWidth)) - implicitHeight: Math.max(implicitContentHeight + topPadding + bottomPadding, - implicitBackgroundHeight, - up.implicitIndicatorHeight + - down.implicitIndicatorHeight) - - padding: 4 - leftPadding: padding + (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0)) - rightPadding: padding + (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0)) - - validator: IntValidator { - locale: control.locale.name - bottom: Math.min(control.from, control.to) - top: Math.max(control.from, control.to) - } - - contentItem: TextInput { - z: 2 - text: control.displayText - - font: control.font - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - horizontalAlignment: Qt.AlignHCenter - verticalAlignment: Qt.AlignVCenter - - readOnly: !control.editable - validator: control.validator - inputMethodHints: control.inputMethodHints - } - - up.indicator: PaddedRectangle { - x: control.mirrored ? 1 : parent.width - width - 1 - y: 1 - height: parent.height / 2 - 1 - implicitWidth: 16 - implicitHeight: 10 - - radius: 1.7 - clip: true - topPadding: -2 - leftPadding: -2 - color: control.up.pressed ? Fusion.buttonColor(control.palette, false, true, true) : "transparent" - - ColorImage { - scale: -1 - width: parent.width - height: parent.height - opacity: enabled ? 1.0 : 0.5 - color: control.palette.buttonText - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/arrow.png" - fillMode: Image.Pad - } - } - - down.indicator: PaddedRectangle { - x: control.mirrored ? 1 : parent.width - width - 1 - y: parent.height - height - 1 - height: parent.height / 2 - 1 - implicitWidth: 16 - implicitHeight: 10 - - radius: 1.7 - clip: true - topPadding: -2 - leftPadding: -2 - color: control.down.pressed ? Fusion.buttonColor(control.palette, false, true, true) : "transparent" - - ColorImage { - width: parent.width - height: parent.height - opacity: enabled ? 1.0 : 0.5 - color: control.palette.buttonText - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/arrow.png" - fillMode: Image.Pad - } - } - - background: Rectangle { - implicitWidth: 120 - implicitHeight: 24 - - radius: 2 - color: control.palette.base - border.color: control.activeFocus ? Fusion.highlightedOutline(control.palette) : Fusion.outline(control.palette) - - Rectangle { - x: 2 - y: 1 - width: parent.width - 4 - height: 1 - color: Fusion.topShadow - } - - Rectangle { - x: control.mirrored ? 1 : parent.width - width - 1 - y: 1 - width: Math.max(control.up.indicator ? control.up.indicator.width : 0, - control.down.indicator ? control.down.indicator.width : 0) + 1 - height: parent.height - 2 - - radius: 2 - gradient: Gradient { - GradientStop { - position: 0 - color: Fusion.gradientStart(Fusion.buttonColor(control.palette, control.visualFocus, false, control.up.hovered || control.down.hovered)) - } - GradientStop { - position: 1 - color: Fusion.gradientStop(Fusion.buttonColor(control.palette, control.visualFocus, false, control.up.hovered || control.down.hovered)) - } - } - - Rectangle { - x: control.mirrored ? parent.width - 1 : 0 - height: parent.height - width: 1 - color: Fusion.outline(control.palette) - } - } - - Rectangle { - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - color: "transparent" - border.color: Color.transparent(Fusion.highlightedOutline(control.palette), 40 / 255) - visible: control.activeFocus - radius: 1.7 - } - } -} diff --git a/src/imports/controls/fusion/SplitView.qml b/src/imports/controls/fusion/SplitView.qml deleted file mode 100644 index fdf12bed..00000000 --- a/src/imports/controls/fusion/SplitView.qml +++ /dev/null @@ -1,55 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion - -T.SplitView { - id: control - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - handle: Rectangle { - implicitWidth: control.orientation === Qt.Horizontal ? 2 : control.width - implicitHeight: control.orientation === Qt.Horizontal ? control.height : 2 - color: T.SplitHandle.pressed ? palette.dark - : (T.SplitHandle.hovered ? control.palette.midlight : control.palette.mid) - } -} diff --git a/src/imports/controls/fusion/SwipeDelegate.qml b/src/imports/controls/fusion/SwipeDelegate.qml deleted file mode 100644 index ac840f64..00000000 --- a/src/imports/controls/fusion/SwipeDelegate.qml +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.SwipeDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } } - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 20 - color: control.down ? Fusion.buttonColor(control.palette, false, true, true) - : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base - } -} diff --git a/src/imports/controls/fusion/Switch.qml b/src/imports/controls/fusion/Switch.qml deleted file mode 100644 index 2e31535b..00000000 --- a/src/imports/controls/fusion/Switch.qml +++ /dev/null @@ -1,71 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Switch { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - indicator: SwitchIndicator { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.palette.text - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } -} diff --git a/src/imports/controls/fusion/SwitchDelegate.qml b/src/imports/controls/fusion/SwitchDelegate.qml deleted file mode 100644 index 0439b0cf..00000000 --- a/src/imports/controls/fusion/SwitchDelegate.qml +++ /dev/null @@ -1,85 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.SwitchDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - indicator: SwitchIndicator { - x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: IconLabel { - leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 20 - color: control.down ? Fusion.buttonColor(control.palette, false, true, true) - : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base - } -} diff --git a/src/imports/controls/fusion/TabBar.qml b/src/imports/controls/fusion/TabBar.qml deleted file mode 100644 index e0933653..00000000 --- a/src/imports/controls/fusion/TabBar.qml +++ /dev/null @@ -1,79 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.TabBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - spacing: -1 - - contentItem: ListView { - model: control.contentModel - currentIndex: control.currentIndex - - spacing: control.spacing - orientation: ListView.Horizontal - boundsBehavior: Flickable.StopAtBounds - flickableDirection: Flickable.AutoFlickIfNeeded - snapMode: ListView.SnapToItem - - highlightMoveDuration: 0 - highlightRangeMode: ListView.ApplyRange - preferredHighlightBegin: 40 - preferredHighlightEnd: width - 40 - } - - background: Item { - implicitHeight: 21 - - Rectangle { - width: parent.width - height: 1 - y: control.position === T.TabBar.Header ? parent.height - 1 : 0 - color: Fusion.outline(control.palette) - } - } -} diff --git a/src/imports/controls/fusion/TabButton.qml b/src/imports/controls/fusion/TabButton.qml deleted file mode 100644 index 161a7b02..00000000 --- a/src/imports/controls/fusion/TabButton.qml +++ /dev/null @@ -1,96 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.TabButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 2 - horizontalPadding: 4 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - z: checked - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.palette.buttonText - } - - background: Rectangle { - y: control.checked || control.TabBar.position !== T.TabBar.Header ? 0 : 2 - implicitHeight: 21 - height: control.height - (control.checked ? 0 : 2) - - border.color: Qt.lighter(Fusion.outline(control.palette), 1.1) - - gradient: Gradient { - GradientStop { - position: 0 - color: control.checked ? Qt.lighter(Fusion.tabFrameColor(control.palette), 1.04) - : Qt.darker(Fusion.tabFrameColor(control.palette), 1.08) - } - GradientStop { - position: control.checked ? 0 : 0.85 - color: control.checked ? Qt.lighter(Fusion.tabFrameColor(control.palette), 1.04) - : Qt.darker(Fusion.tabFrameColor(control.palette), 1.08) - } - GradientStop { - position: 1 - color: control.checked ? Fusion.tabFrameColor(control.palette) - : Qt.darker(Fusion.tabFrameColor(control.palette), 1.16) - } - } - } -} diff --git a/src/imports/controls/fusion/TextArea.qml b/src/imports/controls/fusion/TextArea.qml deleted file mode 100644 index dc963186..00000000 --- a/src/imports/controls/fusion/TextArea.qml +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.TextArea { - id: control - - implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, - implicitBackgroundWidth + leftInset + rightInset, - placeholder.implicitWidth + leftPadding + rightPadding) - implicitHeight: Math.max(contentHeight + topPadding + bottomPadding, - implicitBackgroundHeight + topInset + bottomInset, - placeholder.implicitHeight + topPadding + bottomPadding) - - padding: 6 - leftPadding: padding + 4 - - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - placeholderTextColor: Color.transparent(control.color, 0.5) - - PlaceholderText { - id: placeholder - x: control.leftPadding - y: control.topPadding - width: control.width - (control.leftPadding + control.rightPadding) - height: control.height - (control.topPadding + control.bottomPadding) - - text: control.placeholderText - font: control.font - color: control.placeholderTextColor - verticalAlignment: control.verticalAlignment - visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) - elide: Text.ElideRight - renderType: control.renderType - } -} diff --git a/src/imports/controls/fusion/TextField.qml b/src/imports/controls/fusion/TextField.qml deleted file mode 100644 index 1a7ec2b9..00000000 --- a/src/imports/controls/fusion/TextField.qml +++ /dev/null @@ -1,102 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.TextField { - id: control - - implicitWidth: implicitBackgroundWidth + leftInset + rightInset - || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding, - placeholder.implicitHeight + topPadding + bottomPadding) - - padding: 4 - - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - placeholderTextColor: Color.transparent(control.color, 0.5) - verticalAlignment: TextInput.AlignVCenter - - PlaceholderText { - id: placeholder - x: control.leftPadding - y: control.topPadding - width: control.width - (control.leftPadding + control.rightPadding) - height: control.height - (control.topPadding + control.bottomPadding) - - text: control.placeholderText - font: control.font - color: control.placeholderTextColor - verticalAlignment: control.verticalAlignment - visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) - elide: Text.ElideRight - renderType: control.renderType - } - - background: Rectangle { - implicitWidth: 120 - implicitHeight: 24 - - radius: 2 - color: control.palette.base - border.color: control.activeFocus ? Fusion.highlightedOutline(control.palette) : Fusion.outline(control.palette) - - Rectangle { - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - color: "transparent" - border.color: Color.transparent(Fusion.highlightedOutline(control.palette), 40 / 255) - visible: control.activeFocus - radius: 1.7 - } - - Rectangle { - x: 2 - y: 1 - width: parent.width - 4 - height: 1 - color: Fusion.topShadow - } - } -} diff --git a/src/imports/controls/fusion/ToolBar.qml b/src/imports/controls/fusion/ToolBar.qml deleted file mode 100644 index 747a292d..00000000 --- a/src/imports/controls/fusion/ToolBar.qml +++ /dev/null @@ -1,82 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.ToolBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - horizontalPadding: 6 - topPadding: control.position === T.ToolBar.Footer ? 1 : 0 - bottomPadding: control.position === T.ToolBar.Header ? 1 : 0 - - background: Rectangle { - implicitHeight: 26 - - gradient: Gradient { - GradientStop { - position: 0 - color: Qt.lighter(control.palette.window, 1.04) - } - GradientStop { - position: 1 - color: control.palette.window - } - } - - Rectangle { - width: parent.width - height: 1 - color: control.position === T.ToolBar.Header ? Fusion.lightShade : Fusion.darkShade - } - - Rectangle { - y: parent.height - height - width: parent.width - height: 1 - color: control.position === T.ToolBar.Header ? Fusion.darkShade : Fusion.lightShade - } - } -} diff --git a/src/imports/controls/fusion/ToolButton.qml b/src/imports/controls/fusion/ToolButton.qml deleted file mode 100644 index a364a113..00000000 --- a/src/imports/controls/fusion/ToolButton.qml +++ /dev/null @@ -1,75 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.ToolButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 16 - icon.height: 16 - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.palette.buttonText - } - - background: ButtonPanel { - implicitWidth: 20 - implicitHeight: 20 - - control: control - visible: control.down || control.checked || control.highlighted || control.visualFocus || control.hovered - } -} diff --git a/src/imports/controls/fusion/ToolSeparator.qml b/src/imports/controls/fusion/ToolSeparator.qml deleted file mode 100644 index bfebf205..00000000 --- a/src/imports/controls/fusion/ToolSeparator.qml +++ /dev/null @@ -1,66 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.ToolSeparator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: vertical ? 6 : 2 - verticalPadding: vertical ? 2 : 6 - - contentItem: Rectangle { - implicitWidth: vertical ? 2 : 8 - implicitHeight: vertical ? 8 : 2 - color: Qt.darker(control.palette.window, 1.1) - - Rectangle { - x: 1 - width: 1 - height: parent.height - color: Qt.lighter(control.palette.window, 1.1) - } - } -} diff --git a/src/imports/controls/fusion/ToolTip.qml b/src/imports/controls/fusion/ToolTip.qml deleted file mode 100644 index 90e0c268..00000000 --- a/src/imports/controls/fusion/ToolTip.qml +++ /dev/null @@ -1,79 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.ToolTip { - id: control - - x: parent ? (parent.width - implicitWidth) / 2 : 0 - y: -implicitHeight - 3 - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - margins: 6 - padding: 6 - - closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent - - contentItem: Text { - text: control.text - font: control.font - wrapMode: Text.Wrap - color: control.palette.toolTipText - } - - background: Rectangle { - color: control.palette.toolTipBase - border.color: control.palette.toolTipText - - Rectangle { - z: -1 - x: 1; y: 1 - width: parent.width - height: parent.height - color: control.palette.shadow - opacity: 0.5 - } - } -} diff --git a/src/imports/controls/fusion/Tumbler.qml b/src/imports/controls/fusion/Tumbler.qml deleted file mode 100644 index 0c2841e7..00000000 --- a/src/imports/controls/fusion/Tumbler.qml +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -T.Tumbler { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - delegate: Text { - text: modelData - color: control.palette.windowText - font: control.font - opacity: (1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)) * (control.enabled ? 1 : 0.6) - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - } - - contentItem: TumblerView { - implicitWidth: 60 - implicitHeight: 200 - model: control.model - delegate: control.delegate - path: Path { - startX: control.contentItem.width / 2 - startY: -control.contentItem.delegateHeight / 2 - PathLine { - x: control.contentItem.width / 2 - y: (control.visibleItemCount + 1) * control.contentItem.delegateHeight - control.contentItem.delegateHeight / 2 - } - } - - property real delegateHeight: control.availableHeight / control.visibleItemCount - } -} diff --git a/src/imports/controls/fusion/VerticalHeaderView.qml b/src/imports/controls/fusion/VerticalHeaderView.qml deleted file mode 100644 index 3da51290..00000000 --- a/src/imports/controls/fusion/VerticalHeaderView.qml +++ /dev/null @@ -1,77 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T - -T.VerticalHeaderView { - id: control - - implicitWidth: contentWidth - implicitHeight: syncView ? syncView.height : 0 - - delegate: Rectangle { - // Qt6: add cellPadding (and font etc) as public API in headerview - readonly property real cellPadding: 8 - - implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2)) - implicitHeight: text.implicitHeight + (cellPadding * 2) - border.color: "#cacaca" - - gradient: Gradient { - GradientStop { - position: 0 - color: "#fbfbfb" - } - GradientStop { - position: 1 - color: "#e0dfe0" - } - } - - Text { - id: text - text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] - : model[control.textRole]) - : modelData - width: parent.width - height: parent.height - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: "#ff26282a" - } - } -} diff --git a/src/imports/controls/fusion/fusion.pri b/src/imports/controls/fusion/fusion.pri deleted file mode 100644 index b57ded65..00000000 --- a/src/imports/controls/fusion/fusion.pri +++ /dev/null @@ -1,58 +0,0 @@ -HEADERS += \ - $$PWD/qquickfusionstyle_p.h \ - $$PWD/qquickfusiontheme_p.h - -SOURCES += \ - $$PWD/qquickfusionstyle.cpp \ - $$PWD/qquickfusiontheme.cpp - -QML_FILES += \ - $$PWD/ApplicationWindow.qml \ - $$PWD/BusyIndicator.qml \ - $$PWD/Button.qml \ - $$PWD/CheckBox.qml \ - $$PWD/CheckDelegate.qml \ - $$PWD/ComboBox.qml \ - $$PWD/DelayButton.qml \ - $$PWD/Dial.qml \ - $$PWD/Dialog.qml \ - $$PWD/DialogButtonBox.qml \ - $$PWD/Drawer.qml \ - $$PWD/Frame.qml \ - $$PWD/GroupBox.qml \ - $$PWD/HorizontalHeaderView.qml \ - $$PWD/ItemDelegate.qml \ - $$PWD/Label.qml \ - $$PWD/Menu.qml \ - $$PWD/MenuBar.qml \ - $$PWD/MenuBarItem.qml \ - $$PWD/MenuItem.qml \ - $$PWD/MenuSeparator.qml \ - $$PWD/Page.qml \ - $$PWD/PageIndicator.qml \ - $$PWD/Pane.qml \ - $$PWD/Popup.qml \ - $$PWD/ProgressBar.qml \ - $$PWD/RadioButton.qml \ - $$PWD/RadioDelegate.qml \ - $$PWD/RangeSlider.qml \ - $$PWD/RoundButton.qml \ - $$PWD/ScrollBar.qml \ - $$PWD/ScrollView.qml \ - $$PWD/ScrollIndicator.qml \ - $$PWD/Slider.qml \ - $$PWD/SpinBox.qml \ - $$PWD/SplitView.qml \ - $$PWD/SwipeDelegate.qml \ - $$PWD/SwitchDelegate.qml \ - $$PWD/Switch.qml \ - $$PWD/TabBar.qml \ - $$PWD/TabButton.qml \ - $$PWD/TextArea.qml \ - $$PWD/TextField.qml \ - $$PWD/ToolBar.qml \ - $$PWD/ToolButton.qml \ - $$PWD/ToolSeparator.qml \ - $$PWD/ToolTip.qml \ - $$PWD/Tumbler.qml \ - $$PWD/VerticalHeaderView.qml diff --git a/src/imports/controls/fusion/images/arrow.png b/src/imports/controls/fusion/images/arrow.png deleted file mode 100644 index 97ef0238..00000000 Binary files a/src/imports/controls/fusion/images/arrow.png and /dev/null differ diff --git a/src/imports/controls/fusion/images/arrow.svg b/src/imports/controls/fusion/images/arrow.svg deleted file mode 100644 index 44383924..00000000 --- a/src/imports/controls/fusion/images/arrow.svg +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/src/imports/controls/fusion/images/arrow@2x.png b/src/imports/controls/fusion/images/arrow@2x.png deleted file mode 100644 index 9bfc4e6e..00000000 Binary files a/src/imports/controls/fusion/images/arrow@2x.png and /dev/null differ diff --git a/src/imports/controls/fusion/images/arrow@3x.png b/src/imports/controls/fusion/images/arrow@3x.png deleted file mode 100644 index 6fd9c988..00000000 Binary files a/src/imports/controls/fusion/images/arrow@3x.png and /dev/null differ diff --git a/src/imports/controls/fusion/images/arrow@4x.png b/src/imports/controls/fusion/images/arrow@4x.png deleted file mode 100644 index f5e1e66a..00000000 Binary files a/src/imports/controls/fusion/images/arrow@4x.png and /dev/null differ diff --git a/src/imports/controls/fusion/images/checkmark.png b/src/imports/controls/fusion/images/checkmark.png deleted file mode 100644 index deb30419..00000000 Binary files a/src/imports/controls/fusion/images/checkmark.png and /dev/null differ diff --git a/src/imports/controls/fusion/images/checkmark.svg b/src/imports/controls/fusion/images/checkmark.svg deleted file mode 100644 index f1afdc4f..00000000 --- a/src/imports/controls/fusion/images/checkmark.svg +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - diff --git a/src/imports/controls/fusion/images/checkmark@2x.png b/src/imports/controls/fusion/images/checkmark@2x.png deleted file mode 100644 index f80de0a4..00000000 Binary files a/src/imports/controls/fusion/images/checkmark@2x.png and /dev/null differ diff --git a/src/imports/controls/fusion/images/checkmark@3x.png b/src/imports/controls/fusion/images/checkmark@3x.png deleted file mode 100644 index c095eed1..00000000 Binary files a/src/imports/controls/fusion/images/checkmark@3x.png and /dev/null differ diff --git a/src/imports/controls/fusion/images/checkmark@4x.png b/src/imports/controls/fusion/images/checkmark@4x.png deleted file mode 100644 index e58c7b4d..00000000 Binary files a/src/imports/controls/fusion/images/checkmark@4x.png and /dev/null differ diff --git a/src/imports/controls/fusion/images/progressmask.png b/src/imports/controls/fusion/images/progressmask.png deleted file mode 100644 index a354377c..00000000 Binary files a/src/imports/controls/fusion/images/progressmask.png and /dev/null differ diff --git a/src/imports/controls/fusion/images/progressmask.svg b/src/imports/controls/fusion/images/progressmask.svg deleted file mode 100644 index a0dfc426..00000000 --- a/src/imports/controls/fusion/images/progressmask.svg +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - diff --git a/src/imports/controls/fusion/images/progressmask@2x.png b/src/imports/controls/fusion/images/progressmask@2x.png deleted file mode 100644 index 69476bf4..00000000 Binary files a/src/imports/controls/fusion/images/progressmask@2x.png and /dev/null differ diff --git a/src/imports/controls/fusion/images/progressmask@3x.png b/src/imports/controls/fusion/images/progressmask@3x.png deleted file mode 100644 index 00a1c09d..00000000 Binary files a/src/imports/controls/fusion/images/progressmask@3x.png and /dev/null differ diff --git a/src/imports/controls/fusion/images/progressmask@4x.png b/src/imports/controls/fusion/images/progressmask@4x.png deleted file mode 100644 index 263110d5..00000000 Binary files a/src/imports/controls/fusion/images/progressmask@4x.png and /dev/null differ diff --git a/src/imports/controls/fusion/impl/ButtonPanel.qml b/src/imports/controls/fusion/impl/ButtonPanel.qml deleted file mode 100644 index ffe87003..00000000 --- a/src/imports/controls/fusion/impl/ButtonPanel.qml +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -Rectangle { - id: panel - - property Item control - property bool highlighted: control.highlighted - - visible: !control.flat || control.down || control.checked - - color: Fusion.buttonColor(control.palette, panel.highlighted, control.down || control.checked, control.hovered) - gradient: control.down || control.checked ? null : buttonGradient - - Gradient { - id: buttonGradient - GradientStop { - position: 0 - color: Fusion.gradientStart(Fusion.buttonColor(panel.control.palette, panel.highlighted, panel.control.down, panel.control.hovered)) - } - GradientStop { - position: 1 - color: Fusion.gradientStop(Fusion.buttonColor(panel.control.palette, panel.highlighted, panel.control.down, panel.control.hovered)) - } - } - - radius: 2 - border.color: Fusion.buttonOutline(control.palette, panel.highlighted || control.visualFocus, control.enabled) - - Rectangle { - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - border.color: Fusion.innerContrastLine - color: "transparent" - radius: 2 - } -} diff --git a/src/imports/controls/fusion/impl/CMakeLists.txt b/src/imports/controls/fusion/impl/CMakeLists.txt deleted file mode 100644 index d80e69e8..00000000 --- a/src/imports/controls/fusion/impl/CMakeLists.txt +++ /dev/null @@ -1,74 +0,0 @@ -# Generated from fusion-impl.pro. - -##################################################################### -## qtquickcontrols2fusionstyleimplplugin Plugin: -##################################################################### - -qt_internal_add_qml_module(qtquickcontrols2fusionstyleimplplugin - URI "QtQuick.Controls.Fusion.impl" - VERSION "${PROJECT_VERSION}" - CLASSNAME QtQuickControls2FusionStyleImplPlugin - GENERATE_QMLTYPES - INSTALL_QMLTYPES - SOURCES - qquickfusionbusyindicator.cpp qquickfusionbusyindicator_p.h - qquickfusiondial.cpp qquickfusiondial_p.h - qquickfusionknob.cpp qquickfusionknob_p.h - qtquickcontrols2fusionstyleimplplugin.cpp - DEFINES - QT_NO_CAST_FROM_ASCII - QT_NO_CAST_TO_ASCII - LIBRARIES - Qt::CorePrivate - Qt::Gui - Qt::QmlPrivate - Qt::QuickControls2ImplPrivate - Qt::QuickPrivate - Qt::QuickTemplates2Private - PUBLIC_LIBRARIES - Qt::Core - Qt::Gui - Qt::Qml - Qt::Quick -) - -#### Keys ignored in scope 1:.:.:fusion-impl.pro:: -# OTHER_FILES = "qmldir" "$$QML_FILES" -# QML_FILES = "$$PWD/ButtonPanel.qml" "$$PWD/CheckIndicator.qml" "$$PWD/RadioIndicator.qml" "$$PWD/SliderGroove.qml" "$$PWD/SliderHandle.qml" "$$PWD/SwitchIndicator.qml" -# QML_IMPORT_NAME = "QtQuick.Controls.Fusion.impl" -# QML_IMPORT_VERSION = "$$QT_VERSION" -# QT_FOR_CONFIG = "quickcontrols2-private" -# TARGETPATH = "QtQuick/Controls/Fusion/impl" -# _REQUIREMENTS = "qtConfig(quickcontrols2-fusion)" - -set(qml_files - "ButtonPanel.qml" - "CheckIndicator.qml" - "RadioIndicator.qml" - "SliderGroove.qml" - "SliderHandle.qml" - "SwitchIndicator.qml" -) -set_source_files_properties(ButtonPanel.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.3" -) -set_source_files_properties(CheckIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.3" -) -set_source_files_properties(RadioIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.3" -) -set_source_files_properties(SliderGroove.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.3" -) -set_source_files_properties(SliderHandle.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.3" -) -set_source_files_properties(SwitchIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.3" -) - -qt6_target_qml_files(qtquickcontrols2fusionstyleimplplugin - FILES - ${qml_files} -) diff --git a/src/imports/controls/fusion/impl/CheckIndicator.qml b/src/imports/controls/fusion/impl/CheckIndicator.qml deleted file mode 100644 index 3a083653..00000000 --- a/src/imports/controls/fusion/impl/CheckIndicator.qml +++ /dev/null @@ -1,91 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -Rectangle { - id: indicator - - property Item control - readonly property color pressedColor: Fusion.mergedColors(control.palette.base, control.palette.windowText, 85) - readonly property color checkMarkColor: Qt.darker(control.palette.text, 1.2) - - implicitWidth: 14 - implicitHeight: 14 - - color: control.down ? indicator.pressedColor : control.palette.base - border.color: control.visualFocus ? Fusion.highlightedOutline(control.palette) - : Qt.lighter(Fusion.outline(control.palette), 1.1) - - Rectangle { - x: 1; y: 1 - width: parent.width - 2 - height: 1 - color: Fusion.topShadow - visible: indicator.control.enabled && !indicator.control.down - } - - ColorImage { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - color: Color.transparent(indicator.checkMarkColor, 210 / 255) - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/checkmark.png" - visible: indicator.control.checkState === Qt.Checked || (indicator.control.checked && indicator.control.checkState === undefined) - } - - Rectangle { - x: 3; y: 3 - width: parent.width - 6 - height: parent.width - 6 - - visible: indicator.control.checkState === Qt.PartiallyChecked - - gradient: Gradient { - GradientStop { - position: 0 - color: Color.transparent(indicator.checkMarkColor, 80 / 255) - } - GradientStop { - position: 1 - color: Color.transparent(indicator.checkMarkColor, 140 / 255) - } - } - border.color: Color.transparent(indicator.checkMarkColor, 180 / 255) - } -} diff --git a/src/imports/controls/fusion/impl/RadioIndicator.qml b/src/imports/controls/fusion/impl/RadioIndicator.qml deleted file mode 100644 index d459a2e8..00000000 --- a/src/imports/controls/fusion/impl/RadioIndicator.qml +++ /dev/null @@ -1,77 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -Rectangle { - id: indicator - - property Item control - readonly property color pressedColor: Fusion.mergedColors(control.palette.base, control.palette.windowText, 85) - readonly property color checkMarkColor: Qt.darker(control.palette.text, 1.2) - - implicitWidth: 14 - implicitHeight: 14 - - radius: width / 2 - color: control.down ? indicator.pressedColor : control.palette.base - border.color: control.visualFocus ? Fusion.highlightedOutline(control.palette) - : Qt.darker(control.palette.window, 1.5) - - Rectangle { - y: 1 - width: parent.width - height: parent.height - 1 - radius: width / 2 - color: "transparent" - border.color: Fusion.topShadow - visible: indicator.control.enabled && !indicator.control.down - } - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: parent.width / 2.32 - height: parent.height / 2.32 - radius: width / 2 - color: Color.transparent(indicator.checkMarkColor, 180 / 255) - border.color: Color.transparent(indicator.checkMarkColor, 200 / 255) - visible: indicator.control.checked - } -} diff --git a/src/imports/controls/fusion/impl/SliderGroove.qml b/src/imports/controls/fusion/impl/SliderGroove.qml deleted file mode 100644 index 76b7156a..00000000 --- a/src/imports/controls/fusion/impl/SliderGroove.qml +++ /dev/null @@ -1,93 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -Rectangle { - id: groove - - property Item control - property real offset - property real progress - property real visualProgress - - x: control.horizontal ? 0 : (control.availableWidth - width) / 2 - y: control.horizontal ? (control.availableHeight - height) / 2 : 0 - - implicitWidth: control.horizontal ? 160 : 5 - implicitHeight: control.horizontal ? 5 : 160 - width: control.horizontal ? control.availableWidth : implicitWidth - height: control.horizontal ? implicitHeight : control.availableHeight - - radius: 2 - border.color: Fusion.outline(control.palette) - scale: control.horizontal && control.mirrored ? -1 : 1 - - gradient: Gradient { - GradientStop { - position: 0 - color: Qt.darker(Fusion.grooveColor(groove.control.palette), 1.1) - } - GradientStop { - position: 1 - color: Qt.lighter(Fusion.grooveColor(groove.control.palette), 1.1) - } - } - - Rectangle { - x: groove.control.horizontal ? groove.offset * parent.width : 0 - y: groove.control.horizontal ? 0 : groove.visualProgress * parent.height - width: groove.control.horizontal ? groove.progress * parent.width - groove.offset * parent.width : 5 - height: groove.control.horizontal ? 5 : groove.progress * parent.height - groove.offset * parent.height - - radius: 2 - border.color: Qt.darker(Fusion.highlightedOutline(groove.control.palette), 1.1) - - gradient: Gradient { - GradientStop { - position: 0 - color: Fusion.highlight(groove.control.palette) - } - GradientStop { - position: 1 - color: Qt.lighter(Fusion.highlight(groove.control.palette), 1.2) - } - } - } -} diff --git a/src/imports/controls/fusion/impl/SliderHandle.qml b/src/imports/controls/fusion/impl/SliderHandle.qml deleted file mode 100644 index 00a955b9..00000000 --- a/src/imports/controls/fusion/impl/SliderHandle.qml +++ /dev/null @@ -1,85 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -Rectangle { - id: handle - - property var palette - property bool pressed - property bool hovered - property bool vertical - property bool visualFocus - - implicitWidth: 13 - implicitHeight: 13 - - gradient: Gradient { - GradientStop { - position: 0 - color: Fusion.gradientStart(Fusion.buttonColor(handle.palette, handle.visualFocus, handle.pressed, handle.hovered)) - } - GradientStop { - position: 1 - color: Fusion.gradientStop(Fusion.buttonColor(handle.palette, handle.visualFocus, handle.pressed, handle.hovered)) - } - } - rotation: handle.vertical ? -90 : 0 - border.width: 1 - border.color: "transparent" - radius: 2 - - Rectangle { - width: parent.width - height: parent.height - border.color: handle.visualFocus ? Fusion.highlightedOutline(handle.palette) : Fusion.outline(handle.palette) - color: "transparent" - radius: 2 - - Rectangle { - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - border.color: Fusion.innerContrastLine - color: "transparent" - radius: 2 - } - } -} diff --git a/src/imports/controls/fusion/impl/SwitchIndicator.qml b/src/imports/controls/fusion/impl/SwitchIndicator.qml deleted file mode 100644 index 5a561913..00000000 --- a/src/imports/controls/fusion/impl/SwitchIndicator.qml +++ /dev/null @@ -1,136 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Controls.Fusion -import QtQuick.Controls.Fusion.impl - -Rectangle { - id: indicator - - property Item control - readonly property color pressedColor: Fusion.mergedColors(control.palette.base, control.palette.windowText, 85) - readonly property color checkMarkColor: Qt.darker(control.palette.text, 1.2) - - implicitWidth: 40 - implicitHeight: 16 - - radius: 2 - border.color: Fusion.outline(control.palette) - - gradient: Gradient { - GradientStop { - position: 0 - color: Qt.darker(Fusion.grooveColor(indicator.control.palette), 1.1) - } - GradientStop { - position: 1 - color: Qt.lighter(Fusion.grooveColor(indicator.control.palette), 1.1) - } - } - - Rectangle { - x: indicator.control.mirrored ? handle.x : 0 - width: indicator.control.mirrored ? parent.width - handle.x : handle.x + handle.width - height: parent.height - - opacity: indicator.control.checked ? 1 : 0 - Behavior on opacity { - enabled: !indicator.control.down - NumberAnimation { duration: 80 } - } - - radius: 2 - border.color: Qt.darker(Fusion.highlightedOutline(indicator.control.palette), 1.1) - border.width: indicator.control.enabled ? 1 : 0 - - gradient: Gradient { - GradientStop { - position: 0 - color: Fusion.highlight(indicator.control.palette) - } - GradientStop { - position: 1 - color: Qt.lighter(Fusion.highlight(indicator.control.palette), 1.2) - } - } - } - - Rectangle { - id: handle - x: Math.max(0, Math.min(parent.width - width, indicator.control.visualPosition * parent.width - (width / 2))) - y: (parent.height - height) / 2 - width: 20 - height: 16 - radius: 2 - - gradient: Gradient { - GradientStop { - position: 0 - color: Fusion.gradientStart(Fusion.buttonColor(indicator.control.palette, indicator.control.visualFocus, indicator.control.pressed, indicator.control.hovered)) - } - GradientStop { - position: 1 - color: Fusion.gradientStop(Fusion.buttonColor(indicator.control.palette, indicator.control.visualFocus, indicator.control.pressed, indicator.control.hovered)) - } - } - border.width: 1 - border.color: "transparent" - - Rectangle { - width: parent.width - height: parent.height - border.color: indicator.control.visualFocus ? Fusion.highlightedOutline(indicator.control.palette) : Fusion.outline(indicator.control.palette) - color: "transparent" - radius: 2 - - Rectangle { - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - border.color: Fusion.innerContrastLine - color: "transparent" - radius: 2 - } - } - - Behavior on x { - enabled: !indicator.control.down - SmoothedAnimation { velocity: 200 } - } - } -} diff --git a/src/imports/controls/fusion/impl/qquickfusionbusyindicator.cpp b/src/imports/controls/fusion/impl/qquickfusionbusyindicator.cpp deleted file mode 100644 index a9b75d27..00000000 --- a/src/imports/controls/fusion/impl/qquickfusionbusyindicator.cpp +++ /dev/null @@ -1,111 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickfusionbusyindicator_p.h" - -#include - -QT_BEGIN_NAMESPACE - -QQuickFusionBusyIndicator::QQuickFusionBusyIndicator(QQuickItem *parent) - : QQuickPaintedItem(parent) -{ -} - -QColor QQuickFusionBusyIndicator::color() const -{ - return m_color; -} - -void QQuickFusionBusyIndicator::setColor(const QColor &color) -{ - if (color == m_color) - return; - - m_color = color; - update(); -} - -bool QQuickFusionBusyIndicator::isRunning() const -{ - return isVisible(); -} - -void QQuickFusionBusyIndicator::setRunning(bool running) -{ - if (running) { - setVisible(true); - update(); - } -} - -void QQuickFusionBusyIndicator::paint(QPainter *painter) -{ - const qreal w = width(); - const qreal h = height(); - if (w <= 0 || h <= 0 || !isRunning()) - return; - - const qreal sz = qMin(w, h); - const qreal dx = (w - sz) / 2; - const qreal dy = (h - sz) / 2; - const int hpw = qRound(qMax(qreal(1), sz / 14)) & -1; - const int pw = 2 * hpw; - const QRectF bounds(dx + hpw, dy + hpw, sz - pw - 1, sz - pw - 1); - - QConicalGradient gradient; - gradient.setCenter(QPointF(dx + sz / 2, dy + sz / 2)); - gradient.setColorAt(0, m_color); - gradient.setColorAt(0.1, m_color); - gradient.setColorAt(1, Qt::transparent); - - painter->translate(0.5, 0.5); - painter->setRenderHint(QPainter::Antialiasing, true); - painter->setPen(QPen(gradient, pw, Qt::SolidLine)); - painter->drawArc(bounds, 0, 360 * 16); - painter->setPen(QPen(m_color, pw, Qt::SolidLine, Qt::RoundCap)); - painter->drawArc(bounds, 0, 20 * 16); -} - -void QQuickFusionBusyIndicator::itemChange(ItemChange change, const ItemChangeData &data) -{ - QQuickPaintedItem::itemChange(change, data); - - if (change == ItemOpacityHasChanged && qFuzzyIsNull(data.realValue)) - setVisible(false); -} - -QT_END_NAMESPACE diff --git a/src/imports/controls/fusion/impl/qquickfusionbusyindicator_p.h b/src/imports/controls/fusion/impl/qquickfusionbusyindicator_p.h deleted file mode 100644 index 5aeea6c4..00000000 --- a/src/imports/controls/fusion/impl/qquickfusionbusyindicator_p.h +++ /dev/null @@ -1,84 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKFUSIONBUSYINDICATOR_P_H -#define QQUICKFUSIONBUSYINDICATOR_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include - -QT_BEGIN_NAMESPACE - -class QQuickFusionBusyIndicator : public QQuickPaintedItem -{ - Q_OBJECT - Q_PROPERTY(QColor color READ color WRITE setColor FINAL) - Q_PROPERTY(bool running READ isRunning WRITE setRunning) - QML_NAMED_ELEMENT(BusyIndicatorImpl) - QML_ADDED_IN_VERSION(2, 3) - -public: - explicit QQuickFusionBusyIndicator(QQuickItem *parent = nullptr); - - QColor color() const; - void setColor(const QColor &color); - - bool isRunning() const; - void setRunning(bool running); - - void paint(QPainter *painter) override; - -protected: - void itemChange(ItemChange change, const ItemChangeData &data) override; - -private: - QColor m_color; -}; - -QT_END_NAMESPACE - -#endif // QQUICKFUSIONBUSYINDICATOR_P_H diff --git a/src/imports/controls/fusion/impl/qquickfusiondial.cpp b/src/imports/controls/fusion/impl/qquickfusiondial.cpp deleted file mode 100644 index eb6f21ad..00000000 --- a/src/imports/controls/fusion/impl/qquickfusiondial.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickfusiondial_p.h" - -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -QQuickFusionDial::QQuickFusionDial(QQuickItem *parent) - : QQuickPaintedItem(parent) -{ -} - -bool QQuickFusionDial::highlight() const -{ - return m_highlight; -} - -void QQuickFusionDial::setHighlight(bool highlight) -{ - if (m_highlight == highlight) - return; - - m_highlight = highlight; - update(); -} - -// based on QStyleHelper::drawDial() -void QQuickFusionDial::paint(QPainter *painter) -{ - const int width = QQuickItem::width(); - const int height = QQuickItem::height(); - if (width <= 0 || height <= 0 || !isVisible()) - return; - - QColor buttonColor = QQuickItemPrivate::get(this)->palette()->button(); - const bool enabled = isEnabled(); - qreal r = qMin(width, height) / 2.0; - r -= r/50; - const qreal penSize = r/20.0; - - painter->setRenderHint(QPainter::Antialiasing); - - const qreal d_ = r / 6; - const qreal dx = d_ + (width - 2 * r) / 2 + 1; - const qreal dy = d_ + (height - 2 * r) / 2 + 1; - - QRectF br = QRectF(dx + 0.5, dy + 0.5, - int(r * 2 - 2 * d_ - 2), - int(r * 2 - 2 * d_ - 2)); - buttonColor.setHsv(buttonColor .hue(), - qMin(140, buttonColor .saturation()), - qMax(180, buttonColor.value())); - - if (enabled) { - // Drop shadow - qreal shadowSize = qMax(1.0, penSize/2.0); - QRectF shadowRect= br.adjusted(-2*shadowSize, -2*shadowSize, - 2*shadowSize, 2*shadowSize); - QRadialGradient shadowGradient(shadowRect.center().x(), - shadowRect.center().y(), shadowRect.width()/2.0, - shadowRect.center().x(), shadowRect.center().y()); - shadowGradient.setColorAt(qreal(0.91), QColor(0, 0, 0, 40)); - shadowGradient.setColorAt(qreal(1.0), Qt::transparent); - painter->setBrush(shadowGradient); - painter->setPen(Qt::NoPen); - painter->translate(shadowSize, shadowSize); - painter->drawEllipse(shadowRect); - painter->translate(-shadowSize, -shadowSize); - - // Main gradient - QRadialGradient gradient(br.center().x() - br.width()/3, dy, - br.width()*1.3, br.center().x(), - br.center().y() - br.height()/2); - gradient.setColorAt(0, buttonColor.lighter(110)); - gradient.setColorAt(qreal(0.5), buttonColor); - gradient.setColorAt(qreal(0.501), buttonColor.darker(102)); - gradient.setColorAt(1, buttonColor.darker(115)); - painter->setBrush(gradient); - } else { - painter->setBrush(Qt::NoBrush); - } - - painter->setPen(QPen(buttonColor.darker(280))); - painter->drawEllipse(br); - painter->setBrush(Qt::NoBrush); - painter->setPen(buttonColor.lighter(110)); - painter->drawEllipse(br.adjusted(1, 1, -1, -1)); - - if (m_highlight) { - QColor highlight = QQuickItemPrivate::get(this)->palette()->highlight(); - highlight.setHsv(highlight.hue(), - qMin(160, highlight.saturation()), - qMax(230, highlight.value())); - highlight.setAlpha(127); - painter->setPen(QPen(highlight, 2.0)); - painter->setBrush(Qt::NoBrush); - painter->drawEllipse(br.adjusted(-1, -1, 1, 1)); - } -} - -QT_END_NAMESPACE diff --git a/src/imports/controls/fusion/impl/qquickfusiondial_p.h b/src/imports/controls/fusion/impl/qquickfusiondial_p.h deleted file mode 100644 index c320527a..00000000 --- a/src/imports/controls/fusion/impl/qquickfusiondial_p.h +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKFUSIONDIAL_P_H -#define QQUICKFUSIONDIAL_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include - -QT_BEGIN_NAMESPACE - -class QQuickFusionDial : public QQuickPaintedItem -{ - Q_OBJECT - Q_PROPERTY(bool highlight READ highlight WRITE setHighlight FINAL) - QML_NAMED_ELEMENT(DialImpl) - QML_ADDED_IN_VERSION(2, 3) - -public: - explicit QQuickFusionDial(QQuickItem *parent = nullptr); - - bool highlight() const; - void setHighlight(bool highlight); - - void paint(QPainter *painter) override; - -private: - bool m_highlight = false; -}; - -QT_END_NAMESPACE - -#endif // QQUICKFUSIONDIAL_P_H diff --git a/src/imports/controls/fusion/impl/qquickfusionknob.cpp b/src/imports/controls/fusion/impl/qquickfusionknob.cpp deleted file mode 100644 index 27ac54d3..00000000 --- a/src/imports/controls/fusion/impl/qquickfusionknob.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickfusionknob_p.h" - -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -QQuickFusionKnob::QQuickFusionKnob(QQuickItem *parent) - : QQuickPaintedItem(parent) -{ - connect(this, &QQuickItem::paletteChanged, this, [this](){ update(); }); -} - -// extracted from QStyleHelper::drawDial() -void QQuickFusionKnob::paint(QPainter *painter) -{ - const qreal w = width(); - const qreal h = height(); - if (w <= 0 || h <= 0) - return; - - QColor color = QQuickItemPrivate::get(this)->palette()->button(); - color.setHsv(color.hue(), - qMin(140, color .saturation()), - qMax(180, color.value())); - color = color.lighter(104); - color.setAlphaF(0.8f); - - const qreal sz = qMin(w, h); - QRectF rect(0, 0, sz, sz); - rect.moveCenter(QPointF(w / 2.0, h / 2.0)); - const QPointF center = rect.center(); - - QRadialGradient gradient(center.x() + rect.width() / 2, - center.y() + rect.width(), - rect.width() * 2, - center.x(), center.y()); - gradient.setColorAt(1, color.darker(140)); - gradient.setColorAt(qreal(0.4), color.darker(120)); - gradient.setColorAt(0, color.darker(110)); - - painter->setRenderHint(QPainter::Antialiasing); - painter->setBrush(gradient); - painter->setPen(QColor(255, 255, 255, 150)); - painter->drawEllipse(rect); - painter->setPen(QColor(0, 0, 0, 80)); - painter->drawEllipse(rect.adjusted(1, 1, -1, -1)); -} - -QT_END_NAMESPACE diff --git a/src/imports/controls/fusion/impl/qquickfusionknob_p.h b/src/imports/controls/fusion/impl/qquickfusionknob_p.h deleted file mode 100644 index b9b9c377..00000000 --- a/src/imports/controls/fusion/impl/qquickfusionknob_p.h +++ /dev/null @@ -1,69 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKFUSIONKNOB_P_H -#define QQUICKFUSIONKNOB_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include - -QT_BEGIN_NAMESPACE - -class QQuickFusionKnob : public QQuickPaintedItem -{ - Q_OBJECT - QML_NAMED_ELEMENT(KnobImpl) - QML_ADDED_IN_VERSION(2, 3) - -public: - explicit QQuickFusionKnob(QQuickItem *parent = nullptr); - - void paint(QPainter *painter) override; -}; - -QT_END_NAMESPACE - -#endif // QQUICKFUSIONKNOB_P_H diff --git a/src/imports/controls/fusion/impl/qtquickcontrols2fusionstyleimplplugin.cpp b/src/imports/controls/fusion/impl/qtquickcontrols2fusionstyleimplplugin.cpp deleted file mode 100644 index 5b02409f..00000000 --- a/src/imports/controls/fusion/impl/qtquickcontrols2fusionstyleimplplugin.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include - -extern void qml_register_types_QtQuick_Controls_Fusion_impl(); - -QT_BEGIN_NAMESPACE - -class QtQuickControls2FusionStyleImplPlugin : public QQmlEngineExtensionPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) - -public: - QtQuickControls2FusionStyleImplPlugin(QObject *parent = nullptr); -}; - -QtQuickControls2FusionStyleImplPlugin::QtQuickControls2FusionStyleImplPlugin(QObject *parent) - : QQmlEngineExtensionPlugin(parent) -{ - volatile auto registration = &qml_register_types_QtQuick_Controls_Fusion_impl; - Q_UNUSED(registration); -} - -QT_END_NAMESPACE - -#include "qtquickcontrols2fusionstyleimplplugin.moc" diff --git a/src/imports/controls/fusion/qquickfusionstyle.cpp b/src/imports/controls/fusion/qquickfusionstyle.cpp deleted file mode 100644 index f2e8f823..00000000 --- a/src/imports/controls/fusion/qquickfusionstyle.cpp +++ /dev/null @@ -1,153 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickfusionstyle_p.h" - -#include -#include -#include -#include - -#include - -QT_BEGIN_NAMESPACE - -QQuickFusionStyle::QQuickFusionStyle(QObject *parent) - : QObject(parent) -{ -} - -QColor QQuickFusionStyle::lightShade() -{ - return QColor(255, 255, 255, 90); -} - -QColor QQuickFusionStyle::darkShade() -{ - return QColor(0, 0, 0, 60); -} - -QColor QQuickFusionStyle::topShadow() -{ - return QColor(0, 0, 0, 18); -} - -QColor QQuickFusionStyle::innerContrastLine() -{ - return QColor(255, 255, 255, 30); -} - -QColor QQuickFusionStyle::highlight(QQuickPalette *palette) -{ - return palette->highlight(); -} - -QColor QQuickFusionStyle::highlightedText(QQuickPalette *palette) -{ - return palette->highlightedText(); -} - -QColor QQuickFusionStyle::outline(QQuickPalette *palette) -{ - return palette->window().darker(140); -} - -QColor QQuickFusionStyle::highlightedOutline(QQuickPalette *palette) -{ - QColor highlightedOutline = highlight(palette).darker(125); - if (highlightedOutline.value() > 160) - highlightedOutline.setHsl(highlightedOutline.hue(), highlightedOutline.saturation(), 160); - return highlightedOutline; -} - -QColor QQuickFusionStyle::tabFrameColor(QQuickPalette *palette) -{ - return buttonColor(palette).lighter(104); -} - -QColor QQuickFusionStyle::buttonColor(QQuickPalette *palette, bool highlighted, bool down, bool hovered) -{ - QColor buttonColor = palette->button(); - int val = qGray(buttonColor.rgb()); - buttonColor = buttonColor.lighter(100 + qMax(1, (180 - val)/6)); - buttonColor.setHsv(buttonColor.hue(), int(buttonColor.saturation() * 0.75), buttonColor.value()); - if (highlighted) - buttonColor = mergedColors(buttonColor, highlightedOutline(palette).lighter(130), 90); - if (!hovered) - buttonColor = buttonColor.darker(104); - if (down) - buttonColor = buttonColor.darker(110); - return buttonColor; -} - -QColor QQuickFusionStyle::buttonOutline(QQuickPalette *palette, bool highlighted, bool enabled) -{ - QColor darkOutline = enabled && highlighted ? highlightedOutline(palette) : outline(palette); - return !enabled ? darkOutline.lighter(115) : darkOutline; -} - -QColor QQuickFusionStyle::gradientStart(const QColor &baseColor) -{ - return baseColor.lighter(124); -} - -QColor QQuickFusionStyle::gradientStop(const QColor &baseColor) -{ - return baseColor.lighter(102); -} - -QColor QQuickFusionStyle::mergedColors(const QColor &colorA, const QColor &colorB, int factor) -{ - const int maxFactor = 100; - QColor tmp = colorA; - tmp.setRed((tmp.red() * factor) / maxFactor + (colorB.red() * (maxFactor - factor)) / maxFactor); - tmp.setGreen((tmp.green() * factor) / maxFactor + (colorB.green() * (maxFactor - factor)) / maxFactor); - tmp.setBlue((tmp.blue() * factor) / maxFactor + (colorB.blue() * (maxFactor - factor)) / maxFactor); - return tmp; -} - -QColor QQuickFusionStyle::grooveColor(QQuickPalette *palette) -{ - QColor color = buttonColor(palette); - color.setHsv(color.hue(), - qMin(255, color.saturation()), - qMin(255, color.value() * 0.9)); - return color; -} - -QT_END_NAMESPACE - -#include "moc_qquickfusionstyle_p.cpp" diff --git a/src/imports/controls/fusion/qquickfusionstyle_p.h b/src/imports/controls/fusion/qquickfusionstyle_p.h deleted file mode 100644 index c609e9c6..00000000 --- a/src/imports/controls/fusion/qquickfusionstyle_p.h +++ /dev/null @@ -1,92 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKFUSIONSTYLE_P_H -#define QQUICKFUSIONSTYLE_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class QQuickFusionStyle : public QObject -{ - Q_OBJECT - Q_PROPERTY(QColor lightShade READ lightShade CONSTANT) - Q_PROPERTY(QColor darkShade READ darkShade CONSTANT) - Q_PROPERTY(QColor topShadow READ topShadow CONSTANT) - Q_PROPERTY(QColor innerContrastLine READ innerContrastLine CONSTANT) - QML_NAMED_ELEMENT(Fusion) - QML_SINGLETON - QML_ADDED_IN_VERSION(2, 3) - -public: - explicit QQuickFusionStyle(QObject *parent = nullptr); - - static QColor lightShade(); - static QColor darkShade(); - static QColor topShadow(); - static QColor innerContrastLine(); - - Q_INVOKABLE static QColor highlight(QQuickPalette *palette); - Q_INVOKABLE static QColor highlightedText(QQuickPalette *palette); - Q_INVOKABLE static QColor outline(QQuickPalette *palette); - Q_INVOKABLE static QColor highlightedOutline(QQuickPalette *palette); - Q_INVOKABLE static QColor tabFrameColor(QQuickPalette *palette); - Q_INVOKABLE static QColor buttonColor(QQuickPalette *palette, bool highlighted = false, bool down = false, bool hovered = false); - Q_INVOKABLE static QColor buttonOutline(QQuickPalette *palette, bool highlighted = false, bool enabled = true); - Q_INVOKABLE static QColor gradientStart(const QColor &baseColor); - Q_INVOKABLE static QColor gradientStop(const QColor &baseColor); - Q_INVOKABLE static QColor mergedColors(const QColor &colorA, const QColor &colorB, int factor = 50); - Q_INVOKABLE static QColor grooveColor(QQuickPalette *palette); -}; - -QT_END_NAMESPACE - -#endif // QQUICKFUSIONSTYLE_P_H diff --git a/src/imports/controls/fusion/qquickfusiontheme.cpp b/src/imports/controls/fusion/qquickfusiontheme.cpp deleted file mode 100644 index 903758bb..00000000 --- a/src/imports/controls/fusion/qquickfusiontheme.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickfusiontheme_p.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -void QQuickFusionTheme::initialize(QQuickTheme *theme) -{ - const bool isDarkSystemTheme = QQuickStylePrivate::isDarkSystemTheme(); - QPalette systemPalette; - systemPalette.setColor(QPalette::Active, QPalette::ButtonText, - isDarkSystemTheme ? QColor::fromRgb(0xe7e7e7) : QColor::fromRgb(0x252525)); - systemPalette.setColor(QPalette::Disabled, QPalette::ButtonText, - isDarkSystemTheme ? QColor::fromRgb(0x777777) : QColor::fromRgb(0xb6b6b6)); - theme->setPalette(QQuickTheme::System, systemPalette); -} - -QT_END_NAMESPACE diff --git a/src/imports/controls/fusion/qquickfusiontheme_p.h b/src/imports/controls/fusion/qquickfusiontheme_p.h deleted file mode 100644 index 814c1919..00000000 --- a/src/imports/controls/fusion/qquickfusiontheme_p.h +++ /dev/null @@ -1,65 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKFUSIONTHEME_P_H -#define QQUICKFUSIONTHEME_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include - -QT_BEGIN_NAMESPACE - -class QQuickTheme; - -class QQuickFusionTheme -{ -public: - static void initialize(QQuickTheme *theme); -}; - -QT_END_NAMESPACE - -#endif // QQUICKFUSIONTHEME_P_H diff --git a/src/imports/controls/fusion/qtquickcontrols2fusionstyle.qrc b/src/imports/controls/fusion/qtquickcontrols2fusionstyle.qrc deleted file mode 100644 index 0a9e195a..00000000 --- a/src/imports/controls/fusion/qtquickcontrols2fusionstyle.qrc +++ /dev/null @@ -1,16 +0,0 @@ - - - images/arrow.png - images/arrow@2x.png - images/arrow@3x.png - images/arrow@4x.png - images/checkmark.png - images/checkmark@2x.png - images/checkmark@3x.png - images/checkmark@4x.png - images/progressmask.png - images/progressmask@2x.png - images/progressmask@3x.png - images/progressmask@4x.png - - diff --git a/src/imports/controls/fusion/qtquickcontrols2fusionstyleplugin.cpp b/src/imports/controls/fusion/qtquickcontrols2fusionstyleplugin.cpp deleted file mode 100644 index f0d0e41a..00000000 --- a/src/imports/controls/fusion/qtquickcontrols2fusionstyleplugin.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickfusionstyle_p.h" -#include "qquickfusiontheme_p.h" - -#include -#include -#include - -extern void qml_register_types_QtQuick_Controls_Fusion(); - -QT_BEGIN_NAMESPACE - -class QtQuickControls2FusionStylePlugin : public QQuickStylePlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) - -public: - QtQuickControls2FusionStylePlugin(QObject *parent = nullptr); - - QString name() const override; - void initializeTheme(QQuickTheme *theme) override; - - QQuickFusionTheme theme; -}; - -QtQuickControls2FusionStylePlugin::QtQuickControls2FusionStylePlugin(QObject *parent) : QQuickStylePlugin(parent) -{ - volatile auto registration = &qml_register_types_QtQuick_Controls_Fusion; - Q_UNUSED(registration); -} - -QString QtQuickControls2FusionStylePlugin::name() const -{ - return QStringLiteral("Fusion"); -} - -void QtQuickControls2FusionStylePlugin::initializeTheme(QQuickTheme *theme) -{ - this->theme.initialize(theme); -} - -QT_END_NAMESPACE - -#include "qtquickcontrols2fusionstyleplugin.moc" diff --git a/src/imports/controls/imagine/ApplicationWindow.qml b/src/imports/controls/imagine/ApplicationWindow.qml deleted file mode 100644 index b54527eb..00000000 --- a/src/imports/controls/imagine/ApplicationWindow.qml +++ /dev/null @@ -1,57 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Window -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.ApplicationWindow { - id: window - - background: NinePatchImage { - width: window.width - height: window.height - - source: Imagine.url + "applicationwindow-background" - NinePatchImageSelector on source { - states: [ - {"active": window.active} - ] - } - } -} diff --git a/src/imports/controls/imagine/BusyIndicator.qml b/src/imports/controls/imagine/BusyIndicator.qml deleted file mode 100644 index 163a64b4..00000000 --- a/src/imports/controls/imagine/BusyIndicator.qml +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.BusyIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - contentItem: AnimatedImage { - opacity: control.running ? 1 : 0 - playing: control.running || opacity > 0 - visible: control.running || opacity > 0 - Behavior on opacity { OpacityAnimator { duration: 250 } } - - source: Imagine.url + "busyindicator-animation" - AnimatedImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"running": control.running}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } - - background: NinePatchImage { - source: Imagine.url + "busyindicator-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"running": control.running}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/Button.qml b/src/imports/controls/imagine/Button.qml deleted file mode 100644 index f2228ec7..00000000 --- a/src/imports/controls/imagine/Button.qml +++ /dev/null @@ -1,98 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Button { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - spacing: 6 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - icon.width: 24 - icon.height: 24 - icon.color: control.enabled && control.flat && control.highlighted ? control.palette.highlight - : control.enabled && (control.down || control.checked || control.highlighted) && !control.flat - ? control.palette.brightText : control.flat ? control.palette.windowText : control.palette.buttonText - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.enabled && control.flat && control.highlighted ? control.palette.highlight - : control.enabled && (control.down || control.checked || control.highlighted) && !control.flat - ? control.palette.brightText : control.flat ? control.palette.windowText : control.palette.buttonText - } - - background: NinePatchImage { - source: Imagine.url + "button-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"checkable": control.checkable}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"flat": control.flat}, - {"hovered": control.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/CMakeLists.txt b/src/imports/controls/imagine/CMakeLists.txt deleted file mode 100644 index b37bce6a..00000000 --- a/src/imports/controls/imagine/CMakeLists.txt +++ /dev/null @@ -1,270 +0,0 @@ -# Generated from imagine.pro. - -##################################################################### -## qtquickcontrols2imaginestyleplugin Plugin: -##################################################################### - -qt_internal_add_qml_module(qtquickcontrols2imaginestyleplugin - URI "QtQuick.Controls.Imagine" - VERSION "${PROJECT_VERSION}" - CLASSNAME QtQuickControls2ImagineStylePlugin - IMPORTS - QtQuick.Controls.Basic/auto - GENERATE_QMLTYPES - INSTALL_QMLTYPES - SOURCES - qquickimaginestyle.cpp qquickimaginestyle_p.h - qquickimaginetheme.cpp qquickimaginetheme_p.h - qtquickcontrols2imaginestyleplugin.cpp - DEFINES - QT_NO_CAST_FROM_ASCII - QT_NO_CAST_TO_ASCII - LIBRARIES - Qt::CorePrivate - Qt::GuiPrivate - Qt::QmlPrivate - Qt::QuickControls2ImplPrivate - Qt::QuickControls2Private - Qt::QuickPrivate - Qt::QuickTemplates2Private - PUBLIC_LIBRARIES - Qt::Core - Qt::Gui - Qt::Qml - Qt::Quick -) - -file(GLOB resource_glob_0 RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "images/*.png") -foreach(file IN LISTS resource_glob_0) - set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/${file}" PROPERTIES QT_RESOURCE_ALIAS "${file}") -endforeach() - -file(GLOB resource_glob_1 RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "images/*.webp") -foreach(file IN LISTS resource_glob_1) - set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/${file}" PROPERTIES QT_RESOURCE_ALIAS "${file}") -endforeach() - -# Resources: -set(qmake_qtquickcontrols2imaginestyle_resource_files - ${resource_glob_0} - ${resource_glob_1} -) - -qt_internal_add_resource(qtquickcontrols2imaginestyleplugin "qmake_qtquickcontrols2imaginestyle" - PREFIX - "qt-project.org/imports/QtQuick/Controls/Imagine" - FILES - ${qmake_qtquickcontrols2imaginestyle_resource_files} -) - - -#### Keys ignored in scope 1:.:.:imagine.pro:: -# OTHER_FILES = "qmldir" "$$QML_FILES" -# QML_IMPORT_NAME = "QtQuick.Controls.Imagine" -# QML_IMPORT_VERSION = "$$QT_VERSION" -# TARGETPATH = "QtQuick/Controls/Imagine" -# _REQUIREMENTS = "qtConfig(quickcontrols2-imagine)" - -set(qml_files - "ApplicationWindow.qml" - "BusyIndicator.qml" - "Button.qml" - "CheckBox.qml" - "CheckDelegate.qml" - "ComboBox.qml" - "DelayButton.qml" - "Dial.qml" - "Dialog.qml" - "DialogButtonBox.qml" - "Drawer.qml" - "Frame.qml" - "GroupBox.qml" - "HorizontalHeaderView.qml" - "ItemDelegate.qml" - "Label.qml" - "Menu.qml" - "MenuItem.qml" - "MenuSeparator.qml" - "PageIndicator.qml" - "Page.qml" - "Pane.qml" - "Popup.qml" - "ProgressBar.qml" - "RadioButton.qml" - "RadioDelegate.qml" - "RangeSlider.qml" - "RoundButton.qml" - "ScrollView.qml" - "ScrollBar.qml" - "ScrollIndicator.qml" - "Slider.qml" - "SpinBox.qml" - "SplitView.qml" - "StackView.qml" - "SwipeDelegate.qml" - "SwipeView.qml" - "Switch.qml" - "SwitchDelegate.qml" - "TextField.qml" - "TextArea.qml" - "TabBar.qml" - "TabButton.qml" - "ToolBar.qml" - "ToolButton.qml" - "ToolSeparator.qml" - "ToolTip.qml" - "Tumbler.qml" - "VerticalHeaderView.qml" -) -set_source_files_properties(ApplicationWindow.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(BusyIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Button.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(CheckBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(CheckDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ComboBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(DelayButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.2;6.0" -) -set_source_files_properties(Dial.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Dialog.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(DialogButtonBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(Drawer.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Frame.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(GroupBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(HorizontalHeaderView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.15;6.0" -) -set_source_files_properties(ItemDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Label.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Menu.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(MenuItem.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(MenuSeparator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(PageIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Page.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Pane.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Popup.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ProgressBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(RadioButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(RadioDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(RangeSlider.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(RoundButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(ScrollView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ScrollBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ScrollIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Slider.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SpinBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SplitView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.13;6.0" -) -set_source_files_properties(StackView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SwipeDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SwipeView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Switch.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SwitchDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TextField.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TextArea.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TabBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TabButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ToolBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ToolButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ToolSeparator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(ToolTip.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Tumbler.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(VerticalHeaderView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.15;6.0" -) - -qt6_target_qml_files(qtquickcontrols2imaginestyleplugin - FILES - ${qml_files} -) diff --git a/src/imports/controls/imagine/CheckBox.qml b/src/imports/controls/imagine/CheckBox.qml deleted file mode 100644 index a92837b5..00000000 --- a/src/imports/controls/imagine/CheckBox.qml +++ /dev/null @@ -1,106 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.CheckBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 6 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - indicator: Image { - x: text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - - source: Imagine.url + "checkbox-indicator" - ImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checkState === Qt.Checked}, - {"partially-checked": control.checkState === Qt.PartiallyChecked}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.palette.windowText - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } - - background: NinePatchImage { - source: Imagine.url + "checkbox-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checkState === Qt.Checked}, - {"partially-checked": control.checkState === Qt.PartiallyChecked}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/CheckDelegate.qml b/src/imports/controls/imagine/CheckDelegate.qml deleted file mode 100644 index 08be7085..00000000 --- a/src/imports/controls/imagine/CheckDelegate.qml +++ /dev/null @@ -1,117 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.CheckDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.text - - indicator: Image { - x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding - y: control.topPadding + (control.availableHeight - height) / 2 - - source: Imagine.url + "checkdelegate-indicator" - ImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checkState === Qt.Checked}, - {"partially-checked": control.checkState === Qt.PartiallyChecked}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } - - contentItem: IconLabel { - leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.text - } - - background: NinePatchImage { - source: Imagine.url + "checkdelegate-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checkState === Qt.Checked}, - {"partially-checked": control.checkState === Qt.PartiallyChecked}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/ComboBox.qml b/src/imports/controls/imagine/ComboBox.qml deleted file mode 100644 index 58683a84..00000000 --- a/src/imports/controls/imagine/ComboBox.qml +++ /dev/null @@ -1,173 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Window -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.ComboBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentItem.implicitWidth + background ? (background.leftPadding + background.rightPadding) : 0) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - Math.max(implicitContentHeight, - implicitIndicatorHeight) + background ? (background.topPadding + background.bottomPadding) : 0) - - leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) - rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - delegate: ItemDelegate { - width: ListView.view.width - text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData - font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal - highlighted: control.highlightedIndex === index - hoverEnabled: control.hoverEnabled - } - - indicator: Image { - x: control.mirrored ? control.padding : control.width - width - control.padding - y: control.topPadding + (control.availableHeight - height) / 2 - - source: Imagine.url + "combobox-indicator" - ImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.pressed}, - {"editable": control.editable}, - {"open": control.down}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered}, - {"flat": control.flat} - ] - } - } - - contentItem: T.TextField { - topPadding: control.background ? control.background.topPadding : 0 - leftPadding: control.background ? control.background.leftPadding : 0 - rightPadding: control.background ? control.background.rightPadding : 0 - bottomPadding: control.background ? control.background.bottomPadding : 0 - - text: control.editable ? control.editText : control.displayText - - enabled: control.editable - autoScroll: control.editable - readOnly: control.down - inputMethodHints: control.inputMethodHints - validator: control.validator - selectByMouse: control.selectTextByMouse - - font: control.font - color: control.flat ? control.palette.windowText : control.editable ? control.palette.text : control.palette.buttonText - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - verticalAlignment: Text.AlignVCenter - } - - background: NinePatchImage { - source: Imagine.url + "combobox-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.pressed}, - {"editable": control.editable}, - {"open": control.down}, - {"focused": control.visualFocus || (control.editable && control.activeFocus)}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered}, - {"flat": control.flat} - ] - } - } - - popup: T.Popup { - width: control.width - height: Math.min(contentItem.implicitHeight + topPadding + bottomPadding, control.Window.height - topMargin - bottomMargin) - - topMargin: background.topInset - bottomMargin: background.bottomInset - - topPadding: background.topPadding - leftPadding: background.leftPadding - rightPadding: background.rightPadding - bottomPadding: background.bottomPadding - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - palette.text: control.palette.text - palette.highlight: control.palette.highlight - palette.highlightedText: control.palette.highlightedText - palette.windowText: control.palette.windowText - palette.buttonText: control.palette.buttonText - - contentItem: ListView { - clip: true - implicitHeight: contentHeight - model: control.delegateModel - currentIndex: control.highlightedIndex - highlightMoveDuration: 0 - - T.ScrollIndicator.vertical: ScrollIndicator { } - } - - background: NinePatchImage { - source: Imagine.url + "combobox-popup" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.pressed}, - {"editable": control.editable}, - {"focused": control.visualFocus || (control.editable && control.activeFocus)}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered}, - {"flat": control.flat} - ] - } - } - } -} diff --git a/src/imports/controls/imagine/DelayButton.qml b/src/imports/controls/imagine/DelayButton.qml deleted file mode 100644 index e542eb69..00000000 --- a/src/imports/controls/imagine/DelayButton.qml +++ /dev/null @@ -1,137 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.DelayButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - transition: Transition { - NumberAnimation { - duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress) - } - } - - contentItem: Text { - text: control.text - font: control.font - color: control.palette.buttonText - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - elide: Text.ElideRight - } - - background: NinePatchImage { - source: Imagine.url + "delaybutton-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - - readonly property NinePatchImage progress: NinePatchImage { - parent: control.background - width: control.progress * parent.width - height: parent.height - visible: false - - source: Imagine.url + "delaybutton-progress" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } - - readonly property NinePatchImage mask: NinePatchImage { - width: control.background.width - height: control.background.height - visible: false - - source: Imagine.url + "delaybutton-mask" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } - - readonly property OpacityMask effect: OpacityMask { - parent: control.background - width: source.width - height: source.height - source: control.background.progress - - maskSource: ShaderEffectSource { - sourceItem: control.background.mask - sourceRect: Qt.rect(0, 0, control.background.effect.width, control.background.effect.height) - } - } - } -} diff --git a/src/imports/controls/imagine/Dial.qml b/src/imports/controls/imagine/Dial.qml deleted file mode 100644 index 224bff56..00000000 --- a/src/imports/controls/imagine/Dial.qml +++ /dev/null @@ -1,105 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Dial { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - (handle ? handle.implicitWidth : 0) + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - (handle ? handle.implicitHeight : 0) + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - handle: Image { - x: background.x + background.width / 2 - width / 2 - y: background.y + background.height / 2 - height / 2 - - source: Imagine.url + "dial-handle" - ImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.pressed}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - - transform: [ - Translate { - y: -Math.min(control.background.width, control.background.height) * 0.4 + control.handle.height / 2 - }, - Rotation { - angle: control.angle - origin.x: handle.width / 2 - origin.y: handle.height / 2 - } - ] - } - - background: NinePatchImage { - x: control.width / 2 - width / 2 - y: control.height / 2 - height / 2 - width: Math.max(64, Math.min(control.width, control.height)) - height: width - fillMode: Image.PreserveAspectFit - - source: Imagine.url + "dial-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.pressed}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/Dialog.qml b/src/imports/controls/imagine/Dialog.qml deleted file mode 100644 index b788cc3c..00000000 --- a/src/imports/controls/imagine/Dialog.qml +++ /dev/null @@ -1,116 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Dialog { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - background: NinePatchImage { - source: Imagine.url + "dialog-background" - NinePatchImageSelector on source { - states: [ - {"modal": control.modal}, - {"dim": control.dim} - ] - } - } - - header: Label { - text: control.title - visible: control.title - elide: Label.ElideRight - font.bold: true - padding: 12 - - background: NinePatchImage { - width: parent.width - height: parent.height - - source: Imagine.url + "dialog-title" - NinePatchImageSelector on source { - states: [ - {"modal": control.modal}, - {"dim": control.dim} - ] - } - } - } - - footer: DialogButtonBox { - visible: count > 0 - } - - T.Overlay.modal: NinePatchImage { - source: Imagine.url + "dialog-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": true} - ] - } - } - - T.Overlay.modeless: NinePatchImage { - source: Imagine.url + "dialog-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": false} - ] - } - } -} diff --git a/src/imports/controls/imagine/DialogButtonBox.qml b/src/imports/controls/imagine/DialogButtonBox.qml deleted file mode 100644 index 1f3ccd0f..00000000 --- a/src/imports/controls/imagine/DialogButtonBox.qml +++ /dev/null @@ -1,84 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.DialogButtonBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - (control.count === 1 ? contentWidth * 2 : contentWidth) + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - spacing: 6 - - delegate: Button { - width: control.count === 1 ? control.availableWidth / 2 : undefined - flat: true - } - - contentItem: ListView { - model: control.contentModel - spacing: control.spacing - orientation: ListView.Horizontal - boundsBehavior: Flickable.StopAtBounds - snapMode: ListView.SnapToItem - } - - background: NinePatchImage { - source: Imagine.url + "dialogbuttonbox-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/src/imports/controls/imagine/Drawer.qml b/src/imports/controls/imagine/Drawer.qml deleted file mode 100644 index 414516d3..00000000 --- a/src/imports/controls/imagine/Drawer.qml +++ /dev/null @@ -1,96 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Drawer { - id: control - - parent: T.Overlay.overlay - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - enter: Transition { SmoothedAnimation { velocity: 5 } } - exit: Transition { SmoothedAnimation { velocity: 5 } } - - background: NinePatchImage { - source: Imagine.url + "drawer-background" - NinePatchImageSelector on source { - states: [ - {"modal": control.modal}, - {"dim": control.dim}, - {"top": control.edge === Qt.TopEdge}, - {"left": control.edge === Qt.LeftEdge}, - {"right": control.edge === Qt.RightEdge}, - {"bottom": control.edge === Qt.BottomEdge} - ] - } - } - - T.Overlay.modal: NinePatchImage { - source: Imagine.url + "drawer-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": true} - ] - } - } - - T.Overlay.modeless: NinePatchImage { - source: Imagine.url + "drawer-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": false} - ] - } - } -} diff --git a/src/imports/controls/imagine/Frame.qml b/src/imports/controls/imagine/Frame.qml deleted file mode 100644 index 7ba93dbc..00000000 --- a/src/imports/controls/imagine/Frame.qml +++ /dev/null @@ -1,69 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Frame { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - background: NinePatchImage { - source: Imagine.url + "frame-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/src/imports/controls/imagine/GroupBox.qml b/src/imports/controls/imagine/GroupBox.qml deleted file mode 100644 index b0a8645f..00000000 --- a/src/imports/controls/imagine/GroupBox.qml +++ /dev/null @@ -1,99 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.GroupBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitLabelWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: (background ? background.topPadding : 0) + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - label: Label { - width: control.width - - topPadding: background.topPadding - leftPadding: background.leftPadding - rightPadding: background.rightPadding - bottomPadding: background.bottomPadding - - text: control.title - font: control.font - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - - color: control.palette.windowText - - background: NinePatchImage { - width: parent.width - height: parent.height - - source: Imagine.url + "groupbox-title" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } - } - - background: NinePatchImage { - x: -leftInset - y: control.topPadding - control.bottomPadding - topInset - width: control.width + leftInset + rightInset - height: control.height + topInset + bottomInset - control.topPadding + control.bottomPadding - - source: Imagine.url + "groupbox-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/src/imports/controls/imagine/HorizontalHeaderView.qml b/src/imports/controls/imagine/HorizontalHeaderView.qml deleted file mode 100644 index e5214593..00000000 --- a/src/imports/controls/imagine/HorizontalHeaderView.qml +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T - -T.HorizontalHeaderView { - id: control - - implicitWidth: syncView ? syncView.width : 0 - implicitHeight: contentHeight - - delegate: Rectangle { - // Qt6: add cellPadding (and font etc) as public API in headerview - readonly property real cellPadding: 8 - - implicitWidth: text.implicitWidth + (cellPadding * 2) - implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2)) - color: "#f6f6f6" - border.color: "#e4e4e4" - - Text { - id: text - text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] - : model[control.textRole]) - : modelData - width: parent.width - height: parent.height - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: "#ff26282a" - } - } -} diff --git a/src/imports/controls/imagine/ItemDelegate.qml b/src/imports/controls/imagine/ItemDelegate.qml deleted file mode 100644 index 25c9a223..00000000 --- a/src/imports/controls/imagine/ItemDelegate.qml +++ /dev/null @@ -1,93 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.ItemDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.text - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.text - } - - background: NinePatchImage { - source: Imagine.url + "itemdelegate-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/Label.qml b/src/imports/controls/imagine/Label.qml deleted file mode 100644 index 3654cd7d..00000000 --- a/src/imports/controls/imagine/Label.qml +++ /dev/null @@ -1,63 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Label { - id: control - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - color: control.palette.windowText - linkColor: control.palette.link - - background: NinePatchImage { - source: Imagine.url + "label-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/Menu.qml b/src/imports/controls/imagine/Menu.qml deleted file mode 100644 index 346c6490..00000000 --- a/src/imports/controls/imagine/Menu.qml +++ /dev/null @@ -1,107 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl -import QtQuick.Window - -T.Menu { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topMargin: background ? background.topInset : 0 - leftMargin: background ? background.leftInset : 0 - rightMargin: background ? background.rightInset : 0 - bottomMargin: background ? background.bottomInset : 0 - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - delegate: MenuItem { } - - contentItem: ListView { - implicitHeight: contentHeight - model: control.contentModel - interactive: Window.window - ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height - : false - clip: true - currentIndex: control.currentIndex - - T.ScrollIndicator.vertical: ScrollIndicator { } - } - - background: NinePatchImage { - source: Imagine.url + "menu-background" - NinePatchImageSelector on source { - states: [ - {"modal": control.modal}, - {"dim": control.dim} - ] - } - } - - T.Overlay.modal: NinePatchImage { - source: Imagine.url + "menu-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": true} - ] - } - } - - T.Overlay.modeless: NinePatchImage { - source: Imagine.url + "menu-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": false} - ] - } - } -} diff --git a/src/imports/controls/imagine/MenuItem.qml b/src/imports/controls/imagine/MenuItem.qml deleted file mode 100644 index 963b3bba..00000000 --- a/src/imports/controls/imagine/MenuItem.qml +++ /dev/null @@ -1,137 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.MenuItem { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 6 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.windowText - - contentItem: IconLabel { - readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0 - readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0 - leftPadding: !control.mirrored ? indicatorPadding : arrowPadding - rightPadding: control.mirrored ? indicatorPadding : arrowPadding - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.windowText - } - - arrow: Image { - x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding - y: control.topPadding + (control.availableHeight - height) / 2 - - visible: control.subMenu - source: Imagine.url + "menuitem-arrow" - ImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } - - indicator: Image { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - - visible: control.checkable - source: Imagine.url + "menuitem-indicator" - ImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } - - background: NinePatchImage { - source: Imagine.url + "menuitem-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/MenuSeparator.qml b/src/imports/controls/imagine/MenuSeparator.qml deleted file mode 100644 index 42d1812f..00000000 --- a/src/imports/controls/imagine/MenuSeparator.qml +++ /dev/null @@ -1,79 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.MenuSeparator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - contentItem: NinePatchImage { - source: Imagine.url + "menuseparator-separator" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } - - background: NinePatchImage { - source: Imagine.url + "menuseparator-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/src/imports/controls/imagine/Page.qml b/src/imports/controls/imagine/Page.qml deleted file mode 100644 index 1b77112f..00000000 --- a/src/imports/controls/imagine/Page.qml +++ /dev/null @@ -1,73 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Page { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - background: NinePatchImage { - source: Imagine.url + "page-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/src/imports/controls/imagine/PageIndicator.qml b/src/imports/controls/imagine/PageIndicator.qml deleted file mode 100644 index ba9bb85c..00000000 --- a/src/imports/controls/imagine/PageIndicator.qml +++ /dev/null @@ -1,92 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.PageIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - delegate: Image { - source: Imagine.url + "pageindicator-delegate" - ImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": pressed}, - {"current": index === control.currentIndex}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} // ### TODO: context property - ] - } - } - - contentItem: Row { - spacing: control.spacing - - Repeater { - model: control.count - delegate: control.delegate - } - } - - background: NinePatchImage { - source: Imagine.url + "pageindicator-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/Pane.qml b/src/imports/controls/imagine/Pane.qml deleted file mode 100644 index 4fdfaa18..00000000 --- a/src/imports/controls/imagine/Pane.qml +++ /dev/null @@ -1,69 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Pane { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - background: NinePatchImage { - source: Imagine.url + "pane-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/src/imports/controls/imagine/Popup.qml b/src/imports/controls/imagine/Popup.qml deleted file mode 100644 index bc7e544b..00000000 --- a/src/imports/controls/imagine/Popup.qml +++ /dev/null @@ -1,87 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Popup { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : undefined - leftPadding: background ? background.leftPadding : undefined - rightPadding: background ? background.rightPadding : undefined - bottomPadding: background ? background.bottomPadding : undefined - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - background: NinePatchImage { - source: Imagine.url + "popup-background" - NinePatchImageSelector on source { - states: [ - {"modal": control.modal}, - {"dim": control.dim} - ] - } - } - - T.Overlay.modal: NinePatchImage { - source: Imagine.url + "popup-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": true} - ] - } - } - - T.Overlay.modeless: NinePatchImage { - source: Imagine.url + "popup-overlay" - NinePatchImageSelector on source { - states: [ - {"modal": false} - ] - } - } -} diff --git a/src/imports/controls/imagine/ProgressBar.qml b/src/imports/controls/imagine/ProgressBar.qml deleted file mode 100644 index 0c2ed8d7..00000000 --- a/src/imports/controls/imagine/ProgressBar.qml +++ /dev/null @@ -1,141 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.ProgressBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - contentItem: Item { - implicitWidth: control.indeterminate ? animation.implicitWidth || progress.implicitWidth : progress.implicitWidth - implicitHeight: control.indeterminate ? animation.implicitHeight || progress.implicitHeight : progress.implicitHeight - scale: control.mirrored ? -1 : 1 - - readonly property bool hasMask: mask.status !== Image.Null - - readonly property NinePatchImage progress: NinePatchImage { - parent: control.contentItem - width: control.position * parent.width - height: parent.height - visible: !control.indeterminate && !control.contentItem.hasMask - - source: Imagine.url + "progressbar-progress" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"indeterminate": control.indeterminate}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } - - readonly property AnimatedImage animation: AnimatedImage { - parent: control.contentItem - width: parent.width - height: parent.height - playing: control.indeterminate - visible: control.indeterminate && !control.contentItem.hasMask - - source: Imagine.url + "progressbar-animation" - AnimatedImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } - - readonly property NinePatchImage mask: NinePatchImage { - width: control.availableWidth - height: control.availableHeight - visible: false - - source: Imagine.url + "progressbar-mask" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"indeterminate": control.indeterminate}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } - - readonly property OpacityMask effect: OpacityMask { - parent: control.contentItem - width: source.width - height: source.height - source: control.indeterminate ? control.contentItem.animation : control.contentItem.progress - - maskSource: ShaderEffectSource { - sourceItem: control.contentItem.mask - sourceRect: Qt.rect(0, 0, control.contentItem.effect.width, control.contentItem.effect.height) - } - } - } - - background: NinePatchImage { - source: Imagine.url + "progressbar-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"indeterminate": control.indeterminate}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/RadioButton.qml b/src/imports/controls/imagine/RadioButton.qml deleted file mode 100644 index e1a81321..00000000 --- a/src/imports/controls/imagine/RadioButton.qml +++ /dev/null @@ -1,104 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.RadioButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 6 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - indicator: Image { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - - source: Imagine.url + "radiobutton-indicator" - ImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.palette.windowText - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } - - background: NinePatchImage { - source: Imagine.url + "radiobutton-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/RadioDelegate.qml b/src/imports/controls/imagine/RadioDelegate.qml deleted file mode 100644 index 0344160c..00000000 --- a/src/imports/controls/imagine/RadioDelegate.qml +++ /dev/null @@ -1,115 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.RadioDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.text - - indicator: Image { - x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding - y: control.topPadding + (control.availableHeight - height) / 2 - - source: Imagine.url + "radiodelegate-indicator" - ImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } - - contentItem: IconLabel { - leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.text - } - - background: NinePatchImage { - source: Imagine.url + "radiodelegate-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/RangeSlider.qml b/src/imports/controls/imagine/RangeSlider.qml deleted file mode 100644 index 37f59a3a..00000000 --- a/src/imports/controls/imagine/RangeSlider.qml +++ /dev/null @@ -1,134 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.RangeSlider { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - first.implicitHandleWidth + leftPadding + rightPadding, - second.implicitHandleWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - first.implicitHandleHeight + topPadding + bottomPadding, - second.implicitHandleHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - first.handle: Image { - x: control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height)) - - source: Imagine.url + "rangeslider-handle" - ImageSelector on source { - states: [ - {"first": true}, - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"pressed": control.first.pressed}, - {"focused": control.first.handle.activeFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.first.hovered} - ] - } - } - - second.handle: Image { - x: control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height)) - - source: Imagine.url + "rangeslider-handle" - ImageSelector on source { - states: [ - {"second": true}, - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"pressed": control.second.pressed}, - {"focused": control.second.handle.activeFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.second.hovered} - ] - } - } - - background: NinePatchImage { - scale: control.horizontal && control.mirrored ? -1 : 1 - - source: Imagine.url + "rangeslider-background" - NinePatchImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - - NinePatchImage { - x: control.horizontal ? control.first.handle.width / 2 + control.first.position * (parent.width - control.first.handle.width) : (parent.width - width) / 2 - y: control.horizontal ? (parent.height - height) / 2 : control.first.handle.height / 2 + control.second.visualPosition * (parent.height - control.first.handle.height) - width: control.horizontal ? control.second.position * (parent.width - control.first.handle.width) - control.first.position * (parent.width - control.first.handle.width) : parent.width - height: control.vertical ? control.second.position * (parent.height - control.first.handle.height) - control.first.position * (parent.height - control.first.handle.height): parent.height - - source: Imagine.url + "rangeslider-progress" - NinePatchImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } - } -} diff --git a/src/imports/controls/imagine/RoundButton.qml b/src/imports/controls/imagine/RoundButton.qml deleted file mode 100644 index 5c9580a3..00000000 --- a/src/imports/controls/imagine/RoundButton.qml +++ /dev/null @@ -1,97 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.RoundButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - icon.width: 24 - icon.height: 24 - icon.color: control.enabled && control.flat && control.highlighted ? control.palette.highlight - : control.enabled && (control.down || control.checked || control.highlighted) && !control.flat - ? control.palette.brightText : control.flat ? control.palette.windowText : control.palette.buttonText - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.enabled && control.flat && control.highlighted ? control.palette.highlight - : control.enabled && (control.down || control.checked || control.highlighted) && !control.flat - ? control.palette.brightText : control.flat ? control.palette.windowText : control.palette.buttonText - } - - background: NinePatchImage { - // ### TODO: radius? - source: Imagine.url + "roundbutton-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"checkable": control.checkable}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"flat": control.flat}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/ScrollBar.qml b/src/imports/controls/imagine/ScrollBar.qml deleted file mode 100644 index f512a0b7..00000000 --- a/src/imports/controls/imagine/ScrollBar.qml +++ /dev/null @@ -1,119 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.ScrollBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - visible: control.policy !== T.ScrollBar.AlwaysOff - minimumSize: orientation == Qt.Horizontal ? height / width : width / height - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - contentItem: NinePatchImage { - width: control.availableWidth - height: control.availableHeight - - source: Imagine.url + "scrollbar-handle" - NinePatchImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"interactive": control.interactive}, - {"pressed": control.pressed}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - opacity: 0.0 - } - - background: NinePatchImage { - source: Imagine.url + "scrollbar-background" - NinePatchImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"interactive": control.interactive}, - {"pressed": control.pressed}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - opacity: 0.0 - } - - states: [ - State { - name: "active" - when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0) - } - ] - - transitions: [ - Transition { - to: "active" - NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 1.0 } - }, - Transition { - from: "active" - SequentialAnimation { - PropertyAction{ targets: [control.contentItem, control.background]; property: "opacity"; value: 1.0 } - PauseAnimation { duration: 3000 } - NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 0.0 } - } - } - ] -} diff --git a/src/imports/controls/imagine/ScrollIndicator.qml b/src/imports/controls/imagine/ScrollIndicator.qml deleted file mode 100644 index 316b749c..00000000 --- a/src/imports/controls/imagine/ScrollIndicator.qml +++ /dev/null @@ -1,111 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.ScrollIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - contentItem: NinePatchImage { - width: control.availableWidth - height: control.availableHeight - - source: Imagine.url + "scrollindicator-handle" - NinePatchImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - opacity: 0.0 - } - - background: NinePatchImage { - source: Imagine.url + "scrollindicator-background" - NinePatchImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - opacity: 0.0 - } - - states: [ - State { - name: "active" - when: (control.active && control.size < 1.0) - } - ] - - transitions: [ - Transition { - to: "active" - NumberAnimation { targets: [contentItem, control.background]; property: "opacity"; to: 1.0 } - }, - Transition { - from: "active" - SequentialAnimation { - PauseAnimation { duration: 5000 } - NumberAnimation { targets: [contentItem, control.background]; property: "opacity"; to: 0.0 } - } - } - ] -} diff --git a/src/imports/controls/imagine/ScrollView.qml b/src/imports/controls/imagine/ScrollView.qml deleted file mode 100644 index 80427e9d..00000000 --- a/src/imports/controls/imagine/ScrollView.qml +++ /dev/null @@ -1,85 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.ScrollView { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - T.ScrollBar.vertical: ScrollBar { - parent: control - x: control.mirrored ? 0 : control.width - width - y: control.topPadding - height: control.availableHeight - active: control.T.ScrollBar.horizontal.active - } - - T.ScrollBar.horizontal: ScrollBar { - parent: control - x: control.leftPadding - y: control.height - height - width: control.availableWidth - active: control.T.ScrollBar.vertical.active - } - - background: NinePatchImage { - source: Imagine.path + "scrollview-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/src/imports/controls/imagine/Slider.qml b/src/imports/controls/imagine/Slider.qml deleted file mode 100644 index 597e222a..00000000 --- a/src/imports/controls/imagine/Slider.qml +++ /dev/null @@ -1,120 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Slider { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitHandleWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitHandleHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - handle: Image { - x: Math.round(control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)) - y: Math.round(control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height))) - - source: Imagine.url + "slider-handle" - ImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"pressed": control.pressed}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } - - background: NinePatchImage { - scale: control.horizontal && control.mirrored ? -1 : 1 - - source: Imagine.url + "slider-background" - NinePatchImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - - NinePatchImage { - x: control.horizontal ? 0 : (parent.width - width) / 2 - y: control.horizontal - ? (parent.height - height) / 2 - : control.handle.height / 2 + control.visualPosition * (parent.height - control.handle.height) - width: control.horizontal - ? control.handle.width / 2 + control.position * (parent.width - control.handle.width) - : parent.width - height: control.vertical - ? control.handle.height / 2 + control.position * (parent.height - control.handle.height) - : parent.height - - source: Imagine.url + "slider-progress" - NinePatchImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } - } -} diff --git a/src/imports/controls/imagine/SpinBox.qml b/src/imports/controls/imagine/SpinBox.qml deleted file mode 100644 index 6d1bdaba..00000000 --- a/src/imports/controls/imagine/SpinBox.qml +++ /dev/null @@ -1,152 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.SpinBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentItem.implicitWidth + 2 * padding + - up.implicitIndicatorWidth + - down.implicitIndicatorWidth) - implicitHeight: Math.max(implicitContentHeight + topPadding + bottomPadding, - implicitBackgroundHeight, - up.implicitIndicatorHeight, - down.implicitIndicatorHeight) - - topPadding: background ? background.topPadding : 0 - leftPadding: (background ? background.leftPadding : 0) + (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0)) - rightPadding: (background ? background.rightPadding : 0) + (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0)) - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - validator: IntValidator { - locale: control.locale.name - bottom: Math.min(control.from, control.to) - top: Math.max(control.from, control.to) - } - - contentItem: TextInput { - z: 2 - text: control.displayText - opacity: control.enabled ? 1 : 0.3 - - font: control.font - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - horizontalAlignment: Qt.AlignHCenter - verticalAlignment: Qt.AlignVCenter - - readOnly: !control.editable - validator: control.validator - inputMethodHints: control.inputMethodHints - - NinePatchImage { - z: -1 - width: control.width - height: control.height - visible: control.editable - - source: Imagine.url + "spinbox-editor" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"focused": control.activeFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } - } - - up.indicator: NinePatchImage { - x: control.mirrored ? 0 : parent.width - width - height: parent.height - - source: Imagine.url + "spinbox-indicator" - NinePatchImageSelector on source { - states: [ - {"up": true}, - {"disabled": !control.up.indicator.enabled}, - {"editable": control.editable}, - {"pressed": control.up.pressed}, - {"focused": control.activeFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.up.hovered} - ] - } - } - - down.indicator: NinePatchImage { - x: control.mirrored ? parent.width - width : 0 - height: parent.height - - source: Imagine.url + "spinbox-indicator" - NinePatchImageSelector on source { - states: [ - {"down": true}, - {"disabled": !control.down.indicator.enabled}, - {"editable": control.editable}, - {"pressed": control.down.pressed}, - {"focused": control.activeFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.down.hovered} - ] - } - } - - background: NinePatchImage { - source: Imagine.url + "spinbox-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"editable": control.editable}, - {"focused": control.activeFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/SplitView.qml b/src/imports/controls/imagine/SplitView.qml deleted file mode 100644 index 36e1b213..00000000 --- a/src/imports/controls/imagine/SplitView.qml +++ /dev/null @@ -1,63 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.SplitView { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - handle: NinePatchImage { - source: Imagine.url + "splitview-handle" - NinePatchImageSelector on source { - states: [ - {"vertical": control.orientation === Qt.Vertical}, - {"horizontal":control.orientation === Qt.Horizontal}, - {"disabled": !control.enabled}, - {"pressed": T.SplitHandle.pressed}, - {"mirrored": control.mirrored}, - {"hovered": T.SplitHandle.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/StackView.qml b/src/imports/controls/imagine/StackView.qml deleted file mode 100644 index a9ddac66..00000000 --- a/src/imports/controls/imagine/StackView.qml +++ /dev/null @@ -1,91 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.StackView { - id: control - - implicitWidth: implicitBackgroundWidth - implicitHeight: implicitBackgroundHeight - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - popEnter: Transition { - XAnimator { from: (control.mirrored ? -1 : 1) * -control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } - } - - popExit: Transition { - XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * control.width; duration: 400; easing.type: Easing.OutCubic } - } - - pushEnter: Transition { - XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } - } - - pushExit: Transition { - XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 400; easing.type: Easing.OutCubic } - } - - replaceEnter: Transition { - XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } - } - - replaceExit: Transition { - XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 400; easing.type: Easing.OutCubic } - } - - background: NinePatchImage { - source: Imagine.url + "stackview-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/src/imports/controls/imagine/SwipeDelegate.qml b/src/imports/controls/imagine/SwipeDelegate.qml deleted file mode 100644 index 5e13fc6b..00000000 --- a/src/imports/controls/imagine/SwipeDelegate.qml +++ /dev/null @@ -1,95 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.SwipeDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.text - - swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } } - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.text - } - - background: NinePatchImage { - source: Imagine.url + "swipedelegate-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/SwipeView.qml b/src/imports/controls/imagine/SwipeView.qml deleted file mode 100644 index 12cafbb8..00000000 --- a/src/imports/controls/imagine/SwipeView.qml +++ /dev/null @@ -1,90 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.SwipeView { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - contentItem: ListView { - model: control.contentModel - interactive: control.interactive - currentIndex: control.currentIndex - focus: control.focus - - spacing: control.spacing - orientation: control.orientation - snapMode: ListView.SnapOneItem - boundsBehavior: Flickable.StopAtBounds - - highlightRangeMode: ListView.StrictlyEnforceRange - preferredHighlightBegin: 0 - preferredHighlightEnd: 0 - highlightMoveDuration: 250 - } - - background: NinePatchImage { - source: Imagine.url + "swipeview-background" - NinePatchImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"interactive": control.interactive}, - {"focused": control.contentItem.activeFocus}, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/src/imports/controls/imagine/Switch.qml b/src/imports/controls/imagine/Switch.qml deleted file mode 100644 index a2f7a9a7..00000000 --- a/src/imports/controls/imagine/Switch.qml +++ /dev/null @@ -1,134 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Switch { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 6 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - indicator: NinePatchImage { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - width: Math.max(implicitWidth, handle.leftPadding && handle.rightPadding ? handle.implicitWidth : 2 * handle.implicitWidth) - height: Math.max(implicitHeight, handle.implicitHeight) - - source: Imagine.url + "switch-indicator" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - - property NinePatchImage handle: NinePatchImage { - readonly property real minPos: parent.leftPadding - leftPadding - readonly property real maxPos: parent.width - width + rightPadding - parent.rightPadding - readonly property real dragPos: control.visualPosition * parent.width - (width / 2) - - parent: control.indicator - - x: Math.max(minPos, Math.min(maxPos, control.visualPosition * parent.width - (width / 2))) - y: (parent.height - height) / 2 - - source: Imagine.url + "switch-handle" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - - Behavior on x { - enabled: !control.down - SmoothedAnimation { velocity: 200 } - } - } - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.palette.windowText - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } - - background: NinePatchImage { - source: Imagine.url + "switch-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/SwitchDelegate.qml b/src/imports/controls/imagine/SwitchDelegate.qml deleted file mode 100644 index 6fde82c1..00000000 --- a/src/imports/controls/imagine/SwitchDelegate.qml +++ /dev/null @@ -1,146 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.SwitchDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.text - - indicator: NinePatchImage { - x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - width: Math.max(implicitWidth, handle.leftPadding && handle.rightPadding ? handle.implicitWidth : 2 * handle.implicitWidth) - height: Math.max(implicitHeight, handle.implicitHeight) - - source: Imagine.url + "switchdelegate-indicator" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - - property NinePatchImage handle: NinePatchImage { - readonly property real minPos: parent.leftPadding - leftPadding - readonly property real maxPos: parent.width - width + rightPadding - parent.rightPadding - readonly property real dragPos: control.visualPosition * parent.width - (width / 2) - - parent: control.indicator - - x: Math.max(minPos, Math.min(maxPos, control.visualPosition * parent.width - (width / 2))) - y: (parent.height - height) / 2 - - source: Imagine.url + "switchdelegate-handle" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - - Behavior on x { - enabled: !control.down - SmoothedAnimation { velocity: 200 } - } - } - } - - contentItem: IconLabel { - leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.palette.text - } - - background: NinePatchImage { - source: Imagine.url + "switchdelegate-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/TabBar.qml b/src/imports/controls/imagine/TabBar.qml deleted file mode 100644 index 26c30e92..00000000 --- a/src/imports/controls/imagine/TabBar.qml +++ /dev/null @@ -1,87 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.TabBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - contentItem: ListView { - model: control.contentModel - currentIndex: control.currentIndex - - spacing: control.spacing - orientation: ListView.Horizontal - boundsBehavior: Flickable.StopAtBounds - flickableDirection: Flickable.AutoFlickIfNeeded - snapMode: ListView.SnapToItem - - highlightMoveDuration: 0 - highlightRangeMode: ListView.ApplyRange - preferredHighlightBegin: 48 - preferredHighlightEnd: width - 48 - } - - background: NinePatchImage { - source: Imagine.url + "tabbar-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"header": control.position === T.TabBar.Header }, - {"footer": control.position === T.TabBar.Footer }, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/src/imports/controls/imagine/TabButton.qml b/src/imports/controls/imagine/TabButton.qml deleted file mode 100644 index 023da2cb..00000000 --- a/src/imports/controls/imagine/TabButton.qml +++ /dev/null @@ -1,91 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.TabButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - spacing: 6 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.buttonText - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.palette.buttonText - } - - background: NinePatchImage { - source: Imagine.url + "tabbutton-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/TextArea.qml b/src/imports/controls/imagine/TextArea.qml deleted file mode 100644 index a4597593..00000000 --- a/src/imports/controls/imagine/TextArea.qml +++ /dev/null @@ -1,96 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.TextArea { - id: control - - implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, - implicitBackgroundWidth + leftInset + rightInset, - placeholder.implicitWidth + leftPadding + rightPadding) - implicitHeight: Math.max(contentHeight + topPadding + bottomPadding, - implicitBackgroundHeight + topInset + bottomInset, - placeholder.implicitHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - verticalAlignment: Qt.AlignVCenter - placeholderTextColor: Color.transparent(control.color, 0.5) - - PlaceholderText { - id: placeholder - x: control.leftPadding - y: control.topPadding - width: control.width - (control.leftPadding + control.rightPadding) - height: control.height - (control.topPadding + control.bottomPadding) - - text: control.placeholderText - font: control.font - color: control.placeholderTextColor - verticalAlignment: control.verticalAlignment - visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) - elide: Text.ElideRight - renderType: control.renderType - } - - background: NinePatchImage { - source: Imagine.url + "textarea-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"focused": control.activeFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/TextField.qml b/src/imports/controls/imagine/TextField.qml deleted file mode 100644 index 15e73aa5..00000000 --- a/src/imports/controls/imagine/TextField.qml +++ /dev/null @@ -1,95 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.TextField { - id: control - - implicitWidth: implicitBackgroundWidth + leftInset + rightInset - || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding, - placeholder.implicitHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - placeholderTextColor: Color.transparent(control.color, 0.5) - verticalAlignment: Qt.AlignVCenter - - PlaceholderText { - id: placeholder - x: control.leftPadding - y: control.topPadding - width: control.width - (control.leftPadding + control.rightPadding) - height: control.height - (control.topPadding + control.bottomPadding) - - text: control.placeholderText - font: control.font - color: control.placeholderTextColor - verticalAlignment: control.verticalAlignment - visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) - elide: Text.ElideRight - renderType: control.renderType - } - - background: NinePatchImage { - source: Imagine.url + "textfield-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"focused": control.activeFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/ToolBar.qml b/src/imports/controls/imagine/ToolBar.qml deleted file mode 100644 index 4a343e3c..00000000 --- a/src/imports/controls/imagine/ToolBar.qml +++ /dev/null @@ -1,71 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.ToolBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - background: NinePatchImage { - source: Imagine.url + "toolbar-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"header": control.position === T.ToolBar.Header }, - {"footer": control.position === T.ToolBar.Footer }, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/src/imports/controls/imagine/ToolButton.qml b/src/imports/controls/imagine/ToolButton.qml deleted file mode 100644 index 1ef570e0..00000000 --- a/src/imports/controls/imagine/ToolButton.qml +++ /dev/null @@ -1,94 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.ToolButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - spacing: 6 // ### - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - icon.width: 24 - icon.height: 24 - icon.color: control.palette.buttonText - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.palette.buttonText - } - - background: NinePatchImage { - source: Imagine.url + "toolbutton-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"pressed": control.down}, - {"checked": control.checked}, - {"checkable": control.checkable}, - {"focused": control.visualFocus}, - {"highlighted": control.highlighted}, - {"flat": control.flat}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/ToolSeparator.qml b/src/imports/controls/imagine/ToolSeparator.qml deleted file mode 100644 index 962c14c7..00000000 --- a/src/imports/controls/imagine/ToolSeparator.qml +++ /dev/null @@ -1,83 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.ToolSeparator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - contentItem: NinePatchImage { - source: Imagine.url + "toolseparator-separator" - NinePatchImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } - - background: NinePatchImage { - source: Imagine.url + "toolseparator-background" - NinePatchImageSelector on source { - states: [ - {"vertical": control.vertical}, - {"horizontal": control.horizontal}, - {"disabled": !control.enabled}, - {"mirrored": control.mirrored} - ] - } - } -} diff --git a/src/imports/controls/imagine/ToolTip.qml b/src/imports/controls/imagine/ToolTip.qml deleted file mode 100644 index f5261400..00000000 --- a/src/imports/controls/imagine/ToolTip.qml +++ /dev/null @@ -1,85 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.ToolTip { - id: control - - x: parent ? (parent.width - implicitWidth) / 2 : 0 - (background ? background.leftInset : 0) - y: -implicitHeight - (background ? background.topInset : 0) - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topMargin: background ? background.topInset : 0 - leftMargin: background ? background.leftInset : 0 - rightMargin: background ? background.rightInset : 0 - bottomMargin: background ? background.bottomInset : 0 - - topPadding: background ? background.topPadding : 0 - leftPadding: background ? background.leftPadding : 0 - rightPadding: background ? background.rightPadding : 0 - bottomPadding: background ? background.bottomPadding : 0 - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent - - contentItem: Text { - text: control.text - font: control.font - wrapMode: Text.Wrap - color: control.palette.toolTipText - } - - background: NinePatchImage { - source: Imagine.url + "tooltip-background" - NinePatchImageSelector on source { - states: [ - // ### - ] - } - } -} diff --git a/src/imports/controls/imagine/Tumbler.qml b/src/imports/controls/imagine/Tumbler.qml deleted file mode 100644 index f380a000..00000000 --- a/src/imports/controls/imagine/Tumbler.qml +++ /dev/null @@ -1,93 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Imagine -import QtQuick.Controls.Imagine.impl - -T.Tumbler { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topInset: background ? -background.topInset || 0 : 0 - leftInset: background ? -background.leftInset || 0 : 0 - rightInset: background ? -background.rightInset || 0 : 0 - bottomInset: background ? -background.bottomInset || 0 : 0 - - delegate: Text { - text: modelData - font: control.font - color: control.palette.text - opacity: (1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)) * (control.enabled ? 1 : 0.6) - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - } - - contentItem: TumblerView { - implicitWidth: 60 - implicitHeight: 200 - model: control.model - delegate: control.delegate - path: Path { - startX: control.contentItem.width / 2 - startY: -control.contentItem.delegateHeight / 2 - PathLine { - x: control.contentItem.width / 2 - y: (control.visibleItemCount + 1) * control.contentItem.delegateHeight - control.contentItem.delegateHeight / 2 - } - } - - property real delegateHeight: control.availableHeight / control.visibleItemCount - } - - background: NinePatchImage { - source: Imagine.url + "tumbler-background" - NinePatchImageSelector on source { - states: [ - {"disabled": !control.enabled}, - {"focused": control.visualFocus}, - {"mirrored": control.mirrored}, - {"hovered": control.hovered} - ] - } - } -} diff --git a/src/imports/controls/imagine/VerticalHeaderView.qml b/src/imports/controls/imagine/VerticalHeaderView.qml deleted file mode 100644 index 7c057e01..00000000 --- a/src/imports/controls/imagine/VerticalHeaderView.qml +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T - -T.VerticalHeaderView { - id: control - - implicitWidth: contentWidth - implicitHeight: syncView ? syncView.height : 0 - - delegate: Rectangle { - // Qt6: add cellPadding (and font etc) as public API in headerview - readonly property real cellPadding: 8 - - implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2)) - implicitHeight: text.implicitHeight + (cellPadding * 2) - color: "#f6f6f6" - border.color: "#e4e4e4" - - Text { - id: text - text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] - : model[control.textRole]) - : modelData - width: parent.width - height: parent.height - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: "#ff26282a" - } - } -} diff --git a/src/imports/controls/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/9-patch-export.js b/src/imports/controls/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/9-patch-export.js deleted file mode 100644 index a7f9a459..00000000 --- a/src/imports/controls/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/9-patch-export.js +++ /dev/null @@ -1,24 +0,0 @@ -// 9-patch export -// -// This plugin crops upscaled 9-patch PNG assets when exported from Sketch, -// to ensure that 9-patch borders remain 1px wide when upscaled. -// -function onExportSlices(context) { - var exports = context.actionContext.exports; - for (var i = 0; i < exports.count(); ++i) { - var name = exports[i].request.name(); - var scale = exports[i].request.scale(); - if (scale > 1 && name.endsWith(".9")) - cropAsset(exports[i].path, scale - 1); - } -} - -function cropAsset(path, inset) { - var url = NSURL.fileURLWithPath(path); - var img = CIImage.imageWithContentsOfURL(url); - var rect = NSInsetRect(img.extent(), inset, inset); - var cropped = img.imageByCroppingToRect(rect); - var rep = NSBitmapImageRep.alloc().initWithCIImage(cropped); - var data = rep.PNGRepresentationWithInterlaced(false); - data.writeToFile(path); -} diff --git a/src/imports/controls/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/manifest.json b/src/imports/controls/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/manifest.json deleted file mode 100644 index 40807aa3..00000000 --- a/src/imports/controls/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/manifest.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name" : "9-patch export", - "description" : "Crops upscaled 9-patch PNG assets when exported from Sketch.", - "version" : "0.1", - "identifier" : "org.qt-project.sketch.9-patch-export", - "author" : "The Qt Project", - "commands" : [ - { - "name" : "9-patch export", - "identifier" : "9-patch-export", - "script" : "9-patch-export.js", - "handlers" : { - "actions" : { - "ExportSlices": "onExportSlices", - }, - }, - }, - ], -} diff --git a/src/imports/controls/imagine/design/imagine.sketch b/src/imports/controls/imagine/design/imagine.sketch deleted file mode 100644 index f3535b37..00000000 Binary files a/src/imports/controls/imagine/design/imagine.sketch and /dev/null differ diff --git a/src/imports/controls/imagine/images/applicationwindow-background.png b/src/imports/controls/imagine/images/applicationwindow-background.png deleted file mode 100644 index 2d8d70f2..00000000 Binary files a/src/imports/controls/imagine/images/applicationwindow-background.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/applicationwindow-background@2x.png b/src/imports/controls/imagine/images/applicationwindow-background@2x.png deleted file mode 100644 index 18fbaa4c..00000000 Binary files a/src/imports/controls/imagine/images/applicationwindow-background@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/applicationwindow-background@3x.png b/src/imports/controls/imagine/images/applicationwindow-background@3x.png deleted file mode 100644 index 241232b1..00000000 Binary files a/src/imports/controls/imagine/images/applicationwindow-background@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/applicationwindow-background@4x.png b/src/imports/controls/imagine/images/applicationwindow-background@4x.png deleted file mode 100644 index 8eb1b1ec..00000000 Binary files a/src/imports/controls/imagine/images/applicationwindow-background@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/applicationwindow-overlay-modal.png b/src/imports/controls/imagine/images/applicationwindow-overlay-modal.png deleted file mode 100644 index d4a43d1c..00000000 Binary files a/src/imports/controls/imagine/images/applicationwindow-overlay-modal.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/applicationwindow-overlay-modal@2x.png b/src/imports/controls/imagine/images/applicationwindow-overlay-modal@2x.png deleted file mode 100644 index c9a8f412..00000000 Binary files a/src/imports/controls/imagine/images/applicationwindow-overlay-modal@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/applicationwindow-overlay-modal@3x.png b/src/imports/controls/imagine/images/applicationwindow-overlay-modal@3x.png deleted file mode 100644 index 4a1084a9..00000000 Binary files a/src/imports/controls/imagine/images/applicationwindow-overlay-modal@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/applicationwindow-overlay-modal@4x.png b/src/imports/controls/imagine/images/applicationwindow-overlay-modal@4x.png deleted file mode 100644 index b92e600d..00000000 Binary files a/src/imports/controls/imagine/images/applicationwindow-overlay-modal@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/applicationwindow-overlay.png b/src/imports/controls/imagine/images/applicationwindow-overlay.png deleted file mode 100644 index b7da23c0..00000000 Binary files a/src/imports/controls/imagine/images/applicationwindow-overlay.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/applicationwindow-overlay@2x.png b/src/imports/controls/imagine/images/applicationwindow-overlay@2x.png deleted file mode 100644 index 23828d5a..00000000 Binary files a/src/imports/controls/imagine/images/applicationwindow-overlay@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/applicationwindow-overlay@3x.png b/src/imports/controls/imagine/images/applicationwindow-overlay@3x.png deleted file mode 100644 index d9d53828..00000000 Binary files a/src/imports/controls/imagine/images/applicationwindow-overlay@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/applicationwindow-overlay@4x.png b/src/imports/controls/imagine/images/applicationwindow-overlay@4x.png deleted file mode 100644 index a76c1a3a..00000000 Binary files a/src/imports/controls/imagine/images/applicationwindow-overlay@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/busyindicator-animation.webp b/src/imports/controls/imagine/images/busyindicator-animation.webp deleted file mode 100644 index ebf04c4a..00000000 Binary files a/src/imports/controls/imagine/images/busyindicator-animation.webp and /dev/null differ diff --git a/src/imports/controls/imagine/images/busyindicator-animation@2x.webp b/src/imports/controls/imagine/images/busyindicator-animation@2x.webp deleted file mode 100644 index 43805a0b..00000000 Binary files a/src/imports/controls/imagine/images/busyindicator-animation@2x.webp and /dev/null differ diff --git a/src/imports/controls/imagine/images/busyindicator-animation@3x.webp b/src/imports/controls/imagine/images/busyindicator-animation@3x.webp deleted file mode 100644 index b700b81f..00000000 Binary files a/src/imports/controls/imagine/images/busyindicator-animation@3x.webp and /dev/null differ diff --git a/src/imports/controls/imagine/images/busyindicator-animation@4x.webp b/src/imports/controls/imagine/images/busyindicator-animation@4x.webp deleted file mode 100644 index bfaa8df9..00000000 Binary files a/src/imports/controls/imagine/images/busyindicator-animation@4x.webp and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-checked-disabled.9.png b/src/imports/controls/imagine/images/button-background-checked-disabled.9.png deleted file mode 100644 index 8196289c..00000000 Binary files a/src/imports/controls/imagine/images/button-background-checked-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-checked-disabled@2x.9.png b/src/imports/controls/imagine/images/button-background-checked-disabled@2x.9.png deleted file mode 100644 index 76cd4490..00000000 Binary files a/src/imports/controls/imagine/images/button-background-checked-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-checked-disabled@3x.9.png b/src/imports/controls/imagine/images/button-background-checked-disabled@3x.9.png deleted file mode 100644 index 8bd6259a..00000000 Binary files a/src/imports/controls/imagine/images/button-background-checked-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-checked-disabled@4x.9.png b/src/imports/controls/imagine/images/button-background-checked-disabled@4x.9.png deleted file mode 100644 index 3e081520..00000000 Binary files a/src/imports/controls/imagine/images/button-background-checked-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-checked-focused.9.png b/src/imports/controls/imagine/images/button-background-checked-focused.9.png deleted file mode 100644 index e3d14e99..00000000 Binary files a/src/imports/controls/imagine/images/button-background-checked-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-checked-focused@2x.9.png b/src/imports/controls/imagine/images/button-background-checked-focused@2x.9.png deleted file mode 100644 index ebc74b4a..00000000 Binary files a/src/imports/controls/imagine/images/button-background-checked-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-checked-focused@3x.9.png b/src/imports/controls/imagine/images/button-background-checked-focused@3x.9.png deleted file mode 100644 index 75834723..00000000 Binary files a/src/imports/controls/imagine/images/button-background-checked-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-checked-focused@4x.9.png b/src/imports/controls/imagine/images/button-background-checked-focused@4x.9.png deleted file mode 100644 index 9b570f4d..00000000 Binary files a/src/imports/controls/imagine/images/button-background-checked-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-checked-hovered.9.png b/src/imports/controls/imagine/images/button-background-checked-hovered.9.png deleted file mode 100644 index e3d14e99..00000000 Binary files a/src/imports/controls/imagine/images/button-background-checked-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-checked-hovered@2x.9.png b/src/imports/controls/imagine/images/button-background-checked-hovered@2x.9.png deleted file mode 100644 index ebc74b4a..00000000 Binary files a/src/imports/controls/imagine/images/button-background-checked-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-checked-hovered@3x.9.png b/src/imports/controls/imagine/images/button-background-checked-hovered@3x.9.png deleted file mode 100644 index 75834723..00000000 Binary files a/src/imports/controls/imagine/images/button-background-checked-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-checked-hovered@4x.9.png b/src/imports/controls/imagine/images/button-background-checked-hovered@4x.9.png deleted file mode 100644 index 9b570f4d..00000000 Binary files a/src/imports/controls/imagine/images/button-background-checked-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-checked.9.png b/src/imports/controls/imagine/images/button-background-checked.9.png deleted file mode 100644 index d0942509..00000000 Binary files a/src/imports/controls/imagine/images/button-background-checked.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-checked@2x.9.png b/src/imports/controls/imagine/images/button-background-checked@2x.9.png deleted file mode 100644 index c38bcd02..00000000 Binary files a/src/imports/controls/imagine/images/button-background-checked@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-checked@3x.9.png b/src/imports/controls/imagine/images/button-background-checked@3x.9.png deleted file mode 100644 index 80889bf8..00000000 Binary files a/src/imports/controls/imagine/images/button-background-checked@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-checked@4x.9.png b/src/imports/controls/imagine/images/button-background-checked@4x.9.png deleted file mode 100644 index 05de8377..00000000 Binary files a/src/imports/controls/imagine/images/button-background-checked@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-disabled.9.png b/src/imports/controls/imagine/images/button-background-disabled.9.png deleted file mode 100644 index 8196289c..00000000 Binary files a/src/imports/controls/imagine/images/button-background-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-disabled@2x.9.png b/src/imports/controls/imagine/images/button-background-disabled@2x.9.png deleted file mode 100644 index 76cd4490..00000000 Binary files a/src/imports/controls/imagine/images/button-background-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-disabled@3x.9.png b/src/imports/controls/imagine/images/button-background-disabled@3x.9.png deleted file mode 100644 index 8bd6259a..00000000 Binary files a/src/imports/controls/imagine/images/button-background-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-disabled@4x.9.png b/src/imports/controls/imagine/images/button-background-disabled@4x.9.png deleted file mode 100644 index 3e081520..00000000 Binary files a/src/imports/controls/imagine/images/button-background-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-checked-pressed.9.png b/src/imports/controls/imagine/images/button-background-flat-checked-pressed.9.png deleted file mode 100644 index 8196289c..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-checked-pressed.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-checked-pressed@2x.9.png b/src/imports/controls/imagine/images/button-background-flat-checked-pressed@2x.9.png deleted file mode 100644 index 76cd4490..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-checked-pressed@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-checked-pressed@3x.9.png b/src/imports/controls/imagine/images/button-background-flat-checked-pressed@3x.9.png deleted file mode 100644 index 8bd6259a..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-checked-pressed@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-checked-pressed@4x.9.png b/src/imports/controls/imagine/images/button-background-flat-checked-pressed@4x.9.png deleted file mode 100644 index 3e081520..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-checked-pressed@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-checked.9.png b/src/imports/controls/imagine/images/button-background-flat-checked.9.png deleted file mode 100644 index 8196289c..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-checked.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-checked@2x.9.png b/src/imports/controls/imagine/images/button-background-flat-checked@2x.9.png deleted file mode 100644 index 76cd4490..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-checked@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-checked@3x.9.png b/src/imports/controls/imagine/images/button-background-flat-checked@3x.9.png deleted file mode 100644 index 8bd6259a..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-checked@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-checked@4x.9.png b/src/imports/controls/imagine/images/button-background-flat-checked@4x.9.png deleted file mode 100644 index 3e081520..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-checked@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-disabled.9.png b/src/imports/controls/imagine/images/button-background-flat-disabled.9.png deleted file mode 100644 index 59907409..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-disabled@2x.9.png b/src/imports/controls/imagine/images/button-background-flat-disabled@2x.9.png deleted file mode 100644 index d66acd9c..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-disabled@3x.9.png b/src/imports/controls/imagine/images/button-background-flat-disabled@3x.9.png deleted file mode 100644 index 89b8c353..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-disabled@4x.9.png b/src/imports/controls/imagine/images/button-background-flat-disabled@4x.9.png deleted file mode 100644 index d3a675cf..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-highlighted-checked.9.png b/src/imports/controls/imagine/images/button-background-flat-highlighted-checked.9.png deleted file mode 100644 index 8196289c..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-highlighted-checked.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-highlighted-checked@2x.9.png b/src/imports/controls/imagine/images/button-background-flat-highlighted-checked@2x.9.png deleted file mode 100644 index 76cd4490..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-highlighted-checked@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-highlighted-checked@3x.9.png b/src/imports/controls/imagine/images/button-background-flat-highlighted-checked@3x.9.png deleted file mode 100644 index 8bd6259a..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-highlighted-checked@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-highlighted-checked@4x.9.png b/src/imports/controls/imagine/images/button-background-flat-highlighted-checked@4x.9.png deleted file mode 100644 index 3e081520..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-highlighted-checked@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-highlighted-pressed.9.png b/src/imports/controls/imagine/images/button-background-flat-highlighted-pressed.9.png deleted file mode 100644 index 8196289c..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-highlighted-pressed.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-highlighted-pressed@2x.9.png b/src/imports/controls/imagine/images/button-background-flat-highlighted-pressed@2x.9.png deleted file mode 100644 index 76cd4490..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-highlighted-pressed@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-highlighted-pressed@3x.9.png b/src/imports/controls/imagine/images/button-background-flat-highlighted-pressed@3x.9.png deleted file mode 100644 index 8bd6259a..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-highlighted-pressed@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-highlighted-pressed@4x.9.png b/src/imports/controls/imagine/images/button-background-flat-highlighted-pressed@4x.9.png deleted file mode 100644 index 3e081520..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-highlighted-pressed@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-highlighted.9.png b/src/imports/controls/imagine/images/button-background-flat-highlighted.9.png deleted file mode 100644 index 59907409..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-highlighted.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-highlighted@2x.9.png b/src/imports/controls/imagine/images/button-background-flat-highlighted@2x.9.png deleted file mode 100644 index d66acd9c..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-highlighted@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-highlighted@3x.9.png b/src/imports/controls/imagine/images/button-background-flat-highlighted@3x.9.png deleted file mode 100644 index 89b8c353..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-highlighted@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-highlighted@4x.9.png b/src/imports/controls/imagine/images/button-background-flat-highlighted@4x.9.png deleted file mode 100644 index d3a675cf..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-highlighted@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-hovered.9.png b/src/imports/controls/imagine/images/button-background-flat-hovered.9.png deleted file mode 100644 index 8196289c..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-hovered@2x.9.png b/src/imports/controls/imagine/images/button-background-flat-hovered@2x.9.png deleted file mode 100644 index 76cd4490..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-hovered@3x.9.png b/src/imports/controls/imagine/images/button-background-flat-hovered@3x.9.png deleted file mode 100644 index 8bd6259a..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-hovered@4x.9.png b/src/imports/controls/imagine/images/button-background-flat-hovered@4x.9.png deleted file mode 100644 index 3e081520..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-pressed.9.png b/src/imports/controls/imagine/images/button-background-flat-pressed.9.png deleted file mode 100644 index 8196289c..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-pressed.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-pressed@2x.9.png b/src/imports/controls/imagine/images/button-background-flat-pressed@2x.9.png deleted file mode 100644 index 76cd4490..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-pressed@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-pressed@3x.9.png b/src/imports/controls/imagine/images/button-background-flat-pressed@3x.9.png deleted file mode 100644 index 8bd6259a..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-pressed@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat-pressed@4x.9.png b/src/imports/controls/imagine/images/button-background-flat-pressed@4x.9.png deleted file mode 100644 index 3e081520..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat-pressed@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat.9.png b/src/imports/controls/imagine/images/button-background-flat.9.png deleted file mode 100644 index 59907409..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat@2x.9.png b/src/imports/controls/imagine/images/button-background-flat@2x.9.png deleted file mode 100644 index d66acd9c..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat@3x.9.png b/src/imports/controls/imagine/images/button-background-flat@3x.9.png deleted file mode 100644 index 89b8c353..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-flat@4x.9.png b/src/imports/controls/imagine/images/button-background-flat@4x.9.png deleted file mode 100644 index d3a675cf..00000000 Binary files a/src/imports/controls/imagine/images/button-background-flat@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-focused.9.png b/src/imports/controls/imagine/images/button-background-focused.9.png deleted file mode 100644 index 42e40e60..00000000 Binary files a/src/imports/controls/imagine/images/button-background-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-focused@2x.9.png b/src/imports/controls/imagine/images/button-background-focused@2x.9.png deleted file mode 100644 index 90dc70bf..00000000 Binary files a/src/imports/controls/imagine/images/button-background-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-focused@3x.9.png b/src/imports/controls/imagine/images/button-background-focused@3x.9.png deleted file mode 100644 index 2ed2340c..00000000 Binary files a/src/imports/controls/imagine/images/button-background-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-focused@4x.9.png b/src/imports/controls/imagine/images/button-background-focused@4x.9.png deleted file mode 100644 index e1428e37..00000000 Binary files a/src/imports/controls/imagine/images/button-background-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted-checked.9.png b/src/imports/controls/imagine/images/button-background-highlighted-checked.9.png deleted file mode 100644 index 7a2a4011..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted-checked.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted-checked@2x.9.png b/src/imports/controls/imagine/images/button-background-highlighted-checked@2x.9.png deleted file mode 100644 index 05b2f214..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted-checked@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted-checked@3x.9.png b/src/imports/controls/imagine/images/button-background-highlighted-checked@3x.9.png deleted file mode 100644 index 8c22e1f3..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted-checked@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted-checked@4x.9.png b/src/imports/controls/imagine/images/button-background-highlighted-checked@4x.9.png deleted file mode 100644 index c5617f0e..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted-checked@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted-disabled.9.png b/src/imports/controls/imagine/images/button-background-highlighted-disabled.9.png deleted file mode 100644 index 8196289c..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted-disabled@2x.9.png b/src/imports/controls/imagine/images/button-background-highlighted-disabled@2x.9.png deleted file mode 100644 index 76cd4490..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted-disabled@3x.9.png b/src/imports/controls/imagine/images/button-background-highlighted-disabled@3x.9.png deleted file mode 100644 index 8bd6259a..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted-disabled@4x.9.png b/src/imports/controls/imagine/images/button-background-highlighted-disabled@4x.9.png deleted file mode 100644 index 3e081520..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted-focused.9.png b/src/imports/controls/imagine/images/button-background-highlighted-focused.9.png deleted file mode 100644 index 3ea580e0..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted-focused@2x.9.png b/src/imports/controls/imagine/images/button-background-highlighted-focused@2x.9.png deleted file mode 100644 index effcce1f..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted-focused@3x.9.png b/src/imports/controls/imagine/images/button-background-highlighted-focused@3x.9.png deleted file mode 100644 index 502ac689..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted-focused@4x.9.png b/src/imports/controls/imagine/images/button-background-highlighted-focused@4x.9.png deleted file mode 100644 index 3243231e..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted-hovered.9.png b/src/imports/controls/imagine/images/button-background-highlighted-hovered.9.png deleted file mode 100644 index 3ea580e0..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted-hovered@2x.9.png b/src/imports/controls/imagine/images/button-background-highlighted-hovered@2x.9.png deleted file mode 100644 index effcce1f..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted-hovered@3x.9.png b/src/imports/controls/imagine/images/button-background-highlighted-hovered@3x.9.png deleted file mode 100644 index 502ac689..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted-hovered@4x.9.png b/src/imports/controls/imagine/images/button-background-highlighted-hovered@4x.9.png deleted file mode 100644 index 3243231e..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted-pressed.9.png b/src/imports/controls/imagine/images/button-background-highlighted-pressed.9.png deleted file mode 100644 index 7a2a4011..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted-pressed.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted-pressed@2x.9.png b/src/imports/controls/imagine/images/button-background-highlighted-pressed@2x.9.png deleted file mode 100644 index 05b2f214..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted-pressed@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted-pressed@3x.9.png b/src/imports/controls/imagine/images/button-background-highlighted-pressed@3x.9.png deleted file mode 100644 index 8c22e1f3..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted-pressed@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted-pressed@4x.9.png b/src/imports/controls/imagine/images/button-background-highlighted-pressed@4x.9.png deleted file mode 100644 index c5617f0e..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted-pressed@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted.9.png b/src/imports/controls/imagine/images/button-background-highlighted.9.png deleted file mode 100644 index 7761595f..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted@2x.9.png b/src/imports/controls/imagine/images/button-background-highlighted@2x.9.png deleted file mode 100644 index 8bb42c45..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted@3x.9.png b/src/imports/controls/imagine/images/button-background-highlighted@3x.9.png deleted file mode 100644 index 8c23c021..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-highlighted@4x.9.png b/src/imports/controls/imagine/images/button-background-highlighted@4x.9.png deleted file mode 100644 index 365cd048..00000000 Binary files a/src/imports/controls/imagine/images/button-background-highlighted@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-hovered.9.png b/src/imports/controls/imagine/images/button-background-hovered.9.png deleted file mode 100644 index 42e40e60..00000000 Binary files a/src/imports/controls/imagine/images/button-background-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-hovered@2x.9.png b/src/imports/controls/imagine/images/button-background-hovered@2x.9.png deleted file mode 100644 index 90dc70bf..00000000 Binary files a/src/imports/controls/imagine/images/button-background-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-hovered@3x.9.png b/src/imports/controls/imagine/images/button-background-hovered@3x.9.png deleted file mode 100644 index 2ed2340c..00000000 Binary files a/src/imports/controls/imagine/images/button-background-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-hovered@4x.9.png b/src/imports/controls/imagine/images/button-background-hovered@4x.9.png deleted file mode 100644 index e1428e37..00000000 Binary files a/src/imports/controls/imagine/images/button-background-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-pressed.9.png b/src/imports/controls/imagine/images/button-background-pressed.9.png deleted file mode 100644 index d0942509..00000000 Binary files a/src/imports/controls/imagine/images/button-background-pressed.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-pressed@2x.9.png b/src/imports/controls/imagine/images/button-background-pressed@2x.9.png deleted file mode 100644 index c38bcd02..00000000 Binary files a/src/imports/controls/imagine/images/button-background-pressed@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-pressed@3x.9.png b/src/imports/controls/imagine/images/button-background-pressed@3x.9.png deleted file mode 100644 index 80889bf8..00000000 Binary files a/src/imports/controls/imagine/images/button-background-pressed@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background-pressed@4x.9.png b/src/imports/controls/imagine/images/button-background-pressed@4x.9.png deleted file mode 100644 index 05de8377..00000000 Binary files a/src/imports/controls/imagine/images/button-background-pressed@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background.9.png b/src/imports/controls/imagine/images/button-background.9.png deleted file mode 100644 index 6f1daed8..00000000 Binary files a/src/imports/controls/imagine/images/button-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background@2x.9.png b/src/imports/controls/imagine/images/button-background@2x.9.png deleted file mode 100644 index 4a2507f5..00000000 Binary files a/src/imports/controls/imagine/images/button-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background@3x.9.png b/src/imports/controls/imagine/images/button-background@3x.9.png deleted file mode 100644 index 4f13b4ef..00000000 Binary files a/src/imports/controls/imagine/images/button-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/button-background@4x.9.png b/src/imports/controls/imagine/images/button-background@4x.9.png deleted file mode 100644 index 0e1ab452..00000000 Binary files a/src/imports/controls/imagine/images/button-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-checked-focused.png b/src/imports/controls/imagine/images/checkbox-indicator-checked-focused.png deleted file mode 100644 index d55a5204..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-checked-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-checked-focused@2x.png b/src/imports/controls/imagine/images/checkbox-indicator-checked-focused@2x.png deleted file mode 100644 index 7289f639..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-checked-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-checked-focused@3x.png b/src/imports/controls/imagine/images/checkbox-indicator-checked-focused@3x.png deleted file mode 100644 index 02d6cdf2..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-checked-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-checked-focused@4x.png b/src/imports/controls/imagine/images/checkbox-indicator-checked-focused@4x.png deleted file mode 100644 index 3f074dbf..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-checked-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-checked-hovered.png b/src/imports/controls/imagine/images/checkbox-indicator-checked-hovered.png deleted file mode 100644 index d55a5204..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-checked-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-checked-hovered@2x.png b/src/imports/controls/imagine/images/checkbox-indicator-checked-hovered@2x.png deleted file mode 100644 index 7289f639..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-checked-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-checked-hovered@3x.png b/src/imports/controls/imagine/images/checkbox-indicator-checked-hovered@3x.png deleted file mode 100644 index 02d6cdf2..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-checked-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-checked-hovered@4x.png b/src/imports/controls/imagine/images/checkbox-indicator-checked-hovered@4x.png deleted file mode 100644 index 3f074dbf..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-checked-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-checked-pressed.png b/src/imports/controls/imagine/images/checkbox-indicator-checked-pressed.png deleted file mode 100644 index 9c03d096..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-checked-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-checked-pressed@2x.png b/src/imports/controls/imagine/images/checkbox-indicator-checked-pressed@2x.png deleted file mode 100644 index 680ba3ef..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-checked-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-checked-pressed@3x.png b/src/imports/controls/imagine/images/checkbox-indicator-checked-pressed@3x.png deleted file mode 100644 index 974205de..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-checked-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-checked-pressed@4x.png b/src/imports/controls/imagine/images/checkbox-indicator-checked-pressed@4x.png deleted file mode 100644 index 2c8b6aab..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-checked-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-checked.png b/src/imports/controls/imagine/images/checkbox-indicator-checked.png deleted file mode 100644 index 598b163a..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-checked.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-checked@2x.png b/src/imports/controls/imagine/images/checkbox-indicator-checked@2x.png deleted file mode 100644 index 06382264..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-checked@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-checked@3x.png b/src/imports/controls/imagine/images/checkbox-indicator-checked@3x.png deleted file mode 100644 index 12a32dcd..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-checked@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-checked@4x.png b/src/imports/controls/imagine/images/checkbox-indicator-checked@4x.png deleted file mode 100644 index 4bc6701d..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-checked@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-disabled.png b/src/imports/controls/imagine/images/checkbox-indicator-disabled.png deleted file mode 100644 index 0a499f8f..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-disabled@2x.png b/src/imports/controls/imagine/images/checkbox-indicator-disabled@2x.png deleted file mode 100644 index db652c5a..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-disabled@3x.png b/src/imports/controls/imagine/images/checkbox-indicator-disabled@3x.png deleted file mode 100644 index 482f045d..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-disabled@4x.png b/src/imports/controls/imagine/images/checkbox-indicator-disabled@4x.png deleted file mode 100644 index a386e272..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-focused.png b/src/imports/controls/imagine/images/checkbox-indicator-focused.png deleted file mode 100644 index c5eb8527..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-focused@2x.png b/src/imports/controls/imagine/images/checkbox-indicator-focused@2x.png deleted file mode 100644 index 8496fb1a..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-focused@3x.png b/src/imports/controls/imagine/images/checkbox-indicator-focused@3x.png deleted file mode 100644 index 30849fd0..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-focused@4x.png b/src/imports/controls/imagine/images/checkbox-indicator-focused@4x.png deleted file mode 100644 index 55ce7c0c..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-hovered.png b/src/imports/controls/imagine/images/checkbox-indicator-hovered.png deleted file mode 100644 index c5eb8527..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-hovered@2x.png b/src/imports/controls/imagine/images/checkbox-indicator-hovered@2x.png deleted file mode 100644 index 8496fb1a..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-hovered@3x.png b/src/imports/controls/imagine/images/checkbox-indicator-hovered@3x.png deleted file mode 100644 index 30849fd0..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-hovered@4x.png b/src/imports/controls/imagine/images/checkbox-indicator-hovered@4x.png deleted file mode 100644 index 55ce7c0c..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-focused.png b/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-focused.png deleted file mode 100644 index cd07b1cc..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-focused@2x.png b/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-focused@2x.png deleted file mode 100644 index acae6aff..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-focused@3x.png b/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-focused@3x.png deleted file mode 100644 index 1e8d2c45..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-focused@4x.png b/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-focused@4x.png deleted file mode 100644 index 577017c4..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-hovered.png b/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-hovered.png deleted file mode 100644 index cd07b1cc..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-hovered@2x.png b/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-hovered@2x.png deleted file mode 100644 index acae6aff..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-hovered@3x.png b/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-hovered@3x.png deleted file mode 100644 index 1e8d2c45..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-hovered@4x.png b/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-hovered@4x.png deleted file mode 100644 index 577017c4..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-pressed.png b/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-pressed.png deleted file mode 100644 index 928706ab..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-pressed@2x.png b/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-pressed@2x.png deleted file mode 100644 index 3645d78a..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-pressed@3x.png b/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-pressed@3x.png deleted file mode 100644 index ade63bd0..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-pressed@4x.png b/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-pressed@4x.png deleted file mode 100644 index cd73617e..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked.png b/src/imports/controls/imagine/images/checkbox-indicator-partially-checked.png deleted file mode 100644 index e404a4e3..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked@2x.png b/src/imports/controls/imagine/images/checkbox-indicator-partially-checked@2x.png deleted file mode 100644 index 2d0f5176..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked@3x.png b/src/imports/controls/imagine/images/checkbox-indicator-partially-checked@3x.png deleted file mode 100644 index 4b9777b7..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked@4x.png b/src/imports/controls/imagine/images/checkbox-indicator-partially-checked@4x.png deleted file mode 100644 index e0f67e98..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-partially-checked@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-pressed.png b/src/imports/controls/imagine/images/checkbox-indicator-pressed.png deleted file mode 100644 index a1baaf90..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-pressed@2x.png b/src/imports/controls/imagine/images/checkbox-indicator-pressed@2x.png deleted file mode 100644 index 81a7c364..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-pressed@3x.png b/src/imports/controls/imagine/images/checkbox-indicator-pressed@3x.png deleted file mode 100644 index 9325de38..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator-pressed@4x.png b/src/imports/controls/imagine/images/checkbox-indicator-pressed@4x.png deleted file mode 100644 index c93b8fb8..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator.png b/src/imports/controls/imagine/images/checkbox-indicator.png deleted file mode 100644 index 2b3e2323..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator@2x.png b/src/imports/controls/imagine/images/checkbox-indicator@2x.png deleted file mode 100644 index ce8985db..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator@3x.png b/src/imports/controls/imagine/images/checkbox-indicator@3x.png deleted file mode 100644 index 2968731d..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkbox-indicator@4x.png b/src/imports/controls/imagine/images/checkbox-indicator@4x.png deleted file mode 100644 index ea8da284..00000000 Binary files a/src/imports/controls/imagine/images/checkbox-indicator@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background-disabled.9.png b/src/imports/controls/imagine/images/checkdelegate-background-disabled.9.png deleted file mode 100644 index 23570729..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background-disabled@2x.9.png b/src/imports/controls/imagine/images/checkdelegate-background-disabled@2x.9.png deleted file mode 100644 index c7abb65c..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background-disabled@3x.9.png b/src/imports/controls/imagine/images/checkdelegate-background-disabled@3x.9.png deleted file mode 100644 index 46b84d7d..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background-disabled@4x.9.png b/src/imports/controls/imagine/images/checkdelegate-background-disabled@4x.9.png deleted file mode 100644 index f4dfd338..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background-focused.9.png b/src/imports/controls/imagine/images/checkdelegate-background-focused.9.png deleted file mode 100644 index 6ae574d5..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background-focused@2x.9.png b/src/imports/controls/imagine/images/checkdelegate-background-focused@2x.9.png deleted file mode 100644 index 6b61562c..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background-focused@3x.9.png b/src/imports/controls/imagine/images/checkdelegate-background-focused@3x.9.png deleted file mode 100644 index e46c0bf1..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background-focused@4x.9.png b/src/imports/controls/imagine/images/checkdelegate-background-focused@4x.9.png deleted file mode 100644 index 010444e8..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background-highlighted.9.png b/src/imports/controls/imagine/images/checkdelegate-background-highlighted.9.png deleted file mode 100644 index e79d8e1d..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background-highlighted.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background-highlighted@2x.9.png b/src/imports/controls/imagine/images/checkdelegate-background-highlighted@2x.9.png deleted file mode 100644 index ea68d35f..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background-highlighted@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background-highlighted@3x.9.png b/src/imports/controls/imagine/images/checkdelegate-background-highlighted@3x.9.png deleted file mode 100644 index 6d610415..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background-highlighted@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background-highlighted@4x.9.png b/src/imports/controls/imagine/images/checkdelegate-background-highlighted@4x.9.png deleted file mode 100644 index 590cca96..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background-highlighted@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background-hovered.9.png b/src/imports/controls/imagine/images/checkdelegate-background-hovered.9.png deleted file mode 100644 index b8749743..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background-hovered@2x.9.png b/src/imports/controls/imagine/images/checkdelegate-background-hovered@2x.9.png deleted file mode 100644 index 5a136a0c..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background-hovered@3x.9.png b/src/imports/controls/imagine/images/checkdelegate-background-hovered@3x.9.png deleted file mode 100644 index f47a366b..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background-hovered@4x.9.png b/src/imports/controls/imagine/images/checkdelegate-background-hovered@4x.9.png deleted file mode 100644 index 9ecb680f..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background-pressed.9.png b/src/imports/controls/imagine/images/checkdelegate-background-pressed.9.png deleted file mode 100644 index 6ae574d5..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background-pressed.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background-pressed@2x.9.png b/src/imports/controls/imagine/images/checkdelegate-background-pressed@2x.9.png deleted file mode 100644 index 6b61562c..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background-pressed@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background-pressed@3x.9.png b/src/imports/controls/imagine/images/checkdelegate-background-pressed@3x.9.png deleted file mode 100644 index e46c0bf1..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background-pressed@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background-pressed@4x.9.png b/src/imports/controls/imagine/images/checkdelegate-background-pressed@4x.9.png deleted file mode 100644 index 010444e8..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background-pressed@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background.9.png b/src/imports/controls/imagine/images/checkdelegate-background.9.png deleted file mode 100644 index b8749743..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background@2x.9.png b/src/imports/controls/imagine/images/checkdelegate-background@2x.9.png deleted file mode 100644 index 5a136a0c..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background@3x.9.png b/src/imports/controls/imagine/images/checkdelegate-background@3x.9.png deleted file mode 100644 index f47a366b..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-background@4x.9.png b/src/imports/controls/imagine/images/checkdelegate-background@4x.9.png deleted file mode 100644 index 9ecb680f..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-focused.png b/src/imports/controls/imagine/images/checkdelegate-indicator-checked-focused.png deleted file mode 100644 index d55a5204..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-focused@2x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-checked-focused@2x.png deleted file mode 100644 index 7289f639..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-focused@3x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-checked-focused@3x.png deleted file mode 100644 index 02d6cdf2..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-focused@4x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-checked-focused@4x.png deleted file mode 100644 index 3f074dbf..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-hovered.png b/src/imports/controls/imagine/images/checkdelegate-indicator-checked-hovered.png deleted file mode 100644 index d55a5204..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-hovered@2x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-checked-hovered@2x.png deleted file mode 100644 index 7289f639..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-hovered@3x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-checked-hovered@3x.png deleted file mode 100644 index 02d6cdf2..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-hovered@4x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-checked-hovered@4x.png deleted file mode 100644 index 3f074dbf..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-pressed.png b/src/imports/controls/imagine/images/checkdelegate-indicator-checked-pressed.png deleted file mode 100644 index 9c03d096..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-pressed@2x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-checked-pressed@2x.png deleted file mode 100644 index 680ba3ef..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-pressed@3x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-checked-pressed@3x.png deleted file mode 100644 index 974205de..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-pressed@4x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-checked-pressed@4x.png deleted file mode 100644 index 2c8b6aab..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-checked-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-checked.png b/src/imports/controls/imagine/images/checkdelegate-indicator-checked.png deleted file mode 100644 index 598b163a..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-checked.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-checked@2x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-checked@2x.png deleted file mode 100644 index 06382264..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-checked@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-checked@3x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-checked@3x.png deleted file mode 100644 index 12a32dcd..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-checked@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-checked@4x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-checked@4x.png deleted file mode 100644 index 4bc6701d..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-checked@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-disabled.png b/src/imports/controls/imagine/images/checkdelegate-indicator-disabled.png deleted file mode 100644 index 0a499f8f..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-disabled@2x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-disabled@2x.png deleted file mode 100644 index db652c5a..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-disabled@3x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-disabled@3x.png deleted file mode 100644 index 482f045d..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-disabled@4x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-disabled@4x.png deleted file mode 100644 index a386e272..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-focused.png b/src/imports/controls/imagine/images/checkdelegate-indicator-focused.png deleted file mode 100644 index c5eb8527..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-focused@2x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-focused@2x.png deleted file mode 100644 index 8496fb1a..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-focused@3x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-focused@3x.png deleted file mode 100644 index 30849fd0..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-focused@4x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-focused@4x.png deleted file mode 100644 index 55ce7c0c..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-hovered.png b/src/imports/controls/imagine/images/checkdelegate-indicator-hovered.png deleted file mode 100644 index c5eb8527..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-hovered@2x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-hovered@2x.png deleted file mode 100644 index 8496fb1a..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-hovered@3x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-hovered@3x.png deleted file mode 100644 index 30849fd0..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-hovered@4x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-hovered@4x.png deleted file mode 100644 index 55ce7c0c..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-focused.png b/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-focused.png deleted file mode 100644 index cd07b1cc..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-focused@2x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-focused@2x.png deleted file mode 100644 index acae6aff..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-focused@3x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-focused@3x.png deleted file mode 100644 index 1e8d2c45..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-focused@4x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-focused@4x.png deleted file mode 100644 index 577017c4..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-hovered.png b/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-hovered.png deleted file mode 100644 index cd07b1cc..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-hovered@2x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-hovered@2x.png deleted file mode 100644 index acae6aff..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-hovered@3x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-hovered@3x.png deleted file mode 100644 index 1e8d2c45..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-hovered@4x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-hovered@4x.png deleted file mode 100644 index 577017c4..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-pressed.png b/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-pressed.png deleted file mode 100644 index 928706ab..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-pressed@2x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-pressed@2x.png deleted file mode 100644 index 3645d78a..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-pressed@3x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-pressed@3x.png deleted file mode 100644 index ade63bd0..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-pressed@4x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-pressed@4x.png deleted file mode 100644 index cd73617e..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked.png b/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked.png deleted file mode 100644 index e404a4e3..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked@2x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked@2x.png deleted file mode 100644 index 2d0f5176..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked@3x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked@3x.png deleted file mode 100644 index 4b9777b7..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked@4x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked@4x.png deleted file mode 100644 index e0f67e98..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-partially-checked@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-pressed.png b/src/imports/controls/imagine/images/checkdelegate-indicator-pressed.png deleted file mode 100644 index a1baaf90..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-pressed@2x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-pressed@2x.png deleted file mode 100644 index 81a7c364..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-pressed@3x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-pressed@3x.png deleted file mode 100644 index 9325de38..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator-pressed@4x.png b/src/imports/controls/imagine/images/checkdelegate-indicator-pressed@4x.png deleted file mode 100644 index c93b8fb8..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator.png b/src/imports/controls/imagine/images/checkdelegate-indicator.png deleted file mode 100644 index 2b3e2323..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator@2x.png b/src/imports/controls/imagine/images/checkdelegate-indicator@2x.png deleted file mode 100644 index ce8985db..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator@3x.png b/src/imports/controls/imagine/images/checkdelegate-indicator@3x.png deleted file mode 100644 index 2968731d..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/checkdelegate-indicator@4x.png b/src/imports/controls/imagine/images/checkdelegate-indicator@4x.png deleted file mode 100644 index ea8da284..00000000 Binary files a/src/imports/controls/imagine/images/checkdelegate-indicator@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-disabled.9.png b/src/imports/controls/imagine/images/combobox-background-disabled.9.png deleted file mode 100644 index a91b4b55..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-disabled@2x.9.png b/src/imports/controls/imagine/images/combobox-background-disabled@2x.9.png deleted file mode 100644 index 570b990c..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-disabled@3x.9.png b/src/imports/controls/imagine/images/combobox-background-disabled@3x.9.png deleted file mode 100644 index b0f9b9c4..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-disabled@4x.9.png b/src/imports/controls/imagine/images/combobox-background-disabled@4x.9.png deleted file mode 100644 index 6e810f75..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-editable-disabled.9.png b/src/imports/controls/imagine/images/combobox-background-editable-disabled.9.png deleted file mode 100644 index e192afb8..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-editable-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-editable-disabled@2x.9.png b/src/imports/controls/imagine/images/combobox-background-editable-disabled@2x.9.png deleted file mode 100644 index 58a0f6e9..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-editable-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-editable-disabled@3x.9.png b/src/imports/controls/imagine/images/combobox-background-editable-disabled@3x.9.png deleted file mode 100644 index cd6f226b..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-editable-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-editable-disabled@4x.9.png b/src/imports/controls/imagine/images/combobox-background-editable-disabled@4x.9.png deleted file mode 100644 index ff9103b0..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-editable-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-editable-focused.9.png b/src/imports/controls/imagine/images/combobox-background-editable-focused.9.png deleted file mode 100644 index a0f079bc..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-editable-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-editable-focused@2x.9.png b/src/imports/controls/imagine/images/combobox-background-editable-focused@2x.9.png deleted file mode 100644 index 83cb503f..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-editable-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-editable-focused@3x.9.png b/src/imports/controls/imagine/images/combobox-background-editable-focused@3x.9.png deleted file mode 100644 index 4cf96edf..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-editable-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-editable-focused@4x.9.png b/src/imports/controls/imagine/images/combobox-background-editable-focused@4x.9.png deleted file mode 100644 index 5823de80..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-editable-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-editable.9.png b/src/imports/controls/imagine/images/combobox-background-editable.9.png deleted file mode 100644 index 8edac132..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-editable.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-editable@2x.9.png b/src/imports/controls/imagine/images/combobox-background-editable@2x.9.png deleted file mode 100644 index 15e465f1..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-editable@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-editable@3x.9.png b/src/imports/controls/imagine/images/combobox-background-editable@3x.9.png deleted file mode 100644 index 910b48d2..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-editable@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-editable@4x.9.png b/src/imports/controls/imagine/images/combobox-background-editable@4x.9.png deleted file mode 100644 index ff0f6411..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-editable@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-focused.9.png b/src/imports/controls/imagine/images/combobox-background-focused.9.png deleted file mode 100644 index a3865fa6..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-focused@2x.9.png b/src/imports/controls/imagine/images/combobox-background-focused@2x.9.png deleted file mode 100644 index fc49f4b8..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-focused@3x.9.png b/src/imports/controls/imagine/images/combobox-background-focused@3x.9.png deleted file mode 100644 index b432b4ec..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-focused@4x.9.png b/src/imports/controls/imagine/images/combobox-background-focused@4x.9.png deleted file mode 100644 index 15862059..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-hovered.9.png b/src/imports/controls/imagine/images/combobox-background-hovered.9.png deleted file mode 100644 index a3865fa6..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-hovered@2x.9.png b/src/imports/controls/imagine/images/combobox-background-hovered@2x.9.png deleted file mode 100644 index fc49f4b8..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-hovered@3x.9.png b/src/imports/controls/imagine/images/combobox-background-hovered@3x.9.png deleted file mode 100644 index b432b4ec..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-hovered@4x.9.png b/src/imports/controls/imagine/images/combobox-background-hovered@4x.9.png deleted file mode 100644 index 15862059..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-open.9.png b/src/imports/controls/imagine/images/combobox-background-open.9.png deleted file mode 100644 index 1be84403..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-open.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-open@2x.9.png b/src/imports/controls/imagine/images/combobox-background-open@2x.9.png deleted file mode 100644 index 95f7cd6d..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-open@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-open@3x.9.png b/src/imports/controls/imagine/images/combobox-background-open@3x.9.png deleted file mode 100644 index 2f71271c..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-open@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-open@4x.9.png b/src/imports/controls/imagine/images/combobox-background-open@4x.9.png deleted file mode 100644 index 17f6f2ce..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-open@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-pressed.9.png b/src/imports/controls/imagine/images/combobox-background-pressed.9.png deleted file mode 100644 index 1be84403..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-pressed.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-pressed@2x.9.png b/src/imports/controls/imagine/images/combobox-background-pressed@2x.9.png deleted file mode 100644 index 95f7cd6d..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-pressed@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-pressed@3x.9.png b/src/imports/controls/imagine/images/combobox-background-pressed@3x.9.png deleted file mode 100644 index 2f71271c..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-pressed@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background-pressed@4x.9.png b/src/imports/controls/imagine/images/combobox-background-pressed@4x.9.png deleted file mode 100644 index 17f6f2ce..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background-pressed@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background.9.png b/src/imports/controls/imagine/images/combobox-background.9.png deleted file mode 100644 index 4ed8ddc3..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background@2x.9.png b/src/imports/controls/imagine/images/combobox-background@2x.9.png deleted file mode 100644 index 1d7a8894..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background@3x.9.png b/src/imports/controls/imagine/images/combobox-background@3x.9.png deleted file mode 100644 index 313630f8..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-background@4x.9.png b/src/imports/controls/imagine/images/combobox-background@4x.9.png deleted file mode 100644 index be63d56e..00000000 Binary files a/src/imports/controls/imagine/images/combobox-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator-disabled.png b/src/imports/controls/imagine/images/combobox-indicator-disabled.png deleted file mode 100644 index 761537f9..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator-disabled@2x.png b/src/imports/controls/imagine/images/combobox-indicator-disabled@2x.png deleted file mode 100644 index 322b7b68..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator-disabled@3x.png b/src/imports/controls/imagine/images/combobox-indicator-disabled@3x.png deleted file mode 100644 index 73feec34..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator-disabled@4x.png b/src/imports/controls/imagine/images/combobox-indicator-disabled@4x.png deleted file mode 100644 index 910c4d3d..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator-editable-disabled.png b/src/imports/controls/imagine/images/combobox-indicator-editable-disabled.png deleted file mode 100644 index 4399b6aa..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator-editable-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator-editable-disabled@2x.png b/src/imports/controls/imagine/images/combobox-indicator-editable-disabled@2x.png deleted file mode 100644 index e45a2ad1..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator-editable-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator-editable-disabled@3x.png b/src/imports/controls/imagine/images/combobox-indicator-editable-disabled@3x.png deleted file mode 100644 index 23f74b10..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator-editable-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator-editable-disabled@4x.png b/src/imports/controls/imagine/images/combobox-indicator-editable-disabled@4x.png deleted file mode 100644 index db495899..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator-editable-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored-disabled.png b/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored-disabled.png deleted file mode 100644 index 2e954ae9..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored-disabled@2x.png b/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored-disabled@2x.png deleted file mode 100644 index 252a5e37..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored-disabled@3x.png b/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored-disabled@3x.png deleted file mode 100644 index 6d939a93..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored-disabled@4x.png b/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored-disabled@4x.png deleted file mode 100644 index 00a21ebd..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored.png b/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored.png deleted file mode 100644 index ad529912..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored@2x.png b/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored@2x.png deleted file mode 100644 index 70b995c1..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored@3x.png b/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored@3x.png deleted file mode 100644 index 9b865377..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored@4x.png b/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored@4x.png deleted file mode 100644 index b4f7ae25..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator-editable-mirrored@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator-editable.png b/src/imports/controls/imagine/images/combobox-indicator-editable.png deleted file mode 100644 index e053109f..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator-editable.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator-editable@2x.png b/src/imports/controls/imagine/images/combobox-indicator-editable@2x.png deleted file mode 100644 index b8dfd6fe..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator-editable@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator-editable@3x.png b/src/imports/controls/imagine/images/combobox-indicator-editable@3x.png deleted file mode 100644 index 2cdee7a8..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator-editable@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator-editable@4x.png b/src/imports/controls/imagine/images/combobox-indicator-editable@4x.png deleted file mode 100644 index 2569b4ae..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator-editable@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator.png b/src/imports/controls/imagine/images/combobox-indicator.png deleted file mode 100644 index cc32f2a2..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator@2x.png b/src/imports/controls/imagine/images/combobox-indicator@2x.png deleted file mode 100644 index 57ea3f30..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator@3x.png b/src/imports/controls/imagine/images/combobox-indicator@3x.png deleted file mode 100644 index 384f8152..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-indicator@4x.png b/src/imports/controls/imagine/images/combobox-indicator@4x.png deleted file mode 100644 index f326c03b..00000000 Binary files a/src/imports/controls/imagine/images/combobox-indicator@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-popup.9.png b/src/imports/controls/imagine/images/combobox-popup.9.png deleted file mode 100644 index 7344cdf6..00000000 Binary files a/src/imports/controls/imagine/images/combobox-popup.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-popup@2x.9.png b/src/imports/controls/imagine/images/combobox-popup@2x.9.png deleted file mode 100644 index 00c88c7d..00000000 Binary files a/src/imports/controls/imagine/images/combobox-popup@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-popup@3x.9.png b/src/imports/controls/imagine/images/combobox-popup@3x.9.png deleted file mode 100644 index 82d911ed..00000000 Binary files a/src/imports/controls/imagine/images/combobox-popup@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/combobox-popup@4x.9.png b/src/imports/controls/imagine/images/combobox-popup@4x.9.png deleted file mode 100644 index 98db30af..00000000 Binary files a/src/imports/controls/imagine/images/combobox-popup@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-checked-focused.9.png b/src/imports/controls/imagine/images/delaybutton-background-checked-focused.9.png deleted file mode 100644 index e3d14e99..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-checked-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-checked-focused@2x.9.png b/src/imports/controls/imagine/images/delaybutton-background-checked-focused@2x.9.png deleted file mode 100644 index ebc74b4a..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-checked-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-checked-focused@3x.9.png b/src/imports/controls/imagine/images/delaybutton-background-checked-focused@3x.9.png deleted file mode 100644 index 75834723..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-checked-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-checked-focused@4x.9.png b/src/imports/controls/imagine/images/delaybutton-background-checked-focused@4x.9.png deleted file mode 100644 index 9b570f4d..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-checked-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-checked-hovered.9.png b/src/imports/controls/imagine/images/delaybutton-background-checked-hovered.9.png deleted file mode 100644 index e3d14e99..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-checked-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-checked-hovered@2x.9.png b/src/imports/controls/imagine/images/delaybutton-background-checked-hovered@2x.9.png deleted file mode 100644 index ebc74b4a..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-checked-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-checked-hovered@3x.9.png b/src/imports/controls/imagine/images/delaybutton-background-checked-hovered@3x.9.png deleted file mode 100644 index 75834723..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-checked-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-checked-hovered@4x.9.png b/src/imports/controls/imagine/images/delaybutton-background-checked-hovered@4x.9.png deleted file mode 100644 index 9b570f4d..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-checked-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-checked.9.png b/src/imports/controls/imagine/images/delaybutton-background-checked.9.png deleted file mode 100644 index d0942509..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-checked.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-checked@2x.9.png b/src/imports/controls/imagine/images/delaybutton-background-checked@2x.9.png deleted file mode 100644 index c38bcd02..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-checked@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-checked@3x.9.png b/src/imports/controls/imagine/images/delaybutton-background-checked@3x.9.png deleted file mode 100644 index 80889bf8..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-checked@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-checked@4x.9.png b/src/imports/controls/imagine/images/delaybutton-background-checked@4x.9.png deleted file mode 100644 index 05de8377..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-checked@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-disabled-checked.9.png b/src/imports/controls/imagine/images/delaybutton-background-disabled-checked.9.png deleted file mode 100644 index 8196289c..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-disabled-checked.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-disabled-checked@2x.9.png b/src/imports/controls/imagine/images/delaybutton-background-disabled-checked@2x.9.png deleted file mode 100644 index 76cd4490..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-disabled-checked@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-disabled-checked@3x.9.png b/src/imports/controls/imagine/images/delaybutton-background-disabled-checked@3x.9.png deleted file mode 100644 index 8bd6259a..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-disabled-checked@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-disabled-checked@4x.9.png b/src/imports/controls/imagine/images/delaybutton-background-disabled-checked@4x.9.png deleted file mode 100644 index 3e081520..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-disabled-checked@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-disabled.9.png b/src/imports/controls/imagine/images/delaybutton-background-disabled.9.png deleted file mode 100644 index 8196289c..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-disabled@2x.9.png b/src/imports/controls/imagine/images/delaybutton-background-disabled@2x.9.png deleted file mode 100644 index 76cd4490..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-disabled@3x.9.png b/src/imports/controls/imagine/images/delaybutton-background-disabled@3x.9.png deleted file mode 100644 index 8bd6259a..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-disabled@4x.9.png b/src/imports/controls/imagine/images/delaybutton-background-disabled@4x.9.png deleted file mode 100644 index 3e081520..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-focused.9.png b/src/imports/controls/imagine/images/delaybutton-background-focused.9.png deleted file mode 100644 index 294ff8bd..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-focused@2x.9.png b/src/imports/controls/imagine/images/delaybutton-background-focused@2x.9.png deleted file mode 100644 index 48e2bbcb..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-focused@3x.9.png b/src/imports/controls/imagine/images/delaybutton-background-focused@3x.9.png deleted file mode 100644 index 0981eb2a..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-focused@4x.9.png b/src/imports/controls/imagine/images/delaybutton-background-focused@4x.9.png deleted file mode 100644 index 4ae48bfa..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-hovered.9.png b/src/imports/controls/imagine/images/delaybutton-background-hovered.9.png deleted file mode 100644 index 42e40e60..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-hovered@2x.9.png b/src/imports/controls/imagine/images/delaybutton-background-hovered@2x.9.png deleted file mode 100644 index 90dc70bf..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-hovered@3x.9.png b/src/imports/controls/imagine/images/delaybutton-background-hovered@3x.9.png deleted file mode 100644 index 2ed2340c..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-hovered@4x.9.png b/src/imports/controls/imagine/images/delaybutton-background-hovered@4x.9.png deleted file mode 100644 index e1428e37..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-pressed.9.png b/src/imports/controls/imagine/images/delaybutton-background-pressed.9.png deleted file mode 100644 index d0942509..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-pressed.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-pressed@2x.9.png b/src/imports/controls/imagine/images/delaybutton-background-pressed@2x.9.png deleted file mode 100644 index c38bcd02..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-pressed@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-pressed@3x.9.png b/src/imports/controls/imagine/images/delaybutton-background-pressed@3x.9.png deleted file mode 100644 index 80889bf8..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-pressed@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background-pressed@4x.9.png b/src/imports/controls/imagine/images/delaybutton-background-pressed@4x.9.png deleted file mode 100644 index 05de8377..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background-pressed@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background.9.png b/src/imports/controls/imagine/images/delaybutton-background.9.png deleted file mode 100644 index 6f1daed8..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background@2x.9.png b/src/imports/controls/imagine/images/delaybutton-background@2x.9.png deleted file mode 100644 index 4a2507f5..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background@3x.9.png b/src/imports/controls/imagine/images/delaybutton-background@3x.9.png deleted file mode 100644 index 4f13b4ef..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-background@4x.9.png b/src/imports/controls/imagine/images/delaybutton-background@4x.9.png deleted file mode 100644 index 0e1ab452..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-mask.9.png b/src/imports/controls/imagine/images/delaybutton-mask.9.png deleted file mode 100644 index 76d3967d..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-mask.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-mask@2x.9.png b/src/imports/controls/imagine/images/delaybutton-mask@2x.9.png deleted file mode 100644 index b8db224c..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-mask@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-mask@3x.9.png b/src/imports/controls/imagine/images/delaybutton-mask@3x.9.png deleted file mode 100644 index 3bff2c15..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-mask@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-mask@4x.9.png b/src/imports/controls/imagine/images/delaybutton-mask@4x.9.png deleted file mode 100644 index 045c7fac..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-mask@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-progress-disabled.9.png b/src/imports/controls/imagine/images/delaybutton-progress-disabled.9.png deleted file mode 100644 index 5c209c9c..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-progress-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-progress-disabled@2x.9.png b/src/imports/controls/imagine/images/delaybutton-progress-disabled@2x.9.png deleted file mode 100644 index 0ef11a8d..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-progress-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-progress-disabled@3x.9.png b/src/imports/controls/imagine/images/delaybutton-progress-disabled@3x.9.png deleted file mode 100644 index f3f8e547..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-progress-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-progress-disabled@4x.9.png b/src/imports/controls/imagine/images/delaybutton-progress-disabled@4x.9.png deleted file mode 100644 index b24f50e6..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-progress-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-progress.9.png b/src/imports/controls/imagine/images/delaybutton-progress.9.png deleted file mode 100644 index 4dd3aec5..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-progress.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-progress@2x.9.png b/src/imports/controls/imagine/images/delaybutton-progress@2x.9.png deleted file mode 100644 index cd422076..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-progress@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-progress@3x.9.png b/src/imports/controls/imagine/images/delaybutton-progress@3x.9.png deleted file mode 100644 index 08610300..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-progress@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/delaybutton-progress@4x.9.png b/src/imports/controls/imagine/images/delaybutton-progress@4x.9.png deleted file mode 100644 index 24cc19ba..00000000 Binary files a/src/imports/controls/imagine/images/delaybutton-progress@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-background-disabled.png b/src/imports/controls/imagine/images/dial-background-disabled.png deleted file mode 100644 index d7c4f847..00000000 Binary files a/src/imports/controls/imagine/images/dial-background-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-background-disabled@2x.png b/src/imports/controls/imagine/images/dial-background-disabled@2x.png deleted file mode 100644 index 56b085df..00000000 Binary files a/src/imports/controls/imagine/images/dial-background-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-background-disabled@3x.png b/src/imports/controls/imagine/images/dial-background-disabled@3x.png deleted file mode 100644 index 4f1e17e7..00000000 Binary files a/src/imports/controls/imagine/images/dial-background-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-background-disabled@4x.png b/src/imports/controls/imagine/images/dial-background-disabled@4x.png deleted file mode 100644 index 4aacbf82..00000000 Binary files a/src/imports/controls/imagine/images/dial-background-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-background-focused.png b/src/imports/controls/imagine/images/dial-background-focused.png deleted file mode 100644 index fc53d5c4..00000000 Binary files a/src/imports/controls/imagine/images/dial-background-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-background-focused@2x.png b/src/imports/controls/imagine/images/dial-background-focused@2x.png deleted file mode 100644 index 6b547a17..00000000 Binary files a/src/imports/controls/imagine/images/dial-background-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-background-focused@3x.png b/src/imports/controls/imagine/images/dial-background-focused@3x.png deleted file mode 100644 index 7b8a2582..00000000 Binary files a/src/imports/controls/imagine/images/dial-background-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-background-focused@4x.png b/src/imports/controls/imagine/images/dial-background-focused@4x.png deleted file mode 100644 index 406f46b5..00000000 Binary files a/src/imports/controls/imagine/images/dial-background-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-background.png b/src/imports/controls/imagine/images/dial-background.png deleted file mode 100644 index 58aa09ed..00000000 Binary files a/src/imports/controls/imagine/images/dial-background.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-background@2x.png b/src/imports/controls/imagine/images/dial-background@2x.png deleted file mode 100644 index 87cd9a0f..00000000 Binary files a/src/imports/controls/imagine/images/dial-background@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-background@3x.png b/src/imports/controls/imagine/images/dial-background@3x.png deleted file mode 100644 index 103fb461..00000000 Binary files a/src/imports/controls/imagine/images/dial-background@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-background@4x.png b/src/imports/controls/imagine/images/dial-background@4x.png deleted file mode 100644 index c290f84a..00000000 Binary files a/src/imports/controls/imagine/images/dial-background@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-disabled.png b/src/imports/controls/imagine/images/dial-handle-disabled.png deleted file mode 100644 index a93fd0f2..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-disabled@2x.png b/src/imports/controls/imagine/images/dial-handle-disabled@2x.png deleted file mode 100644 index 2cd536be..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-disabled@3x.png b/src/imports/controls/imagine/images/dial-handle-disabled@3x.png deleted file mode 100644 index 56b9fe06..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-disabled@4x.png b/src/imports/controls/imagine/images/dial-handle-disabled@4x.png deleted file mode 100644 index 5098d688..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-focused-hovered.png b/src/imports/controls/imagine/images/dial-handle-focused-hovered.png deleted file mode 100644 index 2a143f2a..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-focused-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-focused-hovered@2x.png b/src/imports/controls/imagine/images/dial-handle-focused-hovered@2x.png deleted file mode 100644 index 24dfee82..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-focused-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-focused-hovered@3x.png b/src/imports/controls/imagine/images/dial-handle-focused-hovered@3x.png deleted file mode 100644 index 16e128d5..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-focused-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-focused-hovered@4x.png b/src/imports/controls/imagine/images/dial-handle-focused-hovered@4x.png deleted file mode 100644 index b4523acb..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-focused-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-focused-pressed.png b/src/imports/controls/imagine/images/dial-handle-focused-pressed.png deleted file mode 100644 index d43971ff..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-focused-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-focused-pressed@2x.png b/src/imports/controls/imagine/images/dial-handle-focused-pressed@2x.png deleted file mode 100644 index caa2376e..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-focused-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-focused-pressed@3x.png b/src/imports/controls/imagine/images/dial-handle-focused-pressed@3x.png deleted file mode 100644 index c2913883..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-focused-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-focused-pressed@4x.png b/src/imports/controls/imagine/images/dial-handle-focused-pressed@4x.png deleted file mode 100644 index 50ff1c8b..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-focused-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-focused.png b/src/imports/controls/imagine/images/dial-handle-focused.png deleted file mode 100644 index d2733474..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-focused@2x.png b/src/imports/controls/imagine/images/dial-handle-focused@2x.png deleted file mode 100644 index c7bc8f74..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-focused@3x.png b/src/imports/controls/imagine/images/dial-handle-focused@3x.png deleted file mode 100644 index c0dcd945..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-focused@4x.png b/src/imports/controls/imagine/images/dial-handle-focused@4x.png deleted file mode 100644 index b9d2234c..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-hovered.png b/src/imports/controls/imagine/images/dial-handle-hovered.png deleted file mode 100644 index f5d0ac6f..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-hovered@2x.png b/src/imports/controls/imagine/images/dial-handle-hovered@2x.png deleted file mode 100644 index da23baaa..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-hovered@3x.png b/src/imports/controls/imagine/images/dial-handle-hovered@3x.png deleted file mode 100644 index 7287a419..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-hovered@4x.png b/src/imports/controls/imagine/images/dial-handle-hovered@4x.png deleted file mode 100644 index 9f6982dd..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-pressed.png b/src/imports/controls/imagine/images/dial-handle-pressed.png deleted file mode 100644 index 3b98e124..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-pressed@2x.png b/src/imports/controls/imagine/images/dial-handle-pressed@2x.png deleted file mode 100644 index 454e7364..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-pressed@3x.png b/src/imports/controls/imagine/images/dial-handle-pressed@3x.png deleted file mode 100644 index 794516da..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle-pressed@4x.png b/src/imports/controls/imagine/images/dial-handle-pressed@4x.png deleted file mode 100644 index 211b1135..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle.png b/src/imports/controls/imagine/images/dial-handle.png deleted file mode 100644 index 652b82d3..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle@2x.png b/src/imports/controls/imagine/images/dial-handle@2x.png deleted file mode 100644 index 3c86a59b..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle@3x.png b/src/imports/controls/imagine/images/dial-handle@3x.png deleted file mode 100644 index cbfcdbcd..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dial-handle@4x.png b/src/imports/controls/imagine/images/dial-handle@4x.png deleted file mode 100644 index 2872e006..00000000 Binary files a/src/imports/controls/imagine/images/dial-handle@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dialog-background.9.png b/src/imports/controls/imagine/images/dialog-background.9.png deleted file mode 100644 index c842b5ff..00000000 Binary files a/src/imports/controls/imagine/images/dialog-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dialog-background@2x.9.png b/src/imports/controls/imagine/images/dialog-background@2x.9.png deleted file mode 100644 index ca23df1f..00000000 Binary files a/src/imports/controls/imagine/images/dialog-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dialog-background@3x.9.png b/src/imports/controls/imagine/images/dialog-background@3x.9.png deleted file mode 100644 index 46cd4065..00000000 Binary files a/src/imports/controls/imagine/images/dialog-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dialog-background@4x.9.png b/src/imports/controls/imagine/images/dialog-background@4x.9.png deleted file mode 100644 index 3da74119..00000000 Binary files a/src/imports/controls/imagine/images/dialog-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dialog-overlay-modal.png b/src/imports/controls/imagine/images/dialog-overlay-modal.png deleted file mode 100644 index d4a43d1c..00000000 Binary files a/src/imports/controls/imagine/images/dialog-overlay-modal.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dialog-overlay-modal@2x.png b/src/imports/controls/imagine/images/dialog-overlay-modal@2x.png deleted file mode 100644 index c9a8f412..00000000 Binary files a/src/imports/controls/imagine/images/dialog-overlay-modal@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dialog-overlay-modal@3x.png b/src/imports/controls/imagine/images/dialog-overlay-modal@3x.png deleted file mode 100644 index 4a1084a9..00000000 Binary files a/src/imports/controls/imagine/images/dialog-overlay-modal@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dialog-overlay-modal@4x.png b/src/imports/controls/imagine/images/dialog-overlay-modal@4x.png deleted file mode 100644 index b92e600d..00000000 Binary files a/src/imports/controls/imagine/images/dialog-overlay-modal@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dialog-overlay.png b/src/imports/controls/imagine/images/dialog-overlay.png deleted file mode 100644 index b7da23c0..00000000 Binary files a/src/imports/controls/imagine/images/dialog-overlay.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dialog-overlay@2x.png b/src/imports/controls/imagine/images/dialog-overlay@2x.png deleted file mode 100644 index 23828d5a..00000000 Binary files a/src/imports/controls/imagine/images/dialog-overlay@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dialog-overlay@3x.png b/src/imports/controls/imagine/images/dialog-overlay@3x.png deleted file mode 100644 index d9d53828..00000000 Binary files a/src/imports/controls/imagine/images/dialog-overlay@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dialog-overlay@4x.png b/src/imports/controls/imagine/images/dialog-overlay@4x.png deleted file mode 100644 index a76c1a3a..00000000 Binary files a/src/imports/controls/imagine/images/dialog-overlay@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dialogbuttonbox-background.9.png b/src/imports/controls/imagine/images/dialogbuttonbox-background.9.png deleted file mode 100644 index 4b080c7f..00000000 Binary files a/src/imports/controls/imagine/images/dialogbuttonbox-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dialogbuttonbox-background@2x.9.png b/src/imports/controls/imagine/images/dialogbuttonbox-background@2x.9.png deleted file mode 100644 index 38306bea..00000000 Binary files a/src/imports/controls/imagine/images/dialogbuttonbox-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dialogbuttonbox-background@3x.9.png b/src/imports/controls/imagine/images/dialogbuttonbox-background@3x.9.png deleted file mode 100644 index 66afaabe..00000000 Binary files a/src/imports/controls/imagine/images/dialogbuttonbox-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/dialogbuttonbox-background@4x.9.png b/src/imports/controls/imagine/images/dialogbuttonbox-background@4x.9.png deleted file mode 100644 index 7d0db539..00000000 Binary files a/src/imports/controls/imagine/images/dialogbuttonbox-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-background-bottom.9.png b/src/imports/controls/imagine/images/drawer-background-bottom.9.png deleted file mode 100644 index 023d8bf8..00000000 Binary files a/src/imports/controls/imagine/images/drawer-background-bottom.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-background-bottom@2x.9.png b/src/imports/controls/imagine/images/drawer-background-bottom@2x.9.png deleted file mode 100644 index 6b229ce9..00000000 Binary files a/src/imports/controls/imagine/images/drawer-background-bottom@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-background-bottom@3x.9.png b/src/imports/controls/imagine/images/drawer-background-bottom@3x.9.png deleted file mode 100644 index c61118b6..00000000 Binary files a/src/imports/controls/imagine/images/drawer-background-bottom@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-background-bottom@4x.9.png b/src/imports/controls/imagine/images/drawer-background-bottom@4x.9.png deleted file mode 100644 index 08b2e25f..00000000 Binary files a/src/imports/controls/imagine/images/drawer-background-bottom@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-background-left.9.png b/src/imports/controls/imagine/images/drawer-background-left.9.png deleted file mode 100644 index 5145a3a3..00000000 Binary files a/src/imports/controls/imagine/images/drawer-background-left.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-background-left@2x.9.png b/src/imports/controls/imagine/images/drawer-background-left@2x.9.png deleted file mode 100644 index 95a80ab5..00000000 Binary files a/src/imports/controls/imagine/images/drawer-background-left@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-background-left@3x.9.png b/src/imports/controls/imagine/images/drawer-background-left@3x.9.png deleted file mode 100644 index bd330b7f..00000000 Binary files a/src/imports/controls/imagine/images/drawer-background-left@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-background-left@4x.9.png b/src/imports/controls/imagine/images/drawer-background-left@4x.9.png deleted file mode 100644 index 10f0702a..00000000 Binary files a/src/imports/controls/imagine/images/drawer-background-left@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-background-right.9.png b/src/imports/controls/imagine/images/drawer-background-right.9.png deleted file mode 100644 index 37afb734..00000000 Binary files a/src/imports/controls/imagine/images/drawer-background-right.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-background-right@2x.9.png b/src/imports/controls/imagine/images/drawer-background-right@2x.9.png deleted file mode 100644 index cfbc8f35..00000000 Binary files a/src/imports/controls/imagine/images/drawer-background-right@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-background-right@3x.9.png b/src/imports/controls/imagine/images/drawer-background-right@3x.9.png deleted file mode 100644 index 9a49b6d5..00000000 Binary files a/src/imports/controls/imagine/images/drawer-background-right@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-background-right@4x.9.png b/src/imports/controls/imagine/images/drawer-background-right@4x.9.png deleted file mode 100644 index 56405776..00000000 Binary files a/src/imports/controls/imagine/images/drawer-background-right@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-background-top.9.png b/src/imports/controls/imagine/images/drawer-background-top.9.png deleted file mode 100644 index 56da059f..00000000 Binary files a/src/imports/controls/imagine/images/drawer-background-top.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-background-top@2x.9.png b/src/imports/controls/imagine/images/drawer-background-top@2x.9.png deleted file mode 100644 index 976671ce..00000000 Binary files a/src/imports/controls/imagine/images/drawer-background-top@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-background-top@3x.9.png b/src/imports/controls/imagine/images/drawer-background-top@3x.9.png deleted file mode 100644 index 7c07deba..00000000 Binary files a/src/imports/controls/imagine/images/drawer-background-top@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-background-top@4x.9.png b/src/imports/controls/imagine/images/drawer-background-top@4x.9.png deleted file mode 100644 index e3b1edf7..00000000 Binary files a/src/imports/controls/imagine/images/drawer-background-top@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-overlay-modal.png b/src/imports/controls/imagine/images/drawer-overlay-modal.png deleted file mode 100644 index d4a43d1c..00000000 Binary files a/src/imports/controls/imagine/images/drawer-overlay-modal.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-overlay-modal@2x.png b/src/imports/controls/imagine/images/drawer-overlay-modal@2x.png deleted file mode 100644 index c9a8f412..00000000 Binary files a/src/imports/controls/imagine/images/drawer-overlay-modal@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-overlay-modal@3x.png b/src/imports/controls/imagine/images/drawer-overlay-modal@3x.png deleted file mode 100644 index 4a1084a9..00000000 Binary files a/src/imports/controls/imagine/images/drawer-overlay-modal@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-overlay-modal@4x.png b/src/imports/controls/imagine/images/drawer-overlay-modal@4x.png deleted file mode 100644 index b92e600d..00000000 Binary files a/src/imports/controls/imagine/images/drawer-overlay-modal@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-overlay.png b/src/imports/controls/imagine/images/drawer-overlay.png deleted file mode 100644 index b7da23c0..00000000 Binary files a/src/imports/controls/imagine/images/drawer-overlay.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-overlay@2x.png b/src/imports/controls/imagine/images/drawer-overlay@2x.png deleted file mode 100644 index 23828d5a..00000000 Binary files a/src/imports/controls/imagine/images/drawer-overlay@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-overlay@3x.png b/src/imports/controls/imagine/images/drawer-overlay@3x.png deleted file mode 100644 index d9d53828..00000000 Binary files a/src/imports/controls/imagine/images/drawer-overlay@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/drawer-overlay@4x.png b/src/imports/controls/imagine/images/drawer-overlay@4x.png deleted file mode 100644 index a76c1a3a..00000000 Binary files a/src/imports/controls/imagine/images/drawer-overlay@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/frame-background.9.png b/src/imports/controls/imagine/images/frame-background.9.png deleted file mode 100644 index 8674059d..00000000 Binary files a/src/imports/controls/imagine/images/frame-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/frame-background@2x.9.png b/src/imports/controls/imagine/images/frame-background@2x.9.png deleted file mode 100644 index 19661496..00000000 Binary files a/src/imports/controls/imagine/images/frame-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/frame-background@3x.9.png b/src/imports/controls/imagine/images/frame-background@3x.9.png deleted file mode 100644 index 07d644be..00000000 Binary files a/src/imports/controls/imagine/images/frame-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/frame-background@4x.9.png b/src/imports/controls/imagine/images/frame-background@4x.9.png deleted file mode 100644 index 8bf47d2a..00000000 Binary files a/src/imports/controls/imagine/images/frame-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/groupbox-background.9.png b/src/imports/controls/imagine/images/groupbox-background.9.png deleted file mode 100644 index 8674059d..00000000 Binary files a/src/imports/controls/imagine/images/groupbox-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/groupbox-background@2x.9.png b/src/imports/controls/imagine/images/groupbox-background@2x.9.png deleted file mode 100644 index 19661496..00000000 Binary files a/src/imports/controls/imagine/images/groupbox-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/groupbox-background@3x.9.png b/src/imports/controls/imagine/images/groupbox-background@3x.9.png deleted file mode 100644 index 07d644be..00000000 Binary files a/src/imports/controls/imagine/images/groupbox-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/groupbox-background@4x.9.png b/src/imports/controls/imagine/images/groupbox-background@4x.9.png deleted file mode 100644 index 8bf47d2a..00000000 Binary files a/src/imports/controls/imagine/images/groupbox-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/groupbox-title.9.png b/src/imports/controls/imagine/images/groupbox-title.9.png deleted file mode 100644 index e85e0cb1..00000000 Binary files a/src/imports/controls/imagine/images/groupbox-title.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/groupbox-title@2x.9.png b/src/imports/controls/imagine/images/groupbox-title@2x.9.png deleted file mode 100644 index d5359d85..00000000 Binary files a/src/imports/controls/imagine/images/groupbox-title@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/groupbox-title@3x.9.png b/src/imports/controls/imagine/images/groupbox-title@3x.9.png deleted file mode 100644 index 0e4b5c9f..00000000 Binary files a/src/imports/controls/imagine/images/groupbox-title@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/groupbox-title@4x.9.png b/src/imports/controls/imagine/images/groupbox-title@4x.9.png deleted file mode 100644 index 908dfe6b..00000000 Binary files a/src/imports/controls/imagine/images/groupbox-title@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background-disabled.9.png b/src/imports/controls/imagine/images/itemdelegate-background-disabled.9.png deleted file mode 100644 index 23570729..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background-disabled@2x.9.png b/src/imports/controls/imagine/images/itemdelegate-background-disabled@2x.9.png deleted file mode 100644 index c7abb65c..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background-disabled@3x.9.png b/src/imports/controls/imagine/images/itemdelegate-background-disabled@3x.9.png deleted file mode 100644 index 46b84d7d..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background-disabled@4x.9.png b/src/imports/controls/imagine/images/itemdelegate-background-disabled@4x.9.png deleted file mode 100644 index f4dfd338..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background-focused.9.png b/src/imports/controls/imagine/images/itemdelegate-background-focused.9.png deleted file mode 100644 index 6ae574d5..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background-focused@2x.9.png b/src/imports/controls/imagine/images/itemdelegate-background-focused@2x.9.png deleted file mode 100644 index 6b61562c..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background-focused@3x.9.png b/src/imports/controls/imagine/images/itemdelegate-background-focused@3x.9.png deleted file mode 100644 index e46c0bf1..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background-focused@4x.9.png b/src/imports/controls/imagine/images/itemdelegate-background-focused@4x.9.png deleted file mode 100644 index 010444e8..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background-highlighted.9.png b/src/imports/controls/imagine/images/itemdelegate-background-highlighted.9.png deleted file mode 100644 index e79d8e1d..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background-highlighted.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background-highlighted@2x.9.png b/src/imports/controls/imagine/images/itemdelegate-background-highlighted@2x.9.png deleted file mode 100644 index ea68d35f..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background-highlighted@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background-highlighted@3x.9.png b/src/imports/controls/imagine/images/itemdelegate-background-highlighted@3x.9.png deleted file mode 100644 index 6d610415..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background-highlighted@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background-highlighted@4x.9.png b/src/imports/controls/imagine/images/itemdelegate-background-highlighted@4x.9.png deleted file mode 100644 index 590cca96..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background-highlighted@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background-hovered.9.png b/src/imports/controls/imagine/images/itemdelegate-background-hovered.9.png deleted file mode 100644 index b8749743..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background-hovered@2x.9.png b/src/imports/controls/imagine/images/itemdelegate-background-hovered@2x.9.png deleted file mode 100644 index 5a136a0c..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background-hovered@3x.9.png b/src/imports/controls/imagine/images/itemdelegate-background-hovered@3x.9.png deleted file mode 100644 index f47a366b..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background-hovered@4x.9.png b/src/imports/controls/imagine/images/itemdelegate-background-hovered@4x.9.png deleted file mode 100644 index 9ecb680f..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background-pressed.9.png b/src/imports/controls/imagine/images/itemdelegate-background-pressed.9.png deleted file mode 100644 index 6ae574d5..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background-pressed.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background-pressed@2x.9.png b/src/imports/controls/imagine/images/itemdelegate-background-pressed@2x.9.png deleted file mode 100644 index 6b61562c..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background-pressed@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background-pressed@3x.9.png b/src/imports/controls/imagine/images/itemdelegate-background-pressed@3x.9.png deleted file mode 100644 index e46c0bf1..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background-pressed@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background-pressed@4x.9.png b/src/imports/controls/imagine/images/itemdelegate-background-pressed@4x.9.png deleted file mode 100644 index 010444e8..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background-pressed@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background.9.png b/src/imports/controls/imagine/images/itemdelegate-background.9.png deleted file mode 100644 index b8749743..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background@2x.9.png b/src/imports/controls/imagine/images/itemdelegate-background@2x.9.png deleted file mode 100644 index 5a136a0c..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background@3x.9.png b/src/imports/controls/imagine/images/itemdelegate-background@3x.9.png deleted file mode 100644 index f47a366b..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/itemdelegate-background@4x.9.png b/src/imports/controls/imagine/images/itemdelegate-background@4x.9.png deleted file mode 100644 index 9ecb680f..00000000 Binary files a/src/imports/controls/imagine/images/itemdelegate-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menu-background.9.png b/src/imports/controls/imagine/images/menu-background.9.png deleted file mode 100644 index 3195fbc3..00000000 Binary files a/src/imports/controls/imagine/images/menu-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menu-background@2x.9.png b/src/imports/controls/imagine/images/menu-background@2x.9.png deleted file mode 100644 index 454c347c..00000000 Binary files a/src/imports/controls/imagine/images/menu-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menu-background@3x.9.png b/src/imports/controls/imagine/images/menu-background@3x.9.png deleted file mode 100644 index 32ed6086..00000000 Binary files a/src/imports/controls/imagine/images/menu-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menu-background@4x.9.png b/src/imports/controls/imagine/images/menu-background@4x.9.png deleted file mode 100644 index 948cc3e9..00000000 Binary files a/src/imports/controls/imagine/images/menu-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-arrow-disabled.png b/src/imports/controls/imagine/images/menuitem-arrow-disabled.png deleted file mode 100644 index 6cad53f6..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-arrow-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-arrow-disabled@2x.png b/src/imports/controls/imagine/images/menuitem-arrow-disabled@2x.png deleted file mode 100644 index bad6fe8c..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-arrow-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-arrow-disabled@3x.png b/src/imports/controls/imagine/images/menuitem-arrow-disabled@3x.png deleted file mode 100644 index da420091..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-arrow-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-arrow-disabled@4x.png b/src/imports/controls/imagine/images/menuitem-arrow-disabled@4x.png deleted file mode 100644 index 2d8e44e2..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-arrow-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-arrow-mirrored-disabled.png b/src/imports/controls/imagine/images/menuitem-arrow-mirrored-disabled.png deleted file mode 100644 index 44ac2771..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-arrow-mirrored-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-arrow-mirrored-disabled@2x.png b/src/imports/controls/imagine/images/menuitem-arrow-mirrored-disabled@2x.png deleted file mode 100644 index 71a9b88a..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-arrow-mirrored-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-arrow-mirrored-disabled@3x.png b/src/imports/controls/imagine/images/menuitem-arrow-mirrored-disabled@3x.png deleted file mode 100644 index 1e03f215..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-arrow-mirrored-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-arrow-mirrored-disabled@4x.png b/src/imports/controls/imagine/images/menuitem-arrow-mirrored-disabled@4x.png deleted file mode 100644 index 0f85b409..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-arrow-mirrored-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-arrow-mirrored.png b/src/imports/controls/imagine/images/menuitem-arrow-mirrored.png deleted file mode 100644 index 4ac1160b..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-arrow-mirrored.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-arrow-mirrored@2x.png b/src/imports/controls/imagine/images/menuitem-arrow-mirrored@2x.png deleted file mode 100644 index 79b089b6..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-arrow-mirrored@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-arrow-mirrored@3x.png b/src/imports/controls/imagine/images/menuitem-arrow-mirrored@3x.png deleted file mode 100644 index aeb191fd..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-arrow-mirrored@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-arrow-mirrored@4x.png b/src/imports/controls/imagine/images/menuitem-arrow-mirrored@4x.png deleted file mode 100644 index 139fab35..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-arrow-mirrored@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-arrow.png b/src/imports/controls/imagine/images/menuitem-arrow.png deleted file mode 100644 index edf1f6bd..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-arrow.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-arrow@2x.png b/src/imports/controls/imagine/images/menuitem-arrow@2x.png deleted file mode 100644 index 8e629265..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-arrow@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-arrow@3x.png b/src/imports/controls/imagine/images/menuitem-arrow@3x.png deleted file mode 100644 index 0cef53ac..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-arrow@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-arrow@4x.png b/src/imports/controls/imagine/images/menuitem-arrow@4x.png deleted file mode 100644 index dbdc83bc..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-arrow@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-background-highlighted.9.png b/src/imports/controls/imagine/images/menuitem-background-highlighted.9.png deleted file mode 100644 index 7b8fa0f4..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-background-highlighted.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-background-highlighted@2x.9.png b/src/imports/controls/imagine/images/menuitem-background-highlighted@2x.9.png deleted file mode 100644 index 9edc3079..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-background-highlighted@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-background-highlighted@3x.9.png b/src/imports/controls/imagine/images/menuitem-background-highlighted@3x.9.png deleted file mode 100644 index 183f6194..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-background-highlighted@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-background-highlighted@4x.9.png b/src/imports/controls/imagine/images/menuitem-background-highlighted@4x.9.png deleted file mode 100644 index 0a1ab863..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-background-highlighted@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-background.9.png b/src/imports/controls/imagine/images/menuitem-background.9.png deleted file mode 100644 index aab131ed..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-background@2x.9.png b/src/imports/controls/imagine/images/menuitem-background@2x.9.png deleted file mode 100644 index c46938c4..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-background@3x.9.png b/src/imports/controls/imagine/images/menuitem-background@3x.9.png deleted file mode 100644 index bac1a83f..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-background@4x.9.png b/src/imports/controls/imagine/images/menuitem-background@4x.9.png deleted file mode 100644 index ba77504c..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-checked-focused.png b/src/imports/controls/imagine/images/menuitem-indicator-checked-focused.png deleted file mode 100644 index d55a5204..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-checked-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-checked-focused@2x.png b/src/imports/controls/imagine/images/menuitem-indicator-checked-focused@2x.png deleted file mode 100644 index 7289f639..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-checked-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-checked-focused@3x.png b/src/imports/controls/imagine/images/menuitem-indicator-checked-focused@3x.png deleted file mode 100644 index 02d6cdf2..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-checked-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-checked-focused@4x.png b/src/imports/controls/imagine/images/menuitem-indicator-checked-focused@4x.png deleted file mode 100644 index 3f074dbf..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-checked-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-checked-hovered.png b/src/imports/controls/imagine/images/menuitem-indicator-checked-hovered.png deleted file mode 100644 index d55a5204..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-checked-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-checked-hovered@2x.png b/src/imports/controls/imagine/images/menuitem-indicator-checked-hovered@2x.png deleted file mode 100644 index 7289f639..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-checked-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-checked-hovered@3x.png b/src/imports/controls/imagine/images/menuitem-indicator-checked-hovered@3x.png deleted file mode 100644 index 02d6cdf2..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-checked-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-checked-hovered@4x.png b/src/imports/controls/imagine/images/menuitem-indicator-checked-hovered@4x.png deleted file mode 100644 index 3f074dbf..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-checked-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-checked-pressed.png b/src/imports/controls/imagine/images/menuitem-indicator-checked-pressed.png deleted file mode 100644 index 9c03d096..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-checked-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-checked-pressed@2x.png b/src/imports/controls/imagine/images/menuitem-indicator-checked-pressed@2x.png deleted file mode 100644 index 680ba3ef..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-checked-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-checked-pressed@3x.png b/src/imports/controls/imagine/images/menuitem-indicator-checked-pressed@3x.png deleted file mode 100644 index 974205de..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-checked-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-checked-pressed@4x.png b/src/imports/controls/imagine/images/menuitem-indicator-checked-pressed@4x.png deleted file mode 100644 index 2c8b6aab..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-checked-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-checked.png b/src/imports/controls/imagine/images/menuitem-indicator-checked.png deleted file mode 100644 index 598b163a..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-checked.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-checked@2x.png b/src/imports/controls/imagine/images/menuitem-indicator-checked@2x.png deleted file mode 100644 index 06382264..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-checked@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-checked@3x.png b/src/imports/controls/imagine/images/menuitem-indicator-checked@3x.png deleted file mode 100644 index 12a32dcd..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-checked@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-checked@4x.png b/src/imports/controls/imagine/images/menuitem-indicator-checked@4x.png deleted file mode 100644 index 4bc6701d..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-checked@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-disabled.png b/src/imports/controls/imagine/images/menuitem-indicator-disabled.png deleted file mode 100644 index 0a499f8f..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-disabled@2x.png b/src/imports/controls/imagine/images/menuitem-indicator-disabled@2x.png deleted file mode 100644 index db652c5a..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-disabled@3x.png b/src/imports/controls/imagine/images/menuitem-indicator-disabled@3x.png deleted file mode 100644 index 482f045d..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-disabled@4x.png b/src/imports/controls/imagine/images/menuitem-indicator-disabled@4x.png deleted file mode 100644 index a386e272..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-focused.png b/src/imports/controls/imagine/images/menuitem-indicator-focused.png deleted file mode 100644 index c5eb8527..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-focused@2x.png b/src/imports/controls/imagine/images/menuitem-indicator-focused@2x.png deleted file mode 100644 index 8496fb1a..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-focused@3x.png b/src/imports/controls/imagine/images/menuitem-indicator-focused@3x.png deleted file mode 100644 index 30849fd0..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-focused@4x.png b/src/imports/controls/imagine/images/menuitem-indicator-focused@4x.png deleted file mode 100644 index 55ce7c0c..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-hovered.png b/src/imports/controls/imagine/images/menuitem-indicator-hovered.png deleted file mode 100644 index c5eb8527..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-hovered@2x.png b/src/imports/controls/imagine/images/menuitem-indicator-hovered@2x.png deleted file mode 100644 index 8496fb1a..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-hovered@3x.png b/src/imports/controls/imagine/images/menuitem-indicator-hovered@3x.png deleted file mode 100644 index 30849fd0..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-hovered@4x.png b/src/imports/controls/imagine/images/menuitem-indicator-hovered@4x.png deleted file mode 100644 index 55ce7c0c..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-pressed.png b/src/imports/controls/imagine/images/menuitem-indicator-pressed.png deleted file mode 100644 index a1baaf90..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-pressed@2x.png b/src/imports/controls/imagine/images/menuitem-indicator-pressed@2x.png deleted file mode 100644 index 81a7c364..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-pressed@3x.png b/src/imports/controls/imagine/images/menuitem-indicator-pressed@3x.png deleted file mode 100644 index 9325de38..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator-pressed@4x.png b/src/imports/controls/imagine/images/menuitem-indicator-pressed@4x.png deleted file mode 100644 index c93b8fb8..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator.png b/src/imports/controls/imagine/images/menuitem-indicator.png deleted file mode 100644 index 2b3e2323..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator@2x.png b/src/imports/controls/imagine/images/menuitem-indicator@2x.png deleted file mode 100644 index ce8985db..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator@3x.png b/src/imports/controls/imagine/images/menuitem-indicator@3x.png deleted file mode 100644 index 2968731d..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuitem-indicator@4x.png b/src/imports/controls/imagine/images/menuitem-indicator@4x.png deleted file mode 100644 index ea8da284..00000000 Binary files a/src/imports/controls/imagine/images/menuitem-indicator@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuseparator-separator.9.png b/src/imports/controls/imagine/images/menuseparator-separator.9.png deleted file mode 100644 index b8825b99..00000000 Binary files a/src/imports/controls/imagine/images/menuseparator-separator.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuseparator-separator@2x.9.png b/src/imports/controls/imagine/images/menuseparator-separator@2x.9.png deleted file mode 100644 index 3e5a023d..00000000 Binary files a/src/imports/controls/imagine/images/menuseparator-separator@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuseparator-separator@3x.9.png b/src/imports/controls/imagine/images/menuseparator-separator@3x.9.png deleted file mode 100644 index abe775c7..00000000 Binary files a/src/imports/controls/imagine/images/menuseparator-separator@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/menuseparator-separator@4x.9.png b/src/imports/controls/imagine/images/menuseparator-separator@4x.9.png deleted file mode 100644 index 164c8e3e..00000000 Binary files a/src/imports/controls/imagine/images/menuseparator-separator@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/page-background.png b/src/imports/controls/imagine/images/page-background.png deleted file mode 100644 index 2d8d70f2..00000000 Binary files a/src/imports/controls/imagine/images/page-background.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/page-background@2x.png b/src/imports/controls/imagine/images/page-background@2x.png deleted file mode 100644 index 18fbaa4c..00000000 Binary files a/src/imports/controls/imagine/images/page-background@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/page-background@3x.png b/src/imports/controls/imagine/images/page-background@3x.png deleted file mode 100644 index 241232b1..00000000 Binary files a/src/imports/controls/imagine/images/page-background@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/page-background@4x.png b/src/imports/controls/imagine/images/page-background@4x.png deleted file mode 100644 index 8eb1b1ec..00000000 Binary files a/src/imports/controls/imagine/images/page-background@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pageindicator-delegate-current.png b/src/imports/controls/imagine/images/pageindicator-delegate-current.png deleted file mode 100644 index dc96d723..00000000 Binary files a/src/imports/controls/imagine/images/pageindicator-delegate-current.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pageindicator-delegate-current@2x.png b/src/imports/controls/imagine/images/pageindicator-delegate-current@2x.png deleted file mode 100644 index 3e0d794f..00000000 Binary files a/src/imports/controls/imagine/images/pageindicator-delegate-current@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pageindicator-delegate-current@3x.png b/src/imports/controls/imagine/images/pageindicator-delegate-current@3x.png deleted file mode 100644 index 397501a7..00000000 Binary files a/src/imports/controls/imagine/images/pageindicator-delegate-current@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pageindicator-delegate-current@4x.png b/src/imports/controls/imagine/images/pageindicator-delegate-current@4x.png deleted file mode 100644 index f741a896..00000000 Binary files a/src/imports/controls/imagine/images/pageindicator-delegate-current@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pageindicator-delegate-disabled-current.png b/src/imports/controls/imagine/images/pageindicator-delegate-disabled-current.png deleted file mode 100644 index 848d4351..00000000 Binary files a/src/imports/controls/imagine/images/pageindicator-delegate-disabled-current.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pageindicator-delegate-disabled-current@2x.png b/src/imports/controls/imagine/images/pageindicator-delegate-disabled-current@2x.png deleted file mode 100644 index 65b5a9d4..00000000 Binary files a/src/imports/controls/imagine/images/pageindicator-delegate-disabled-current@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pageindicator-delegate-disabled-current@3x.png b/src/imports/controls/imagine/images/pageindicator-delegate-disabled-current@3x.png deleted file mode 100644 index 99e3b644..00000000 Binary files a/src/imports/controls/imagine/images/pageindicator-delegate-disabled-current@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pageindicator-delegate-disabled-current@4x.png b/src/imports/controls/imagine/images/pageindicator-delegate-disabled-current@4x.png deleted file mode 100644 index f1801fff..00000000 Binary files a/src/imports/controls/imagine/images/pageindicator-delegate-disabled-current@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pageindicator-delegate-disabled.png b/src/imports/controls/imagine/images/pageindicator-delegate-disabled.png deleted file mode 100644 index 848d4351..00000000 Binary files a/src/imports/controls/imagine/images/pageindicator-delegate-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pageindicator-delegate-disabled@2x.png b/src/imports/controls/imagine/images/pageindicator-delegate-disabled@2x.png deleted file mode 100644 index 65b5a9d4..00000000 Binary files a/src/imports/controls/imagine/images/pageindicator-delegate-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pageindicator-delegate-disabled@3x.png b/src/imports/controls/imagine/images/pageindicator-delegate-disabled@3x.png deleted file mode 100644 index 99e3b644..00000000 Binary files a/src/imports/controls/imagine/images/pageindicator-delegate-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pageindicator-delegate-disabled@4x.png b/src/imports/controls/imagine/images/pageindicator-delegate-disabled@4x.png deleted file mode 100644 index f1801fff..00000000 Binary files a/src/imports/controls/imagine/images/pageindicator-delegate-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pageindicator-delegate-pressed.png b/src/imports/controls/imagine/images/pageindicator-delegate-pressed.png deleted file mode 100644 index dc96d723..00000000 Binary files a/src/imports/controls/imagine/images/pageindicator-delegate-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pageindicator-delegate-pressed@2x.png b/src/imports/controls/imagine/images/pageindicator-delegate-pressed@2x.png deleted file mode 100644 index 3e0d794f..00000000 Binary files a/src/imports/controls/imagine/images/pageindicator-delegate-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pageindicator-delegate-pressed@3x.png b/src/imports/controls/imagine/images/pageindicator-delegate-pressed@3x.png deleted file mode 100644 index 397501a7..00000000 Binary files a/src/imports/controls/imagine/images/pageindicator-delegate-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pageindicator-delegate-pressed@4x.png b/src/imports/controls/imagine/images/pageindicator-delegate-pressed@4x.png deleted file mode 100644 index f741a896..00000000 Binary files a/src/imports/controls/imagine/images/pageindicator-delegate-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pageindicator-delegate.png b/src/imports/controls/imagine/images/pageindicator-delegate.png deleted file mode 100644 index 84d23cd1..00000000 Binary files a/src/imports/controls/imagine/images/pageindicator-delegate.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pageindicator-delegate@2x.png b/src/imports/controls/imagine/images/pageindicator-delegate@2x.png deleted file mode 100644 index 0e706372..00000000 Binary files a/src/imports/controls/imagine/images/pageindicator-delegate@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pageindicator-delegate@3x.png b/src/imports/controls/imagine/images/pageindicator-delegate@3x.png deleted file mode 100644 index 85af5a4e..00000000 Binary files a/src/imports/controls/imagine/images/pageindicator-delegate@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pageindicator-delegate@4x.png b/src/imports/controls/imagine/images/pageindicator-delegate@4x.png deleted file mode 100644 index 0aacbab1..00000000 Binary files a/src/imports/controls/imagine/images/pageindicator-delegate@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pane-background.9.png b/src/imports/controls/imagine/images/pane-background.9.png deleted file mode 100644 index 658f4863..00000000 Binary files a/src/imports/controls/imagine/images/pane-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pane-background@2x.9.png b/src/imports/controls/imagine/images/pane-background@2x.9.png deleted file mode 100644 index a84ac04a..00000000 Binary files a/src/imports/controls/imagine/images/pane-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pane-background@3x.9.png b/src/imports/controls/imagine/images/pane-background@3x.9.png deleted file mode 100644 index 2b1c4da9..00000000 Binary files a/src/imports/controls/imagine/images/pane-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/pane-background@4x.9.png b/src/imports/controls/imagine/images/pane-background@4x.9.png deleted file mode 100644 index 90295db4..00000000 Binary files a/src/imports/controls/imagine/images/pane-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/popup-background.9.png b/src/imports/controls/imagine/images/popup-background.9.png deleted file mode 100644 index c842b5ff..00000000 Binary files a/src/imports/controls/imagine/images/popup-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/popup-background@2x.9.png b/src/imports/controls/imagine/images/popup-background@2x.9.png deleted file mode 100644 index ca23df1f..00000000 Binary files a/src/imports/controls/imagine/images/popup-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/popup-background@3x.9.png b/src/imports/controls/imagine/images/popup-background@3x.9.png deleted file mode 100644 index 46cd4065..00000000 Binary files a/src/imports/controls/imagine/images/popup-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/popup-background@4x.9.png b/src/imports/controls/imagine/images/popup-background@4x.9.png deleted file mode 100644 index 3da74119..00000000 Binary files a/src/imports/controls/imagine/images/popup-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/popup-overlay-modal.png b/src/imports/controls/imagine/images/popup-overlay-modal.png deleted file mode 100644 index d4a43d1c..00000000 Binary files a/src/imports/controls/imagine/images/popup-overlay-modal.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/popup-overlay-modal@2x.png b/src/imports/controls/imagine/images/popup-overlay-modal@2x.png deleted file mode 100644 index c9a8f412..00000000 Binary files a/src/imports/controls/imagine/images/popup-overlay-modal@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/popup-overlay-modal@3x.png b/src/imports/controls/imagine/images/popup-overlay-modal@3x.png deleted file mode 100644 index 4a1084a9..00000000 Binary files a/src/imports/controls/imagine/images/popup-overlay-modal@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/popup-overlay-modal@4x.png b/src/imports/controls/imagine/images/popup-overlay-modal@4x.png deleted file mode 100644 index b92e600d..00000000 Binary files a/src/imports/controls/imagine/images/popup-overlay-modal@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/popup-overlay.png b/src/imports/controls/imagine/images/popup-overlay.png deleted file mode 100644 index b7da23c0..00000000 Binary files a/src/imports/controls/imagine/images/popup-overlay.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/popup-overlay@2x.png b/src/imports/controls/imagine/images/popup-overlay@2x.png deleted file mode 100644 index 23828d5a..00000000 Binary files a/src/imports/controls/imagine/images/popup-overlay@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/popup-overlay@3x.png b/src/imports/controls/imagine/images/popup-overlay@3x.png deleted file mode 100644 index d9d53828..00000000 Binary files a/src/imports/controls/imagine/images/popup-overlay@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/popup-overlay@4x.png b/src/imports/controls/imagine/images/popup-overlay@4x.png deleted file mode 100644 index a76c1a3a..00000000 Binary files a/src/imports/controls/imagine/images/popup-overlay@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/progressbar-animation.webp b/src/imports/controls/imagine/images/progressbar-animation.webp deleted file mode 100644 index 51c35c88..00000000 Binary files a/src/imports/controls/imagine/images/progressbar-animation.webp and /dev/null differ diff --git a/src/imports/controls/imagine/images/progressbar-animation@2x.webp b/src/imports/controls/imagine/images/progressbar-animation@2x.webp deleted file mode 100644 index ee120630..00000000 Binary files a/src/imports/controls/imagine/images/progressbar-animation@2x.webp and /dev/null differ diff --git a/src/imports/controls/imagine/images/progressbar-animation@3x.webp b/src/imports/controls/imagine/images/progressbar-animation@3x.webp deleted file mode 100644 index c2f94a74..00000000 Binary files a/src/imports/controls/imagine/images/progressbar-animation@3x.webp and /dev/null differ diff --git a/src/imports/controls/imagine/images/progressbar-animation@4x.webp b/src/imports/controls/imagine/images/progressbar-animation@4x.webp deleted file mode 100644 index d49657e9..00000000 Binary files a/src/imports/controls/imagine/images/progressbar-animation@4x.webp and /dev/null differ diff --git a/src/imports/controls/imagine/images/progressbar-background.9.png b/src/imports/controls/imagine/images/progressbar-background.9.png deleted file mode 100644 index e1760070..00000000 Binary files a/src/imports/controls/imagine/images/progressbar-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/progressbar-background@2x.9.png b/src/imports/controls/imagine/images/progressbar-background@2x.9.png deleted file mode 100644 index e69922d5..00000000 Binary files a/src/imports/controls/imagine/images/progressbar-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/progressbar-background@3x.9.png b/src/imports/controls/imagine/images/progressbar-background@3x.9.png deleted file mode 100644 index b3c43205..00000000 Binary files a/src/imports/controls/imagine/images/progressbar-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/progressbar-background@4x.9.png b/src/imports/controls/imagine/images/progressbar-background@4x.9.png deleted file mode 100644 index 905bdc32..00000000 Binary files a/src/imports/controls/imagine/images/progressbar-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/progressbar-mask.9.png b/src/imports/controls/imagine/images/progressbar-mask.9.png deleted file mode 100644 index 35a47dc8..00000000 Binary files a/src/imports/controls/imagine/images/progressbar-mask.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/progressbar-mask@2x.9.png b/src/imports/controls/imagine/images/progressbar-mask@2x.9.png deleted file mode 100644 index 23ed1a8c..00000000 Binary files a/src/imports/controls/imagine/images/progressbar-mask@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/progressbar-mask@3x.9.png b/src/imports/controls/imagine/images/progressbar-mask@3x.9.png deleted file mode 100644 index 25bc843e..00000000 Binary files a/src/imports/controls/imagine/images/progressbar-mask@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/progressbar-mask@4x.9.png b/src/imports/controls/imagine/images/progressbar-mask@4x.9.png deleted file mode 100644 index 645ff201..00000000 Binary files a/src/imports/controls/imagine/images/progressbar-mask@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/progressbar-progress.png b/src/imports/controls/imagine/images/progressbar-progress.png deleted file mode 100644 index bb31dc9b..00000000 Binary files a/src/imports/controls/imagine/images/progressbar-progress.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/progressbar-progress@2x.png b/src/imports/controls/imagine/images/progressbar-progress@2x.png deleted file mode 100644 index 6bb464c9..00000000 Binary files a/src/imports/controls/imagine/images/progressbar-progress@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/progressbar-progress@3x.png b/src/imports/controls/imagine/images/progressbar-progress@3x.png deleted file mode 100644 index d514c727..00000000 Binary files a/src/imports/controls/imagine/images/progressbar-progress@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/progressbar-progress@4x.png b/src/imports/controls/imagine/images/progressbar-progress@4x.png deleted file mode 100644 index abc8fa67..00000000 Binary files a/src/imports/controls/imagine/images/progressbar-progress@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-checked-focused.png b/src/imports/controls/imagine/images/radiobutton-indicator-checked-focused.png deleted file mode 100644 index 2f9e5e18..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-checked-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-checked-focused@2x.png b/src/imports/controls/imagine/images/radiobutton-indicator-checked-focused@2x.png deleted file mode 100644 index 47ec5534..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-checked-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-checked-focused@3x.png b/src/imports/controls/imagine/images/radiobutton-indicator-checked-focused@3x.png deleted file mode 100644 index 26cdebf8..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-checked-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-checked-focused@4x.png b/src/imports/controls/imagine/images/radiobutton-indicator-checked-focused@4x.png deleted file mode 100644 index 708e286e..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-checked-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-checked-hovered.png b/src/imports/controls/imagine/images/radiobutton-indicator-checked-hovered.png deleted file mode 100644 index 2f9e5e18..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-checked-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-checked-hovered@2x.png b/src/imports/controls/imagine/images/radiobutton-indicator-checked-hovered@2x.png deleted file mode 100644 index 47ec5534..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-checked-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-checked-hovered@3x.png b/src/imports/controls/imagine/images/radiobutton-indicator-checked-hovered@3x.png deleted file mode 100644 index 26cdebf8..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-checked-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-checked-hovered@4x.png b/src/imports/controls/imagine/images/radiobutton-indicator-checked-hovered@4x.png deleted file mode 100644 index 708e286e..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-checked-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-checked-pressed.png b/src/imports/controls/imagine/images/radiobutton-indicator-checked-pressed.png deleted file mode 100644 index 1e5ebca4..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-checked-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-checked-pressed@2x.png b/src/imports/controls/imagine/images/radiobutton-indicator-checked-pressed@2x.png deleted file mode 100644 index 6eaae9bf..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-checked-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-checked-pressed@3x.png b/src/imports/controls/imagine/images/radiobutton-indicator-checked-pressed@3x.png deleted file mode 100644 index e54a1624..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-checked-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-checked-pressed@4x.png b/src/imports/controls/imagine/images/radiobutton-indicator-checked-pressed@4x.png deleted file mode 100644 index 7a7850ba..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-checked-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-checked.png b/src/imports/controls/imagine/images/radiobutton-indicator-checked.png deleted file mode 100644 index 83c85623..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-checked.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-checked@2x.png b/src/imports/controls/imagine/images/radiobutton-indicator-checked@2x.png deleted file mode 100644 index 4bdeb456..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-checked@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-checked@3x.png b/src/imports/controls/imagine/images/radiobutton-indicator-checked@3x.png deleted file mode 100644 index 2230a8ce..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-checked@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-checked@4x.png b/src/imports/controls/imagine/images/radiobutton-indicator-checked@4x.png deleted file mode 100644 index e3dce04e..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-checked@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-disabled.png b/src/imports/controls/imagine/images/radiobutton-indicator-disabled.png deleted file mode 100644 index 05b8bfca..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-disabled@2x.png b/src/imports/controls/imagine/images/radiobutton-indicator-disabled@2x.png deleted file mode 100644 index e26fa5de..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-disabled@3x.png b/src/imports/controls/imagine/images/radiobutton-indicator-disabled@3x.png deleted file mode 100644 index c47e8c7d..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-disabled@4x.png b/src/imports/controls/imagine/images/radiobutton-indicator-disabled@4x.png deleted file mode 100644 index bc66dde7..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-focused.png b/src/imports/controls/imagine/images/radiobutton-indicator-focused.png deleted file mode 100644 index 3001638d..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-focused@2x.png b/src/imports/controls/imagine/images/radiobutton-indicator-focused@2x.png deleted file mode 100644 index b9890714..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-focused@3x.png b/src/imports/controls/imagine/images/radiobutton-indicator-focused@3x.png deleted file mode 100644 index b6221277..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-focused@4x.png b/src/imports/controls/imagine/images/radiobutton-indicator-focused@4x.png deleted file mode 100644 index 49ae2206..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-hovered.png b/src/imports/controls/imagine/images/radiobutton-indicator-hovered.png deleted file mode 100644 index 3001638d..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-hovered@2x.png b/src/imports/controls/imagine/images/radiobutton-indicator-hovered@2x.png deleted file mode 100644 index b9890714..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-hovered@3x.png b/src/imports/controls/imagine/images/radiobutton-indicator-hovered@3x.png deleted file mode 100644 index b6221277..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-hovered@4x.png b/src/imports/controls/imagine/images/radiobutton-indicator-hovered@4x.png deleted file mode 100644 index 49ae2206..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-pressed.png b/src/imports/controls/imagine/images/radiobutton-indicator-pressed.png deleted file mode 100644 index 76c7b4ed..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-pressed@2x.png b/src/imports/controls/imagine/images/radiobutton-indicator-pressed@2x.png deleted file mode 100644 index d5d4cac6..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-pressed@3x.png b/src/imports/controls/imagine/images/radiobutton-indicator-pressed@3x.png deleted file mode 100644 index ca2a1ed1..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator-pressed@4x.png b/src/imports/controls/imagine/images/radiobutton-indicator-pressed@4x.png deleted file mode 100644 index 1cb753d7..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator.png b/src/imports/controls/imagine/images/radiobutton-indicator.png deleted file mode 100644 index c05d4bfc..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator@2x.png b/src/imports/controls/imagine/images/radiobutton-indicator@2x.png deleted file mode 100644 index 62744d27..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator@3x.png b/src/imports/controls/imagine/images/radiobutton-indicator@3x.png deleted file mode 100644 index fa5d241e..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiobutton-indicator@4x.png b/src/imports/controls/imagine/images/radiobutton-indicator@4x.png deleted file mode 100644 index 7db85e94..00000000 Binary files a/src/imports/controls/imagine/images/radiobutton-indicator@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background-disabled.9.png b/src/imports/controls/imagine/images/radiodelegate-background-disabled.9.png deleted file mode 100644 index 23570729..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background-disabled@2x.9.png b/src/imports/controls/imagine/images/radiodelegate-background-disabled@2x.9.png deleted file mode 100644 index c7abb65c..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background-disabled@3x.9.png b/src/imports/controls/imagine/images/radiodelegate-background-disabled@3x.9.png deleted file mode 100644 index 46b84d7d..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background-disabled@4x.9.png b/src/imports/controls/imagine/images/radiodelegate-background-disabled@4x.9.png deleted file mode 100644 index f4dfd338..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background-focused.9.png b/src/imports/controls/imagine/images/radiodelegate-background-focused.9.png deleted file mode 100644 index 6ae574d5..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background-focused@2x.9.png b/src/imports/controls/imagine/images/radiodelegate-background-focused@2x.9.png deleted file mode 100644 index 6b61562c..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background-focused@3x.9.png b/src/imports/controls/imagine/images/radiodelegate-background-focused@3x.9.png deleted file mode 100644 index e46c0bf1..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background-focused@4x.9.png b/src/imports/controls/imagine/images/radiodelegate-background-focused@4x.9.png deleted file mode 100644 index 010444e8..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background-highlighted.9.png b/src/imports/controls/imagine/images/radiodelegate-background-highlighted.9.png deleted file mode 100644 index e79d8e1d..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background-highlighted.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background-highlighted@2x.9.png b/src/imports/controls/imagine/images/radiodelegate-background-highlighted@2x.9.png deleted file mode 100644 index ea68d35f..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background-highlighted@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background-highlighted@3x.9.png b/src/imports/controls/imagine/images/radiodelegate-background-highlighted@3x.9.png deleted file mode 100644 index 6d610415..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background-highlighted@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background-highlighted@4x.9.png b/src/imports/controls/imagine/images/radiodelegate-background-highlighted@4x.9.png deleted file mode 100644 index 590cca96..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background-highlighted@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background-hovered.9.png b/src/imports/controls/imagine/images/radiodelegate-background-hovered.9.png deleted file mode 100644 index b8749743..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background-hovered@2x.9.png b/src/imports/controls/imagine/images/radiodelegate-background-hovered@2x.9.png deleted file mode 100644 index 5a136a0c..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background-hovered@3x.9.png b/src/imports/controls/imagine/images/radiodelegate-background-hovered@3x.9.png deleted file mode 100644 index f47a366b..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background-hovered@4x.9.png b/src/imports/controls/imagine/images/radiodelegate-background-hovered@4x.9.png deleted file mode 100644 index 9ecb680f..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background-pressed.9.png b/src/imports/controls/imagine/images/radiodelegate-background-pressed.9.png deleted file mode 100644 index 6ae574d5..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background-pressed.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background-pressed@2x.9.png b/src/imports/controls/imagine/images/radiodelegate-background-pressed@2x.9.png deleted file mode 100644 index 6b61562c..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background-pressed@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background-pressed@3x.9.png b/src/imports/controls/imagine/images/radiodelegate-background-pressed@3x.9.png deleted file mode 100644 index e46c0bf1..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background-pressed@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background-pressed@4x.9.png b/src/imports/controls/imagine/images/radiodelegate-background-pressed@4x.9.png deleted file mode 100644 index 010444e8..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background-pressed@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background.9.png b/src/imports/controls/imagine/images/radiodelegate-background.9.png deleted file mode 100644 index b8749743..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background@2x.9.png b/src/imports/controls/imagine/images/radiodelegate-background@2x.9.png deleted file mode 100644 index 5a136a0c..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background@3x.9.png b/src/imports/controls/imagine/images/radiodelegate-background@3x.9.png deleted file mode 100644 index f47a366b..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-background@4x.9.png b/src/imports/controls/imagine/images/radiodelegate-background@4x.9.png deleted file mode 100644 index 9ecb680f..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-focused.png b/src/imports/controls/imagine/images/radiodelegate-indicator-checked-focused.png deleted file mode 100644 index 2f9e5e18..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-focused@2x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-checked-focused@2x.png deleted file mode 100644 index 47ec5534..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-focused@3x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-checked-focused@3x.png deleted file mode 100644 index 26cdebf8..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-focused@4x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-checked-focused@4x.png deleted file mode 100644 index 708e286e..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-hovered.png b/src/imports/controls/imagine/images/radiodelegate-indicator-checked-hovered.png deleted file mode 100644 index 2f9e5e18..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-hovered@2x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-checked-hovered@2x.png deleted file mode 100644 index 47ec5534..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-hovered@3x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-checked-hovered@3x.png deleted file mode 100644 index 26cdebf8..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-hovered@4x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-checked-hovered@4x.png deleted file mode 100644 index 708e286e..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-pressed.png b/src/imports/controls/imagine/images/radiodelegate-indicator-checked-pressed.png deleted file mode 100644 index 1e5ebca4..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-pressed@2x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-checked-pressed@2x.png deleted file mode 100644 index 6eaae9bf..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-pressed@3x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-checked-pressed@3x.png deleted file mode 100644 index e54a1624..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-pressed@4x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-checked-pressed@4x.png deleted file mode 100644 index 7a7850ba..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-checked-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-checked.png b/src/imports/controls/imagine/images/radiodelegate-indicator-checked.png deleted file mode 100644 index 83c85623..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-checked.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-checked@2x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-checked@2x.png deleted file mode 100644 index 4bdeb456..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-checked@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-checked@3x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-checked@3x.png deleted file mode 100644 index 2230a8ce..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-checked@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-checked@4x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-checked@4x.png deleted file mode 100644 index e3dce04e..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-checked@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-disabled.png b/src/imports/controls/imagine/images/radiodelegate-indicator-disabled.png deleted file mode 100644 index 05b8bfca..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-disabled@2x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-disabled@2x.png deleted file mode 100644 index e26fa5de..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-disabled@3x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-disabled@3x.png deleted file mode 100644 index c47e8c7d..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-disabled@4x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-disabled@4x.png deleted file mode 100644 index bc66dde7..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-focused.png b/src/imports/controls/imagine/images/radiodelegate-indicator-focused.png deleted file mode 100644 index 3001638d..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-focused@2x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-focused@2x.png deleted file mode 100644 index b9890714..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-focused@3x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-focused@3x.png deleted file mode 100644 index b6221277..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-focused@4x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-focused@4x.png deleted file mode 100644 index 49ae2206..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-hovered.png b/src/imports/controls/imagine/images/radiodelegate-indicator-hovered.png deleted file mode 100644 index 3001638d..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-hovered@2x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-hovered@2x.png deleted file mode 100644 index b9890714..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-hovered@3x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-hovered@3x.png deleted file mode 100644 index b6221277..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-hovered@4x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-hovered@4x.png deleted file mode 100644 index 49ae2206..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-pressed.png b/src/imports/controls/imagine/images/radiodelegate-indicator-pressed.png deleted file mode 100644 index 76c7b4ed..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-pressed@2x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-pressed@2x.png deleted file mode 100644 index d5d4cac6..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-pressed@3x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-pressed@3x.png deleted file mode 100644 index ca2a1ed1..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator-pressed@4x.png b/src/imports/controls/imagine/images/radiodelegate-indicator-pressed@4x.png deleted file mode 100644 index 1cb753d7..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator.png b/src/imports/controls/imagine/images/radiodelegate-indicator.png deleted file mode 100644 index c05d4bfc..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator@2x.png b/src/imports/controls/imagine/images/radiodelegate-indicator@2x.png deleted file mode 100644 index 62744d27..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator@3x.png b/src/imports/controls/imagine/images/radiodelegate-indicator@3x.png deleted file mode 100644 index fa5d241e..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/radiodelegate-indicator@4x.png b/src/imports/controls/imagine/images/radiodelegate-indicator@4x.png deleted file mode 100644 index 7db85e94..00000000 Binary files a/src/imports/controls/imagine/images/radiodelegate-indicator@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-background-horizontal.9.png b/src/imports/controls/imagine/images/rangeslider-background-horizontal.9.png deleted file mode 100644 index c4e957ad..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-background-horizontal.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-background-horizontal@2x.9.png b/src/imports/controls/imagine/images/rangeslider-background-horizontal@2x.9.png deleted file mode 100644 index 6d839113..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-background-horizontal@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-background-horizontal@3x.9.png b/src/imports/controls/imagine/images/rangeslider-background-horizontal@3x.9.png deleted file mode 100644 index 6b2e634c..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-background-horizontal@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-background-horizontal@4x.9.png b/src/imports/controls/imagine/images/rangeslider-background-horizontal@4x.9.png deleted file mode 100644 index 969c791a..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-background-horizontal@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-background-vertical.9.png b/src/imports/controls/imagine/images/rangeslider-background-vertical.9.png deleted file mode 100644 index f76e0b21..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-background-vertical.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-background-vertical@2x.9.png b/src/imports/controls/imagine/images/rangeslider-background-vertical@2x.9.png deleted file mode 100644 index fecd0ab2..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-background-vertical@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-background-vertical@3x.9.png b/src/imports/controls/imagine/images/rangeslider-background-vertical@3x.9.png deleted file mode 100644 index 77a9c830..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-background-vertical@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-background-vertical@4x.9.png b/src/imports/controls/imagine/images/rangeslider-background-vertical@4x.9.png deleted file mode 100644 index f1613684..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-background-vertical@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-disabled.png b/src/imports/controls/imagine/images/rangeslider-handle-disabled.png deleted file mode 100644 index 4934fb77..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-disabled@2x.png b/src/imports/controls/imagine/images/rangeslider-handle-disabled@2x.png deleted file mode 100644 index 451b719e..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-disabled@3x.png b/src/imports/controls/imagine/images/rangeslider-handle-disabled@3x.png deleted file mode 100644 index 1daffca7..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-disabled@4x.png b/src/imports/controls/imagine/images/rangeslider-handle-disabled@4x.png deleted file mode 100644 index 64830707..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-focused-hovered.png b/src/imports/controls/imagine/images/rangeslider-handle-focused-hovered.png deleted file mode 100644 index c2958f1b..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-focused-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-focused-hovered@2x.png b/src/imports/controls/imagine/images/rangeslider-handle-focused-hovered@2x.png deleted file mode 100644 index 12a4d1f8..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-focused-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-focused-hovered@3x.png b/src/imports/controls/imagine/images/rangeslider-handle-focused-hovered@3x.png deleted file mode 100644 index 1696ac95..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-focused-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-focused-hovered@4x.png b/src/imports/controls/imagine/images/rangeslider-handle-focused-hovered@4x.png deleted file mode 100644 index e1d13056..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-focused-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-focused-pressed.png b/src/imports/controls/imagine/images/rangeslider-handle-focused-pressed.png deleted file mode 100644 index c2958f1b..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-focused-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-focused-pressed@2x.png b/src/imports/controls/imagine/images/rangeslider-handle-focused-pressed@2x.png deleted file mode 100644 index 12a4d1f8..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-focused-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-focused-pressed@3x.png b/src/imports/controls/imagine/images/rangeslider-handle-focused-pressed@3x.png deleted file mode 100644 index 1696ac95..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-focused-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-focused-pressed@4x.png b/src/imports/controls/imagine/images/rangeslider-handle-focused-pressed@4x.png deleted file mode 100644 index e1d13056..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-focused-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-focused.png b/src/imports/controls/imagine/images/rangeslider-handle-focused.png deleted file mode 100644 index bdf8239a..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-focused@2x.png b/src/imports/controls/imagine/images/rangeslider-handle-focused@2x.png deleted file mode 100644 index 9f887c5e..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-focused@3x.png b/src/imports/controls/imagine/images/rangeslider-handle-focused@3x.png deleted file mode 100644 index 8042d4c2..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-focused@4x.png b/src/imports/controls/imagine/images/rangeslider-handle-focused@4x.png deleted file mode 100644 index e7e68c47..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-hovered.png b/src/imports/controls/imagine/images/rangeslider-handle-hovered.png deleted file mode 100644 index 4934fb77..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-hovered@2x.png b/src/imports/controls/imagine/images/rangeslider-handle-hovered@2x.png deleted file mode 100644 index 451b719e..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-hovered@3x.png b/src/imports/controls/imagine/images/rangeslider-handle-hovered@3x.png deleted file mode 100644 index 1daffca7..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-hovered@4x.png b/src/imports/controls/imagine/images/rangeslider-handle-hovered@4x.png deleted file mode 100644 index 64830707..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-pressed.png b/src/imports/controls/imagine/images/rangeslider-handle-pressed.png deleted file mode 100644 index 4934fb77..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-pressed@2x.png b/src/imports/controls/imagine/images/rangeslider-handle-pressed@2x.png deleted file mode 100644 index 451b719e..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-pressed@3x.png b/src/imports/controls/imagine/images/rangeslider-handle-pressed@3x.png deleted file mode 100644 index 1daffca7..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle-pressed@4x.png b/src/imports/controls/imagine/images/rangeslider-handle-pressed@4x.png deleted file mode 100644 index 64830707..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle.png b/src/imports/controls/imagine/images/rangeslider-handle.png deleted file mode 100644 index fd72dedf..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle@2x.png b/src/imports/controls/imagine/images/rangeslider-handle@2x.png deleted file mode 100644 index 57eed9f8..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle@3x.png b/src/imports/controls/imagine/images/rangeslider-handle@3x.png deleted file mode 100644 index e217a644..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-handle@4x.png b/src/imports/controls/imagine/images/rangeslider-handle@4x.png deleted file mode 100644 index c212b59f..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-handle@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-progress-horizontal-disabled.9.png b/src/imports/controls/imagine/images/rangeslider-progress-horizontal-disabled.9.png deleted file mode 100644 index 7f7e6b93..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-progress-horizontal-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-progress-horizontal-disabled@2x.9.png b/src/imports/controls/imagine/images/rangeslider-progress-horizontal-disabled@2x.9.png deleted file mode 100644 index cbf6fb63..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-progress-horizontal-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-progress-horizontal-disabled@3x.9.png b/src/imports/controls/imagine/images/rangeslider-progress-horizontal-disabled@3x.9.png deleted file mode 100644 index 643776b8..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-progress-horizontal-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-progress-horizontal-disabled@4x.9.png b/src/imports/controls/imagine/images/rangeslider-progress-horizontal-disabled@4x.9.png deleted file mode 100644 index d64acb90..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-progress-horizontal-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-progress-horizontal.9.png b/src/imports/controls/imagine/images/rangeslider-progress-horizontal.9.png deleted file mode 100644 index 43192f54..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-progress-horizontal.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-progress-horizontal@2x.9.png b/src/imports/controls/imagine/images/rangeslider-progress-horizontal@2x.9.png deleted file mode 100644 index ebbbbf82..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-progress-horizontal@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-progress-horizontal@3x.9.png b/src/imports/controls/imagine/images/rangeslider-progress-horizontal@3x.9.png deleted file mode 100644 index 0a029b53..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-progress-horizontal@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-progress-horizontal@4x.9.png b/src/imports/controls/imagine/images/rangeslider-progress-horizontal@4x.9.png deleted file mode 100644 index a1354169..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-progress-horizontal@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-progress-vertical-disabled.9.png b/src/imports/controls/imagine/images/rangeslider-progress-vertical-disabled.9.png deleted file mode 100644 index a4edafc9..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-progress-vertical-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-progress-vertical-disabled@2x.9.png b/src/imports/controls/imagine/images/rangeslider-progress-vertical-disabled@2x.9.png deleted file mode 100644 index 8c38226e..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-progress-vertical-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-progress-vertical-disabled@3x.9.png b/src/imports/controls/imagine/images/rangeslider-progress-vertical-disabled@3x.9.png deleted file mode 100644 index a939bffd..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-progress-vertical-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-progress-vertical-disabled@4x.9.png b/src/imports/controls/imagine/images/rangeslider-progress-vertical-disabled@4x.9.png deleted file mode 100644 index 9f653770..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-progress-vertical-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-progress-vertical.9.png b/src/imports/controls/imagine/images/rangeslider-progress-vertical.9.png deleted file mode 100644 index d3e877fc..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-progress-vertical.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-progress-vertical@2x.9.png b/src/imports/controls/imagine/images/rangeslider-progress-vertical@2x.9.png deleted file mode 100644 index 7790050e..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-progress-vertical@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-progress-vertical@3x.9.png b/src/imports/controls/imagine/images/rangeslider-progress-vertical@3x.9.png deleted file mode 100644 index 039d1987..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-progress-vertical@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/rangeslider-progress-vertical@4x.9.png b/src/imports/controls/imagine/images/rangeslider-progress-vertical@4x.9.png deleted file mode 100644 index b3051d1f..00000000 Binary files a/src/imports/controls/imagine/images/rangeslider-progress-vertical@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-checked-focused.png b/src/imports/controls/imagine/images/roundbutton-background-checked-focused.png deleted file mode 100644 index 032a7caa..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-checked-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-checked-focused@2x.png b/src/imports/controls/imagine/images/roundbutton-background-checked-focused@2x.png deleted file mode 100644 index a2944b6a..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-checked-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-checked-focused@3x.png b/src/imports/controls/imagine/images/roundbutton-background-checked-focused@3x.png deleted file mode 100644 index ffd4d210..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-checked-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-checked-focused@4x.png b/src/imports/controls/imagine/images/roundbutton-background-checked-focused@4x.png deleted file mode 100644 index 35a41fc5..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-checked-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-checked-hovered.png b/src/imports/controls/imagine/images/roundbutton-background-checked-hovered.png deleted file mode 100644 index 032a7caa..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-checked-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-checked-hovered@2x.png b/src/imports/controls/imagine/images/roundbutton-background-checked-hovered@2x.png deleted file mode 100644 index a2944b6a..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-checked-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-checked-hovered@3x.png b/src/imports/controls/imagine/images/roundbutton-background-checked-hovered@3x.png deleted file mode 100644 index ffd4d210..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-checked-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-checked-hovered@4x.png b/src/imports/controls/imagine/images/roundbutton-background-checked-hovered@4x.png deleted file mode 100644 index 35a41fc5..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-checked-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-checked.png b/src/imports/controls/imagine/images/roundbutton-background-checked.png deleted file mode 100644 index d57d3894..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-checked.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-checked@2x.png b/src/imports/controls/imagine/images/roundbutton-background-checked@2x.png deleted file mode 100644 index 7c374528..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-checked@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-checked@3x.png b/src/imports/controls/imagine/images/roundbutton-background-checked@3x.png deleted file mode 100644 index b0e0b9be..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-checked@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-checked@4x.png b/src/imports/controls/imagine/images/roundbutton-background-checked@4x.png deleted file mode 100644 index 748864ef..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-checked@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-disabled-checked.png b/src/imports/controls/imagine/images/roundbutton-background-disabled-checked.png deleted file mode 100644 index e26fa5de..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-disabled-checked.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-disabled-checked@2x.png b/src/imports/controls/imagine/images/roundbutton-background-disabled-checked@2x.png deleted file mode 100644 index bc66dde7..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-disabled-checked@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-disabled-checked@3x.png b/src/imports/controls/imagine/images/roundbutton-background-disabled-checked@3x.png deleted file mode 100644 index a0c5f9ad..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-disabled-checked@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-disabled-checked@4x.png b/src/imports/controls/imagine/images/roundbutton-background-disabled-checked@4x.png deleted file mode 100644 index 190210c8..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-disabled-checked@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-disabled.png b/src/imports/controls/imagine/images/roundbutton-background-disabled.png deleted file mode 100644 index e26fa5de..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-disabled@2x.png b/src/imports/controls/imagine/images/roundbutton-background-disabled@2x.png deleted file mode 100644 index bc66dde7..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-disabled@3x.png b/src/imports/controls/imagine/images/roundbutton-background-disabled@3x.png deleted file mode 100644 index a0c5f9ad..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-disabled@4x.png b/src/imports/controls/imagine/images/roundbutton-background-disabled@4x.png deleted file mode 100644 index 190210c8..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-focused.png b/src/imports/controls/imagine/images/roundbutton-background-focused.png deleted file mode 100644 index 832955c4..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-focused@2x.png b/src/imports/controls/imagine/images/roundbutton-background-focused@2x.png deleted file mode 100644 index bb1ed2ac..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-focused@3x.png b/src/imports/controls/imagine/images/roundbutton-background-focused@3x.png deleted file mode 100644 index cbf02913..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-focused@4x.png b/src/imports/controls/imagine/images/roundbutton-background-focused@4x.png deleted file mode 100644 index 1c765dee..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-highlighted-focused.png b/src/imports/controls/imagine/images/roundbutton-background-highlighted-focused.png deleted file mode 100644 index 269a9d52..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-highlighted-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-highlighted-focused@2x.png b/src/imports/controls/imagine/images/roundbutton-background-highlighted-focused@2x.png deleted file mode 100644 index bd795651..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-highlighted-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-highlighted-focused@3x.png b/src/imports/controls/imagine/images/roundbutton-background-highlighted-focused@3x.png deleted file mode 100644 index 5ed0f662..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-highlighted-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-highlighted-focused@4x.png b/src/imports/controls/imagine/images/roundbutton-background-highlighted-focused@4x.png deleted file mode 100644 index 5bbb8e7a..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-highlighted-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-highlighted-hovered.png b/src/imports/controls/imagine/images/roundbutton-background-highlighted-hovered.png deleted file mode 100644 index 269a9d52..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-highlighted-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-highlighted-hovered@2x.png b/src/imports/controls/imagine/images/roundbutton-background-highlighted-hovered@2x.png deleted file mode 100644 index bd795651..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-highlighted-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-highlighted-hovered@3x.png b/src/imports/controls/imagine/images/roundbutton-background-highlighted-hovered@3x.png deleted file mode 100644 index 5ed0f662..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-highlighted-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-highlighted-hovered@4x.png b/src/imports/controls/imagine/images/roundbutton-background-highlighted-hovered@4x.png deleted file mode 100644 index 5bbb8e7a..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-highlighted-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-highlighted-pressed.png b/src/imports/controls/imagine/images/roundbutton-background-highlighted-pressed.png deleted file mode 100644 index a0fa8df0..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-highlighted-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-highlighted-pressed@2x.png b/src/imports/controls/imagine/images/roundbutton-background-highlighted-pressed@2x.png deleted file mode 100644 index 3082a1d9..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-highlighted-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-highlighted-pressed@3x.png b/src/imports/controls/imagine/images/roundbutton-background-highlighted-pressed@3x.png deleted file mode 100644 index d32e8af0..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-highlighted-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-highlighted-pressed@4x.png b/src/imports/controls/imagine/images/roundbutton-background-highlighted-pressed@4x.png deleted file mode 100644 index f4916e0b..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-highlighted-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-highlighted.png b/src/imports/controls/imagine/images/roundbutton-background-highlighted.png deleted file mode 100644 index f90e29f9..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-highlighted.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-highlighted@2x.png b/src/imports/controls/imagine/images/roundbutton-background-highlighted@2x.png deleted file mode 100644 index 7dce11b4..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-highlighted@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-highlighted@3x.png b/src/imports/controls/imagine/images/roundbutton-background-highlighted@3x.png deleted file mode 100644 index 436abbdd..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-highlighted@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-highlighted@4x.png b/src/imports/controls/imagine/images/roundbutton-background-highlighted@4x.png deleted file mode 100644 index e728d6fa..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-highlighted@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-hovered.png b/src/imports/controls/imagine/images/roundbutton-background-hovered.png deleted file mode 100644 index 832955c4..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-hovered@2x.png b/src/imports/controls/imagine/images/roundbutton-background-hovered@2x.png deleted file mode 100644 index bb1ed2ac..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-hovered@3x.png b/src/imports/controls/imagine/images/roundbutton-background-hovered@3x.png deleted file mode 100644 index cbf02913..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-hovered@4x.png b/src/imports/controls/imagine/images/roundbutton-background-hovered@4x.png deleted file mode 100644 index 1c765dee..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-pressed.png b/src/imports/controls/imagine/images/roundbutton-background-pressed.png deleted file mode 100644 index d57d3894..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-pressed@2x.png b/src/imports/controls/imagine/images/roundbutton-background-pressed@2x.png deleted file mode 100644 index 7c374528..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-pressed@3x.png b/src/imports/controls/imagine/images/roundbutton-background-pressed@3x.png deleted file mode 100644 index b0e0b9be..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background-pressed@4x.png b/src/imports/controls/imagine/images/roundbutton-background-pressed@4x.png deleted file mode 100644 index 748864ef..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background.png b/src/imports/controls/imagine/images/roundbutton-background.png deleted file mode 100644 index d5d4cac6..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background@2x.png b/src/imports/controls/imagine/images/roundbutton-background@2x.png deleted file mode 100644 index 1cb753d7..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background@3x.png b/src/imports/controls/imagine/images/roundbutton-background@3x.png deleted file mode 100644 index 6cc304bf..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/roundbutton-background@4x.png b/src/imports/controls/imagine/images/roundbutton-background@4x.png deleted file mode 100644 index 56ea82f6..00000000 Binary files a/src/imports/controls/imagine/images/roundbutton-background@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle-disabled.png b/src/imports/controls/imagine/images/scrollbar-handle-disabled.png deleted file mode 100644 index b0b95bed..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle-disabled@2x.png b/src/imports/controls/imagine/images/scrollbar-handle-disabled@2x.png deleted file mode 100644 index 8ab854b0..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle-disabled@3x.png b/src/imports/controls/imagine/images/scrollbar-handle-disabled@3x.png deleted file mode 100644 index f3c97231..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle-disabled@4x.png b/src/imports/controls/imagine/images/scrollbar-handle-disabled@4x.png deleted file mode 100644 index 325469b8..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle-interactive-disabled.png b/src/imports/controls/imagine/images/scrollbar-handle-interactive-disabled.png deleted file mode 100644 index 236002ff..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle-interactive-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle-interactive-disabled@2x.png b/src/imports/controls/imagine/images/scrollbar-handle-interactive-disabled@2x.png deleted file mode 100644 index abc3d2c0..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle-interactive-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle-interactive-disabled@3x.png b/src/imports/controls/imagine/images/scrollbar-handle-interactive-disabled@3x.png deleted file mode 100644 index e215cf5b..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle-interactive-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle-interactive-disabled@4x.png b/src/imports/controls/imagine/images/scrollbar-handle-interactive-disabled@4x.png deleted file mode 100644 index c6ec0520..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle-interactive-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle-interactive-hovered.png b/src/imports/controls/imagine/images/scrollbar-handle-interactive-hovered.png deleted file mode 100644 index 19b48f1d..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle-interactive-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle-interactive-hovered@2x.png b/src/imports/controls/imagine/images/scrollbar-handle-interactive-hovered@2x.png deleted file mode 100644 index 8f5abb84..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle-interactive-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle-interactive-hovered@3x.png b/src/imports/controls/imagine/images/scrollbar-handle-interactive-hovered@3x.png deleted file mode 100644 index 73963d75..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle-interactive-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle-interactive-hovered@4x.png b/src/imports/controls/imagine/images/scrollbar-handle-interactive-hovered@4x.png deleted file mode 100644 index 04d6131e..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle-interactive-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle-interactive-pressed.png b/src/imports/controls/imagine/images/scrollbar-handle-interactive-pressed.png deleted file mode 100644 index f48f514d..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle-interactive-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle-interactive-pressed@2x.png b/src/imports/controls/imagine/images/scrollbar-handle-interactive-pressed@2x.png deleted file mode 100644 index e31820ad..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle-interactive-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle-interactive-pressed@3x.png b/src/imports/controls/imagine/images/scrollbar-handle-interactive-pressed@3x.png deleted file mode 100644 index 278ba900..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle-interactive-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle-interactive-pressed@4x.png b/src/imports/controls/imagine/images/scrollbar-handle-interactive-pressed@4x.png deleted file mode 100644 index 01e4e5c8..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle-interactive-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle-interactive.png b/src/imports/controls/imagine/images/scrollbar-handle-interactive.png deleted file mode 100644 index fd7832a6..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle-interactive.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle-interactive@2x.png b/src/imports/controls/imagine/images/scrollbar-handle-interactive@2x.png deleted file mode 100644 index bd63a1b1..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle-interactive@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle-interactive@3x.png b/src/imports/controls/imagine/images/scrollbar-handle-interactive@3x.png deleted file mode 100644 index 31452954..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle-interactive@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle-interactive@4x.png b/src/imports/controls/imagine/images/scrollbar-handle-interactive@4x.png deleted file mode 100644 index 6db4d81d..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle-interactive@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle.png b/src/imports/controls/imagine/images/scrollbar-handle.png deleted file mode 100644 index 255f6c4d..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle@2x.png b/src/imports/controls/imagine/images/scrollbar-handle@2x.png deleted file mode 100644 index 2b69cef6..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle@3x.png b/src/imports/controls/imagine/images/scrollbar-handle@3x.png deleted file mode 100644 index 6fdfa487..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollbar-handle@4x.png b/src/imports/controls/imagine/images/scrollbar-handle@4x.png deleted file mode 100644 index cc3205f1..00000000 Binary files a/src/imports/controls/imagine/images/scrollbar-handle@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollindicator-handle.png b/src/imports/controls/imagine/images/scrollindicator-handle.png deleted file mode 100644 index 255f6c4d..00000000 Binary files a/src/imports/controls/imagine/images/scrollindicator-handle.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollindicator-handle@2x.png b/src/imports/controls/imagine/images/scrollindicator-handle@2x.png deleted file mode 100644 index 2b69cef6..00000000 Binary files a/src/imports/controls/imagine/images/scrollindicator-handle@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollindicator-handle@3x.png b/src/imports/controls/imagine/images/scrollindicator-handle@3x.png deleted file mode 100644 index 6fdfa487..00000000 Binary files a/src/imports/controls/imagine/images/scrollindicator-handle@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/scrollindicator-handle@4x.png b/src/imports/controls/imagine/images/scrollindicator-handle@4x.png deleted file mode 100644 index cc3205f1..00000000 Binary files a/src/imports/controls/imagine/images/scrollindicator-handle@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-background-horizontal.9.png b/src/imports/controls/imagine/images/slider-background-horizontal.9.png deleted file mode 100644 index c4e957ad..00000000 Binary files a/src/imports/controls/imagine/images/slider-background-horizontal.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-background-horizontal@2x.9.png b/src/imports/controls/imagine/images/slider-background-horizontal@2x.9.png deleted file mode 100644 index 6d839113..00000000 Binary files a/src/imports/controls/imagine/images/slider-background-horizontal@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-background-horizontal@3x.9.png b/src/imports/controls/imagine/images/slider-background-horizontal@3x.9.png deleted file mode 100644 index 6b2e634c..00000000 Binary files a/src/imports/controls/imagine/images/slider-background-horizontal@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-background-horizontal@4x.9.png b/src/imports/controls/imagine/images/slider-background-horizontal@4x.9.png deleted file mode 100644 index 969c791a..00000000 Binary files a/src/imports/controls/imagine/images/slider-background-horizontal@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-background-vertical.9.png b/src/imports/controls/imagine/images/slider-background-vertical.9.png deleted file mode 100644 index f76e0b21..00000000 Binary files a/src/imports/controls/imagine/images/slider-background-vertical.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-background-vertical@2x.9.png b/src/imports/controls/imagine/images/slider-background-vertical@2x.9.png deleted file mode 100644 index fecd0ab2..00000000 Binary files a/src/imports/controls/imagine/images/slider-background-vertical@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-background-vertical@3x.9.png b/src/imports/controls/imagine/images/slider-background-vertical@3x.9.png deleted file mode 100644 index 77a9c830..00000000 Binary files a/src/imports/controls/imagine/images/slider-background-vertical@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-background-vertical@4x.9.png b/src/imports/controls/imagine/images/slider-background-vertical@4x.9.png deleted file mode 100644 index f1613684..00000000 Binary files a/src/imports/controls/imagine/images/slider-background-vertical@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-disabled.png b/src/imports/controls/imagine/images/slider-handle-disabled.png deleted file mode 100644 index 4934fb77..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-disabled@2x.png b/src/imports/controls/imagine/images/slider-handle-disabled@2x.png deleted file mode 100644 index 451b719e..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-disabled@3x.png b/src/imports/controls/imagine/images/slider-handle-disabled@3x.png deleted file mode 100644 index 1daffca7..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-disabled@4x.png b/src/imports/controls/imagine/images/slider-handle-disabled@4x.png deleted file mode 100644 index 64830707..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-focused-hovered.png b/src/imports/controls/imagine/images/slider-handle-focused-hovered.png deleted file mode 100644 index c2958f1b..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-focused-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-focused-hovered@2x.png b/src/imports/controls/imagine/images/slider-handle-focused-hovered@2x.png deleted file mode 100644 index 12a4d1f8..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-focused-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-focused-hovered@3x.png b/src/imports/controls/imagine/images/slider-handle-focused-hovered@3x.png deleted file mode 100644 index 1696ac95..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-focused-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-focused-hovered@4x.png b/src/imports/controls/imagine/images/slider-handle-focused-hovered@4x.png deleted file mode 100644 index e1d13056..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-focused-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-focused-pressed.png b/src/imports/controls/imagine/images/slider-handle-focused-pressed.png deleted file mode 100644 index c2958f1b..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-focused-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-focused-pressed@2x.png b/src/imports/controls/imagine/images/slider-handle-focused-pressed@2x.png deleted file mode 100644 index 12a4d1f8..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-focused-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-focused-pressed@3x.png b/src/imports/controls/imagine/images/slider-handle-focused-pressed@3x.png deleted file mode 100644 index 1696ac95..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-focused-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-focused-pressed@4x.png b/src/imports/controls/imagine/images/slider-handle-focused-pressed@4x.png deleted file mode 100644 index e1d13056..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-focused-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-focused.png b/src/imports/controls/imagine/images/slider-handle-focused.png deleted file mode 100644 index bdf8239a..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-focused@2x.png b/src/imports/controls/imagine/images/slider-handle-focused@2x.png deleted file mode 100644 index 9f887c5e..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-focused@3x.png b/src/imports/controls/imagine/images/slider-handle-focused@3x.png deleted file mode 100644 index 8042d4c2..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-focused@4x.png b/src/imports/controls/imagine/images/slider-handle-focused@4x.png deleted file mode 100644 index e7e68c47..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-hovered.png b/src/imports/controls/imagine/images/slider-handle-hovered.png deleted file mode 100644 index 4934fb77..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-hovered@2x.png b/src/imports/controls/imagine/images/slider-handle-hovered@2x.png deleted file mode 100644 index 451b719e..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-hovered@3x.png b/src/imports/controls/imagine/images/slider-handle-hovered@3x.png deleted file mode 100644 index 1daffca7..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-hovered@4x.png b/src/imports/controls/imagine/images/slider-handle-hovered@4x.png deleted file mode 100644 index 64830707..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-pressed.png b/src/imports/controls/imagine/images/slider-handle-pressed.png deleted file mode 100644 index 4934fb77..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-pressed@2x.png b/src/imports/controls/imagine/images/slider-handle-pressed@2x.png deleted file mode 100644 index 451b719e..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-pressed@3x.png b/src/imports/controls/imagine/images/slider-handle-pressed@3x.png deleted file mode 100644 index 1daffca7..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle-pressed@4x.png b/src/imports/controls/imagine/images/slider-handle-pressed@4x.png deleted file mode 100644 index 64830707..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle.png b/src/imports/controls/imagine/images/slider-handle.png deleted file mode 100644 index fd72dedf..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle@2x.png b/src/imports/controls/imagine/images/slider-handle@2x.png deleted file mode 100644 index 57eed9f8..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle@3x.png b/src/imports/controls/imagine/images/slider-handle@3x.png deleted file mode 100644 index e217a644..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-handle@4x.png b/src/imports/controls/imagine/images/slider-handle@4x.png deleted file mode 100644 index c212b59f..00000000 Binary files a/src/imports/controls/imagine/images/slider-handle@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-progress-horizontal-disabled.9.png b/src/imports/controls/imagine/images/slider-progress-horizontal-disabled.9.png deleted file mode 100644 index 7f7e6b93..00000000 Binary files a/src/imports/controls/imagine/images/slider-progress-horizontal-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-progress-horizontal-disabled@2x.9.png b/src/imports/controls/imagine/images/slider-progress-horizontal-disabled@2x.9.png deleted file mode 100644 index cbf6fb63..00000000 Binary files a/src/imports/controls/imagine/images/slider-progress-horizontal-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-progress-horizontal-disabled@3x.9.png b/src/imports/controls/imagine/images/slider-progress-horizontal-disabled@3x.9.png deleted file mode 100644 index 643776b8..00000000 Binary files a/src/imports/controls/imagine/images/slider-progress-horizontal-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-progress-horizontal-disabled@4x.9.png b/src/imports/controls/imagine/images/slider-progress-horizontal-disabled@4x.9.png deleted file mode 100644 index d64acb90..00000000 Binary files a/src/imports/controls/imagine/images/slider-progress-horizontal-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-progress-horizontal.9.png b/src/imports/controls/imagine/images/slider-progress-horizontal.9.png deleted file mode 100644 index 43192f54..00000000 Binary files a/src/imports/controls/imagine/images/slider-progress-horizontal.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-progress-horizontal@2x.9.png b/src/imports/controls/imagine/images/slider-progress-horizontal@2x.9.png deleted file mode 100644 index ebbbbf82..00000000 Binary files a/src/imports/controls/imagine/images/slider-progress-horizontal@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-progress-horizontal@3x.9.png b/src/imports/controls/imagine/images/slider-progress-horizontal@3x.9.png deleted file mode 100644 index 0a029b53..00000000 Binary files a/src/imports/controls/imagine/images/slider-progress-horizontal@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-progress-horizontal@4x.9.png b/src/imports/controls/imagine/images/slider-progress-horizontal@4x.9.png deleted file mode 100644 index a1354169..00000000 Binary files a/src/imports/controls/imagine/images/slider-progress-horizontal@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-progress-vertical-disabled.9.png b/src/imports/controls/imagine/images/slider-progress-vertical-disabled.9.png deleted file mode 100644 index a4edafc9..00000000 Binary files a/src/imports/controls/imagine/images/slider-progress-vertical-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-progress-vertical-disabled@2x.9.png b/src/imports/controls/imagine/images/slider-progress-vertical-disabled@2x.9.png deleted file mode 100644 index 8c38226e..00000000 Binary files a/src/imports/controls/imagine/images/slider-progress-vertical-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-progress-vertical-disabled@3x.9.png b/src/imports/controls/imagine/images/slider-progress-vertical-disabled@3x.9.png deleted file mode 100644 index a939bffd..00000000 Binary files a/src/imports/controls/imagine/images/slider-progress-vertical-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-progress-vertical-disabled@4x.9.png b/src/imports/controls/imagine/images/slider-progress-vertical-disabled@4x.9.png deleted file mode 100644 index 9f653770..00000000 Binary files a/src/imports/controls/imagine/images/slider-progress-vertical-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-progress-vertical.9.png b/src/imports/controls/imagine/images/slider-progress-vertical.9.png deleted file mode 100644 index d3e877fc..00000000 Binary files a/src/imports/controls/imagine/images/slider-progress-vertical.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-progress-vertical@2x.9.png b/src/imports/controls/imagine/images/slider-progress-vertical@2x.9.png deleted file mode 100644 index 7790050e..00000000 Binary files a/src/imports/controls/imagine/images/slider-progress-vertical@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-progress-vertical@3x.9.png b/src/imports/controls/imagine/images/slider-progress-vertical@3x.9.png deleted file mode 100644 index 039d1987..00000000 Binary files a/src/imports/controls/imagine/images/slider-progress-vertical@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/slider-progress-vertical@4x.9.png b/src/imports/controls/imagine/images/slider-progress-vertical@4x.9.png deleted file mode 100644 index b3051d1f..00000000 Binary files a/src/imports/controls/imagine/images/slider-progress-vertical@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-background-disabled.9.png b/src/imports/controls/imagine/images/spinbox-background-disabled.9.png deleted file mode 100644 index 7baaeec5..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-background-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-background-disabled@2x.9.png b/src/imports/controls/imagine/images/spinbox-background-disabled@2x.9.png deleted file mode 100644 index e0d59070..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-background-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-background-disabled@3x.9.png b/src/imports/controls/imagine/images/spinbox-background-disabled@3x.9.png deleted file mode 100644 index 24b3054d..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-background-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-background-disabled@4x.9.png b/src/imports/controls/imagine/images/spinbox-background-disabled@4x.9.png deleted file mode 100644 index 8ac4740a..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-background-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-background-editable.9.png b/src/imports/controls/imagine/images/spinbox-background-editable.9.png deleted file mode 100644 index 995c8276..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-background-editable.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-background-editable@2x.9.png b/src/imports/controls/imagine/images/spinbox-background-editable@2x.9.png deleted file mode 100644 index 42c9dd6b..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-background-editable@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-background-editable@3x.9.png b/src/imports/controls/imagine/images/spinbox-background-editable@3x.9.png deleted file mode 100644 index 4ee974a1..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-background-editable@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-background-editable@4x.9.png b/src/imports/controls/imagine/images/spinbox-background-editable@4x.9.png deleted file mode 100644 index 59b00915..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-background-editable@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-background-focused.9.png b/src/imports/controls/imagine/images/spinbox-background-focused.9.png deleted file mode 100644 index 27751eac..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-background-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-background-focused@2x.9.png b/src/imports/controls/imagine/images/spinbox-background-focused@2x.9.png deleted file mode 100644 index 1692578f..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-background-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-background-focused@3x.9.png b/src/imports/controls/imagine/images/spinbox-background-focused@3x.9.png deleted file mode 100644 index 4c44c1bb..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-background-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-background-focused@4x.9.png b/src/imports/controls/imagine/images/spinbox-background-focused@4x.9.png deleted file mode 100644 index f8632bf2..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-background-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-background.9.png b/src/imports/controls/imagine/images/spinbox-background.9.png deleted file mode 100644 index ae8b043b..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-background@2x.9.png b/src/imports/controls/imagine/images/spinbox-background@2x.9.png deleted file mode 100644 index eaae097e..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-background@3x.9.png b/src/imports/controls/imagine/images/spinbox-background@3x.9.png deleted file mode 100644 index d8add811..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-background@4x.9.png b/src/imports/controls/imagine/images/spinbox-background@4x.9.png deleted file mode 100644 index d954febf..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-disabled.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-disabled.9.png deleted file mode 100644 index b3953398..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-disabled@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-disabled@2x.9.png deleted file mode 100644 index 18e2ca65..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-disabled@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-disabled@3x.9.png deleted file mode 100644 index ed6674b4..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-disabled@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-disabled@4x.9.png deleted file mode 100644 index 0da2cf93..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-focused.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-focused.9.png deleted file mode 100644 index 46220a8e..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-focused@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-focused@2x.9.png deleted file mode 100644 index b8ebb7b7..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-focused@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-focused@3x.9.png deleted file mode 100644 index 10561d8d..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-focused@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-focused@4x.9.png deleted file mode 100644 index ccd09d69..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-hovered.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-hovered.9.png deleted file mode 100644 index 46220a8e..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-hovered@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-hovered@2x.9.png deleted file mode 100644 index b8ebb7b7..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-hovered@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-hovered@3x.9.png deleted file mode 100644 index 10561d8d..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-hovered@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-hovered@4x.9.png deleted file mode 100644 index ccd09d69..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-focused.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-focused.9.png deleted file mode 100644 index 23842de4..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-focused@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-focused@2x.9.png deleted file mode 100644 index e5078932..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-focused@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-focused@3x.9.png deleted file mode 100644 index 7edec0c9..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-focused@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-focused@4x.9.png deleted file mode 100644 index f6e5ff82..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-hovered.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-hovered.9.png deleted file mode 100644 index 23842de4..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@2x.9.png deleted file mode 100644 index e5078932..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@3x.9.png deleted file mode 100644 index 7edec0c9..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@4x.9.png deleted file mode 100644 index f6e5ff82..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-pressed.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-pressed.9.png deleted file mode 100644 index b6917a03..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-pressed.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@2x.9.png deleted file mode 100644 index 8999d3e4..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@3x.9.png deleted file mode 100644 index 77aa0044..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@4x.9.png deleted file mode 100644 index 4f2fd261..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored.9.png deleted file mode 100644 index 3c3da5b1..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored@2x.9.png deleted file mode 100644 index e0760e07..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored@3x.9.png deleted file mode 100644 index c37080f5..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored@4x.9.png deleted file mode 100644 index bdc24823..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-mirrored@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-pressed.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-pressed.9.png deleted file mode 100644 index 65f2821b..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-pressed.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-pressed@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-pressed@2x.9.png deleted file mode 100644 index 010dd9d0..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-pressed@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-pressed@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-pressed@3x.9.png deleted file mode 100644 index f647f489..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-pressed@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-pressed@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable-pressed@4x.9.png deleted file mode 100644 index db0486d1..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable-pressed@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable.9.png deleted file mode 100644 index c3207f31..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable@2x.9.png deleted file mode 100644 index c8c2630e..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable@3x.9.png deleted file mode 100644 index d0a6c818..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-editable@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-editable@4x.9.png deleted file mode 100644 index 40e89762..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-editable@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-focused.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-focused.9.png deleted file mode 100644 index 6ad31bb0..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-focused@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-focused@2x.9.png deleted file mode 100644 index 6cc60b4b..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-focused@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-focused@3x.9.png deleted file mode 100644 index 722c7ec7..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-focused@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-focused@4x.9.png deleted file mode 100644 index 64fa4ab6..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-hovered.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-hovered.9.png deleted file mode 100644 index 6ad31bb0..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-hovered@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-hovered@2x.9.png deleted file mode 100644 index 6cc60b4b..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-hovered@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-hovered@3x.9.png deleted file mode 100644 index 722c7ec7..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-hovered@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-hovered@4x.9.png deleted file mode 100644 index 64fa4ab6..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-disabled.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-disabled.9.png deleted file mode 100644 index ac7da20e..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-disabled@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-disabled@2x.9.png deleted file mode 100644 index a12f3615..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-disabled@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-disabled@3x.9.png deleted file mode 100644 index de11317b..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-disabled@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-disabled@4x.9.png deleted file mode 100644 index 8be41f38..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-focused.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-focused.9.png deleted file mode 100644 index 6b6e5264..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-focused@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-focused@2x.9.png deleted file mode 100644 index e0c36da3..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-focused@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-focused@3x.9.png deleted file mode 100644 index ca2389da..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-focused@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-focused@4x.9.png deleted file mode 100644 index 7e6c5474..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-hovered.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-hovered.9.png deleted file mode 100644 index 6b6e5264..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-hovered@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-hovered@2x.9.png deleted file mode 100644 index e0c36da3..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-hovered@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-hovered@3x.9.png deleted file mode 100644 index ca2389da..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-hovered@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-hovered@4x.9.png deleted file mode 100644 index 7e6c5474..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-pressed.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-pressed.9.png deleted file mode 100644 index d756679f..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-pressed.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-pressed@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-pressed@2x.9.png deleted file mode 100644 index e49c7e89..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-pressed@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-pressed@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-pressed@3x.9.png deleted file mode 100644 index 6041ffdc..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-pressed@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-pressed@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-pressed@4x.9.png deleted file mode 100644 index e23dda15..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored-pressed@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored.9.png deleted file mode 100644 index 58be2120..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored@2x.9.png deleted file mode 100644 index 709a1ab6..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored@3x.9.png deleted file mode 100644 index ee5b5b82..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored@4x.9.png deleted file mode 100644 index 1e88d44d..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-mirrored@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-pressed.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-pressed.9.png deleted file mode 100644 index 9703314b..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-pressed.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-pressed@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-pressed@2x.9.png deleted file mode 100644 index 173eccfb..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-pressed@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-pressed@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-pressed@3x.9.png deleted file mode 100644 index 77737c75..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-pressed@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down-pressed@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down-pressed@4x.9.png deleted file mode 100644 index 6a2bb865..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down-pressed@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down.9.png deleted file mode 100644 index a6c9679a..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down@2x.9.png deleted file mode 100644 index bd14cdbb..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down@3x.9.png deleted file mode 100644 index 02d18c1d..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-down@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-down@4x.9.png deleted file mode 100644 index 9ec1bf04..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-down@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-disabled.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-disabled.9.png deleted file mode 100644 index 5fe5ab6a..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-disabled@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-disabled@2x.9.png deleted file mode 100644 index f7a2a5d5..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-disabled@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-disabled@3x.9.png deleted file mode 100644 index 3244c93f..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-disabled@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-disabled@4x.9.png deleted file mode 100644 index 82482005..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-focused.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-focused.9.png deleted file mode 100644 index d291c50a..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-focused@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-focused@2x.9.png deleted file mode 100644 index 06e27b1b..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-focused@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-focused@3x.9.png deleted file mode 100644 index 34b43735..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-focused@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-focused@4x.9.png deleted file mode 100644 index 4a95cca4..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-hovered.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-hovered.9.png deleted file mode 100644 index d291c50a..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-hovered@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-hovered@2x.9.png deleted file mode 100644 index 06e27b1b..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-hovered@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-hovered@3x.9.png deleted file mode 100644 index 34b43735..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-hovered@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-hovered@4x.9.png deleted file mode 100644 index 4a95cca4..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-focused.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-focused.9.png deleted file mode 100644 index a98d5a1d..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-focused@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-focused@2x.9.png deleted file mode 100644 index 4b845860..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-focused@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-focused@3x.9.png deleted file mode 100644 index da241c07..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-focused@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-focused@4x.9.png deleted file mode 100644 index d1333671..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-hovered.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-hovered.9.png deleted file mode 100644 index a98d5a1d..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@2x.9.png deleted file mode 100644 index 4b845860..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@3x.9.png deleted file mode 100644 index da241c07..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@4x.9.png deleted file mode 100644 index d1333671..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-pressed.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-pressed.9.png deleted file mode 100644 index 793e009d..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-pressed.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@2x.9.png deleted file mode 100644 index aca00c57..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@3x.9.png deleted file mode 100644 index a49b9549..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@4x.9.png deleted file mode 100644 index e0814f3b..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored.9.png deleted file mode 100644 index ac4c46d1..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored@2x.9.png deleted file mode 100644 index b1c335ee..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored@3x.9.png deleted file mode 100644 index 3f0d9f2f..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored@4x.9.png deleted file mode 100644 index cac6eca8..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-mirrored@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-pressed.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-pressed.9.png deleted file mode 100644 index 87a1ae7a..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-pressed.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-pressed@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-pressed@2x.9.png deleted file mode 100644 index 95c5ea06..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-pressed@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-pressed@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-pressed@3x.9.png deleted file mode 100644 index 3ed6cddf..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-pressed@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-pressed@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable-pressed@4x.9.png deleted file mode 100644 index 8f5e3f02..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable-pressed@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable.9.png deleted file mode 100644 index b3cc7bea..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable@2x.9.png deleted file mode 100644 index 51313f59..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable@3x.9.png deleted file mode 100644 index 8db540f5..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-editable@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-editable@4x.9.png deleted file mode 100644 index 310400a2..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-editable@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-focused.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-focused.9.png deleted file mode 100644 index d88bd00d..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-focused@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-focused@2x.9.png deleted file mode 100644 index 77dbb52a..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-focused@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-focused@3x.9.png deleted file mode 100644 index 0739b1b1..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-focused@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-focused@4x.9.png deleted file mode 100644 index d53ee543..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-hovered.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-hovered.9.png deleted file mode 100644 index d88bd00d..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-hovered@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-hovered@2x.9.png deleted file mode 100644 index 77dbb52a..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-hovered@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-hovered@3x.9.png deleted file mode 100644 index 0739b1b1..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-hovered@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-hovered@4x.9.png deleted file mode 100644 index d53ee543..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-disabled.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-disabled.9.png deleted file mode 100644 index 53f6d7e5..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-disabled@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-disabled@2x.9.png deleted file mode 100644 index 7c7bb214..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-disabled@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-disabled@3x.9.png deleted file mode 100644 index 5a69027c..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-disabled@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-disabled@4x.9.png deleted file mode 100644 index fe2171a5..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-focused.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-focused.9.png deleted file mode 100644 index cf31f936..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-focused@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-focused@2x.9.png deleted file mode 100644 index 48b8861e..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-focused@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-focused@3x.9.png deleted file mode 100644 index d6a41720..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-focused@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-focused@4x.9.png deleted file mode 100644 index e0c7e374..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-hovered.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-hovered.9.png deleted file mode 100644 index cf31f936..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-hovered@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-hovered@2x.9.png deleted file mode 100644 index 48b8861e..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-hovered@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-hovered@3x.9.png deleted file mode 100644 index d6a41720..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-hovered@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-hovered@4x.9.png deleted file mode 100644 index e0c7e374..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-pressed.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-pressed.9.png deleted file mode 100644 index 4548cddd..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-pressed.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-pressed@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-pressed@2x.9.png deleted file mode 100644 index c5fb9d1b..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-pressed@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-pressed@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-pressed@3x.9.png deleted file mode 100644 index ffbe520a..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-pressed@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-pressed@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-pressed@4x.9.png deleted file mode 100644 index 784f9bee..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored-pressed@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored.9.png deleted file mode 100644 index f2679457..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored@2x.9.png deleted file mode 100644 index 7f07e625..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored@3x.9.png deleted file mode 100644 index 0b060816..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored@4x.9.png deleted file mode 100644 index df76dfce..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-mirrored@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-pressed.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-pressed.9.png deleted file mode 100644 index cbba897f..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-pressed.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-pressed@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-pressed@2x.9.png deleted file mode 100644 index a49e11fa..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-pressed@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-pressed@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-pressed@3x.9.png deleted file mode 100644 index 720e4543..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-pressed@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up-pressed@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up-pressed@4x.9.png deleted file mode 100644 index 46333e3d..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up-pressed@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up.9.png deleted file mode 100644 index 67cbe434..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up@2x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up@2x.9.png deleted file mode 100644 index 8e804b87..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up@3x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up@3x.9.png deleted file mode 100644 index 15baec74..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/spinbox-indicator-up@4x.9.png b/src/imports/controls/imagine/images/spinbox-indicator-up@4x.9.png deleted file mode 100644 index 7112de67..00000000 Binary files a/src/imports/controls/imagine/images/spinbox-indicator-up@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/splitview-handle-disabled.png b/src/imports/controls/imagine/images/splitview-handle-disabled.png deleted file mode 100644 index 8ab854b0..00000000 Binary files a/src/imports/controls/imagine/images/splitview-handle-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/splitview-handle-disabled@2x.png b/src/imports/controls/imagine/images/splitview-handle-disabled@2x.png deleted file mode 100644 index 325469b8..00000000 Binary files a/src/imports/controls/imagine/images/splitview-handle-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/splitview-handle-disabled@3x.png b/src/imports/controls/imagine/images/splitview-handle-disabled@3x.png deleted file mode 100644 index 5357e847..00000000 Binary files a/src/imports/controls/imagine/images/splitview-handle-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/splitview-handle-disabled@4x.png b/src/imports/controls/imagine/images/splitview-handle-disabled@4x.png deleted file mode 100644 index e215cf5b..00000000 Binary files a/src/imports/controls/imagine/images/splitview-handle-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/splitview-handle-hovered.png b/src/imports/controls/imagine/images/splitview-handle-hovered.png deleted file mode 100644 index 429d5508..00000000 Binary files a/src/imports/controls/imagine/images/splitview-handle-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/splitview-handle-hovered@2x.png b/src/imports/controls/imagine/images/splitview-handle-hovered@2x.png deleted file mode 100644 index 6f17b06e..00000000 Binary files a/src/imports/controls/imagine/images/splitview-handle-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/splitview-handle-hovered@3x.png b/src/imports/controls/imagine/images/splitview-handle-hovered@3x.png deleted file mode 100644 index 11dcfa26..00000000 Binary files a/src/imports/controls/imagine/images/splitview-handle-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/splitview-handle-hovered@4x.png b/src/imports/controls/imagine/images/splitview-handle-hovered@4x.png deleted file mode 100644 index 73963d75..00000000 Binary files a/src/imports/controls/imagine/images/splitview-handle-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/splitview-handle-pressed.png b/src/imports/controls/imagine/images/splitview-handle-pressed.png deleted file mode 100644 index 6e00db20..00000000 Binary files a/src/imports/controls/imagine/images/splitview-handle-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/splitview-handle-pressed@2x.png b/src/imports/controls/imagine/images/splitview-handle-pressed@2x.png deleted file mode 100644 index e1392de6..00000000 Binary files a/src/imports/controls/imagine/images/splitview-handle-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/splitview-handle-pressed@3x.png b/src/imports/controls/imagine/images/splitview-handle-pressed@3x.png deleted file mode 100644 index ff6a397f..00000000 Binary files a/src/imports/controls/imagine/images/splitview-handle-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/splitview-handle-pressed@4x.png b/src/imports/controls/imagine/images/splitview-handle-pressed@4x.png deleted file mode 100644 index 278ba900..00000000 Binary files a/src/imports/controls/imagine/images/splitview-handle-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/splitview-handle.png b/src/imports/controls/imagine/images/splitview-handle.png deleted file mode 100644 index 2b69cef6..00000000 Binary files a/src/imports/controls/imagine/images/splitview-handle.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/splitview-handle@2x.png b/src/imports/controls/imagine/images/splitview-handle@2x.png deleted file mode 100644 index cc3205f1..00000000 Binary files a/src/imports/controls/imagine/images/splitview-handle@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/splitview-handle@3x.png b/src/imports/controls/imagine/images/splitview-handle@3x.png deleted file mode 100644 index b8be2b4d..00000000 Binary files a/src/imports/controls/imagine/images/splitview-handle@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/splitview-handle@4x.png b/src/imports/controls/imagine/images/splitview-handle@4x.png deleted file mode 100644 index 31452954..00000000 Binary files a/src/imports/controls/imagine/images/splitview-handle@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background-disabled.9.png b/src/imports/controls/imagine/images/swipedelegate-background-disabled.9.png deleted file mode 100644 index 23570729..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background-disabled@2x.9.png b/src/imports/controls/imagine/images/swipedelegate-background-disabled@2x.9.png deleted file mode 100644 index c7abb65c..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background-disabled@3x.9.png b/src/imports/controls/imagine/images/swipedelegate-background-disabled@3x.9.png deleted file mode 100644 index 46b84d7d..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background-disabled@4x.9.png b/src/imports/controls/imagine/images/swipedelegate-background-disabled@4x.9.png deleted file mode 100644 index f4dfd338..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background-focused.9.png b/src/imports/controls/imagine/images/swipedelegate-background-focused.9.png deleted file mode 100644 index 6ae574d5..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background-focused@2x.9.png b/src/imports/controls/imagine/images/swipedelegate-background-focused@2x.9.png deleted file mode 100644 index 6b61562c..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background-focused@3x.9.png b/src/imports/controls/imagine/images/swipedelegate-background-focused@3x.9.png deleted file mode 100644 index e46c0bf1..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background-focused@4x.9.png b/src/imports/controls/imagine/images/swipedelegate-background-focused@4x.9.png deleted file mode 100644 index 010444e8..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background-highlighted.9.png b/src/imports/controls/imagine/images/swipedelegate-background-highlighted.9.png deleted file mode 100644 index e79d8e1d..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background-highlighted.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background-highlighted@2x.9.png b/src/imports/controls/imagine/images/swipedelegate-background-highlighted@2x.9.png deleted file mode 100644 index ea68d35f..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background-highlighted@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background-highlighted@3x.9.png b/src/imports/controls/imagine/images/swipedelegate-background-highlighted@3x.9.png deleted file mode 100644 index 6d610415..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background-highlighted@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background-highlighted@4x.9.png b/src/imports/controls/imagine/images/swipedelegate-background-highlighted@4x.9.png deleted file mode 100644 index 590cca96..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background-highlighted@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background-hovered.9.png b/src/imports/controls/imagine/images/swipedelegate-background-hovered.9.png deleted file mode 100644 index b8749743..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background-hovered@2x.9.png b/src/imports/controls/imagine/images/swipedelegate-background-hovered@2x.9.png deleted file mode 100644 index 5a136a0c..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background-hovered@3x.9.png b/src/imports/controls/imagine/images/swipedelegate-background-hovered@3x.9.png deleted file mode 100644 index f47a366b..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background-hovered@4x.9.png b/src/imports/controls/imagine/images/swipedelegate-background-hovered@4x.9.png deleted file mode 100644 index 9ecb680f..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background-pressed.9.png b/src/imports/controls/imagine/images/swipedelegate-background-pressed.9.png deleted file mode 100644 index 6ae574d5..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background-pressed.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background-pressed@2x.9.png b/src/imports/controls/imagine/images/swipedelegate-background-pressed@2x.9.png deleted file mode 100644 index 6b61562c..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background-pressed@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background-pressed@3x.9.png b/src/imports/controls/imagine/images/swipedelegate-background-pressed@3x.9.png deleted file mode 100644 index e46c0bf1..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background-pressed@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background-pressed@4x.9.png b/src/imports/controls/imagine/images/swipedelegate-background-pressed@4x.9.png deleted file mode 100644 index 010444e8..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background-pressed@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background.9.png b/src/imports/controls/imagine/images/swipedelegate-background.9.png deleted file mode 100644 index b8749743..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background@2x.9.png b/src/imports/controls/imagine/images/swipedelegate-background@2x.9.png deleted file mode 100644 index 5a136a0c..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background@3x.9.png b/src/imports/controls/imagine/images/swipedelegate-background@3x.9.png deleted file mode 100644 index f47a366b..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/swipedelegate-background@4x.9.png b/src/imports/controls/imagine/images/swipedelegate-background@4x.9.png deleted file mode 100644 index 9ecb680f..00000000 Binary files a/src/imports/controls/imagine/images/swipedelegate-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-handle-disabled.png b/src/imports/controls/imagine/images/switch-handle-disabled.png deleted file mode 100644 index 595dd546..00000000 Binary files a/src/imports/controls/imagine/images/switch-handle-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-handle-disabled@2x.png b/src/imports/controls/imagine/images/switch-handle-disabled@2x.png deleted file mode 100644 index 5be736aa..00000000 Binary files a/src/imports/controls/imagine/images/switch-handle-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-handle-disabled@3x.png b/src/imports/controls/imagine/images/switch-handle-disabled@3x.png deleted file mode 100644 index c8002ca3..00000000 Binary files a/src/imports/controls/imagine/images/switch-handle-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-handle-disabled@4x.png b/src/imports/controls/imagine/images/switch-handle-disabled@4x.png deleted file mode 100644 index 00e70c1b..00000000 Binary files a/src/imports/controls/imagine/images/switch-handle-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-handle-pressed.png b/src/imports/controls/imagine/images/switch-handle-pressed.png deleted file mode 100644 index 595dd546..00000000 Binary files a/src/imports/controls/imagine/images/switch-handle-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-handle-pressed@2x.png b/src/imports/controls/imagine/images/switch-handle-pressed@2x.png deleted file mode 100644 index 5be736aa..00000000 Binary files a/src/imports/controls/imagine/images/switch-handle-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-handle-pressed@3x.png b/src/imports/controls/imagine/images/switch-handle-pressed@3x.png deleted file mode 100644 index c8002ca3..00000000 Binary files a/src/imports/controls/imagine/images/switch-handle-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-handle-pressed@4x.png b/src/imports/controls/imagine/images/switch-handle-pressed@4x.png deleted file mode 100644 index 00e70c1b..00000000 Binary files a/src/imports/controls/imagine/images/switch-handle-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-handle.png b/src/imports/controls/imagine/images/switch-handle.png deleted file mode 100644 index 15649c34..00000000 Binary files a/src/imports/controls/imagine/images/switch-handle.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-handle@2x.png b/src/imports/controls/imagine/images/switch-handle@2x.png deleted file mode 100644 index 04f84ed9..00000000 Binary files a/src/imports/controls/imagine/images/switch-handle@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-handle@3x.png b/src/imports/controls/imagine/images/switch-handle@3x.png deleted file mode 100644 index e0cfb637..00000000 Binary files a/src/imports/controls/imagine/images/switch-handle@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-handle@4x.png b/src/imports/controls/imagine/images/switch-handle@4x.png deleted file mode 100644 index 73fa381a..00000000 Binary files a/src/imports/controls/imagine/images/switch-handle@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-checked-focused.png b/src/imports/controls/imagine/images/switch-indicator-checked-focused.png deleted file mode 100644 index 7f5ba5df..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-checked-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-checked-focused@2x.png b/src/imports/controls/imagine/images/switch-indicator-checked-focused@2x.png deleted file mode 100644 index a0090df4..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-checked-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-checked-focused@3x.png b/src/imports/controls/imagine/images/switch-indicator-checked-focused@3x.png deleted file mode 100644 index 0c7e5264..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-checked-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-checked-focused@4x.png b/src/imports/controls/imagine/images/switch-indicator-checked-focused@4x.png deleted file mode 100644 index 3a5e1d36..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-checked-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-checked-hovered.png b/src/imports/controls/imagine/images/switch-indicator-checked-hovered.png deleted file mode 100644 index 7f5ba5df..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-checked-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-checked-hovered@2x.png b/src/imports/controls/imagine/images/switch-indicator-checked-hovered@2x.png deleted file mode 100644 index a0090df4..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-checked-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-checked-hovered@3x.png b/src/imports/controls/imagine/images/switch-indicator-checked-hovered@3x.png deleted file mode 100644 index 0c7e5264..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-checked-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-checked-hovered@4x.png b/src/imports/controls/imagine/images/switch-indicator-checked-hovered@4x.png deleted file mode 100644 index 3a5e1d36..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-checked-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-checked-pressed.png b/src/imports/controls/imagine/images/switch-indicator-checked-pressed.png deleted file mode 100644 index ecbc552a..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-checked-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-checked-pressed@2x.png b/src/imports/controls/imagine/images/switch-indicator-checked-pressed@2x.png deleted file mode 100644 index 07fe7241..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-checked-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-checked-pressed@3x.png b/src/imports/controls/imagine/images/switch-indicator-checked-pressed@3x.png deleted file mode 100644 index 8c65c27f..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-checked-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-checked-pressed@4x.png b/src/imports/controls/imagine/images/switch-indicator-checked-pressed@4x.png deleted file mode 100644 index f6a1e476..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-checked-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-checked.png b/src/imports/controls/imagine/images/switch-indicator-checked.png deleted file mode 100644 index 2b7265cd..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-checked.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-checked@2x.png b/src/imports/controls/imagine/images/switch-indicator-checked@2x.png deleted file mode 100644 index 6ec88c7f..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-checked@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-checked@3x.png b/src/imports/controls/imagine/images/switch-indicator-checked@3x.png deleted file mode 100644 index 48c97985..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-checked@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-checked@4x.png b/src/imports/controls/imagine/images/switch-indicator-checked@4x.png deleted file mode 100644 index e9f81807..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-checked@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-disabled.png b/src/imports/controls/imagine/images/switch-indicator-disabled.png deleted file mode 100644 index 9cfab791..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-disabled@2x.png b/src/imports/controls/imagine/images/switch-indicator-disabled@2x.png deleted file mode 100644 index 3bbbb8df..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-disabled@3x.png b/src/imports/controls/imagine/images/switch-indicator-disabled@3x.png deleted file mode 100644 index 80d9a746..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-disabled@4x.png b/src/imports/controls/imagine/images/switch-indicator-disabled@4x.png deleted file mode 100644 index 9ee7bfab..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-focused.png b/src/imports/controls/imagine/images/switch-indicator-focused.png deleted file mode 100644 index 4867bcac..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-focused@2x.png b/src/imports/controls/imagine/images/switch-indicator-focused@2x.png deleted file mode 100644 index d833a0cd..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-focused@3x.png b/src/imports/controls/imagine/images/switch-indicator-focused@3x.png deleted file mode 100644 index a632b6ae..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-focused@4x.png b/src/imports/controls/imagine/images/switch-indicator-focused@4x.png deleted file mode 100644 index b5affab7..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-hovered.png b/src/imports/controls/imagine/images/switch-indicator-hovered.png deleted file mode 100644 index 4867bcac..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-hovered@2x.png b/src/imports/controls/imagine/images/switch-indicator-hovered@2x.png deleted file mode 100644 index d833a0cd..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-hovered@3x.png b/src/imports/controls/imagine/images/switch-indicator-hovered@3x.png deleted file mode 100644 index a632b6ae..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-hovered@4x.png b/src/imports/controls/imagine/images/switch-indicator-hovered@4x.png deleted file mode 100644 index b5affab7..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-pressed.png b/src/imports/controls/imagine/images/switch-indicator-pressed.png deleted file mode 100644 index 4fbbc060..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-pressed@2x.png b/src/imports/controls/imagine/images/switch-indicator-pressed@2x.png deleted file mode 100644 index 7939f943..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-pressed@3x.png b/src/imports/controls/imagine/images/switch-indicator-pressed@3x.png deleted file mode 100644 index adcbe45b..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator-pressed@4x.png b/src/imports/controls/imagine/images/switch-indicator-pressed@4x.png deleted file mode 100644 index 74c0c77e..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator.png b/src/imports/controls/imagine/images/switch-indicator.png deleted file mode 100644 index b6b4f1cd..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator@2x.png b/src/imports/controls/imagine/images/switch-indicator@2x.png deleted file mode 100644 index bfeedeb7..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator@3x.png b/src/imports/controls/imagine/images/switch-indicator@3x.png deleted file mode 100644 index 19e5ba2c..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switch-indicator@4x.png b/src/imports/controls/imagine/images/switch-indicator@4x.png deleted file mode 100644 index 9345cd4f..00000000 Binary files a/src/imports/controls/imagine/images/switch-indicator@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-background-disabled.9.png b/src/imports/controls/imagine/images/switchdelegate-background-disabled.9.png deleted file mode 100644 index 23570729..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-background-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-background-disabled@2x.9.png b/src/imports/controls/imagine/images/switchdelegate-background-disabled@2x.9.png deleted file mode 100644 index c7abb65c..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-background-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-background-disabled@3x.9.png b/src/imports/controls/imagine/images/switchdelegate-background-disabled@3x.9.png deleted file mode 100644 index 46b84d7d..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-background-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-background-disabled@4x.9.png b/src/imports/controls/imagine/images/switchdelegate-background-disabled@4x.9.png deleted file mode 100644 index f4dfd338..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-background-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-background-focused.9.png b/src/imports/controls/imagine/images/switchdelegate-background-focused.9.png deleted file mode 100644 index 6ae574d5..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-background-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-background-focused@2x.9.png b/src/imports/controls/imagine/images/switchdelegate-background-focused@2x.9.png deleted file mode 100644 index 6b61562c..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-background-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-background-focused@3x.9.png b/src/imports/controls/imagine/images/switchdelegate-background-focused@3x.9.png deleted file mode 100644 index e46c0bf1..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-background-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-background-focused@4x.9.png b/src/imports/controls/imagine/images/switchdelegate-background-focused@4x.9.png deleted file mode 100644 index 010444e8..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-background-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-background-hovered.9.png b/src/imports/controls/imagine/images/switchdelegate-background-hovered.9.png deleted file mode 100644 index b8749743..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-background-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-background-hovered@2x.9.png b/src/imports/controls/imagine/images/switchdelegate-background-hovered@2x.9.png deleted file mode 100644 index 5a136a0c..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-background-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-background-hovered@3x.9.png b/src/imports/controls/imagine/images/switchdelegate-background-hovered@3x.9.png deleted file mode 100644 index f47a366b..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-background-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-background-hovered@4x.9.png b/src/imports/controls/imagine/images/switchdelegate-background-hovered@4x.9.png deleted file mode 100644 index 9ecb680f..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-background-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-background-pressed.9.png b/src/imports/controls/imagine/images/switchdelegate-background-pressed.9.png deleted file mode 100644 index 6ae574d5..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-background-pressed.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-background-pressed@2x.9.png b/src/imports/controls/imagine/images/switchdelegate-background-pressed@2x.9.png deleted file mode 100644 index 6b61562c..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-background-pressed@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-background-pressed@3x.9.png b/src/imports/controls/imagine/images/switchdelegate-background-pressed@3x.9.png deleted file mode 100644 index e46c0bf1..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-background-pressed@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-background-pressed@4x.9.png b/src/imports/controls/imagine/images/switchdelegate-background-pressed@4x.9.png deleted file mode 100644 index 010444e8..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-background-pressed@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-background.9.png b/src/imports/controls/imagine/images/switchdelegate-background.9.png deleted file mode 100644 index b8749743..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-background@2x.9.png b/src/imports/controls/imagine/images/switchdelegate-background@2x.9.png deleted file mode 100644 index 5a136a0c..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-background@3x.9.png b/src/imports/controls/imagine/images/switchdelegate-background@3x.9.png deleted file mode 100644 index f47a366b..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-background@4x.9.png b/src/imports/controls/imagine/images/switchdelegate-background@4x.9.png deleted file mode 100644 index 9ecb680f..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-handle-disabled.png b/src/imports/controls/imagine/images/switchdelegate-handle-disabled.png deleted file mode 100644 index 595dd546..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-handle-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-handle-disabled@2x.png b/src/imports/controls/imagine/images/switchdelegate-handle-disabled@2x.png deleted file mode 100644 index 5be736aa..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-handle-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-handle-disabled@3x.png b/src/imports/controls/imagine/images/switchdelegate-handle-disabled@3x.png deleted file mode 100644 index c8002ca3..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-handle-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-handle-disabled@4x.png b/src/imports/controls/imagine/images/switchdelegate-handle-disabled@4x.png deleted file mode 100644 index 00e70c1b..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-handle-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-handle-pressed.png b/src/imports/controls/imagine/images/switchdelegate-handle-pressed.png deleted file mode 100644 index 595dd546..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-handle-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-handle-pressed@2x.png b/src/imports/controls/imagine/images/switchdelegate-handle-pressed@2x.png deleted file mode 100644 index 5be736aa..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-handle-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-handle-pressed@3x.png b/src/imports/controls/imagine/images/switchdelegate-handle-pressed@3x.png deleted file mode 100644 index c8002ca3..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-handle-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-handle-pressed@4x.png b/src/imports/controls/imagine/images/switchdelegate-handle-pressed@4x.png deleted file mode 100644 index 00e70c1b..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-handle-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-handle.png b/src/imports/controls/imagine/images/switchdelegate-handle.png deleted file mode 100644 index 15649c34..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-handle.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-handle@2x.png b/src/imports/controls/imagine/images/switchdelegate-handle@2x.png deleted file mode 100644 index 04f84ed9..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-handle@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-handle@3x.png b/src/imports/controls/imagine/images/switchdelegate-handle@3x.png deleted file mode 100644 index e0cfb637..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-handle@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-handle@4x.png b/src/imports/controls/imagine/images/switchdelegate-handle@4x.png deleted file mode 100644 index 73fa381a..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-handle@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-focused.png b/src/imports/controls/imagine/images/switchdelegate-indicator-checked-focused.png deleted file mode 100644 index 7f5ba5df..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-focused@2x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-checked-focused@2x.png deleted file mode 100644 index a0090df4..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-focused@3x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-checked-focused@3x.png deleted file mode 100644 index 0c7e5264..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-focused@4x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-checked-focused@4x.png deleted file mode 100644 index 3a5e1d36..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-hovered.png b/src/imports/controls/imagine/images/switchdelegate-indicator-checked-hovered.png deleted file mode 100644 index 7f5ba5df..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-hovered@2x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-checked-hovered@2x.png deleted file mode 100644 index a0090df4..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-hovered@3x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-checked-hovered@3x.png deleted file mode 100644 index 0c7e5264..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-hovered@4x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-checked-hovered@4x.png deleted file mode 100644 index 3a5e1d36..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-pressed.png b/src/imports/controls/imagine/images/switchdelegate-indicator-checked-pressed.png deleted file mode 100644 index ecbc552a..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-pressed@2x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-checked-pressed@2x.png deleted file mode 100644 index 07fe7241..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-pressed@3x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-checked-pressed@3x.png deleted file mode 100644 index 8c65c27f..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-pressed@4x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-checked-pressed@4x.png deleted file mode 100644 index f6a1e476..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-checked-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-checked.png b/src/imports/controls/imagine/images/switchdelegate-indicator-checked.png deleted file mode 100644 index 2b7265cd..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-checked.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-checked@2x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-checked@2x.png deleted file mode 100644 index 6ec88c7f..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-checked@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-checked@3x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-checked@3x.png deleted file mode 100644 index 48c97985..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-checked@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-checked@4x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-checked@4x.png deleted file mode 100644 index e9f81807..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-checked@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-disabled.png b/src/imports/controls/imagine/images/switchdelegate-indicator-disabled.png deleted file mode 100644 index 9cfab791..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-disabled.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-disabled@2x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-disabled@2x.png deleted file mode 100644 index 3bbbb8df..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-disabled@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-disabled@3x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-disabled@3x.png deleted file mode 100644 index 80d9a746..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-disabled@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-disabled@4x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-disabled@4x.png deleted file mode 100644 index 9ee7bfab..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-disabled@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-focused.png b/src/imports/controls/imagine/images/switchdelegate-indicator-focused.png deleted file mode 100644 index 4867bcac..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-focused.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-focused@2x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-focused@2x.png deleted file mode 100644 index d833a0cd..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-focused@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-focused@3x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-focused@3x.png deleted file mode 100644 index a632b6ae..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-focused@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-focused@4x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-focused@4x.png deleted file mode 100644 index b5affab7..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-focused@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-hovered.png b/src/imports/controls/imagine/images/switchdelegate-indicator-hovered.png deleted file mode 100644 index 4867bcac..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-hovered.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-hovered@2x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-hovered@2x.png deleted file mode 100644 index d833a0cd..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-hovered@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-hovered@3x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-hovered@3x.png deleted file mode 100644 index a632b6ae..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-hovered@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-hovered@4x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-hovered@4x.png deleted file mode 100644 index b5affab7..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-hovered@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-pressed.png b/src/imports/controls/imagine/images/switchdelegate-indicator-pressed.png deleted file mode 100644 index 4fbbc060..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-pressed.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-pressed@2x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-pressed@2x.png deleted file mode 100644 index 7939f943..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-pressed@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-pressed@3x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-pressed@3x.png deleted file mode 100644 index adcbe45b..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-pressed@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator-pressed@4x.png b/src/imports/controls/imagine/images/switchdelegate-indicator-pressed@4x.png deleted file mode 100644 index 74c0c77e..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator-pressed@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator.png b/src/imports/controls/imagine/images/switchdelegate-indicator.png deleted file mode 100644 index b6b4f1cd..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator@2x.png b/src/imports/controls/imagine/images/switchdelegate-indicator@2x.png deleted file mode 100644 index bfeedeb7..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator@3x.png b/src/imports/controls/imagine/images/switchdelegate-indicator@3x.png deleted file mode 100644 index 19e5ba2c..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/switchdelegate-indicator@4x.png b/src/imports/controls/imagine/images/switchdelegate-indicator@4x.png deleted file mode 100644 index 9345cd4f..00000000 Binary files a/src/imports/controls/imagine/images/switchdelegate-indicator@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbar-background.png b/src/imports/controls/imagine/images/tabbar-background.png deleted file mode 100644 index 002efded..00000000 Binary files a/src/imports/controls/imagine/images/tabbar-background.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbar-background@2x.png b/src/imports/controls/imagine/images/tabbar-background@2x.png deleted file mode 100644 index aaa1cbaf..00000000 Binary files a/src/imports/controls/imagine/images/tabbar-background@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbar-background@3x.png b/src/imports/controls/imagine/images/tabbar-background@3x.png deleted file mode 100644 index c4eb9e1f..00000000 Binary files a/src/imports/controls/imagine/images/tabbar-background@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbar-background@4x.png b/src/imports/controls/imagine/images/tabbar-background@4x.png deleted file mode 100644 index 4a4e234a..00000000 Binary files a/src/imports/controls/imagine/images/tabbar-background@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background-checked.9.png b/src/imports/controls/imagine/images/tabbutton-background-checked.9.png deleted file mode 100644 index d2f0fa76..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background-checked.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background-checked@2x.9.png b/src/imports/controls/imagine/images/tabbutton-background-checked@2x.9.png deleted file mode 100644 index bee13292..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background-checked@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background-checked@3x.9.png b/src/imports/controls/imagine/images/tabbutton-background-checked@3x.9.png deleted file mode 100644 index 70afb7d3..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background-checked@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background-checked@4x.9.png b/src/imports/controls/imagine/images/tabbutton-background-checked@4x.9.png deleted file mode 100644 index 3a2015c4..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background-checked@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background-disabled-checked.9.png b/src/imports/controls/imagine/images/tabbutton-background-disabled-checked.9.png deleted file mode 100644 index a6d3011b..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background-disabled-checked.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background-disabled-checked@2x.9.png b/src/imports/controls/imagine/images/tabbutton-background-disabled-checked@2x.9.png deleted file mode 100644 index 8ebfa026..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background-disabled-checked@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background-disabled-checked@3x.9.png b/src/imports/controls/imagine/images/tabbutton-background-disabled-checked@3x.9.png deleted file mode 100644 index 1d5a1d51..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background-disabled-checked@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background-disabled-checked@4x.9.png b/src/imports/controls/imagine/images/tabbutton-background-disabled-checked@4x.9.png deleted file mode 100644 index f06dc55f..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background-disabled-checked@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background-disabled.9.png b/src/imports/controls/imagine/images/tabbutton-background-disabled.9.png deleted file mode 100644 index a6d3011b..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background-disabled@2x.9.png b/src/imports/controls/imagine/images/tabbutton-background-disabled@2x.9.png deleted file mode 100644 index 8ebfa026..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background-disabled@3x.9.png b/src/imports/controls/imagine/images/tabbutton-background-disabled@3x.9.png deleted file mode 100644 index 1d5a1d51..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background-disabled@4x.9.png b/src/imports/controls/imagine/images/tabbutton-background-disabled@4x.9.png deleted file mode 100644 index f06dc55f..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background-hovered.9.png b/src/imports/controls/imagine/images/tabbutton-background-hovered.9.png deleted file mode 100644 index 3f945184..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background-hovered@2x.9.png b/src/imports/controls/imagine/images/tabbutton-background-hovered@2x.9.png deleted file mode 100644 index 8a19720a..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background-hovered@3x.9.png b/src/imports/controls/imagine/images/tabbutton-background-hovered@3x.9.png deleted file mode 100644 index eadcf457..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background-hovered@4x.9.png b/src/imports/controls/imagine/images/tabbutton-background-hovered@4x.9.png deleted file mode 100644 index 8bf8e992..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background-pressed.9.png b/src/imports/controls/imagine/images/tabbutton-background-pressed.9.png deleted file mode 100644 index d48733ed..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background-pressed.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background-pressed@2x.9.png b/src/imports/controls/imagine/images/tabbutton-background-pressed@2x.9.png deleted file mode 100644 index fbbaad7b..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background-pressed@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background-pressed@3x.9.png b/src/imports/controls/imagine/images/tabbutton-background-pressed@3x.9.png deleted file mode 100644 index 3a0ba70e..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background-pressed@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background-pressed@4x.9.png b/src/imports/controls/imagine/images/tabbutton-background-pressed@4x.9.png deleted file mode 100644 index c04f124e..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background-pressed@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background.9.png b/src/imports/controls/imagine/images/tabbutton-background.9.png deleted file mode 100644 index 2266c722..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background@2x.9.png b/src/imports/controls/imagine/images/tabbutton-background@2x.9.png deleted file mode 100644 index b7adb7ad..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background@3x.9.png b/src/imports/controls/imagine/images/tabbutton-background@3x.9.png deleted file mode 100644 index d8f4eae5..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tabbutton-background@4x.9.png b/src/imports/controls/imagine/images/tabbutton-background@4x.9.png deleted file mode 100644 index 066d35b3..00000000 Binary files a/src/imports/controls/imagine/images/tabbutton-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textarea-background-disabled.9.png b/src/imports/controls/imagine/images/textarea-background-disabled.9.png deleted file mode 100644 index 97d48f8c..00000000 Binary files a/src/imports/controls/imagine/images/textarea-background-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textarea-background-disabled@2x.9.png b/src/imports/controls/imagine/images/textarea-background-disabled@2x.9.png deleted file mode 100644 index f9ea1d49..00000000 Binary files a/src/imports/controls/imagine/images/textarea-background-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textarea-background-disabled@3x.9.png b/src/imports/controls/imagine/images/textarea-background-disabled@3x.9.png deleted file mode 100644 index 04e7ef6f..00000000 Binary files a/src/imports/controls/imagine/images/textarea-background-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textarea-background-disabled@4x.9.png b/src/imports/controls/imagine/images/textarea-background-disabled@4x.9.png deleted file mode 100644 index feaaa3bc..00000000 Binary files a/src/imports/controls/imagine/images/textarea-background-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textarea-background-focused.9.png b/src/imports/controls/imagine/images/textarea-background-focused.9.png deleted file mode 100644 index 1d73acfa..00000000 Binary files a/src/imports/controls/imagine/images/textarea-background-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textarea-background-focused@2x.9.png b/src/imports/controls/imagine/images/textarea-background-focused@2x.9.png deleted file mode 100644 index 5be4cd6f..00000000 Binary files a/src/imports/controls/imagine/images/textarea-background-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textarea-background-focused@3x.9.png b/src/imports/controls/imagine/images/textarea-background-focused@3x.9.png deleted file mode 100644 index 6ba3e246..00000000 Binary files a/src/imports/controls/imagine/images/textarea-background-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textarea-background-focused@4x.9.png b/src/imports/controls/imagine/images/textarea-background-focused@4x.9.png deleted file mode 100644 index 366aa511..00000000 Binary files a/src/imports/controls/imagine/images/textarea-background-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textarea-background.9.png b/src/imports/controls/imagine/images/textarea-background.9.png deleted file mode 100644 index 0b9ca9f3..00000000 Binary files a/src/imports/controls/imagine/images/textarea-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textarea-background@2x.9.png b/src/imports/controls/imagine/images/textarea-background@2x.9.png deleted file mode 100644 index a806ed1b..00000000 Binary files a/src/imports/controls/imagine/images/textarea-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textarea-background@3x.9.png b/src/imports/controls/imagine/images/textarea-background@3x.9.png deleted file mode 100644 index 547ef33c..00000000 Binary files a/src/imports/controls/imagine/images/textarea-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textarea-background@4x.9.png b/src/imports/controls/imagine/images/textarea-background@4x.9.png deleted file mode 100644 index b759b1e8..00000000 Binary files a/src/imports/controls/imagine/images/textarea-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textfield-background-disabled.9.png b/src/imports/controls/imagine/images/textfield-background-disabled.9.png deleted file mode 100644 index 312a1294..00000000 Binary files a/src/imports/controls/imagine/images/textfield-background-disabled.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textfield-background-disabled@2x.9.png b/src/imports/controls/imagine/images/textfield-background-disabled@2x.9.png deleted file mode 100644 index 2c6c7e91..00000000 Binary files a/src/imports/controls/imagine/images/textfield-background-disabled@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textfield-background-disabled@3x.9.png b/src/imports/controls/imagine/images/textfield-background-disabled@3x.9.png deleted file mode 100644 index 1d1aca71..00000000 Binary files a/src/imports/controls/imagine/images/textfield-background-disabled@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textfield-background-disabled@4x.9.png b/src/imports/controls/imagine/images/textfield-background-disabled@4x.9.png deleted file mode 100644 index ed93182a..00000000 Binary files a/src/imports/controls/imagine/images/textfield-background-disabled@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textfield-background-focused.9.png b/src/imports/controls/imagine/images/textfield-background-focused.9.png deleted file mode 100644 index 1251f4e4..00000000 Binary files a/src/imports/controls/imagine/images/textfield-background-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textfield-background-focused@2x.9.png b/src/imports/controls/imagine/images/textfield-background-focused@2x.9.png deleted file mode 100644 index d535e8bc..00000000 Binary files a/src/imports/controls/imagine/images/textfield-background-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textfield-background-focused@3x.9.png b/src/imports/controls/imagine/images/textfield-background-focused@3x.9.png deleted file mode 100644 index 9fca3bb2..00000000 Binary files a/src/imports/controls/imagine/images/textfield-background-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textfield-background-focused@4x.9.png b/src/imports/controls/imagine/images/textfield-background-focused@4x.9.png deleted file mode 100644 index a275a52e..00000000 Binary files a/src/imports/controls/imagine/images/textfield-background-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textfield-background.9.png b/src/imports/controls/imagine/images/textfield-background.9.png deleted file mode 100644 index 7ea60968..00000000 Binary files a/src/imports/controls/imagine/images/textfield-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textfield-background@2x.9.png b/src/imports/controls/imagine/images/textfield-background@2x.9.png deleted file mode 100644 index 0a4c3f2a..00000000 Binary files a/src/imports/controls/imagine/images/textfield-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textfield-background@3x.9.png b/src/imports/controls/imagine/images/textfield-background@3x.9.png deleted file mode 100644 index e8552741..00000000 Binary files a/src/imports/controls/imagine/images/textfield-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/textfield-background@4x.9.png b/src/imports/controls/imagine/images/textfield-background@4x.9.png deleted file mode 100644 index 29ef5bb9..00000000 Binary files a/src/imports/controls/imagine/images/textfield-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbar-background.png b/src/imports/controls/imagine/images/toolbar-background.png deleted file mode 100644 index 9c67cf27..00000000 Binary files a/src/imports/controls/imagine/images/toolbar-background.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbar-background@2x.png b/src/imports/controls/imagine/images/toolbar-background@2x.png deleted file mode 100644 index b0602519..00000000 Binary files a/src/imports/controls/imagine/images/toolbar-background@2x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbar-background@3x.png b/src/imports/controls/imagine/images/toolbar-background@3x.png deleted file mode 100644 index 7f227ca3..00000000 Binary files a/src/imports/controls/imagine/images/toolbar-background@3x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbar-background@4x.png b/src/imports/controls/imagine/images/toolbar-background@4x.png deleted file mode 100644 index 4788ecc7..00000000 Binary files a/src/imports/controls/imagine/images/toolbar-background@4x.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-checked-focused.9.png b/src/imports/controls/imagine/images/toolbutton-background-checked-focused.9.png deleted file mode 100644 index 287a2872..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-checked-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-checked-focused@2x.9.png b/src/imports/controls/imagine/images/toolbutton-background-checked-focused@2x.9.png deleted file mode 100644 index aa844165..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-checked-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-checked-focused@3x.9.png b/src/imports/controls/imagine/images/toolbutton-background-checked-focused@3x.9.png deleted file mode 100644 index 8c682255..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-checked-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-checked-focused@4x.9.png b/src/imports/controls/imagine/images/toolbutton-background-checked-focused@4x.9.png deleted file mode 100644 index 89bdd096..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-checked-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-checked-hovered.9.png b/src/imports/controls/imagine/images/toolbutton-background-checked-hovered.9.png deleted file mode 100644 index 287a2872..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-checked-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-checked-hovered@2x.9.png b/src/imports/controls/imagine/images/toolbutton-background-checked-hovered@2x.9.png deleted file mode 100644 index aa844165..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-checked-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-checked-hovered@3x.9.png b/src/imports/controls/imagine/images/toolbutton-background-checked-hovered@3x.9.png deleted file mode 100644 index 8c682255..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-checked-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-checked-hovered@4x.9.png b/src/imports/controls/imagine/images/toolbutton-background-checked-hovered@4x.9.png deleted file mode 100644 index 89bdd096..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-checked-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-checked.9.png b/src/imports/controls/imagine/images/toolbutton-background-checked.9.png deleted file mode 100644 index 287a2872..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-checked.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-checked@2x.9.png b/src/imports/controls/imagine/images/toolbutton-background-checked@2x.9.png deleted file mode 100644 index aa844165..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-checked@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-checked@3x.9.png b/src/imports/controls/imagine/images/toolbutton-background-checked@3x.9.png deleted file mode 100644 index 8c682255..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-checked@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-checked@4x.9.png b/src/imports/controls/imagine/images/toolbutton-background-checked@4x.9.png deleted file mode 100644 index 89bdd096..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-checked@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-disabled-checked.9.png b/src/imports/controls/imagine/images/toolbutton-background-disabled-checked.9.png deleted file mode 100644 index 287a2872..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-disabled-checked.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-disabled-checked@2x.9.png b/src/imports/controls/imagine/images/toolbutton-background-disabled-checked@2x.9.png deleted file mode 100644 index aa844165..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-disabled-checked@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-disabled-checked@3x.9.png b/src/imports/controls/imagine/images/toolbutton-background-disabled-checked@3x.9.png deleted file mode 100644 index 8c682255..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-disabled-checked@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-disabled-checked@4x.9.png b/src/imports/controls/imagine/images/toolbutton-background-disabled-checked@4x.9.png deleted file mode 100644 index 89bdd096..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-disabled-checked@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-focused.9.png b/src/imports/controls/imagine/images/toolbutton-background-focused.9.png deleted file mode 100644 index 287a2872..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-focused.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-focused@2x.9.png b/src/imports/controls/imagine/images/toolbutton-background-focused@2x.9.png deleted file mode 100644 index aa844165..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-focused@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-focused@3x.9.png b/src/imports/controls/imagine/images/toolbutton-background-focused@3x.9.png deleted file mode 100644 index 8c682255..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-focused@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-focused@4x.9.png b/src/imports/controls/imagine/images/toolbutton-background-focused@4x.9.png deleted file mode 100644 index 89bdd096..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-focused@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-hovered.9.png b/src/imports/controls/imagine/images/toolbutton-background-hovered.9.png deleted file mode 100644 index 287a2872..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-hovered.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-hovered@2x.9.png b/src/imports/controls/imagine/images/toolbutton-background-hovered@2x.9.png deleted file mode 100644 index aa844165..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-hovered@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-hovered@3x.9.png b/src/imports/controls/imagine/images/toolbutton-background-hovered@3x.9.png deleted file mode 100644 index 8c682255..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-hovered@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-hovered@4x.9.png b/src/imports/controls/imagine/images/toolbutton-background-hovered@4x.9.png deleted file mode 100644 index 89bdd096..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-hovered@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-pressed.9.png b/src/imports/controls/imagine/images/toolbutton-background-pressed.9.png deleted file mode 100644 index 287a2872..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-pressed.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-pressed@2x.9.png b/src/imports/controls/imagine/images/toolbutton-background-pressed@2x.9.png deleted file mode 100644 index aa844165..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-pressed@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-pressed@3x.9.png b/src/imports/controls/imagine/images/toolbutton-background-pressed@3x.9.png deleted file mode 100644 index 8c682255..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-pressed@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background-pressed@4x.9.png b/src/imports/controls/imagine/images/toolbutton-background-pressed@4x.9.png deleted file mode 100644 index 89bdd096..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background-pressed@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background.9.png b/src/imports/controls/imagine/images/toolbutton-background.9.png deleted file mode 100644 index 5a72a621..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background@2x.9.png b/src/imports/controls/imagine/images/toolbutton-background@2x.9.png deleted file mode 100644 index 688a071a..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background@3x.9.png b/src/imports/controls/imagine/images/toolbutton-background@3x.9.png deleted file mode 100644 index 64375a7e..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolbutton-background@4x.9.png b/src/imports/controls/imagine/images/toolbutton-background@4x.9.png deleted file mode 100644 index 96004a10..00000000 Binary files a/src/imports/controls/imagine/images/toolbutton-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolseparator-separator-horizontal.9.png b/src/imports/controls/imagine/images/toolseparator-separator-horizontal.9.png deleted file mode 100644 index 75e3e662..00000000 Binary files a/src/imports/controls/imagine/images/toolseparator-separator-horizontal.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolseparator-separator-horizontal@2x.9.png b/src/imports/controls/imagine/images/toolseparator-separator-horizontal@2x.9.png deleted file mode 100644 index 3662dec9..00000000 Binary files a/src/imports/controls/imagine/images/toolseparator-separator-horizontal@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolseparator-separator-horizontal@3x.9.png b/src/imports/controls/imagine/images/toolseparator-separator-horizontal@3x.9.png deleted file mode 100644 index 27714701..00000000 Binary files a/src/imports/controls/imagine/images/toolseparator-separator-horizontal@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolseparator-separator-horizontal@4x.9.png b/src/imports/controls/imagine/images/toolseparator-separator-horizontal@4x.9.png deleted file mode 100644 index deeda9f5..00000000 Binary files a/src/imports/controls/imagine/images/toolseparator-separator-horizontal@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolseparator-separator-vertical.9.png b/src/imports/controls/imagine/images/toolseparator-separator-vertical.9.png deleted file mode 100644 index 5b607aaf..00000000 Binary files a/src/imports/controls/imagine/images/toolseparator-separator-vertical.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolseparator-separator-vertical@2x.9.png b/src/imports/controls/imagine/images/toolseparator-separator-vertical@2x.9.png deleted file mode 100644 index f5a11e04..00000000 Binary files a/src/imports/controls/imagine/images/toolseparator-separator-vertical@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolseparator-separator-vertical@3x.9.png b/src/imports/controls/imagine/images/toolseparator-separator-vertical@3x.9.png deleted file mode 100644 index c957280f..00000000 Binary files a/src/imports/controls/imagine/images/toolseparator-separator-vertical@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/toolseparator-separator-vertical@4x.9.png b/src/imports/controls/imagine/images/toolseparator-separator-vertical@4x.9.png deleted file mode 100644 index c888689d..00000000 Binary files a/src/imports/controls/imagine/images/toolseparator-separator-vertical@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tooltip-background.9.png b/src/imports/controls/imagine/images/tooltip-background.9.png deleted file mode 100644 index 2e0dc67c..00000000 Binary files a/src/imports/controls/imagine/images/tooltip-background.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tooltip-background@2x.9.png b/src/imports/controls/imagine/images/tooltip-background@2x.9.png deleted file mode 100644 index dd560998..00000000 Binary files a/src/imports/controls/imagine/images/tooltip-background@2x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tooltip-background@3x.9.png b/src/imports/controls/imagine/images/tooltip-background@3x.9.png deleted file mode 100644 index fed46542..00000000 Binary files a/src/imports/controls/imagine/images/tooltip-background@3x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/images/tooltip-background@4x.9.png b/src/imports/controls/imagine/images/tooltip-background@4x.9.png deleted file mode 100644 index 9bc96490..00000000 Binary files a/src/imports/controls/imagine/images/tooltip-background@4x.9.png and /dev/null differ diff --git a/src/imports/controls/imagine/imagine.pri b/src/imports/controls/imagine/imagine.pri deleted file mode 100644 index 134aa2c3..00000000 --- a/src/imports/controls/imagine/imagine.pri +++ /dev/null @@ -1,58 +0,0 @@ -HEADERS += \ - $$PWD/qquickimaginestyle_p.h \ - $$PWD/qquickimaginetheme_p.h - -SOURCES += \ - $$PWD/qquickimaginestyle.cpp \ - $$PWD/qquickimaginetheme.cpp - -QML_FILES += \ - $$PWD/ApplicationWindow.qml \ - $$PWD/BusyIndicator.qml \ - $$PWD/Button.qml \ - $$PWD/CheckBox.qml \ - $$PWD/CheckDelegate.qml \ - $$PWD/ComboBox.qml \ - $$PWD/DelayButton.qml \ - $$PWD/Dial.qml \ - $$PWD/Dialog.qml \ - $$PWD/DialogButtonBox.qml \ - $$PWD/Drawer.qml \ - $$PWD/Frame.qml \ - $$PWD/GroupBox.qml \ - $$PWD/HorizontalHeaderView.qml \ - $$PWD/ItemDelegate.qml \ - $$PWD/Label.qml \ - $$PWD/Menu.qml \ - $$PWD/MenuItem.qml \ - $$PWD/MenuSeparator.qml \ - $$PWD/PageIndicator.qml \ - $$PWD/Page.qml \ - $$PWD/Pane.qml \ - $$PWD/Popup.qml \ - $$PWD/ProgressBar.qml \ - $$PWD/RadioButton.qml \ - $$PWD/RadioDelegate.qml \ - $$PWD/RangeSlider.qml \ - $$PWD/RoundButton.qml \ - $$PWD/ScrollView.qml \ - $$PWD/ScrollBar.qml \ - $$PWD/ScrollIndicator.qml \ - $$PWD/Slider.qml \ - $$PWD/SpinBox.qml \ - $$PWD/SplitView.qml \ - $$PWD/StackView.qml \ - $$PWD/SwipeDelegate.qml \ - $$PWD/SwipeView.qml \ - $$PWD/Switch.qml \ - $$PWD/SwitchDelegate.qml \ - $$PWD/TextField.qml \ - $$PWD/TextArea.qml \ - $$PWD/TabBar.qml \ - $$PWD/TabButton.qml \ - $$PWD/ToolBar.qml \ - $$PWD/ToolButton.qml \ - $$PWD/ToolSeparator.qml \ - $$PWD/ToolTip.qml \ - $$PWD/Tumbler.qml \ - $$PWD/VerticalHeaderView.qml diff --git a/src/imports/controls/imagine/impl/CMakeLists.txt b/src/imports/controls/imagine/impl/CMakeLists.txt deleted file mode 100644 index 61d53907..00000000 --- a/src/imports/controls/imagine/impl/CMakeLists.txt +++ /dev/null @@ -1,68 +0,0 @@ -# Generated from imagine-impl.pro. - -##################################################################### -## qtquickcontrols2imaginestyleimplplugin Plugin: -##################################################################### - -qt_internal_add_qml_module(qtquickcontrols2imaginestyleimplplugin - URI "QtQuick.Controls.Imagine.impl" - VERSION "${PROJECT_VERSION}" - CLASSNAME QtQuickControls2ImagineStyleImplPlugin - GENERATE_QMLTYPES - INSTALL_QMLTYPES - SOURCES - qquickimageselector.cpp qquickimageselector_p.h - qquickninepatchimage.cpp qquickninepatchimage_p.h - qtquickcontrols2imaginestyleimplplugin.cpp - DEFINES - QT_NO_CAST_FROM_ASCII - QT_NO_CAST_TO_ASCII - LIBRARIES - Qt::CorePrivate - Qt::Gui - Qt::QmlPrivate - Qt::QuickControls2ImplPrivate - Qt::QuickPrivate - Qt::QuickTemplates2Private - PUBLIC_LIBRARIES - Qt::Core - Qt::Gui - Qt::Qml - Qt::Quick -) - -# Resources: -set(qmake_qtquickcontrols2imaginestyleimpl_resource_files - "shaders/+glslcore/OpacityMask.frag" - "shaders/+qsb/OpacityMask.frag" - "shaders/OpacityMask.frag" -) - -qt_internal_add_resource(qtquickcontrols2imaginestyleimplplugin "qmake_qtquickcontrols2imaginestyleimpl" - PREFIX - "qt-project.org/imports/QtQuick/Controls/Imagine/impl" - FILES - ${qmake_qtquickcontrols2imaginestyleimpl_resource_files} -) - - -#### Keys ignored in scope 1:.:.:imagine-impl.pro:: -# OTHER_FILES = "qmldir" "$$QML_FILES" -# QML_FILES = "$$PWD/OpacityMask.qml" -# QML_IMPORT_NAME = "QtQuick.Controls.Imagine.impl" -# QML_IMPORT_VERSION = "$$QT_VERSION" -# QT_FOR_CONFIG = "quickcontrols2-private" -# TARGETPATH = "QtQuick/Controls/Imagine/impl" -# _REQUIREMENTS = "qtConfig(quickcontrols2-imagine)" - -set(qml_files - "OpacityMask.qml" -) -set_source_files_properties(OpacityMask.qml PROPERTIES - QT_QML_SOURCE_VERSION "6.0" -) - -qt6_target_qml_files(qtquickcontrols2imaginestyleimplplugin - FILES - ${qml_files} -) diff --git a/src/imports/controls/imagine/impl/OpacityMask.qml b/src/imports/controls/imagine/impl/OpacityMask.qml deleted file mode 100644 index 26663a1b..00000000 --- a/src/imports/controls/imagine/impl/OpacityMask.qml +++ /dev/null @@ -1,68 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick - -/* - A cross-graphics API implementation of QtGraphicalEffects' OpacityMask. - */ -Item { - id: rootItem - - property variant source - property variant maskSource - property bool cached: false - - ShaderEffectSource { - id: cacheItem - anchors.fill: parent - visible: rootItem.cached - smooth: true - sourceItem: shaderItem - live: true - hideSource: visible - } - - ShaderEffect { - id: shaderItem - property variant source: rootItem.source - property variant maskSource: rootItem.maskSource - - anchors.fill: parent - - fragmentShader: "qrc:/qt-project.org/imports/QtQuick/Controls/Imagine/impl/shaders/OpacityMask.frag" - } -} diff --git a/src/imports/controls/imagine/impl/qquickimageselector.cpp b/src/imports/controls/imagine/impl/qquickimageselector.cpp deleted file mode 100644 index dcb7738c..00000000 --- a/src/imports/controls/imagine/impl/qquickimageselector.cpp +++ /dev/null @@ -1,338 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickimageselector_p.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -Q_LOGGING_CATEGORY(lcQtQuickControlsImagine, "qt.quick.controls.imagine") - -static const int DEFAULT_CACHE = 500; - -static inline int cacheSize() -{ - static bool ok = false; - static const int size = qEnvironmentVariableIntValue("QT_QUICK_CONTROLS_IMAGINE_CACHE", &ok); - return ok ? size : DEFAULT_CACHE; -} - -// input: [focused, pressed] -// => [[focused, pressed], [pressed, focused], [focused], [pressed]] -static QList permutations(const QStringList &input, int count = -1) -{ - if (count == -1) - count = input.count(); - - QList output; - for (int i = 0; i < input.count(); ++i) { - QStringList sub = input.mid(i, count); - - if (count > 1) { - if (i + count > input.count()) - sub += input.mid(0, count - i + 1); - - std::sort(sub.begin(), sub.end()); - do { - if (!sub.isEmpty()) - output += sub; - } while (std::next_permutation(sub.begin(), sub.end())); - } else { - output += sub; - } - - if (count == input.count()) - break; - } - - if (count > 1) - output += permutations(input, --count); - - return output; -} - -static QString findFile(const QDir &dir, const QString &baseName, const QStringList &extensions) -{ - for (const QString &ext : extensions) { - QString filePath = dir.filePath(baseName + QLatin1Char('.') + ext); - if (QFile::exists(filePath)) - return QFileSelector().select(filePath); - } - // return an empty string to indicate that the lookup has been done - // even if no matching asset was found - return QLatin1String(""); -} - -QQuickImageSelector::QQuickImageSelector(QObject *parent) - : QObject(parent), - m_cache(cacheSize() > 0) -{ -} - -QUrl QQuickImageSelector::source() const -{ - return m_source; -} - -void QQuickImageSelector::setSource(const QUrl &source) -{ - if (m_property.isValid()) - QQmlPropertyPrivate::write(m_property, source, QQmlPropertyData::BypassInterceptor | QQmlPropertyData::DontRemoveBinding); - if (m_source == source) - return; - - m_source = source; - emit sourceChanged(); -} - -QString QQuickImageSelector::name() const -{ - return m_name; -} - -void QQuickImageSelector::setName(const QString &name) -{ - if (m_name == name) - return; - - m_name = name; - if (m_complete) - updateSource(); -} - -QString QQuickImageSelector::path() const -{ - return m_path; -} - -void QQuickImageSelector::setPath(const QString &path) -{ - if (m_path == path) - return; - - m_path = path; - if (m_complete) - updateSource(); -} - -QVariantList QQuickImageSelector::states() const -{ - return m_allStates; -} - -void QQuickImageSelector::setStates(const QVariantList &states) -{ - if (m_allStates == states) - return; - - m_allStates = states; - if (updateActiveStates() && m_complete) - updateSource(); -} - -QString QQuickImageSelector::separator() const -{ - return m_separator; -} - -void QQuickImageSelector::setSeparator(const QString &separator) -{ - if (m_separator == separator) - return; - - m_separator = separator; - if (m_complete) - updateSource(); -} - -bool QQuickImageSelector::cache() const -{ - return m_cache; -} - -void QQuickImageSelector::setCache(bool cache) -{ - m_cache = cache; -} - -void QQuickImageSelector::write(const QVariant &value) -{ - setUrl(value.toUrl()); -} - -void QQuickImageSelector::setTarget(const QQmlProperty &property) -{ - m_property = property; -} - -void QQuickImageSelector::classBegin() -{ -} - -void QQuickImageSelector::componentComplete() -{ - setUrl(m_property.read().toUrl()); - m_complete = true; - updateSource(); -} - -QStringList QQuickImageSelector::fileExtensions() const -{ - static const QStringList extensions = QStringList() << QStringLiteral("png"); - return extensions; -} - -QString QQuickImageSelector::cacheKey() const -{ - if (!m_cache) - return QString(); - - return m_path + m_name + m_activeStates.join(m_separator); -} - -void QQuickImageSelector::updateSource() -{ - static QCache cache(cacheSize()); - - const QString key = cacheKey(); - - QString bestFilePath; - - if (m_cache) { - QString *cachedPath = cache.object(key); - if (cachedPath) - bestFilePath = *cachedPath; - } - - // note: a cached file path may be empty - if (bestFilePath.isNull()) { - QDir dir(m_path); - int bestScore = -1; - - const QStringList extensions = fileExtensions(); - - const QList statePerms = permutations(m_activeStates); - for (const QStringList &perm : statePerms) { - const QString filePath = findFile(dir, m_name + m_separator + perm.join(m_separator), extensions); - if (!filePath.isEmpty()) { - int score = calculateScore(perm); - if (score > bestScore) { - bestScore = score; - bestFilePath = filePath; - } - } - } - - if (bestFilePath.isEmpty()) - bestFilePath = findFile(dir, m_name, extensions); - - if (m_cache) - cache.insert(key, new QString(bestFilePath)); - } - - qCDebug(lcQtQuickControlsImagine) << m_name << m_activeStates << "->" << bestFilePath; - - if (bestFilePath.startsWith(QLatin1Char(':'))) - setSource(QUrl(QLatin1String("qrc") + bestFilePath)); - else - setSource(QUrl::fromLocalFile(bestFilePath)); -} - -void QQuickImageSelector::setUrl(const QUrl &url) -{ - QFileInfo fileInfo(QQmlFile::urlToLocalFileOrQrc(url)); - setName(fileInfo.fileName()); - setPath(fileInfo.path()); -} - -bool QQuickImageSelector::updateActiveStates() -{ - QStringList active; - for (const QVariant &v : qAsConst(m_allStates)) { - const QVariantMap state = v.toMap(); - if (state.isEmpty()) - continue; - auto it = state.begin(); - if (it.value().toBool()) - active += it.key(); - } - - if (m_activeStates == active) - return false; - - m_activeStates = active; - return true; -} - -int QQuickImageSelector::calculateScore(const QStringList &states) const -{ - int score = 0; - for (int i = 0; i < states.count(); ++i) - score += (m_activeStates.count() - m_activeStates.indexOf(states.at(i))) << 1; - return score; -} - -QQuickNinePatchImageSelector::QQuickNinePatchImageSelector(QObject *parent) - : QQuickImageSelector(parent) -{ -} - -QStringList QQuickNinePatchImageSelector::fileExtensions() const -{ - static const QStringList extensions = QStringList() << QStringLiteral("9.png") << QStringLiteral("png"); - return extensions; -} - -QQuickAnimatedImageSelector::QQuickAnimatedImageSelector(QObject *parent) - : QQuickImageSelector(parent) -{ -} - -QStringList QQuickAnimatedImageSelector::fileExtensions() const -{ - static const QStringList extensions = QStringList() << QStringLiteral("webp") << QStringLiteral("gif"); - return extensions; -} - -QT_END_NAMESPACE diff --git a/src/imports/controls/imagine/impl/qquickimageselector_p.h b/src/imports/controls/imagine/impl/qquickimageselector_p.h deleted file mode 100644 index 351caefb..00000000 --- a/src/imports/controls/imagine/impl/qquickimageselector_p.h +++ /dev/null @@ -1,157 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKIMAGESELECTOR_P_H -#define QQUICKIMAGESELECTOR_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 -#include -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class QQuickImageSelector : public QObject, public QQmlParserStatus, public QQmlPropertyValueInterceptor -{ - Q_OBJECT - Q_PROPERTY(QUrl source READ source NOTIFY sourceChanged FINAL) - Q_PROPERTY(QString name READ name WRITE setName FINAL) - Q_PROPERTY(QString path READ path WRITE setPath FINAL) - Q_PROPERTY(QVariantList states READ states WRITE setStates FINAL) - Q_PROPERTY(QString separator READ separator WRITE setSeparator FINAL) - Q_PROPERTY(bool cache READ cache WRITE setCache FINAL) - Q_INTERFACES(QQmlParserStatus QQmlPropertyValueInterceptor) - QML_NAMED_ELEMENT(ImageSelector) - QML_ADDED_IN_VERSION(2, 3) - -public: - explicit QQuickImageSelector(QObject *parent = nullptr); - - QUrl source() const; - void setSource(const QUrl &source); - - QString name() const; - void setName(const QString &name); - - QString path() const; - void setPath(const QString &path); - - QVariantList states() const; - void setStates(const QVariantList &states); - - QString separator() const; - void setSeparator(const QString &separator); - - bool cache() const; - void setCache(bool cache); - - void write(const QVariant &value) override; - void setTarget(const QQmlProperty &property) override; - -Q_SIGNALS: - void sourceChanged(); - -protected: - void classBegin() override; - void componentComplete() override; - - virtual QStringList fileExtensions() const; - - QString cacheKey() const; - void updateSource(); - void setUrl(const QUrl &url); - bool updateActiveStates(); - int calculateScore(const QStringList &states) const; - -private: - bool m_cache = false; - bool m_complete = false; - QUrl m_source; - QString m_path; - QString m_name; - QString m_separator = QLatin1String("-"); - QVariantList m_allStates; - QStringList m_activeStates; - QQmlProperty m_property; -}; - -class QQuickNinePatchImageSelector : public QQuickImageSelector -{ - Q_OBJECT - QML_NAMED_ELEMENT(NinePatchImageSelector) - QML_ADDED_IN_VERSION(2, 3) - -public: - explicit QQuickNinePatchImageSelector(QObject *parent = nullptr); - -protected: - QStringList fileExtensions() const override; -}; - -class QQuickAnimatedImageSelector : public QQuickImageSelector -{ - Q_OBJECT - QML_NAMED_ELEMENT(AnimatedImageSelector) - QML_ADDED_IN_VERSION(2, 3) - -public: - explicit QQuickAnimatedImageSelector(QObject *parent = nullptr); - -protected: - QStringList fileExtensions() const override; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickImageSelector) -QML_DECLARE_TYPE(QQuickAnimatedImageSelector) - -#endif // QQUICKIMAGESELECTOR_P_H diff --git a/src/imports/controls/imagine/impl/qquickninepatchimage.cpp b/src/imports/controls/imagine/impl/qquickninepatchimage.cpp deleted file mode 100644 index 66404ba4..00000000 --- a/src/imports/controls/imagine/impl/qquickninepatchimage.cpp +++ /dev/null @@ -1,469 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickninepatchimage_p.h" - -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -struct QQuickNinePatchData -{ - QList coordsForSize(qreal count) const; - - inline bool isNull() const { return data.isEmpty(); } - inline int count() const { return data.size(); } - inline qreal at(int index) const { return data.at(index); } - inline qreal size() const { return data.last(); } - - void fill(const QList &coords, qreal count); - void clear(); - -private: - bool inverted = false; - QList data; -}; - -QList QQuickNinePatchData::coordsForSize(qreal size) const -{ - // n = number of stretchable sections - // We have to compensate when adding 0 and/or - // the source image width to the divs vector. - const int l = data.size(); - const int n = (inverted ? l - 1 : l) / 2; - const qreal stretch = (size - data.last()) / n; - - QList coords; - coords.reserve(l); - coords.append(0); - - bool stretched = !inverted; - for (int i = 1; i < l; ++i) { - qreal advance = data[i] - data[i - 1]; - if (stretched) - advance += stretch; - coords.append(coords.last() + advance); - - stretched = !stretched; - } - - return coords; -} - -void QQuickNinePatchData::fill(const QList &coords, qreal size) -{ - data.clear(); - inverted = coords.isEmpty() || coords.first() != 0; - - // Reserve an extra item in case we need to add the image width/height - if (inverted) { - data.reserve(coords.size() + 2); - data.append(0); - } else { - data.reserve(coords.size() + 1); - } - - data += coords; - data.append(size); -} - -void QQuickNinePatchData::clear() -{ - data.clear(); -} - -class QQuickNinePatchNode : public QSGGeometryNode -{ -public: - QQuickNinePatchNode(); - ~QQuickNinePatchNode(); - - void initialize(QSGTexture *texture, const QSizeF &targetSize, const QSize &sourceSize, - const QQuickNinePatchData &xDivs, const QQuickNinePatchData &yDivs, qreal dpr); - -private: - QSGGeometry m_geometry; - QSGTextureMaterial m_material; -}; - -QQuickNinePatchNode::QQuickNinePatchNode() - : m_geometry(QSGGeometry::defaultAttributes_TexturedPoint2D(), 4) -{ - m_geometry.setDrawingMode(QSGGeometry::DrawTriangles); - setGeometry(&m_geometry); - setMaterial(&m_material); -} - -QQuickNinePatchNode::~QQuickNinePatchNode() -{ - delete m_material.texture(); -} - -void QQuickNinePatchNode::initialize(QSGTexture *texture, const QSizeF &targetSize, const QSize &sourceSize, - const QQuickNinePatchData &xDivs, const QQuickNinePatchData &yDivs, qreal dpr) -{ - delete m_material.texture(); - m_material.setTexture(texture); - - const int xlen = xDivs.count(); - const int ylen = yDivs.count(); - - if (xlen > 0 && ylen > 0) { - const int quads = (xlen - 1) * (ylen - 1); - static const int verticesPerQuad = 6; - m_geometry.allocate(xlen * ylen, verticesPerQuad * quads); - - QSGGeometry::TexturedPoint2D *vertices = m_geometry.vertexDataAsTexturedPoint2D(); - QList xCoords = xDivs.coordsForSize(targetSize.width()); - QList yCoords = yDivs.coordsForSize(targetSize.height()); - - for (int y = 0; y < ylen; ++y) { - for (int x = 0; x < xlen; ++x, ++vertices) - vertices->set(xCoords[x] / dpr, yCoords[y] / dpr, - xDivs.at(x) / sourceSize.width(), - yDivs.at(y) / sourceSize.height()); - } - - quint16 *indices = m_geometry.indexDataAsUShort(); - int n = quads; - for (int q = 0; n--; ++q) { - if ((q + 1) % xlen == 0) // next row - ++q; - // Bottom-left half quad triangle - indices[0] = q; - indices[1] = q + xlen; - indices[2] = q + xlen + 1; - - // Top-right half quad triangle - indices[3] = q; - indices[4] = q + xlen + 1; - indices[5] = q + 1; - - indices += verticesPerQuad; - } - } - - markDirty(QSGNode::DirtyGeometry | QSGNode::DirtyMaterial); -} - -class QQuickNinePatchImagePrivate : public QQuickImagePrivate -{ - Q_DECLARE_PUBLIC(QQuickNinePatchImage) - -public: - void updatePatches(); - void updatePaddings(const QSizeF &size, const QList &horizontal, const QList &vertical); - void updateInsets(const QList &horizontal, const QList &vertical); - - bool resetNode = false; - qreal topPadding = 0; - qreal leftPadding = 0; - qreal rightPadding = 0; - qreal bottomPadding = 0; - qreal topInset = 0; - qreal leftInset = 0; - qreal rightInset = 0; - qreal bottomInset = 0; - - QImage ninePatch; - QQuickNinePatchData xDivs; - QQuickNinePatchData yDivs; -}; - -static QList readCoords(const QRgb *data, int from, int count, int offset, QRgb color) -{ - int p1 = -1; - QList coords; - for (int i = 0; i < count; ++i) { - int p2 = from + i * offset; - if (data[p2] == color) { - // colored pixel - if (p1 == -1) - p1 = i; - } else { - // empty pixel - if (p1 != -1) { - coords << p1 << i; - p1 = -1; - } - } - } - return coords; -} - -void QQuickNinePatchImagePrivate::updatePatches() -{ - if (ninePatch.isNull()) - return; - - int w = ninePatch.width(); - int h = ninePatch.height(); - const QRgb *data = reinterpret_cast(ninePatch.constBits()); - - const QRgb black = qRgb(0,0,0); - const QRgb red = qRgb(255,0,0); - - xDivs.fill(readCoords(data, 1, w - 1, 1, black), w - 2); // top left -> top right - yDivs.fill(readCoords(data, w, h - 1, w, black), h - 2); // top left -> bottom left - - QList hInsets = readCoords(data, (h - 1) * w + 1, w - 1, 1, red); // bottom left -> bottom right - QList vInsets = readCoords(data, 2 * w - 1, h - 1, w, red); // top right -> bottom right - updateInsets(hInsets, vInsets); - - const QSizeF sz(w - leftInset - rightInset, h - topInset - bottomInset); - QList hPaddings = readCoords(data, (h - 1) * w + leftInset + 1, sz.width() - 2, 1, black); // bottom left -> bottom right - QList vPaddings = readCoords(data, (2 + topInset) * w - 1, sz.height() - 2, w, black); // top right -> bottom right - updatePaddings(sz, hPaddings, vPaddings); -} - -void QQuickNinePatchImagePrivate::updatePaddings(const QSizeF &size, const QList &horizontal, const QList &vertical) -{ - Q_Q(QQuickNinePatchImage); - qreal oldTopPadding = topPadding; - qreal oldLeftPadding = leftPadding; - qreal oldRightPadding = rightPadding; - qreal oldBottomPadding = bottomPadding; - - if (horizontal.count() >= 2) { - leftPadding = horizontal.first(); - rightPadding = size.width() - horizontal.last() - 2; - } else { - leftPadding = 0; - rightPadding = 0; - } - - if (vertical.count() >= 2) { - topPadding = vertical.first(); - bottomPadding = size.height() - vertical.last() - 2; - } else { - topPadding = 0; - bottomPadding = 0; - } - - if (!qFuzzyCompare(oldTopPadding, topPadding)) - emit q->topPaddingChanged(); - if (!qFuzzyCompare(oldBottomPadding, bottomPadding)) - emit q->bottomPaddingChanged(); - if (!qFuzzyCompare(oldLeftPadding, leftPadding)) - emit q->leftPaddingChanged(); - if (!qFuzzyCompare(oldRightPadding, rightPadding)) - emit q->rightPaddingChanged(); -} - -void QQuickNinePatchImagePrivate::updateInsets(const QList &horizontal, const QList &vertical) -{ - Q_Q(QQuickNinePatchImage); - qreal oldTopInset = topInset; - qreal oldLeftInset = leftInset; - qreal oldRightInset = rightInset; - qreal oldBottomInset = bottomInset; - - if (horizontal.count() >= 2 && horizontal.first() == 0) - leftInset = horizontal.at(1); - else - leftInset = 0; - - if (horizontal.count() == 2 && horizontal.first() > 0) - rightInset = horizontal.last() - horizontal.first(); - else if (horizontal.count() == 4) - rightInset = horizontal.last() - horizontal.at(2); - else - rightInset = 0; - - if (vertical.count() >= 2 && vertical.first() == 0) - topInset = vertical.at(1); - else - topInset = 0; - - if (vertical.count() == 2 && vertical.first() > 0) - bottomInset = vertical.last() - vertical.first(); - else if (vertical.count() == 4) - bottomInset = vertical.last() - vertical.at(2); - else - bottomInset = 0; - - if (!qFuzzyCompare(oldTopInset, topInset)) - emit q->topInsetChanged(); - if (!qFuzzyCompare(oldBottomInset, bottomInset)) - emit q->bottomInsetChanged(); - if (!qFuzzyCompare(oldLeftInset, leftInset)) - emit q->leftInsetChanged(); - if (!qFuzzyCompare(oldRightInset, rightInset)) - emit q->rightInsetChanged(); -} - -QQuickNinePatchImage::QQuickNinePatchImage(QQuickItem *parent) - : QQuickImage(*(new QQuickNinePatchImagePrivate), parent) -{ -} - -qreal QQuickNinePatchImage::topPadding() const -{ - Q_D(const QQuickNinePatchImage); - return d->topPadding / d->devicePixelRatio; -} - -qreal QQuickNinePatchImage::leftPadding() const -{ - Q_D(const QQuickNinePatchImage); - return d->leftPadding / d->devicePixelRatio; -} - -qreal QQuickNinePatchImage::rightPadding() const -{ - Q_D(const QQuickNinePatchImage); - return d->rightPadding / d->devicePixelRatio; -} - -qreal QQuickNinePatchImage::bottomPadding() const -{ - Q_D(const QQuickNinePatchImage); - return d->bottomPadding / d->devicePixelRatio; -} - -qreal QQuickNinePatchImage::topInset() const -{ - Q_D(const QQuickNinePatchImage); - return d->topInset / d->devicePixelRatio; -} - -qreal QQuickNinePatchImage::leftInset() const -{ - Q_D(const QQuickNinePatchImage); - return d->leftInset / d->devicePixelRatio; -} - -qreal QQuickNinePatchImage::rightInset() const -{ - Q_D(const QQuickNinePatchImage); - return d->rightInset / d->devicePixelRatio; -} - -qreal QQuickNinePatchImage::bottomInset() const -{ - Q_D(const QQuickNinePatchImage); - return d->bottomInset / d->devicePixelRatio; -} - -void QQuickNinePatchImage::pixmapChange() -{ - Q_D(QQuickNinePatchImage); - if (QFileInfo(d->url.fileName()).completeSuffix().toLower() == QLatin1String("9.png")) { - // Keep resetNode if it is already set, we do not want to miss an - // ImageNode->NinePatchNode change. Without this there's a chance one gets - // an incorrect cast on oldNode every once in a while with source changes. - if (!d->resetNode) - d->resetNode = d->ninePatch.isNull(); - - d->ninePatch = d->pix.image(); - if (d->ninePatch.depth() != 32) - d->ninePatch = d->ninePatch.convertToFormat(QImage::Format_ARGB32); - - int w = d->ninePatch.width(); - int h = d->ninePatch.height(); - d->pix.setImage(QImage(d->ninePatch.constBits() + 4 * (w + 1), w - 2, h - 2, d->ninePatch.bytesPerLine(), d->ninePatch.format())); - - d->updatePatches(); - } else { - /* - Only change resetNode when it's false; i.e. when no reset is pending. - updatePaintNode() will take care of setting it to false if it's true. - - Consider the following changes in source: - - normal.png => press.9.png => normal.png => focus.png - - If the last two events happen quickly, pixmapChange() can be called - twice with no call to updatePaintNode() inbetween. On the first call, - resetNode will be true (because ninePatch is not null since it is still - in the process of going from a 9-patch image to a regular image), - and on the second call, resetNode would be false if we didn't have this check. - This results in the oldNode never being deleted, and QQuickImage - tries to static_cast a QQuickNinePatchImage to a QSGInternalImageNode. - */ - if (!d->resetNode) - d->resetNode = !d->ninePatch.isNull(); - d->ninePatch = QImage(); - } - QQuickImage::pixmapChange(); -} - -QSGNode *QQuickNinePatchImage::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data) -{ - Q_D(QQuickNinePatchImage); - Q_UNUSED(data); - - if (d->resetNode) { - delete oldNode; - oldNode = nullptr; - d->resetNode = false; - } - - QSizeF sz = size(); - QImage image = d->pix.image(); - if (!sz.isValid() || image.isNull()) { - delete oldNode; - return nullptr; - } - - if (d->ninePatch.isNull()) - return QQuickImage::updatePaintNode(oldNode, data); - - QQuickNinePatchNode *patchNode = static_cast(oldNode); - if (!patchNode) - patchNode = new QQuickNinePatchNode; - -#ifdef QSG_RUNTIME_DESCRIPTION - qsgnode_set_description(patchNode, QString::fromLatin1("QQuickNinePatchImage: '%1'").arg(d->url.toString())); -#endif - - // The image may wrap non-owned data (due to pixmapChange). Ensure we never - // pass such an image to the scenegraph, because with a separate render - // thread the data may become invalid (in a subsequent pixmapChange on the - // gui thread) by the time the renderer gets to do something with the QImage - // passed in here. - image.detach(); - - QSGTexture *texture = window()->createTextureFromImage(image); - patchNode->initialize(texture, sz * d->devicePixelRatio, image.size(), d->xDivs, d->yDivs, d->devicePixelRatio); - return patchNode; -} - -QT_END_NAMESPACE diff --git a/src/imports/controls/imagine/impl/qquickninepatchimage_p.h b/src/imports/controls/imagine/impl/qquickninepatchimage_p.h deleted file mode 100644 index 78cc3068..00000000 --- a/src/imports/controls/imagine/impl/qquickninepatchimage_p.h +++ /dev/null @@ -1,108 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKNINEPATCHIMAGE_P_H -#define QQUICKNINEPATCHIMAGE_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 - -QT_BEGIN_NAMESPACE - -class QQuickNinePatchImagePrivate; - -class QQuickNinePatchImage : public QQuickImage -{ - Q_OBJECT - Q_PROPERTY(qreal topPadding READ topPadding NOTIFY topPaddingChanged FINAL) - Q_PROPERTY(qreal leftPadding READ leftPadding NOTIFY leftPaddingChanged FINAL) - Q_PROPERTY(qreal rightPadding READ rightPadding NOTIFY rightPaddingChanged FINAL) - Q_PROPERTY(qreal bottomPadding READ bottomPadding NOTIFY bottomPaddingChanged FINAL) - Q_PROPERTY(qreal topInset READ topInset NOTIFY topInsetChanged FINAL) - Q_PROPERTY(qreal leftInset READ leftInset NOTIFY leftInsetChanged FINAL) - Q_PROPERTY(qreal rightInset READ rightInset NOTIFY rightInsetChanged FINAL) - Q_PROPERTY(qreal bottomInset READ bottomInset NOTIFY bottomInsetChanged FINAL) - QML_NAMED_ELEMENT(NinePatchImage) - QML_ADDED_IN_VERSION(2, 3) - -public: - explicit QQuickNinePatchImage(QQuickItem *parent = nullptr); - - qreal topPadding() const; - qreal leftPadding() const; - qreal rightPadding() const; - qreal bottomPadding() const; - - qreal topInset() const; - qreal leftInset() const; - qreal rightInset() const; - qreal bottomInset() const; - -Q_SIGNALS: - void topPaddingChanged(); - void leftPaddingChanged(); - void rightPaddingChanged(); - void bottomPaddingChanged(); - - void topInsetChanged(); - void leftInsetChanged(); - void rightInsetChanged(); - void bottomInsetChanged(); - -protected: - void pixmapChange() override; - QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data) override; - -private: - Q_DISABLE_COPY(QQuickNinePatchImage) - Q_DECLARE_PRIVATE(QQuickNinePatchImage) -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickNinePatchImage) - -#endif // QQUICKNINEPATCHIMAGE_P_H diff --git a/src/imports/controls/imagine/impl/qtquickcontrols2imaginestyleimplplugin.cpp b/src/imports/controls/imagine/impl/qtquickcontrols2imaginestyleimplplugin.cpp deleted file mode 100644 index d3b7f94e..00000000 --- a/src/imports/controls/imagine/impl/qtquickcontrols2imaginestyleimplplugin.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include - -extern void qml_register_types_QtQuick_Controls_Imagine_impl(); - -QT_BEGIN_NAMESPACE - -class QtQuickControls2ImagineStyleImplPlugin : public QQmlEngineExtensionPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) - -public: - QtQuickControls2ImagineStyleImplPlugin(QObject *parent = nullptr); -}; - -QtQuickControls2ImagineStyleImplPlugin::QtQuickControls2ImagineStyleImplPlugin(QObject *parent) - : QQmlEngineExtensionPlugin(parent) -{ - volatile auto registration = &qml_register_types_QtQuick_Controls_Imagine_impl; - Q_UNUSED(registration); -} - -QT_END_NAMESPACE - -#include "qtquickcontrols2imaginestyleimplplugin.moc" diff --git a/src/imports/controls/imagine/impl/shaders/+glslcore/OpacityMask.frag b/src/imports/controls/imagine/impl/shaders/+glslcore/OpacityMask.frag deleted file mode 100644 index 529e2696..00000000 --- a/src/imports/controls/imagine/impl/shaders/+glslcore/OpacityMask.frag +++ /dev/null @@ -1,13 +0,0 @@ -#version 150 - -uniform float qt_Opacity; -uniform sampler2D source; -uniform sampler2D maskSource; - -in vec2 qt_TexCoord0; -out vec4 fragColor; - -void main() -{ - fragColor = texture(source, qt_TexCoord0.st) * (texture(maskSource, qt_TexCoord0.st).a) * qt_Opacity; -} diff --git a/src/imports/controls/imagine/impl/shaders/+qsb/OpacityMask.frag b/src/imports/controls/imagine/impl/shaders/+qsb/OpacityMask.frag deleted file mode 100644 index 331b30b8..00000000 Binary files a/src/imports/controls/imagine/impl/shaders/+qsb/OpacityMask.frag and /dev/null differ diff --git a/src/imports/controls/imagine/impl/shaders/OpacityMask.frag b/src/imports/controls/imagine/impl/shaders/OpacityMask.frag deleted file mode 100644 index 84f9bc3e..00000000 --- a/src/imports/controls/imagine/impl/shaders/OpacityMask.frag +++ /dev/null @@ -1,7 +0,0 @@ -varying highp vec2 qt_TexCoord0; -uniform highp float qt_Opacity; -uniform lowp sampler2D source; -uniform lowp sampler2D maskSource; -void main(void) { - gl_FragColor = texture2D(source, qt_TexCoord0.st) * (texture2D(maskSource, qt_TexCoord0.st).a) * qt_Opacity; -} diff --git a/src/imports/controls/imagine/impl/shaders/OpacityMask_rhi.frag b/src/imports/controls/imagine/impl/shaders/OpacityMask_rhi.frag deleted file mode 100644 index 9ae32499..00000000 --- a/src/imports/controls/imagine/impl/shaders/OpacityMask_rhi.frag +++ /dev/null @@ -1,17 +0,0 @@ -#version 440 - -layout(location = 0) in vec2 qt_TexCoord0; -layout(location = 0) out vec4 fragColor; - -layout(std140, binding = 0) uniform buf { - mat4 qt_Matrix; - float qt_Opacity; -} ubuf; - -layout(binding = 1) uniform sampler2D source; -layout(binding = 2) uniform sampler2D maskSource; - -void main() -{ - fragColor = texture(source, qt_TexCoord0.st) * (texture(maskSource, qt_TexCoord0.st).a) * ubuf.qt_Opacity; -} diff --git a/src/imports/controls/imagine/impl/shaders/compile.bat b/src/imports/controls/imagine/impl/shaders/compile.bat deleted file mode 100644 index 8f16d7ac..00000000 --- a/src/imports/controls/imagine/impl/shaders/compile.bat +++ /dev/null @@ -1,40 +0,0 @@ -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -:: -:: Copyright (C) 2020 The Qt Company Ltd. -:: Contact: https://www.qt.io/licensing/ -:: -:: This file is part of the QtQuick module of the Qt Toolkit. -:: -:: $QT_BEGIN_LICENSE:LGPL$ -:: Commercial License Usage -:: Licensees holding valid commercial Qt licenses may use this file in -:: accordance with the commercial license agreement provided with the -:: Software or, alternatively, in accordance with the terms contained in -:: a written agreement between you and The Qt Company. For licensing terms -:: and conditions see https://www.qt.io/terms-conditions. For further -:: information use the contact form at https://www.qt.io/contact-us. -:: -:: GNU Lesser General Public License Usage -:: Alternatively, this file may be used under the terms of the GNU Lesser -:: General Public License version 3 as published by the Free Software -:: Foundation and appearing in the file LICENSE.LGPL3 included in the -:: packaging of this file. Please review the following information to -:: ensure the GNU Lesser General Public License version 3 requirements -:: will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -:: -:: GNU General Public License Usage -:: Alternatively, this file may be used under the terms of the GNU -:: General Public License version 2.0 or (at your option) the GNU General -:: Public license version 3 or any later version approved by the KDE Free -:: Qt Foundation. The licenses are as published by the Free Software -:: Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -:: included in the packaging of this file. Please review the following -:: information to ensure the GNU General Public License requirements will -:: be met: https://www.gnu.org/licenses/gpl-2.0.html and -:: https://www.gnu.org/licenses/gpl-3.0.html. -:: -:: $QT_END_LICENSE$ -:: -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - -qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -o +qsb/OpacityMask.frag OpacityMask_rhi.frag diff --git a/src/imports/controls/imagine/qquickimaginestyle.cpp b/src/imports/controls/imagine/qquickimaginestyle.cpp deleted file mode 100644 index 37e55b61..00000000 --- a/src/imports/controls/imagine/qquickimaginestyle.cpp +++ /dev/null @@ -1,168 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickimaginestyle_p.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -Q_GLOBAL_STATIC_WITH_ARGS(QString, GlobalPath, (QLatin1String("qrc:/qt-project.org/imports/QtQuick/Controls/Imagine/images/"))) - -static QString ensureSlash(const QString &path) -{ - const QChar slash = QLatin1Char('/'); - return path.endsWith(slash) ? path : path + slash; -} - -QQuickImagineStyle::QQuickImagineStyle(QObject *parent) - : QQuickAttachedObject(parent), - m_path(*GlobalPath()) -{ - init(); -} - -QQuickImagineStyle *QQuickImagineStyle::qmlAttachedProperties(QObject *object) -{ - return new QQuickImagineStyle(object); -} - -QString QQuickImagineStyle::path() const -{ - return m_path; -} - -void QQuickImagineStyle::setPath(const QString &path) -{ - m_explicitPath = true; - if (m_path == path) - return; - - m_path = path; - propagatePath(); - - emit pathChanged(); -} - -void QQuickImagineStyle::inheritPath(const QString &path) -{ - if (m_explicitPath || m_path == path) - return; - - m_path = path; - propagatePath(); - emit pathChanged(); -} - -void QQuickImagineStyle::propagatePath() -{ - const auto styles = attachedChildren(); - for (QQuickAttachedObject *child : styles) { - QQuickImagineStyle *imagine = qobject_cast(child); - if (imagine) - imagine->inheritPath(m_path); - } -} - -void QQuickImagineStyle::resetPath() -{ - if (!m_explicitPath) - return; - - m_explicitPath = false; - QQuickImagineStyle *imagine = qobject_cast(attachedParent()); - inheritPath(imagine ? imagine->path() : *GlobalPath()); -} - -QUrl QQuickImagineStyle::url() const -{ - // Using ApplicationWindow as an example, its NinePatchImage url - // was previously assigned like this: - // - // soruce: Imagine.path + "applicationwindow-background" - // - // If Imagine.path is set to ":/images" by the user, then the final URL would be: - // - // QUrl("file:///home/user/qt/qtbase/qml/QtQuick/Controls/Imagine/:/images/applicationwindow-background") - // - // To ensure that the correct URL is constructed, we do it ourselves here, - // and then the control QML files use the "url" property instead. - const QString path = ensureSlash(m_path); - if (path.startsWith(QLatin1String("qrc"))) - return QUrl(path); - - if (path.startsWith(QLatin1String(":/"))) - return QUrl(QLatin1String("qrc") + path); - - return QUrl::fromLocalFile(path); -} - -void QQuickImagineStyle::attachedParentChange(QQuickAttachedObject *newParent, QQuickAttachedObject *oldParent) -{ - Q_UNUSED(oldParent); - QQuickImagineStyle *imagine = qobject_cast(newParent); - if (imagine) - inheritPath(imagine->path()); -} - -static QByteArray resolveSetting(const QByteArray &env, const QSharedPointer &settings, const QString &name) -{ - QByteArray value = qgetenv(env); -#if QT_CONFIG(settings) - if (value.isNull() && !settings.isNull()) - value = settings->value(name).toByteArray(); -#endif - return value; -} - -void QQuickImagineStyle::init() -{ - static bool globalsInitialized = false; - if (!globalsInitialized) { - QSharedPointer settings = QQuickStylePrivate::settings(QStringLiteral("Imagine")); - - QString path = QString::fromUtf8(resolveSetting("QT_QUICK_CONTROLS_IMAGINE_PATH", settings, QStringLiteral("Path"))); - if (!path.isEmpty()) - *GlobalPath() = m_path = ensureSlash(path); - - globalsInitialized = true; - } - - QQuickAttachedObject::init(); // TODO: lazy init? -} - -QT_END_NAMESPACE diff --git a/src/imports/controls/imagine/qquickimaginestyle_p.h b/src/imports/controls/imagine/qquickimaginestyle_p.h deleted file mode 100644 index 212096b9..00000000 --- a/src/imports/controls/imagine/qquickimaginestyle_p.h +++ /dev/null @@ -1,97 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKIMAGINESTYLE_P_H -#define QQUICKIMAGINESTYLE_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class QQuickImagineStyle : public QQuickAttachedObject -{ - Q_OBJECT - Q_PROPERTY(QString path READ path WRITE setPath RESET resetPath NOTIFY pathChanged FINAL) - Q_PROPERTY(QUrl url READ url NOTIFY pathChanged FINAL) - QML_NAMED_ELEMENT(Imagine) - QML_ATTACHED(QQuickImagineStyle) - QML_UNCREATABLE("") - QML_ADDED_IN_VERSION(2, 3) - -public: - explicit QQuickImagineStyle(QObject *parent = nullptr); - - static QQuickImagineStyle *qmlAttachedProperties(QObject *object); - - QString path() const; - void setPath(const QString &path); - void inheritPath(const QString &path); - void propagatePath(); - void resetPath(); - - QUrl url() const; - -Q_SIGNALS: - void pathChanged(); - -protected: - void attachedParentChange(QQuickAttachedObject *newParent, QQuickAttachedObject *oldParent) override; - -private: - void init(); - - bool m_explicitPath = false; - QString m_path; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPEINFO(QQuickImagineStyle, QML_HAS_ATTACHED_PROPERTIES) - -#endif // QQUICKIMAGINESTYLE_P_H diff --git a/src/imports/controls/imagine/qquickimaginetheme.cpp b/src/imports/controls/imagine/qquickimaginetheme.cpp deleted file mode 100644 index 7bae036a..00000000 --- a/src/imports/controls/imagine/qquickimaginetheme.cpp +++ /dev/null @@ -1,66 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickimaginetheme_p.h" - -#include - -QT_BEGIN_NAMESPACE - -void QQuickImagineTheme::initialize(QQuickTheme *theme) -{ - QFont systemFont; - systemFont.setFamilies(QStringList{QLatin1String("Open Sans")}); - theme->setFont(QQuickTheme::System, systemFont); - - const QColor accentColor = QColor::fromRgb(0x4fc1e9); - const QColor windowTextColor = QColor::fromRgb(0x434a54); - const QColor disabledWindowTextColor = QColor::fromRgb(0xccd1d9); - - QPalette systemPalette; - systemPalette.setColor(QPalette::ButtonText, Qt::white); - systemPalette.setColor(QPalette::BrightText, Qt::white); - systemPalette.setColor(QPalette::Highlight, accentColor); - systemPalette.setColor(QPalette::HighlightedText, Qt::white); - systemPalette.setColor(QPalette::Text, windowTextColor); - systemPalette.setColor(QPalette::ToolTipText, Qt::white); - systemPalette.setColor(QPalette::WindowText, windowTextColor); - systemPalette.setColor(QPalette::Disabled, QPalette::Text, disabledWindowTextColor); - systemPalette.setColor(QPalette::Disabled, QPalette::WindowText, disabledWindowTextColor); - theme->setPalette(QQuickTheme::System, systemPalette); -} - -QT_END_NAMESPACE diff --git a/src/imports/controls/imagine/qquickimaginetheme_p.h b/src/imports/controls/imagine/qquickimaginetheme_p.h deleted file mode 100644 index d3d43074..00000000 --- a/src/imports/controls/imagine/qquickimaginetheme_p.h +++ /dev/null @@ -1,65 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKIMAGINETHEME_P_H -#define QQUICKIMAGINETHEME_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include - -QT_BEGIN_NAMESPACE - -class QQuickTheme; - -class QQuickImagineTheme -{ -public: - static void initialize(QQuickTheme *theme); -}; - -QT_END_NAMESPACE - -#endif // QQUICKIMAGINETHEME_P_H diff --git a/src/imports/controls/imagine/qtquickcontrols2imaginestyleplugin.cpp b/src/imports/controls/imagine/qtquickcontrols2imaginestyleplugin.cpp deleted file mode 100644 index bc885cfd..00000000 --- a/src/imports/controls/imagine/qtquickcontrols2imaginestyleplugin.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickimaginestyle_p.h" -#include "qquickimaginetheme_p.h" - -#include -#include -#include -#include - -extern void qml_register_types_QtQuick_Controls_Imagine(); - -QT_BEGIN_NAMESPACE - -class QtQuickControls2ImagineStylePlugin : public QQuickStylePlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) - -public: - QtQuickControls2ImagineStylePlugin(QObject *parent = nullptr); - - QString name() const override; - void initializeTheme(QQuickTheme *theme) override; - - QQuickImagineTheme theme; -}; - -QtQuickControls2ImagineStylePlugin::QtQuickControls2ImagineStylePlugin(QObject *parent) : QQuickStylePlugin(parent) -{ - volatile auto registration = &qml_register_types_QtQuick_Controls_Imagine; - Q_UNUSED(registration); -} - -QString QtQuickControls2ImagineStylePlugin::name() const -{ - return QStringLiteral("Imagine"); -} - -void QtQuickControls2ImagineStylePlugin::initializeTheme(QQuickTheme *theme) -{ - this->theme.initialize(theme); -} - -QT_END_NAMESPACE - -#include "qtquickcontrols2imaginestyleplugin.moc" diff --git a/src/imports/controls/macos/Button.qml b/src/imports/controls/macos/Button.qml deleted file mode 100644 index 58658c52..00000000 --- a/src/imports/controls/macos/Button.qml +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.NativeStyle as NativeStyle - -NativeStyle.DefaultButton { - id: control - readonly property Item __focusFrameTarget: control -} diff --git a/src/imports/controls/macos/CMakeLists.txt b/src/imports/controls/macos/CMakeLists.txt deleted file mode 100644 index bdd45a29..00000000 --- a/src/imports/controls/macos/CMakeLists.txt +++ /dev/null @@ -1,107 +0,0 @@ -# Generated from macos.pro. - -##################################################################### -## qtquickcontrols2macosstyleplugin Plugin: -##################################################################### - -qt_internal_add_qml_module(qtquickcontrols2macosstyleplugin - URI "QtQuick.Controls.macOS" - VERSION "${PROJECT_VERSION}" - CLASSNAME QtQuickControls2MacOSStylePlugin - IMPORTS - QtQuick.Controls.Fusion/auto - PAST_MAJOR_VERSIONS 2 - GENERATE_QMLTYPES - INSTALL_QMLTYPES - SOURCES - qtquickcontrols2macosstyleplugin.cpp - DEFINES - QT_NO_CAST_FROM_ASCII - QT_NO_CAST_TO_ASCII - LIBRARIES - Qt::CorePrivate - Qt::GuiPrivate - Qt::QmlPrivate - Qt::QuickControls2Private - Qt::QuickPrivate - Qt::QuickTemplates2Private - PUBLIC_LIBRARIES - Qt::Core - Qt::Gui - Qt::Qml - Qt::Quick - Qt::QuickControls2 - Qt::QuickTemplates2 -) - -#### Keys ignored in scope 1:.:.:macos.pro:: -# OTHER_FILES = "qmldir" "$$QML_FILES" -# QML_IMPORT_NAME = "QtQuick.Controls.macOS" -# QML_IMPORT_VERSION = "$$QT_VERSION" -# QML_PAST_MAJOR_VERSIONS = "2" -# TARGETPATH = "QtQuick/Controls/macOS" -# _REQUIREMENTS = "qtConfig(quickcontrols2-macos)" - -set(qml_files - "Button.qml" - "Slider.qml" - "GroupBox.qml" - "CheckBox.qml" - "RadioButton.qml" - "SpinBox.qml" - "TextField.qml" - "Frame.qml" - "TextArea.qml" - "ComboBox.qml" - "ScrollView.qml" - "ScrollBar.qml" - "ProgressBar.qml" - "Dial.qml" -) -set_source_files_properties(Button.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Slider.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(GroupBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(CheckBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(RadioButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SpinBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TextField.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Frame.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TextArea.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ComboBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ScrollView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ScrollBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ProgressBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Dial.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) - -qt6_target_qml_files(qtquickcontrols2macosstyleplugin - FILES - ${qml_files} -) diff --git a/src/imports/controls/macos/CheckBox.qml b/src/imports/controls/macos/CheckBox.qml deleted file mode 100644 index 23ad4426..00000000 --- a/src/imports/controls/macos/CheckBox.qml +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.NativeStyle as NativeStyle - -NativeStyle.DefaultCheckBox { - readonly property Item __focusFrameTarget: indicator - readonly property Item __focusFrameStyleItem: indicator -} diff --git a/src/imports/controls/macos/ComboBox.qml b/src/imports/controls/macos/ComboBox.qml deleted file mode 100644 index 53baabf8..00000000 --- a/src/imports/controls/macos/ComboBox.qml +++ /dev/null @@ -1,65 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -NativeStyle.DefaultComboBox { - id: control - readonly property Item __focusFrameTarget: control - - contentItem: T.TextField { - implicitWidth: contentWidth - implicitHeight: contentHeight - text: control.editable ? control.editText : control.displayText - - enabled: control.editable - autoScroll: control.editable - readOnly: control.down - inputMethodHints: control.inputMethodHints - validator: control.validator - selectByMouse: control.selectTextByMouse - - font: control.font - color: control.editable ? control.palette.text : control.palette.buttonText - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - verticalAlignment: Text.AlignVCenter - - readonly property Item __focusFrameControl: control - } -} diff --git a/src/imports/controls/macos/Dial.qml b/src/imports/controls/macos/Dial.qml deleted file mode 100644 index 2076a54a..00000000 --- a/src/imports/controls/macos/Dial.qml +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.NativeStyle as NativeStyle - -NativeStyle.DefaultDial { -} diff --git a/src/imports/controls/macos/Frame.qml b/src/imports/controls/macos/Frame.qml deleted file mode 100644 index f16a0835..00000000 --- a/src/imports/controls/macos/Frame.qml +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.NativeStyle as NativeStyle - -NativeStyle.DefaultFrame { -} diff --git a/src/imports/controls/macos/GroupBox.qml b/src/imports/controls/macos/GroupBox.qml deleted file mode 100644 index 142ddd15..00000000 --- a/src/imports/controls/macos/GroupBox.qml +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.NativeStyle as NativeStyle - -NativeStyle.DefaultGroupBox { - id: control - label: Item { - readonly property point labelPos : control.__nativeBackground - ? background.labelPos - : Qt.point(0,0) - x: labelPos.x + background.x - y: labelPos.y + background.y - groupBoxPadding.top - width: children[0].implicitWidth - height: children[0].implicitHeight - Text { - width: parent.width - height: parent.height - text: control.title - font: control.font - color: control.palette.windowText - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } - } -} diff --git a/src/imports/controls/macos/ProgressBar.qml b/src/imports/controls/macos/ProgressBar.qml deleted file mode 100644 index 59a1689d..00000000 --- a/src/imports/controls/macos/ProgressBar.qml +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.NativeStyle as NativeStyle - -NativeStyle.DefaultProgressBar { -} diff --git a/src/imports/controls/macos/RadioButton.qml b/src/imports/controls/macos/RadioButton.qml deleted file mode 100644 index c9cdf985..00000000 --- a/src/imports/controls/macos/RadioButton.qml +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.NativeStyle as NativeStyle - -NativeStyle.DefaultRadioButton { - readonly property Item __focusFrameTarget: indicator - readonly property Item __focusFrameStyleItem: indicator -} diff --git a/src/imports/controls/macos/ScrollBar.qml b/src/imports/controls/macos/ScrollBar.qml deleted file mode 100644 index 4a9f764b..00000000 --- a/src/imports/controls/macos/ScrollBar.qml +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.NativeStyle as NativeStyle - -NativeStyle.DefaultScrollBar { - id: controlRoot - - contentItem: NativeStyle.ScrollBar { - control: controlRoot - subControl: NativeStyle.ScrollBar.Handle - overrideState: NativeStyle.ScrollBar.NeverHovered - } - - NativeStyle.ScrollBar { - // Fade a hovered-looking version of the handle - // on top of the default handle when hovering it - x: contentItem.x - y: contentItem.y - width: contentItem.width - height: contentItem.height - control: controlRoot - subControl: NativeStyle.ScrollBar.Handle - overrideState: NativeStyle.StyleItem.AlwaysHovered - opacity: controlRoot.hovered || control.pressed ? 1 : 0 - visible: contentItem instanceof NativeStyle.StyleItem - Behavior on opacity { NumberAnimation { duration: contentItem.transitionDuration } } - } - -} diff --git a/src/imports/controls/macos/ScrollView.qml b/src/imports/controls/macos/ScrollView.qml deleted file mode 100644 index 954c5d8a..00000000 --- a/src/imports/controls/macos/ScrollView.qml +++ /dev/null @@ -1,75 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.ScrollView { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - rightPadding: ScrollBar.vertical.visible ? ScrollBar.vertical.width : 0 - bottomPadding: ScrollBar.horizontal.visible ? ScrollBar.horizontal.height : 0 - - ScrollBar.vertical: ScrollBar { - parent: control - x: control.mirrored ? 0 : control.width - width - y: 0 - height: control.height - (control.ScrollBar.horizontal.visible ? control.ScrollBar.horizontal.height : 0) - active: control.ScrollBar.horizontal.active - - NativeStyle.ScrollViewCorner { - y: parent.height - control: control - visible: control.ScrollBar.horizontal.visible - useNinePatchImage: false - } - } - - ScrollBar.horizontal: ScrollBar { - parent: control - x: 0 - y: control.height - height - width: control.width - (control.ScrollBar.vertical.visible ? control.ScrollBar.vertical.width : 0) - active: control.ScrollBar.vertical.active - } -} diff --git a/src/imports/controls/macos/Slider.qml b/src/imports/controls/macos/Slider.qml deleted file mode 100644 index 77543577..00000000 --- a/src/imports/controls/macos/Slider.qml +++ /dev/null @@ -1,68 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.NativeStyle as NativeStyle - -NativeStyle.DefaultSlider { - id: control - readonly property Item __focusFrameTarget: handle - readonly property Item __focusFrameStyleItem: handle - - background: NativeStyle.Slider { - control: control - subControl: NativeStyle.Slider.Groove | NativeStyle.Slider.Handle - // We normally cannot use a nine patch image for the - // groove if we draw tickmarks (since then the scaling - // would scale the tickmarks too). The groove might - // also use a different background color before, and - // after, the handle. - useNinePatchImage: false - } - - handle: NativeStyle.Slider { - // The handle is hidden, since it will be drawn as a part - // of the background. But will still needs it to be here so - // that we can place the focus rect correctly. - visible: false - - control: control - subControl: NativeStyle.Slider.Handle - x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)) - useNinePatchImage: false - } -} diff --git a/src/imports/controls/macos/SpinBox.qml b/src/imports/controls/macos/SpinBox.qml deleted file mode 100644 index 5928d37e..00000000 --- a/src/imports/controls/macos/SpinBox.qml +++ /dev/null @@ -1,126 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.SpinBox { - id: control - - property bool __nativeBackground: background instanceof NativeStyle.StyleItem - property bool nativeIndicators: up.indicator.hasOwnProperty("_qt_default") - && down.indicator.hasOwnProperty("_qt_default") - - font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - 90 /* minimum */ ) - implicitHeight: Math.max(implicitBackgroundHeight, up.implicitIndicatorHeight + down.implicitIndicatorHeight) - + topInset + bottomInset - - spacing: 2 - - // Push the background right to make room for the indicators - rightInset: nativeIndicators ? up.implicitIndicatorWidth + spacing : 0 - - leftPadding: __nativeBackground ? background.contentPadding.left: 0 - topPadding: __nativeBackground ? background.contentPadding.top: 0 - rightPadding: (__nativeBackground ? background.contentPadding.right : 0) + rightInset - bottomPadding: __nativeBackground ? background.contentPadding.bottom: 0 - - readonly property Item __focusFrameTarget: contentItem - - validator: IntValidator { - locale: control.locale.name - bottom: Math.min(control.from, control.to) - top: Math.max(control.from, control.to) - } - - contentItem: TextInput { - text: control.displayText - font: control.font - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - horizontalAlignment: Qt.AlignLeft - verticalAlignment: Qt.AlignVCenter - - topPadding: 2 - bottomPadding: 2 - leftPadding: 10 - rightPadding: 10 - - readOnly: !control.editable - validator: control.validator - inputMethodHints: control.inputMethodHints - - readonly property Item __focusFrameControl: control - } - - NativeStyle.SpinBox { - id: upAndDown - control: control - subControl: NativeStyle.SpinBox.Up - visible: nativeIndicators - x: up.indicator.x - y: up.indicator.y - useNinePatchImage: false - } - - up.indicator: Item { - x: parent.width - width - y: (parent.height / 2) - height - implicitWidth: upAndDown.width - implicitHeight: upAndDown.height / 2 - property bool _qt_default - } - - down.indicator: Item { - x: parent.width - width - y: up.indicator.y + upAndDown.height / 2 - implicitWidth: upAndDown.width - implicitHeight: upAndDown.height / 2 - property bool _qt_default - } - - background: NativeStyle.SpinBox { - control: control - subControl: NativeStyle.SpinBox.Frame - contentWidth: contentItem.implicitWidth - contentHeight: contentItem.implicitHeight - } -} diff --git a/src/imports/controls/macos/TextArea.qml b/src/imports/controls/macos/TextArea.qml deleted file mode 100644 index f6b88303..00000000 --- a/src/imports/controls/macos/TextArea.qml +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.NativeStyle as NativeStyle - -NativeStyle.DefaultTextArea { -} diff --git a/src/imports/controls/macos/TextField.qml b/src/imports/controls/macos/TextField.qml deleted file mode 100644 index f3a748f6..00000000 --- a/src/imports/controls/macos/TextField.qml +++ /dev/null @@ -1,43 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.NativeStyle as NativeStyle - -NativeStyle.DefaultTextField { - id: control - readonly property Item __focusFrameTarget: control -} diff --git a/src/imports/controls/macos/macos.pri b/src/imports/controls/macos/macos.pri deleted file mode 100644 index d059151e..00000000 --- a/src/imports/controls/macos/macos.pri +++ /dev/null @@ -1,15 +0,0 @@ -QML_FILES += \ - $$PWD/Button.qml \ - $$PWD/Slider.qml \ - $$PWD/GroupBox.qml \ - $$PWD/CheckBox.qml \ - $$PWD/RadioButton.qml \ - $$PWD/SpinBox.qml \ - $$PWD/TextField.qml \ - $$PWD/Frame.qml \ - $$PWD/TextArea.qml \ - $$PWD/ComboBox.qml \ - $$PWD/ScrollView.qml \ - $$PWD/ScrollBar.qml \ - $$PWD/ProgressBar.qml \ - $$PWD/Dial.qml \ diff --git a/src/imports/controls/macos/qtquickcontrols2macosstyleplugin.cpp b/src/imports/controls/macos/qtquickcontrols2macosstyleplugin.cpp deleted file mode 100644 index 9a4fd0ce..00000000 --- a/src/imports/controls/macos/qtquickcontrols2macosstyleplugin.cpp +++ /dev/null @@ -1,75 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include - -extern void qml_register_types_QtQuick_Controls_macOS(); - -QT_BEGIN_NAMESPACE - -class QtQuickControls2MacOSStylePlugin : public QQuickStylePlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) - -public: - QtQuickControls2MacOSStylePlugin(QObject *parent = nullptr); - QString name() const override; - void initializeTheme(QQuickTheme *theme) override; -}; - - -QtQuickControls2MacOSStylePlugin::QtQuickControls2MacOSStylePlugin(QObject *parent): - QQuickStylePlugin(parent) -{ - volatile auto registration = &qml_register_types_QtQuick_Controls_macOS; - Q_UNUSED(registration); -} - -QString QtQuickControls2MacOSStylePlugin::name() const -{ - return QStringLiteral("macOS"); -} - -void QtQuickControls2MacOSStylePlugin::initializeTheme(QQuickTheme */*theme*/) -{ -} - -QT_END_NAMESPACE - -#include "qtquickcontrols2macosstyleplugin.moc" diff --git a/src/imports/controls/material/ApplicationWindow.qml b/src/imports/controls/material/ApplicationWindow.qml deleted file mode 100644 index 82a0da8b..00000000 --- a/src/imports/controls/material/ApplicationWindow.qml +++ /dev/null @@ -1,46 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Window -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.ApplicationWindow { - id: window - - color: Material.backgroundColor -} diff --git a/src/imports/controls/material/BusyIndicator.qml b/src/imports/controls/material/BusyIndicator.qml deleted file mode 100644 index 621b2b43..00000000 --- a/src/imports/controls/material/BusyIndicator.qml +++ /dev/null @@ -1,61 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.BusyIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - - contentItem: BusyIndicatorImpl { - implicitWidth: control.Material.touchTarget - implicitHeight: control.Material.touchTarget - color: control.Material.accentColor - - running: control.running - opacity: control.running ? 1 : 0 - Behavior on opacity { OpacityAnimator { duration: 250 } } - } -} diff --git a/src/imports/controls/material/Button.qml b/src/imports/controls/material/Button.qml deleted file mode 100644 index 352eebec..00000000 --- a/src/imports/controls/material/Button.qml +++ /dev/null @@ -1,117 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.Button { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topInset: 6 - bottomInset: 6 - padding: 12 - horizontalPadding: padding - 4 - spacing: 6 - - icon.width: 24 - icon.height: 24 - icon.color: !enabled ? Material.hintTextColor : - flat && highlighted ? Material.accentColor : - highlighted ? Material.primaryHighlightedTextColor : Material.foreground - - Material.elevation: flat ? control.down || control.hovered ? 2 : 0 - : control.down ? 8 : 2 - Material.background: flat ? "transparent" : undefined - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: !control.enabled ? control.Material.hintTextColor : - control.flat && control.highlighted ? control.Material.accentColor : - control.highlighted ? control.Material.primaryHighlightedTextColor : control.Material.foreground - } - - background: Rectangle { - implicitWidth: 64 - implicitHeight: control.Material.buttonHeight - - radius: 2 - color: !control.enabled ? control.Material.buttonDisabledColor : - control.highlighted ? control.Material.highlightedButtonColor : control.Material.buttonColor - - PaddedRectangle { - y: parent.height - 4 - width: parent.width - height: 4 - radius: 2 - topPadding: -2 - clip: true - visible: control.checkable && (!control.highlighted || control.flat) - color: control.checked && control.enabled ? control.Material.accentColor : control.Material.secondaryTextColor - } - - // The layer is disabled when the button color is transparent so you can do - // Material.background: "transparent" and get a proper flat button without needing - // to set Material.elevation as well - layer.enabled: control.enabled && control.Material.buttonColor.a > 0 - layer.effect: ElevationEffect { - elevation: control.Material.elevation - } - - Ripple { - clipRadius: 2 - width: parent.width - height: parent.height - pressed: control.pressed - anchor: control - active: control.down || control.visualFocus || control.hovered - color: control.flat && control.highlighted ? control.Material.highlightedRippleColor : control.Material.rippleColor - } - } -} diff --git a/src/imports/controls/material/CMakeLists.txt b/src/imports/controls/material/CMakeLists.txt deleted file mode 100644 index 286f25b8..00000000 --- a/src/imports/controls/material/CMakeLists.txt +++ /dev/null @@ -1,282 +0,0 @@ -# Generated from material.pro. - -##################################################################### -## qtquickcontrols2materialstyleplugin Plugin: -##################################################################### - -qt_internal_add_qml_module(qtquickcontrols2materialstyleplugin - URI "QtQuick.Controls.Material" - VERSION "${PROJECT_VERSION}" - CLASSNAME QtQuickControls2MaterialStylePlugin - IMPORTS - QtQuick.Controls.Basic/auto - GENERATE_QMLTYPES - INSTALL_QMLTYPES - SOURCES - qquickmaterialstyle.cpp qquickmaterialstyle_p.h - qquickmaterialtheme.cpp qquickmaterialtheme_p.h - qtquickcontrols2materialstyleplugin.cpp - DEFINES - QT_NO_CAST_FROM_ASCII - QT_NO_CAST_TO_ASCII - LIBRARIES - Qt::CorePrivate - Qt::GuiPrivate - Qt::QmlPrivate - Qt::QuickControls2ImplPrivate - Qt::QuickControls2Private - Qt::QuickPrivate - Qt::QuickTemplates2Private - PUBLIC_LIBRARIES - Qt::Core - Qt::Gui - Qt::Qml - Qt::Quick -) - -# Resources: -set(qtquickcontrols2materialstyleplugin_resource_files - "images/arrow-indicator.png" - "images/arrow-indicator@2x.png" - "images/arrow-indicator@3x.png" - "images/arrow-indicator@4x.png" - "images/check.png" - "images/check@2x.png" - "images/check@3x.png" - "images/check@4x.png" - "images/drop-indicator.png" - "images/drop-indicator@2x.png" - "images/drop-indicator@3x.png" - "images/drop-indicator@4x.png" - "shaders/+glslcore/RectangularGlow.frag" - "shaders/+hlsl/RectangularGlow.frag" - "shaders/+qsb/RectangularGlow.frag" - "shaders/RectangularGlow.frag" -) - -qt_internal_add_resource(qtquickcontrols2materialstyleplugin "qtquickcontrols2materialstyleplugin" - PREFIX - "/qt-project.org/imports/QtQuick/Controls/Material" - FILES - ${qtquickcontrols2materialstyleplugin_resource_files} -) - - -#### Keys ignored in scope 1:.:.:material.pro:: -# OTHER_FILES = "qmldir" "$$QML_FILES" -# QML_IMPORT_NAME = "QtQuick.Controls.Material" -# QML_IMPORT_VERSION = "$$QT_VERSION" -# TARGETPATH = "QtQuick/Controls/Material" -# _REQUIREMENTS = "qtConfig(quickcontrols2-material)" - -set(qml_files - "ApplicationWindow.qml" - "BusyIndicator.qml" - "Button.qml" - "CheckBox.qml" - "CheckDelegate.qml" - "ComboBox.qml" - "DelayButton.qml" - "Dial.qml" - "Dialog.qml" - "DialogButtonBox.qml" - "Drawer.qml" - "Frame.qml" - "GroupBox.qml" - "HorizontalHeaderView.qml" - "ItemDelegate.qml" - "Label.qml" - "Menu.qml" - "MenuBar.qml" - "MenuBarItem.qml" - "MenuItem.qml" - "MenuSeparator.qml" - "Page.qml" - "PageIndicator.qml" - "Pane.qml" - "Popup.qml" - "ProgressBar.qml" - "RadioButton.qml" - "RadioDelegate.qml" - "RangeSlider.qml" - "RoundButton.qml" - "ScrollView.qml" - "ScrollBar.qml" - "ScrollIndicator.qml" - "Slider.qml" - "SpinBox.qml" - "SplitView.qml" - "StackView.qml" - "SwipeDelegate.qml" - "SwipeView.qml" - "Switch.qml" - "SwitchDelegate.qml" - "TabBar.qml" - "TabButton.qml" - "TextArea.qml" - "TextField.qml" - "ToolBar.qml" - "ToolButton.qml" - "ToolSeparator.qml" - "ToolTip.qml" - "Tumbler.qml" - "VerticalHeaderView.qml" -) -set_source_files_properties(ApplicationWindow.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(BusyIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Button.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(CheckBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(CheckDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ComboBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(DelayButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.2;6.0" -) -set_source_files_properties(Dial.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Dialog.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(DialogButtonBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(Drawer.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Frame.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(GroupBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(HorizontalHeaderView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.15;6.0" -) -set_source_files_properties(ItemDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Label.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Menu.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(MenuBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.3;6.0" -) -set_source_files_properties(MenuBarItem.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.3;6.0" -) -set_source_files_properties(MenuItem.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(MenuSeparator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(Page.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(PageIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Pane.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Popup.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ProgressBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(RadioButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(RadioDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(RangeSlider.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(RoundButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(ScrollView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ScrollBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ScrollIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Slider.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SpinBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SplitView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.13;6.0" -) -set_source_files_properties(StackView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SwipeDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SwipeView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Switch.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SwitchDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TabBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TabButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TextArea.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TextField.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ToolBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ToolButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ToolSeparator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(ToolTip.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Tumbler.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(VerticalHeaderView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.15;6.0" -) - -qt6_target_qml_files(qtquickcontrols2materialstyleplugin - FILES - ${qml_files} -) diff --git a/src/imports/controls/material/CheckBox.qml b/src/imports/controls/material/CheckBox.qml deleted file mode 100644 index a3f717be..00000000 --- a/src/imports/controls/material/CheckBox.qml +++ /dev/null @@ -1,83 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.CheckBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 8 - padding: 8 - verticalPadding: padding + 7 - - indicator: CheckIndicator { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - - Ripple { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 28; height: 28 - - z: -1 - anchor: control - pressed: control.pressed - active: control.down || control.visualFocus || control.hovered - color: control.checked ? control.Material.highlightedRippleColor : control.Material.rippleColor - } - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } -} diff --git a/src/imports/controls/material/CheckDelegate.qml b/src/imports/controls/material/CheckDelegate.qml deleted file mode 100644 index ea42d666..00000000 --- a/src/imports/controls/material/CheckDelegate.qml +++ /dev/null @@ -1,97 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.CheckDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 16 - verticalPadding: 8 - spacing: 16 - - icon.width: 24 - icon.height: 24 - icon.color: enabled ? Material.foreground : Material.hintTextColor - - indicator: CheckIndicator { - x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: IconLabel { - leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing - rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - } - - background: Rectangle { - implicitHeight: control.Material.delegateHeight - - color: control.highlighted ? control.Material.listHighlightColor : "transparent" - - Ripple { - width: parent.width - height: parent.height - - clip: visible - pressed: control.pressed - anchor: control - active: control.down || control.visualFocus || control.hovered - color: control.Material.rippleColor - } - } -} diff --git a/src/imports/controls/material/ComboBox.qml b/src/imports/controls/material/ComboBox.qml deleted file mode 100644 index 15f4c1ad..00000000 --- a/src/imports/controls/material/ComboBox.qml +++ /dev/null @@ -1,179 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Window -import QtQuick.Controls.impl -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.ComboBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - topInset: 6 - bottomInset: 6 - - leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) - rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) - - Material.elevation: flat ? control.pressed || control.hovered ? 2 : 0 - : control.pressed ? 8 : 2 - Material.background: flat ? "transparent" : undefined - Material.foreground: flat ? undefined : Material.primaryTextColor - - delegate: MenuItem { - width: ListView.view.width - text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData - Material.foreground: control.currentIndex === index ? ListView.view.contentItem.Material.accent : ListView.view.contentItem.Material.foreground - highlighted: control.highlightedIndex === index - hoverEnabled: control.hoverEnabled - } - - indicator: ColorImage { - x: control.mirrored ? control.padding : control.width - width - control.padding - y: control.topPadding + (control.availableHeight - height) / 2 - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Material/images/drop-indicator.png" - } - - contentItem: T.TextField { - padding: 6 - leftPadding: control.editable ? 2 : control.mirrored ? 0 : 12 - rightPadding: control.editable ? 2 : control.mirrored ? 12 : 0 - - text: control.editable ? control.editText : control.displayText - - enabled: control.editable - autoScroll: control.editable - readOnly: control.down - inputMethodHints: control.inputMethodHints - validator: control.validator - selectByMouse: control.selectTextByMouse - - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - selectionColor: control.Material.accentColor - selectedTextColor: control.Material.primaryHighlightedTextColor - verticalAlignment: Text.AlignVCenter - - cursorDelegate: CursorDelegate { } - } - - background: Rectangle { - implicitWidth: 120 - implicitHeight: control.Material.buttonHeight - - radius: control.flat ? 0 : 2 - color: !control.editable ? control.Material.dialogColor : "transparent" - - layer.enabled: control.enabled && !control.editable && control.Material.background.a > 0 - layer.effect: ElevationEffect { - elevation: control.Material.elevation - } - - Rectangle { - visible: control.editable - y: parent.y + control.baselineOffset - width: parent.width - height: control.activeFocus ? 2 : 1 - color: control.editable && control.activeFocus ? control.Material.accentColor : control.Material.hintTextColor - } - - Ripple { - clip: control.flat - clipRadius: control.flat ? 0 : 2 - x: control.editable && control.indicator ? control.indicator.x : 0 - width: control.editable && control.indicator ? control.indicator.width : parent.width - height: parent.height - pressed: control.pressed - anchor: control.editable && control.indicator ? control.indicator : control - active: control.pressed || control.visualFocus || control.hovered - color: control.Material.rippleColor - } - } - - popup: T.Popup { - y: control.editable ? control.height - 5 : 0 - width: control.width - height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin) - transformOrigin: Item.Top - topMargin: 12 - bottomMargin: 12 - - Material.theme: control.Material.theme - Material.accent: control.Material.accent - Material.primary: control.Material.primary - - enter: Transition { - // grow_fade_in - NumberAnimation { property: "scale"; from: 0.9; easing.type: Easing.OutQuint; duration: 220 } - NumberAnimation { property: "opacity"; from: 0.0; easing.type: Easing.OutCubic; duration: 150 } - } - - exit: Transition { - // shrink_fade_out - NumberAnimation { property: "scale"; to: 0.9; easing.type: Easing.OutQuint; duration: 220 } - NumberAnimation { property: "opacity"; to: 0.0; easing.type: Easing.OutCubic; duration: 150 } - } - - contentItem: ListView { - clip: true - implicitHeight: contentHeight - model: control.delegateModel - currentIndex: control.highlightedIndex - highlightMoveDuration: 0 - - T.ScrollIndicator.vertical: ScrollIndicator { } - } - - background: Rectangle { - radius: 2 - color: parent.Material.dialogColor - - layer.enabled: control.enabled - layer.effect: ElevationEffect { - elevation: 8 - } - } - } -} diff --git a/src/imports/controls/material/DelayButton.qml b/src/imports/controls/material/DelayButton.qml deleted file mode 100644 index d35df35c..00000000 --- a/src/imports/controls/material/DelayButton.qml +++ /dev/null @@ -1,116 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.DelayButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topInset: 6 - bottomInset: 6 - padding: 12 - horizontalPadding: padding - 4 - - Material.elevation: control.down ? 8 : 2 - - transition: Transition { - NumberAnimation { - duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress) - } - } - - contentItem: Text { - text: control.text - font: control.font - color: !control.enabled ? control.Material.hintTextColor : control.Material.foreground - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - elide: Text.ElideRight - } - - // TODO: Add a proper ripple/ink effect for mouse/touch input and focus state - background: Rectangle { - implicitWidth: 64 - implicitHeight: control.Material.buttonHeight - - radius: 2 - color: !control.enabled ? control.Material.buttonDisabledColor : control.Material.buttonColor - - PaddedRectangle { - y: parent.height - 4 - width: parent.width - height: 4 - radius: 2 - topPadding: -2 - clip: true - color: control.checked && control.enabled ? control.Material.accentColor : control.Material.secondaryTextColor - - PaddedRectangle { - width: parent.width * control.progress - height: 4 - radius: 2 - topPadding: -2 - rightPadding: Math.max(-2, width - parent.width) - clip: true - color: control.Material.accentColor - } - } - - layer.enabled: control.enabled && control.Material.buttonColor.a > 0 - layer.effect: ElevationEffect { - elevation: control.Material.elevation - } - - Ripple { - clipRadius: 2 - width: parent.width - height: parent.height - pressed: control.pressed - anchor: control - active: control.down || control.visualFocus || control.hovered - color: control.Material.rippleColor - } - } -} diff --git a/src/imports/controls/material/Dial.qml b/src/imports/controls/material/Dial.qml deleted file mode 100644 index 2731436f..00000000 --- a/src/imports/controls/material/Dial.qml +++ /dev/null @@ -1,85 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.Dial { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 100 - - x: control.width / 2 - width / 2 - y: control.height / 2 - height / 2 - width: Math.max(64, Math.min(control.width, control.height)) - height: width - color: "transparent" - radius: width / 2 - - border.color: control.enabled ? control.Material.accentColor : control.Material.hintTextColor - } - - handle: SliderHandle { - x: control.background.x + control.background.width / 2 - width / 2 - y: control.background.y + control.background.height / 2 - height / 2 - transform: [ - Translate { - y: -control.background.height * 0.4 + control.handle.height / 2 - }, - Rotation { - angle: control.angle - origin.x: control.handle.width / 2 - origin.y: control.handle.height / 2 - } - ] - implicitWidth: 10 - implicitHeight: 10 - - value: control.value - handleHasFocus: control.visualFocus - handlePressed: control.pressed - handleHovered: control.hovered - } -} diff --git a/src/imports/controls/material/Dialog.qml b/src/imports/controls/material/Dialog.qml deleted file mode 100644 index 1cb7f8c1..00000000 --- a/src/imports/controls/material/Dialog.qml +++ /dev/null @@ -1,112 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.Dialog { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - padding: 24 - topPadding: 20 - - Material.elevation: 24 - - enter: Transition { - // grow_fade_in - NumberAnimation { property: "scale"; from: 0.9; to: 1.0; easing.type: Easing.OutQuint; duration: 220 } - NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutCubic; duration: 150 } - } - - exit: Transition { - // shrink_fade_out - NumberAnimation { property: "scale"; from: 1.0; to: 0.9; easing.type: Easing.OutQuint; duration: 220 } - NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.OutCubic; duration: 150 } - } - - background: Rectangle { - radius: 2 - color: control.Material.dialogColor - - layer.enabled: control.Material.elevation > 0 - layer.effect: ElevationEffect { - elevation: control.Material.elevation - } - } - - header: Label { - text: control.title - visible: control.title - elide: Label.ElideRight - padding: 24 - bottomPadding: 0 - // TODO: QPlatformTheme::TitleBarFont - font.bold: true - font.pixelSize: 16 - background: PaddedRectangle { - radius: 2 - color: control.Material.dialogColor - bottomPadding: -2 - clip: true - } - } - - footer: DialogButtonBox { - visible: count > 0 - } - - T.Overlay.modal: Rectangle { - color: control.Material.backgroundDimColor - Behavior on opacity { NumberAnimation { duration: 150 } } - } - - T.Overlay.modeless: Rectangle { - color: control.Material.backgroundDimColor - Behavior on opacity { NumberAnimation { duration: 150 } } - } -} diff --git a/src/imports/controls/material/DialogButtonBox.qml b/src/imports/controls/material/DialogButtonBox.qml deleted file mode 100644 index e32fa812..00000000 --- a/src/imports/controls/material/DialogButtonBox.qml +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.DialogButtonBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - spacing: 8 - padding: 8 - verticalPadding: 2 - alignment: Qt.AlignRight - buttonLayout: T.DialogButtonBox.AndroidLayout - - Material.foreground: Material.accent - - delegate: Button { flat: true } - - contentItem: ListView { - model: control.contentModel - spacing: control.spacing - orientation: ListView.Horizontal - boundsBehavior: Flickable.StopAtBounds - snapMode: ListView.SnapToItem - } - - background: PaddedRectangle { - implicitHeight: control.Material.dialogButtonBoxHeight - radius: 2 - color: control.Material.dialogColor - // Rounded corners should be only at the top or at the bottom - topPadding: control.position === T.DialogButtonBox.Footer ? -2 : 0 - bottomPadding: control.position === T.DialogButtonBox.Header ? -2 : 0 - clip: true - } -} diff --git a/src/imports/controls/material/Drawer.qml b/src/imports/controls/material/Drawer.qml deleted file mode 100644 index 93c4bf56..00000000 --- a/src/imports/controls/material/Drawer.qml +++ /dev/null @@ -1,91 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.Drawer { - id: control - - parent: T.Overlay.overlay - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: !dim && edge === Qt.BottomEdge && Material.elevation === 0 - leftPadding: !dim && edge === Qt.RightEdge && Material.elevation === 0 - rightPadding: !dim && edge === Qt.LeftEdge && Material.elevation === 0 - bottomPadding: !dim && edge === Qt.TopEdge && Material.elevation === 0 - - enter: Transition { SmoothedAnimation { velocity: 5 } } - exit: Transition { SmoothedAnimation { velocity: 5 } } - - Material.elevation: !interactive && !dim ? 0 : 16 - - background: Rectangle { - color: control.Material.dialogColor - - Rectangle { - readonly property bool horizontal: control.edge === Qt.LeftEdge || control.edge === Qt.RightEdge - width: horizontal ? 1 : parent.width - height: horizontal ? parent.height : 1 - color: control.Material.dividerColor - x: control.edge === Qt.LeftEdge ? parent.width - 1 : 0 - y: control.edge === Qt.TopEdge ? parent.height - 1 : 0 - visible: !control.dim && control.Material.elevation === 0 - } - - layer.enabled: control.position > 0 - layer.effect: ElevationEffect { - elevation: control.Material.elevation - fullHeight: true - } - } - - T.Overlay.modal: Rectangle { - color: control.Material.backgroundDimColor - Behavior on opacity { NumberAnimation { duration: 150 } } - } - - T.Overlay.modeless: Rectangle { - color: control.Material.backgroundDimColor - Behavior on opacity { NumberAnimation { duration: 150 } } - } -} diff --git a/src/imports/controls/material/Frame.qml b/src/imports/controls/material/Frame.qml deleted file mode 100644 index 8626f766..00000000 --- a/src/imports/controls/material/Frame.qml +++ /dev/null @@ -1,63 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.Frame { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 12 - verticalPadding: Material.frameVerticalPadding - - background: Rectangle { - radius: 2 - color: control.Material.elevation > 0 ? control.Material.backgroundColor : "transparent" - border.color: control.Material.frameColor - - layer.enabled: control.enabled && control.Material.elevation > 0 - layer.effect: ElevationEffect { - elevation: control.Material.elevation - } - } -} diff --git a/src/imports/controls/material/GroupBox.qml b/src/imports/controls/material/GroupBox.qml deleted file mode 100644 index 4a27b832..00000000 --- a/src/imports/controls/material/GroupBox.qml +++ /dev/null @@ -1,81 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.GroupBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitLabelWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - spacing: 6 - padding: 12 - topPadding: Material.frameVerticalPadding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) - bottomPadding: Material.frameVerticalPadding - - label: Text { - x: control.leftPadding - width: control.availableWidth - - text: control.title - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } - - background: Rectangle { - y: control.topPadding - control.bottomPadding - width: parent.width - height: parent.height - control.topPadding + control.bottomPadding - - radius: 2 - color: control.Material.elevation > 0 ? control.Material.backgroundColor : "transparent" - border.color: control.Material.frameColor - - layer.enabled: control.enabled && control.Material.elevation > 0 - layer.effect: ElevationEffect { - elevation: control.Material.elevation - } - } -} diff --git a/src/imports/controls/material/HorizontalHeaderView.qml b/src/imports/controls/material/HorizontalHeaderView.qml deleted file mode 100644 index d2608c76..00000000 --- a/src/imports/controls/material/HorizontalHeaderView.qml +++ /dev/null @@ -1,68 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.HorizontalHeaderView { - id: control - - implicitWidth: syncView ? syncView.width : 0 - implicitHeight: contentHeight - - delegate: Rectangle { - // Qt6: add cellPadding (and font etc) as public API in headerview - readonly property real cellPadding: 8 - - implicitWidth: text.implicitWidth + (cellPadding * 2) - implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2)) - color: control.Material.backgroundColor - - Text { - id: text - text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] - : model[control.textRole]) - : modelData - width: parent.width - height: parent.height - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: enabled ? control.Material.foreground : control.Material.hintTextColor - } - } -} diff --git a/src/imports/controls/material/ItemDelegate.qml b/src/imports/controls/material/ItemDelegate.qml deleted file mode 100644 index 7d06b05b..00000000 --- a/src/imports/controls/material/ItemDelegate.qml +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.ItemDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 16 - verticalPadding: 8 - spacing: 16 - - icon.width: 24 - icon.height: 24 - icon.color: enabled ? Material.foreground : Material.hintTextColor - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - } - - background: Rectangle { - implicitHeight: control.Material.delegateHeight - - color: control.highlighted ? control.Material.listHighlightColor : "transparent" - - Ripple { - width: parent.width - height: parent.height - - clip: visible - pressed: control.pressed - anchor: control - active: control.down || control.visualFocus || control.hovered - color: control.Material.rippleColor - } - } -} diff --git a/src/imports/controls/material/LICENSE_ANGULARJS.txt b/src/imports/controls/material/LICENSE_ANGULARJS.txt deleted file mode 100644 index c1f2a826..00000000 --- a/src/imports/controls/material/LICENSE_ANGULARJS.txt +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2014-2016 Google, Inc. http://angularjs.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/src/imports/controls/material/Label.qml b/src/imports/controls/material/Label.qml deleted file mode 100644 index 77e85f42..00000000 --- a/src/imports/controls/material/Label.qml +++ /dev/null @@ -1,46 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.Label { - id: control - - color: enabled ? Material.foreground : Material.hintTextColor - linkColor: Material.accentColor -} diff --git a/src/imports/controls/material/Menu.qml b/src/imports/controls/material/Menu.qml deleted file mode 100644 index b7e80c92..00000000 --- a/src/imports/controls/material/Menu.qml +++ /dev/null @@ -1,107 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl -import QtQuick.Window - -T.Menu { - id: control - - Material.elevation: 8 - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - margins: 0 - verticalPadding: 8 - - transformOrigin: !cascade ? Item.Top : (mirrored ? Item.TopRight : Item.TopLeft) - - delegate: MenuItem { } - - enter: Transition { - // grow_fade_in - NumberAnimation { property: "scale"; from: 0.9; to: 1.0; easing.type: Easing.OutQuint; duration: 220 } - NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutCubic; duration: 150 } - } - - exit: Transition { - // shrink_fade_out - NumberAnimation { property: "scale"; from: 1.0; to: 0.9; easing.type: Easing.OutQuint; duration: 220 } - NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.OutCubic; duration: 150 } - } - - contentItem: ListView { - implicitHeight: contentHeight - - model: control.contentModel - interactive: Window.window - ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height - : false - clip: true - currentIndex: control.currentIndex - - ScrollIndicator.vertical: ScrollIndicator {} - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: control.Material.menuItemHeight - - radius: 3 - color: control.Material.dialogColor - - layer.enabled: control.Material.elevation > 0 - layer.effect: ElevationEffect { - elevation: control.Material.elevation - } - } - - T.Overlay.modal: Rectangle { - color: control.Material.backgroundDimColor - Behavior on opacity { NumberAnimation { duration: 150 } } - } - - T.Overlay.modeless: Rectangle { - color: control.Material.backgroundDimColor - Behavior on opacity { NumberAnimation { duration: 150 } } - } -} diff --git a/src/imports/controls/material/MenuBar.qml b/src/imports/controls/material/MenuBar.qml deleted file mode 100644 index a0c3bd3f..00000000 --- a/src/imports/controls/material/MenuBar.qml +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.MenuBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - delegate: MenuBarItem { } - - contentItem: Row { - spacing: control.spacing - Repeater { - model: control.contentModel - } - } - - background: Rectangle { - implicitHeight: 40 - color: control.Material.dialogColor - } -} diff --git a/src/imports/controls/material/MenuBarItem.qml b/src/imports/controls/material/MenuBarItem.qml deleted file mode 100644 index f1d4e87d..00000000 --- a/src/imports/controls/material/MenuBarItem.qml +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.MenuBarItem { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 16 - verticalPadding: 12 - spacing: 16 - - icon.width: 24 - icon.height: 24 - icon.color: enabled ? Material.foreground : Material.hintTextColor - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - } - - background: Rectangle { - implicitWidth: 40 - implicitHeight: 40 - color: control.highlighted ? control.Material.listHighlightColor : "transparent" - - Ripple { - width: parent.width - height: parent.height - - clip: visible - pressed: control.pressed - anchor: control - active: control.down || control.highlighted - color: control.Material.rippleColor - } - } -} diff --git a/src/imports/controls/material/MenuItem.qml b/src/imports/controls/material/MenuItem.qml deleted file mode 100644 index fab2de26..00000000 --- a/src/imports/controls/material/MenuItem.qml +++ /dev/null @@ -1,111 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.MenuItem { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 16 - verticalPadding: Material.menuItemVerticalPadding - spacing: 16 - - icon.width: 24 - icon.height: 24 - icon.color: enabled ? Material.foreground : Material.hintTextColor - - indicator: CheckIndicator { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - visible: control.checkable - control: control - checkState: control.checked ? Qt.Checked : Qt.Unchecked - } - - arrow: ColorImage { - x: control.mirrored ? control.padding : control.width - width - control.padding - y: control.topPadding + (control.availableHeight - height) / 2 - - visible: control.subMenu - mirror: control.mirrored - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Material/images/arrow-indicator.png" - } - - contentItem: IconLabel { - readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0 - readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0 - leftPadding: !control.mirrored ? indicatorPadding : arrowPadding - rightPadding: control.mirrored ? indicatorPadding : arrowPadding - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: control.Material.menuItemHeight - color: control.highlighted ? control.Material.listHighlightColor : "transparent" - - Ripple { - width: parent.width - height: parent.height - - clip: visible - pressed: control.pressed - anchor: control - active: control.down || control.highlighted - color: control.Material.rippleColor - } - } -} diff --git a/src/imports/controls/material/MenuSeparator.qml b/src/imports/controls/material/MenuSeparator.qml deleted file mode 100644 index 08a33ffe..00000000 --- a/src/imports/controls/material/MenuSeparator.qml +++ /dev/null @@ -1,56 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.MenuSeparator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - verticalPadding: 8 - - contentItem: Rectangle { - implicitWidth: 200 - implicitHeight: 1 - color: control.Material.dividerColor - } -} diff --git a/src/imports/controls/material/Page.qml b/src/imports/controls/material/Page.qml deleted file mode 100644 index 711fac2d..00000000 --- a/src/imports/controls/material/Page.qml +++ /dev/null @@ -1,56 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.Page { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - background: Rectangle { - color: control.Material.backgroundColor - } -} diff --git a/src/imports/controls/material/PageIndicator.qml b/src/imports/controls/material/PageIndicator.qml deleted file mode 100644 index 8ccd7de3..00000000 --- a/src/imports/controls/material/PageIndicator.qml +++ /dev/null @@ -1,71 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.PageIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - delegate: Rectangle { - implicitWidth: 8 - implicitHeight: 8 - - radius: width / 2 - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - - opacity: index === currentIndex ? 0.95 : pressed ? 0.7 : 0.45 - Behavior on opacity { OpacityAnimator { duration: 100 } } - } - - contentItem: Row { - spacing: control.spacing - - Repeater { - model: control.count - delegate: control.delegate - } - } -} diff --git a/src/imports/controls/material/Pane.qml b/src/imports/controls/material/Pane.qml deleted file mode 100644 index 055a8d23..00000000 --- a/src/imports/controls/material/Pane.qml +++ /dev/null @@ -1,61 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.Pane { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 12 - - background: Rectangle { - color: control.Material.backgroundColor - radius: control.Material.elevation > 0 ? 2 : 0 - - layer.enabled: control.enabled && control.Material.elevation > 0 - layer.effect: ElevationEffect { - elevation: control.Material.elevation - } - } -} diff --git a/src/imports/controls/material/Popup.qml b/src/imports/controls/material/Popup.qml deleted file mode 100644 index cb5b62ec..00000000 --- a/src/imports/controls/material/Popup.qml +++ /dev/null @@ -1,85 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.Popup { - id: control - - Material.elevation: 24 - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 12 - - enter: Transition { - // grow_fade_in - NumberAnimation { property: "scale"; from: 0.9; to: 1.0; easing.type: Easing.OutQuint; duration: 220 } - NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutCubic; duration: 150 } - } - - exit: Transition { - // shrink_fade_out - NumberAnimation { property: "scale"; from: 1.0; to: 0.9; easing.type: Easing.OutQuint; duration: 220 } - NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.OutCubic; duration: 150 } - } - - background: Rectangle { - radius: 2 - color: control.Material.dialogColor - - layer.enabled: control.Material.elevation > 0 - layer.effect: ElevationEffect { - elevation: control.Material.elevation - } - } - - T.Overlay.modal: Rectangle { - color: control.Material.backgroundDimColor - Behavior on opacity { NumberAnimation { duration: 150 } } - } - - T.Overlay.modeless: Rectangle { - color: control.Material.backgroundDimColor - Behavior on opacity { NumberAnimation { duration: 150 } } - } -} diff --git a/src/imports/controls/material/ProgressBar.qml b/src/imports/controls/material/ProgressBar.qml deleted file mode 100644 index dd4fae0e..00000000 --- a/src/imports/controls/material/ProgressBar.qml +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.ProgressBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - contentItem: ProgressBarImpl { - implicitHeight: 4 - - scale: control.mirrored ? -1 : 1 - color: control.Material.accentColor - progress: control.position - indeterminate: control.visible && control.indeterminate - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 4 - y: (control.height - height) / 2 - height: 4 - - color: Qt.rgba(control.Material.accentColor.r, control.Material.accentColor.g, control.Material.accentColor.b, 0.25) - } -} diff --git a/src/imports/controls/material/RadioButton.qml b/src/imports/controls/material/RadioButton.qml deleted file mode 100644 index 664cb19e..00000000 --- a/src/imports/controls/material/RadioButton.qml +++ /dev/null @@ -1,83 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.RadioButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 8 - padding: 8 - verticalPadding: padding + 6 - - indicator: RadioIndicator { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - - Ripple { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 28; height: 28 - - z: -1 - anchor: control - pressed: control.pressed - active: control.down || control.visualFocus || control.hovered - color: control.checked ? control.Material.highlightedRippleColor : control.Material.rippleColor - } - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } -} diff --git a/src/imports/controls/material/RadioDelegate.qml b/src/imports/controls/material/RadioDelegate.qml deleted file mode 100644 index 334e570b..00000000 --- a/src/imports/controls/material/RadioDelegate.qml +++ /dev/null @@ -1,97 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.RadioDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 16 - verticalPadding: 8 - spacing: 16 - - icon.width: 24 - icon.height: 24 - icon.color: enabled ? Material.foreground : Material.hintTextColor - - indicator: RadioIndicator { - x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: IconLabel { - leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing - rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - } - - background: Rectangle { - implicitHeight: control.Material.delegateHeight - - color: control.highlighted ? control.Material.listHighlightColor : "transparent" - - Ripple { - width: parent.width - height: parent.height - - clip: visible - pressed: control.pressed - anchor: control - active: control.down || control.visualFocus || control.hovered - color: control.Material.rippleColor - } - } -} diff --git a/src/imports/controls/material/RangeSlider.qml b/src/imports/controls/material/RangeSlider.qml deleted file mode 100644 index d1d22115..00000000 --- a/src/imports/controls/material/RangeSlider.qml +++ /dev/null @@ -1,92 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.RangeSlider { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - first.implicitHandleWidth + leftPadding + rightPadding, - second.implicitHandleWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - first.implicitHandleHeight + topPadding + bottomPadding, - second.implicitHandleHeight + topPadding + bottomPadding) - - padding: 6 - - first.handle: SliderHandle { - x: control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height)) - value: first.value - handleHasFocus: activeFocus - handlePressed: first.pressed - handleHovered: first.hovered - } - - second.handle: SliderHandle { - x: control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height)) - value: second.value - handleHasFocus: activeFocus - handlePressed: second.pressed - handleHovered: second.hovered - } - - background: Rectangle { - x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) - implicitWidth: control.horizontal ? 200 : 48 - implicitHeight: control.horizontal ? 48 : 200 - width: control.horizontal ? control.availableWidth : 4 - height: control.horizontal ? 4 : control.availableHeight - scale: control.horizontal && control.mirrored ? -1 : 1 - color: control.enabled ? Color.transparent(control.Material.accentColor, 0.33) : control.Material.sliderDisabledColor - - Rectangle { - x: control.horizontal ? control.first.position * parent.width : 0 - y: control.horizontal ? 0 : control.second.visualPosition * parent.height - width: control.horizontal ? control.second.position * parent.width - control.first.position * parent.width : 4 - height: control.horizontal ? 4 : control.second.position * parent.height - control.first.position * parent.height - - color: control.enabled ? control.Material.accentColor : control.Material.sliderDisabledColor - } - } -} diff --git a/src/imports/controls/material/RoundButton.qml b/src/imports/controls/material/RoundButton.qml deleted file mode 100644 index f93f2425..00000000 --- a/src/imports/controls/material/RoundButton.qml +++ /dev/null @@ -1,114 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.RoundButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - topInset: 6 - leftInset: 6 - rightInset: 6 - bottomInset: 6 - padding: 12 - spacing: 6 - - icon.width: 24 - icon.height: 24 - icon.color: !enabled ? Material.hintTextColor : - flat && highlighted ? Material.accentColor : - highlighted ? Material.primaryHighlightedTextColor : Material.foreground - - Material.elevation: flat ? control.down || control.hovered ? 2 : 0 - : control.down ? 12 : 6 - Material.background: flat ? "transparent" : undefined - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: !control.enabled ? control.Material.hintTextColor : - control.flat && control.highlighted ? control.Material.accentColor : - control.highlighted ? control.Material.primaryHighlightedTextColor : control.Material.foreground - } - - // TODO: Add a proper ripple/ink effect for mouse/touch input and focus state - background: Rectangle { - implicitWidth: control.Material.buttonHeight - implicitHeight: control.Material.buttonHeight - - radius: control.radius - color: !control.enabled ? control.Material.buttonDisabledColor - : control.checked || control.highlighted ? control.Material.highlightedButtonColor : control.Material.buttonColor - - Rectangle { - width: parent.width - height: parent.height - radius: control.radius - visible: control.hovered || control.visualFocus - color: control.Material.rippleColor - } - - Rectangle { - width: parent.width - height: parent.height - radius: control.radius - visible: control.down - color: control.Material.rippleColor - } - - // The layer is disabled when the button color is transparent so that you can do - // Material.background: "transparent" and get a proper flat button without needing - // to set Material.elevation as well - layer.enabled: control.enabled && control.Material.buttonColor.a > 0 - layer.effect: ElevationEffect { - elevation: control.Material.elevation - } - } -} diff --git a/src/imports/controls/material/ScrollBar.qml b/src/imports/controls/material/ScrollBar.qml deleted file mode 100644 index 55de0d13..00000000 --- a/src/imports/controls/material/ScrollBar.qml +++ /dev/null @@ -1,89 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.ScrollBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: control.interactive ? 1 : 2 - visible: control.policy !== T.ScrollBar.AlwaysOff - minimumSize: orientation == Qt.Horizontal ? height / width : width / height - - contentItem: Rectangle { - implicitWidth: control.interactive ? 13 : 4 - implicitHeight: control.interactive ? 13 : 4 - - color: control.pressed ? control.Material.scrollBarPressedColor : - control.interactive && control.hovered ? control.Material.scrollBarHoveredColor : control.Material.scrollBarColor - opacity: 0.0 - } - - background: Rectangle { - implicitWidth: control.interactive ? 16 : 4 - implicitHeight: control.interactive ? 16 : 4 - color: "#0e000000" - opacity: 0.0 - visible: control.interactive - } - - states: State { - name: "active" - when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0) - } - - transitions: [ - Transition { - to: "active" - NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 1.0 } - }, - Transition { - from: "active" - SequentialAnimation { - PropertyAction{ targets: [control.contentItem, control.background]; property: "opacity"; value: 1.0 } - PauseAnimation { duration: 2450 } - NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 0.0 } - } - } - ] -} diff --git a/src/imports/controls/material/ScrollIndicator.qml b/src/imports/controls/material/ScrollIndicator.qml deleted file mode 100644 index bc81c630..00000000 --- a/src/imports/controls/material/ScrollIndicator.qml +++ /dev/null @@ -1,75 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.ScrollIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 2 - - contentItem: Rectangle { - implicitWidth: 4 - implicitHeight: 4 - - color: control.Material.scrollBarColor - visible: control.size < 1.0 - opacity: 0.0 - - states: State { - name: "active" - when: control.active - PropertyChanges { target: 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/imports/controls/material/ScrollView.qml b/src/imports/controls/material/ScrollView.qml deleted file mode 100644 index a6bba9de..00000000 --- a/src/imports/controls/material/ScrollView.qml +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ScrollView { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - ScrollBar.vertical: ScrollBar { - parent: control - x: control.mirrored ? 0 : control.width - width - y: control.topPadding - height: control.availableHeight - active: control.ScrollBar.horizontal.active - } - - ScrollBar.horizontal: ScrollBar { - parent: control - x: control.leftPadding - y: control.height - height - width: control.availableWidth - active: control.ScrollBar.vertical.active - } -} diff --git a/src/imports/controls/material/Slider.qml b/src/imports/controls/material/Slider.qml deleted file mode 100644 index 2a366734..00000000 --- a/src/imports/controls/material/Slider.qml +++ /dev/null @@ -1,81 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.Slider { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitHandleWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitHandleHeight + topPadding + bottomPadding) - - padding: 6 - - handle: SliderHandle { - x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)) - value: control.value - handleHasFocus: control.visualFocus - handlePressed: control.pressed - handleHovered: control.hovered - } - - background: Rectangle { - x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) - implicitWidth: control.horizontal ? 200 : 48 - implicitHeight: control.horizontal ? 48 : 200 - width: control.horizontal ? control.availableWidth : 4 - height: control.horizontal ? 4 : control.availableHeight - scale: control.horizontal && control.mirrored ? -1 : 1 - color: control.enabled ? Color.transparent(control.Material.accentColor, 0.33) : control.Material.sliderDisabledColor - - Rectangle { - x: control.horizontal ? 0 : (parent.width - width) / 2 - y: control.horizontal ? (parent.height - height) / 2 : control.visualPosition * parent.height - width: control.horizontal ? control.position * parent.width : 4 - height: control.horizontal ? 4 : control.position * parent.height - - color: control.enabled ? control.Material.accentColor : control.Material.sliderDisabledColor - } - } -} diff --git a/src/imports/controls/material/SpinBox.qml b/src/imports/controls/material/SpinBox.qml deleted file mode 100644 index 4f69dd25..00000000 --- a/src/imports/controls/material/SpinBox.qml +++ /dev/null @@ -1,156 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.SpinBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentItem.implicitWidth + - up.implicitIndicatorWidth + - down.implicitIndicatorWidth) - implicitHeight: Math.max(implicitContentHeight + topPadding + bottomPadding, - implicitBackgroundHeight, - up.implicitIndicatorHeight, - down.implicitIndicatorHeight) - - spacing: 6 - topPadding: 8 - bottomPadding: 16 - leftPadding: (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0)) - rightPadding: (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0)) - - validator: IntValidator { - locale: control.locale.name - bottom: Math.min(control.from, control.to) - top: Math.max(control.from, control.to) - } - - contentItem: TextInput { - text: control.displayText - - font: control.font - color: enabled ? control.Material.foreground : control.Material.hintTextColor - selectionColor: control.Material.textSelectionColor - selectedTextColor: control.Material.foreground - horizontalAlignment: Qt.AlignHCenter - verticalAlignment: Qt.AlignVCenter - - cursorDelegate: CursorDelegate { } - - readOnly: !control.editable - validator: control.validator - inputMethodHints: control.inputMethodHints - } - - up.indicator: Item { - x: control.mirrored ? 0 : parent.width - width - implicitWidth: control.Material.touchTarget - implicitHeight: control.Material.touchTarget - height: parent.height - width: height - - Ripple { - clipRadius: 2 - x: control.spacing - y: control.spacing - width: parent.width - 2 * control.spacing - height: parent.height - 2 * control.spacing - pressed: control.up.pressed - active: control.up.pressed || control.up.hovered || control.visualFocus - color: control.Material.rippleColor - } - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: Math.min(parent.width / 3, parent.height / 3) - height: 2 - color: enabled ? control.Material.foreground : control.Material.spinBoxDisabledIconColor - } - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 2 - height: Math.min(parent.width / 3, parent.height / 3) - color: enabled ? control.Material.foreground : control.Material.spinBoxDisabledIconColor - } - } - - down.indicator: Item { - x: control.mirrored ? parent.width - width : 0 - implicitWidth: control.Material.touchTarget - implicitHeight: control.Material.touchTarget - height: parent.height - width: height - - Ripple { - clipRadius: 2 - x: control.spacing - y: control.spacing - width: parent.width - 2 * control.spacing - height: parent.height - 2 * control.spacing - pressed: control.down.pressed - active: control.down.pressed || control.down.hovered || control.visualFocus - color: control.Material.rippleColor - } - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: parent.width / 3 - height: 2 - color: enabled ? control.Material.foreground : control.Material.spinBoxDisabledIconColor - } - } - - background: Item { - implicitWidth: 192 - implicitHeight: control.Material.touchTarget - - Rectangle { - x: parent.width / 2 - width / 2 - y: parent.y + parent.height - height - control.bottomPadding / 2 - width: control.availableWidth - height: control.activeFocus ? 2 : 1 - color: control.activeFocus ? control.Material.accentColor : control.Material.hintTextColor - } - } -} diff --git a/src/imports/controls/material/SplitView.qml b/src/imports/controls/material/SplitView.qml deleted file mode 100644 index 95556cd0..00000000 --- a/src/imports/controls/material/SplitView.qml +++ /dev/null @@ -1,73 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material - -T.SplitView { - id: control - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - handle: Rectangle { - implicitWidth: control.orientation === Qt.Horizontal ? 6 : control.width - implicitHeight: control.orientation === Qt.Horizontal ? control.height : 6 - color: T.SplitHandle.pressed ? control.Material.background - : Qt.lighter(control.Material.background, T.SplitHandle.hovered ? 1.2 : 1.1) - - Rectangle { - color: control.Material.secondaryTextColor - width: control.orientation === Qt.Horizontal ? thickness : length - height: control.orientation === Qt.Horizontal ? length : thickness - radius: thickness - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - - property int length: parent.T.SplitHandle.pressed ? 3 : 8 - readonly property int thickness: parent.T.SplitHandle.pressed ? 3 : 1 - - Behavior on length { - NumberAnimation { - duration: 100 - } - } - } - } -} diff --git a/src/imports/controls/material/StackView.qml b/src/imports/controls/material/StackView.qml deleted file mode 100644 index 4c3e6749..00000000 --- a/src/imports/controls/material/StackView.qml +++ /dev/null @@ -1,79 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.StackView { - id: control - - popEnter: Transition { - // slide_in_left - NumberAnimation { property: "x"; from: (control.mirrored ? -0.5 : 0.5) * -control.width; to: 0; duration: 200; easing.type: Easing.OutCubic } - NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; duration: 200; easing.type: Easing.OutCubic } - } - - popExit: Transition { - // slide_out_right - NumberAnimation { property: "x"; from: 0; to: (control.mirrored ? -0.5 : 0.5) * control.width; duration: 200; easing.type: Easing.OutCubic } - NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; duration: 200; easing.type: Easing.OutCubic } - } - - pushEnter: Transition { - // slide_in_right - NumberAnimation { property: "x"; from: (control.mirrored ? -0.5 : 0.5) * control.width; to: 0; duration: 200; easing.type: Easing.OutCubic } - NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; duration: 200; easing.type: Easing.OutCubic } - } - - pushExit: Transition { - // slide_out_left - NumberAnimation { property: "x"; from: 0; to: (control.mirrored ? -0.5 : 0.5) * -control.width; duration: 200; easing.type: Easing.OutCubic } - NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; duration: 200; easing.type: Easing.OutCubic } - } - - replaceEnter: Transition { - // slide_in_right - NumberAnimation { property: "x"; from: (control.mirrored ? -0.5 : 0.5) * control.width; to: 0; duration: 200; easing.type: Easing.OutCubic } - NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; duration: 200; easing.type: Easing.OutCubic } - } - - replaceExit: Transition { - // slide_out_left - NumberAnimation { property: "x"; from: 0; to: (control.mirrored ? -0.5 : 0.5) * -control.width; duration: 200; easing.type: Easing.OutCubic } - NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; duration: 200; easing.type: Easing.OutCubic } - } -} diff --git a/src/imports/controls/material/SwipeDelegate.qml b/src/imports/controls/material/SwipeDelegate.qml deleted file mode 100644 index c7aff94a..00000000 --- a/src/imports/controls/material/SwipeDelegate.qml +++ /dev/null @@ -1,98 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.SwipeDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 16 - verticalPadding: 8 - spacing: 16 - - icon.width: 24 - icon.height: 24 - icon.color: enabled ? Material.foreground : Material.hintTextColor - - swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } } - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - } - - background: Rectangle { - implicitHeight: control.Material.delegateHeight - - color: control.Material.backgroundColor - - Rectangle { - width: parent.width - height: parent.height - visible: control.highlighted - color: control.Material.listHighlightColor - } - - Ripple { - width: parent.width - height: parent.height - - clip: visible - pressed: control.pressed - anchor: control - active: control.down || control.visualFocus || control.hovered - color: control.Material.rippleColor - enabled: control.swipe.position === 0 - } - } -} diff --git a/src/imports/controls/material/SwipeView.qml b/src/imports/controls/material/SwipeView.qml deleted file mode 100644 index cd4da229..00000000 --- a/src/imports/controls/material/SwipeView.qml +++ /dev/null @@ -1,66 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.SwipeView { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - contentItem: ListView { - model: control.contentModel - interactive: control.interactive - currentIndex: control.currentIndex - focus: control.focus - - spacing: control.spacing - orientation: control.orientation - snapMode: ListView.SnapOneItem - boundsBehavior: Flickable.StopAtBounds - - highlightRangeMode: ListView.StrictlyEnforceRange - preferredHighlightBegin: 0 - preferredHighlightEnd: 0 - highlightMoveDuration: 250 - maximumFlickVelocity: 4 * (control.orientation === Qt.Horizontal ? width : height) - } -} diff --git a/src/imports/controls/material/Switch.qml b/src/imports/controls/material/Switch.qml deleted file mode 100644 index a43e8730..00000000 --- a/src/imports/controls/material/Switch.qml +++ /dev/null @@ -1,79 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl -import QtQuick.Templates as T - -T.Switch { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 8 - spacing: 8 - - indicator: SwitchIndicator { - x: text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - - Ripple { - x: parent.handle.x + parent.handle.width / 2 - width / 2 - y: parent.handle.y + parent.handle.height / 2 - height / 2 - width: 28; height: 28 - pressed: control.pressed - active: control.down || control.visualFocus || control.hovered - color: control.checked ? control.Material.highlightedRippleColor : control.Material.rippleColor - } - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } -} diff --git a/src/imports/controls/material/SwitchDelegate.qml b/src/imports/controls/material/SwitchDelegate.qml deleted file mode 100644 index fd7b7ab0..00000000 --- a/src/imports/controls/material/SwitchDelegate.qml +++ /dev/null @@ -1,97 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.SwitchDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 16 - verticalPadding: Material.switchDelegateVerticalPadding - spacing: 16 - - icon.width: 24 - icon.height: 24 - icon.color: enabled ? Material.foreground : Material.hintTextColor - - indicator: SwitchIndicator { - x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: IconLabel { - leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing - rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: control.enabled ? control.Material.foreground : control.Material.hintTextColor - } - - background: Rectangle { - implicitHeight: control.Material.delegateHeight - - color: control.highlighted ? control.Material.listHighlightColor : "transparent" - - Ripple { - width: parent.width - height: parent.height - - clip: visible - pressed: control.pressed - anchor: control - active: control.down || control.visualFocus || control.hovered - color: control.Material.rippleColor - } - } -} diff --git a/src/imports/controls/material/TabBar.qml b/src/imports/controls/material/TabBar.qml deleted file mode 100644 index 9e9585f3..00000000 --- a/src/imports/controls/material/TabBar.qml +++ /dev/null @@ -1,89 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.TabBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - spacing: 1 - - contentItem: ListView { - model: control.contentModel - currentIndex: control.currentIndex - - spacing: control.spacing - orientation: ListView.Horizontal - boundsBehavior: Flickable.StopAtBounds - flickableDirection: Flickable.AutoFlickIfNeeded - snapMode: ListView.SnapToItem - - highlightMoveDuration: 250 - highlightResizeDuration: 0 - highlightFollowsCurrentItem: true - highlightRangeMode: ListView.ApplyRange - preferredHighlightBegin: 48 - preferredHighlightEnd: width - 48 - - highlight: Item { - z: 2 - Rectangle { - height: 2 - width: parent.width - y: control.position === T.TabBar.Footer ? 0 : parent.height - height - color: control.Material.accentColor - } - } - } - - background: Rectangle { - color: control.Material.backgroundColor - - layer.enabled: control.Material.elevation > 0 - layer.effect: ElevationEffect { - elevation: control.Material.elevation - fullWidth: true - } - } -} diff --git a/src/imports/controls/material/TabButton.qml b/src/imports/controls/material/TabButton.qml deleted file mode 100644 index bae0cdb8..00000000 --- a/src/imports/controls/material/TabButton.qml +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.TabButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 12 - spacing: 6 - - icon.width: 24 - icon.height: 24 - icon.color: !enabled ? Material.hintTextColor : down || checked ? Material.accentColor : Material.foreground - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: !control.enabled ? control.Material.hintTextColor : control.down || control.checked ? control.Material.accentColor : control.Material.foreground - } - - background: Ripple { - implicitHeight: control.Material.touchTarget - - clip: true - pressed: control.pressed - anchor: control - active: control.down || control.visualFocus || control.hovered - color: control.Material.rippleColor - } -} diff --git a/src/imports/controls/material/TextArea.qml b/src/imports/controls/material/TextArea.qml deleted file mode 100644 index a213bd7a..00000000 --- a/src/imports/controls/material/TextArea.qml +++ /dev/null @@ -1,83 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.TextArea { - id: control - - implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, - implicitBackgroundWidth + leftInset + rightInset, - placeholder.implicitWidth + leftPadding + rightPadding) - implicitHeight: Math.max(contentHeight + topPadding + bottomPadding, - implicitBackgroundHeight + topInset + bottomInset, - placeholder.implicitHeight + 1 + topPadding + bottomPadding) - - topPadding: 8 - bottomPadding: 16 - - color: enabled ? Material.foreground : Material.hintTextColor - selectionColor: Material.accentColor - selectedTextColor: Material.primaryHighlightedTextColor - placeholderTextColor: Material.hintTextColor - cursorDelegate: CursorDelegate { } - - PlaceholderText { - id: placeholder - x: control.leftPadding - y: control.topPadding - width: control.width - (control.leftPadding + control.rightPadding) - height: control.height - (control.topPadding + control.bottomPadding) - text: control.placeholderText - font: control.font - color: control.placeholderTextColor - verticalAlignment: control.verticalAlignment - elide: Text.ElideRight - renderType: control.renderType - visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) - } - - background: Rectangle { - y: parent.height - height - control.bottomPadding / 2 - implicitWidth: 120 - height: control.activeFocus ? 2 : 1 - color: control.activeFocus ? control.Material.accentColor : control.Material.hintTextColor - } -} diff --git a/src/imports/controls/material/TextField.qml b/src/imports/controls/material/TextField.qml deleted file mode 100644 index 8623ddf5..00000000 --- a/src/imports/controls/material/TextField.qml +++ /dev/null @@ -1,85 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.TextField { - id: control - - implicitWidth: implicitBackgroundWidth + leftInset + rightInset - || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding, - placeholder.implicitHeight + topPadding + bottomPadding) - - topPadding: 8 - bottomPadding: 16 - - color: enabled ? Material.foreground : Material.hintTextColor - selectionColor: Material.accentColor - selectedTextColor: Material.primaryHighlightedTextColor - placeholderTextColor: Material.hintTextColor - verticalAlignment: TextInput.AlignVCenter - - cursorDelegate: CursorDelegate { } - - PlaceholderText { - id: placeholder - x: control.leftPadding - y: control.topPadding - width: control.width - (control.leftPadding + control.rightPadding) - height: control.height - (control.topPadding + control.bottomPadding) - text: control.placeholderText - font: control.font - color: control.placeholderTextColor - verticalAlignment: control.verticalAlignment - elide: Text.ElideRight - renderType: control.renderType - visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) - } - - background: Rectangle { - y: control.height - height - control.bottomPadding + 8 - implicitWidth: 120 - height: control.activeFocus || control.hovered ? 2 : 1 - color: control.activeFocus ? control.Material.accentColor - : (control.hovered ? control.Material.primaryTextColor : control.Material.hintTextColor) - } -} diff --git a/src/imports/controls/material/ToolBar.qml b/src/imports/controls/material/ToolBar.qml deleted file mode 100644 index a1aa82bd..00000000 --- a/src/imports/controls/material/ToolBar.qml +++ /dev/null @@ -1,66 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.ToolBar { - id: control - - Material.elevation: 4 - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - Material.foreground: Material.toolTextColor - - spacing: 16 - - background: Rectangle { - implicitHeight: 48 - color: control.Material.toolBarColor - - layer.enabled: control.Material.elevation > 0 - layer.effect: ElevationEffect { - elevation: control.Material.elevation - fullWidth: true - } - } -} diff --git a/src/imports/controls/material/ToolButton.qml b/src/imports/controls/material/ToolButton.qml deleted file mode 100644 index be7ae332..00000000 --- a/src/imports/controls/material/ToolButton.qml +++ /dev/null @@ -1,86 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.ToolButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 6 - - icon.width: 24 - icon.height: 24 - icon.color: !enabled ? Material.hintTextColor : checked || highlighted ? Material.accent : Material.foreground - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: !control.enabled ? control.Material.hintTextColor : - control.checked || control.highlighted ? control.Material.accent : control.Material.foreground - } - - background: Ripple { - implicitWidth: control.Material.touchTarget - implicitHeight: control.Material.touchTarget - - readonly property bool square: control.contentItem.width <= control.contentItem.height - - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - clip: !square - width: square ? parent.height / 2 : parent.width - height: square ? parent.height / 2 : parent.height - pressed: control.pressed - anchor: control - active: control.enabled && (control.down || control.visualFocus || control.hovered) - color: control.Material.rippleColor - } -} diff --git a/src/imports/controls/material/ToolSeparator.qml b/src/imports/controls/material/ToolSeparator.qml deleted file mode 100644 index 4bce553d..00000000 --- a/src/imports/controls/material/ToolSeparator.qml +++ /dev/null @@ -1,57 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.ToolSeparator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - horizontalPadding: vertical ? 12 : 5 - verticalPadding: vertical ? 5 : 12 - - contentItem: Rectangle { - implicitWidth: vertical ? 1 : 38 - implicitHeight: vertical ? 38 : 1 - color: control.Material.hintTextColor - } -} diff --git a/src/imports/controls/material/ToolTip.qml b/src/imports/controls/material/ToolTip.qml deleted file mode 100644 index 033e48a3..00000000 --- a/src/imports/controls/material/ToolTip.qml +++ /dev/null @@ -1,83 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.ToolTip { - id: control - - x: parent ? (parent.width - implicitWidth) / 2 : 0 - y: -implicitHeight - 24 - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - margins: 12 - padding: 8 - horizontalPadding: padding + 8 - - closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent - - Material.theme: Material.Dark - - enter: Transition { - // toast_enter - NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutQuad; duration: 500 } - } - - exit: Transition { - // toast_exit - NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.InQuad; duration: 500 } - } - - contentItem: Text { - text: control.text - font: control.font - wrapMode: Text.Wrap - color: control.Material.foreground - } - - background: Rectangle { - implicitHeight: control.Material.tooltipHeight - color: control.Material.tooltipColor - opacity: 0.9 - radius: 2 - } -} diff --git a/src/imports/controls/material/Tumbler.qml b/src/imports/controls/material/Tumbler.qml deleted file mode 100644 index 2c1e5d66..00000000 --- a/src/imports/controls/material/Tumbler.qml +++ /dev/null @@ -1,75 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T -import QtQuick.Controls.Material - -T.Tumbler { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - delegate: Text { - text: modelData - color: control.Material.foreground - font: control.font - opacity: (1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)) * (control.enabled ? 1 : 0.6) - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - } - - contentItem: TumblerView { - implicitWidth: 60 - implicitHeight: 200 - model: control.model - delegate: control.delegate - path: Path { - startX: control.contentItem.width / 2 - startY: -control.contentItem.delegateHeight / 2 - PathLine { - x: control.contentItem.width / 2 - y: (control.visibleItemCount + 1) * control.contentItem.delegateHeight - control.contentItem.delegateHeight / 2 - } - } - - property real delegateHeight: control.availableHeight / control.visibleItemCount - } -} diff --git a/src/imports/controls/material/VerticalHeaderView.qml b/src/imports/controls/material/VerticalHeaderView.qml deleted file mode 100644 index 9769627e..00000000 --- a/src/imports/controls/material/VerticalHeaderView.qml +++ /dev/null @@ -1,68 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -T.VerticalHeaderView { - id: control - - implicitWidth: contentWidth - implicitHeight: syncView ? syncView.height : 0 - - delegate: Rectangle { - // Qt6: add cellPadding (and font etc) as public API in headerview - readonly property real cellPadding: 8 - - implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2)) - implicitHeight: text.implicitHeight + (cellPadding * 2) - color: control.Material.backgroundColor - - Text { - id: text - text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] - : model[control.textRole]) - : modelData - width: parent.width - height: parent.height - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: enabled ? control.Material.foreground : control.Material.hintTextColor - } - } -} diff --git a/src/imports/controls/material/images/arrow-indicator.png b/src/imports/controls/material/images/arrow-indicator.png deleted file mode 100644 index 5a978001..00000000 Binary files a/src/imports/controls/material/images/arrow-indicator.png and /dev/null differ diff --git a/src/imports/controls/material/images/arrow-indicator.svg b/src/imports/controls/material/images/arrow-indicator.svg deleted file mode 100644 index 1e7217c8..00000000 --- a/src/imports/controls/material/images/arrow-indicator.svg +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - diff --git a/src/imports/controls/material/images/arrow-indicator@2x.png b/src/imports/controls/material/images/arrow-indicator@2x.png deleted file mode 100644 index 37ce3a95..00000000 Binary files a/src/imports/controls/material/images/arrow-indicator@2x.png and /dev/null differ diff --git a/src/imports/controls/material/images/arrow-indicator@3x.png b/src/imports/controls/material/images/arrow-indicator@3x.png deleted file mode 100644 index 57abd972..00000000 Binary files a/src/imports/controls/material/images/arrow-indicator@3x.png and /dev/null differ diff --git a/src/imports/controls/material/images/arrow-indicator@4x.png b/src/imports/controls/material/images/arrow-indicator@4x.png deleted file mode 100644 index 26d3d7c1..00000000 Binary files a/src/imports/controls/material/images/arrow-indicator@4x.png and /dev/null differ diff --git a/src/imports/controls/material/images/check.png b/src/imports/controls/material/images/check.png deleted file mode 100644 index 756a43a5..00000000 Binary files a/src/imports/controls/material/images/check.png and /dev/null differ diff --git a/src/imports/controls/material/images/check@2x.png b/src/imports/controls/material/images/check@2x.png deleted file mode 100644 index 9d1d6a32..00000000 Binary files a/src/imports/controls/material/images/check@2x.png and /dev/null differ diff --git a/src/imports/controls/material/images/check@3x.png b/src/imports/controls/material/images/check@3x.png deleted file mode 100644 index 32ed72f0..00000000 Binary files a/src/imports/controls/material/images/check@3x.png and /dev/null differ diff --git a/src/imports/controls/material/images/check@4x.png b/src/imports/controls/material/images/check@4x.png deleted file mode 100644 index 1767cee6..00000000 Binary files a/src/imports/controls/material/images/check@4x.png and /dev/null differ diff --git a/src/imports/controls/material/images/drop-indicator.png b/src/imports/controls/material/images/drop-indicator.png deleted file mode 100644 index 93560f50..00000000 Binary files a/src/imports/controls/material/images/drop-indicator.png and /dev/null differ diff --git a/src/imports/controls/material/images/drop-indicator.svg b/src/imports/controls/material/images/drop-indicator.svg deleted file mode 100644 index 94b5ca15..00000000 --- a/src/imports/controls/material/images/drop-indicator.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/src/imports/controls/material/images/drop-indicator@2x.png b/src/imports/controls/material/images/drop-indicator@2x.png deleted file mode 100644 index d32f8160..00000000 Binary files a/src/imports/controls/material/images/drop-indicator@2x.png and /dev/null differ diff --git a/src/imports/controls/material/images/drop-indicator@3x.png b/src/imports/controls/material/images/drop-indicator@3x.png deleted file mode 100644 index 34c3e7d1..00000000 Binary files a/src/imports/controls/material/images/drop-indicator@3x.png and /dev/null differ diff --git a/src/imports/controls/material/images/drop-indicator@4x.png b/src/imports/controls/material/images/drop-indicator@4x.png deleted file mode 100644 index 0613f6dd..00000000 Binary files a/src/imports/controls/material/images/drop-indicator@4x.png and /dev/null differ diff --git a/src/imports/controls/material/impl/BoxShadow.qml b/src/imports/controls/material/impl/BoxShadow.qml deleted file mode 100644 index ea09570e..00000000 --- a/src/imports/controls/material/impl/BoxShadow.qml +++ /dev/null @@ -1,70 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -/* - A implementation of CSS's box-shadow, used by ElevationEffect for a Material Design - elevation shadow effect. - */ -RectangularGlow { - // The 4 properties from CSS box-shadow, plus the inherited color property - property int offsetX - property int offsetY - property int blurRadius - property int spreadRadius - - // The source item the shadow is being applied to, used for correctly - // calculating the corner radious - property Item source - - property bool fullWidth - property bool fullHeight - - x: (parent.width - width)/2 + offsetX - y: (parent.height - height)/2 + offsetY - - implicitWidth: source ? source.width : parent.width - implicitHeight: source ? source.height : parent.height - - width: implicitWidth + 2 * spreadRadius + (fullWidth ? 2 * cornerRadius : 0) - height: implicitHeight + 2 * spreadRadius + (fullHeight ? 2 * cornerRadius : 0) - glowRadius: blurRadius/2 - spread: 0.05 - cornerRadius: blurRadius + (source && source.radius || 0) -} diff --git a/src/imports/controls/material/impl/CMakeLists.txt b/src/imports/controls/material/impl/CMakeLists.txt deleted file mode 100644 index 01ab8221..00000000 --- a/src/imports/controls/material/impl/CMakeLists.txt +++ /dev/null @@ -1,82 +0,0 @@ -# Generated from material-impl.pro. - -##################################################################### -## qtquickcontrols2materialstyleimplplugin Plugin: -##################################################################### - -qt_internal_add_qml_module(qtquickcontrols2materialstyleimplplugin - URI "QtQuick.Controls.Material.impl" - VERSION "${PROJECT_VERSION}" - CLASSNAME QtQuickControls2MaterialStyleImplPlugin - GENERATE_QMLTYPES - INSTALL_QMLTYPES - SOURCES - qquickmaterialbusyindicator.cpp qquickmaterialbusyindicator_p.h - qquickmaterialprogressbar.cpp qquickmaterialprogressbar_p.h - qquickmaterialripple.cpp qquickmaterialripple_p.h - qtquickcontrols2materialstyleimplplugin.cpp - DEFINES - QT_NO_CAST_FROM_ASCII - QT_NO_CAST_TO_ASCII - LIBRARIES - Qt::CorePrivate - Qt::Gui - Qt::QmlPrivate - Qt::QuickControls2ImplPrivate - Qt::QuickPrivate - Qt::QuickTemplates2Private - PUBLIC_LIBRARIES - Qt::Core - Qt::Gui - Qt::Qml - Qt::Quick -) - -#### Keys ignored in scope 1:.:.:material-impl.pro:: -# OTHER_FILES = "qmldir" "$$QML_FILES" -# QML_FILES = "$$PWD/BoxShadow.qml" "$$PWD/CheckIndicator.qml" "$$PWD/CursorDelegate.qml" "$$PWD/ElevationEffect.qml" "$$PWD/RadioIndicator.qml" "$$PWD/RectangularGlow.qml" "$$PWD/SliderHandle.qml" "$$PWD/SwitchIndicator.qml" -# QML_IMPORT_NAME = "QtQuick.Controls.Material.impl" -# QML_IMPORT_VERSION = "$$QT_VERSION" -# QT_FOR_CONFIG = "quickcontrols2-private" -# TARGETPATH = "QtQuick/Controls/Material/impl" -# _REQUIREMENTS = "qtConfig(quickcontrols2-material)" - -set(qml_files - "BoxShadow.qml" - "CheckIndicator.qml" - "CursorDelegate.qml" - "ElevationEffect.qml" - "RadioIndicator.qml" - "RectangularGlow.qml" - "SliderHandle.qml" - "SwitchIndicator.qml" -) -set_source_files_properties(BoxShadow.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0" -) -set_source_files_properties(CheckIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0" -) -set_source_files_properties(CursorDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0" -) -set_source_files_properties(ElevationEffect.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0" -) -set_source_files_properties(RadioIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0" -) -set_source_files_properties(RectangularGlow.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0" -) -set_source_files_properties(SliderHandle.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0" -) -set_source_files_properties(SwitchIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0" -) - -qt6_target_qml_files(qtquickcontrols2materialstyleimplplugin - FILES - ${qml_files} -) diff --git a/src/imports/controls/material/impl/CheckIndicator.qml b/src/imports/controls/material/impl/CheckIndicator.qml deleted file mode 100644 index b6593fab..00000000 --- a/src/imports/controls/material/impl/CheckIndicator.qml +++ /dev/null @@ -1,120 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -Rectangle { - id: indicatorItem - implicitWidth: 18 - implicitHeight: 18 - color: "transparent" - border.color: !control.enabled ? control.Material.hintTextColor - : checkState !== Qt.Unchecked ? control.Material.accentColor : control.Material.secondaryTextColor - border.width: checkState !== Qt.Unchecked ? width / 2 : 2 - radius: 2 - - property Item control - property int checkState: control.checkState - - Behavior on border.width { - NumberAnimation { - duration: 100 - easing.type: Easing.OutCubic - } - } - - Behavior on border.color { - ColorAnimation { - duration: 100 - easing.type: Easing.OutCubic - } - } - - // TODO: This needs to be transparent - Image { - id: checkImage - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 14 - height: 14 - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Material/images/check.png" - fillMode: Image.PreserveAspectFit - - scale: indicatorItem.checkState === Qt.Checked ? 1 : 0 - Behavior on scale { NumberAnimation { duration: 100 } } - } - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 12 - height: 3 - - scale: indicatorItem.checkState === Qt.PartiallyChecked ? 1 : 0 - Behavior on scale { NumberAnimation { duration: 100 } } - } - - states: [ - State { - name: "checked" - when: indicatorItem.checkState === Qt.Checked - }, - State { - name: "partiallychecked" - when: indicatorItem.checkState === Qt.PartiallyChecked - } - ] - - transitions: Transition { - SequentialAnimation { - NumberAnimation { - target: indicatorItem - property: "scale" - // Go down 2 pixels in size. - to: 1 - 2 / indicatorItem.width - duration: 120 - } - NumberAnimation { - target: indicatorItem - property: "scale" - to: 1 - duration: 120 - } - } - } -} diff --git a/src/imports/controls/material/impl/CursorDelegate.qml b/src/imports/controls/material/impl/CursorDelegate.qml deleted file mode 100644 index a913ab84..00000000 --- a/src/imports/controls/material/impl/CursorDelegate.qml +++ /dev/null @@ -1,65 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.Material - -Rectangle { - id: cursor - - color: parent.Material.accentColor - width: 2 - visible: parent.activeFocus && !parent.readOnly && parent.selectionStart === parent.selectionEnd - - Connections { - target: cursor.parent - function onCursorPositionChanged() { - // keep a moving cursor visible - cursor.opacity = 1 - timer.restart() - } - } - - Timer { - id: timer - running: cursor.parent.activeFocus && !cursor.parent.readOnly && interval != 0 - repeat: true - interval: Qt.styleHints.cursorFlashTime / 2 - onTriggered: cursor.opacity = !cursor.opacity ? 1 : 0 - // force the cursor visible when gaining focus - onRunningChanged: cursor.opacity = 1 - } -} diff --git a/src/imports/controls/material/impl/ElevationEffect.qml b/src/imports/controls/material/impl/ElevationEffect.qml deleted file mode 100644 index 8a4e98e3..00000000 --- a/src/imports/controls/material/impl/ElevationEffect.qml +++ /dev/null @@ -1,279 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -/* - An effect for standard Material Design elevation shadows. Useful for using as \c layer.effect. - */ -Item { - id: effect - - /* - The source the effect is applied to. - */ - property var source - - /* - The elevation of the \l source Item. - */ - property int elevation: 0 - - /* - Set to \c true if the \l source Item is the same width as its parent and the shadow - should be full width instead of rounding around the corner of the Item. - - \sa fullHeight - */ - property bool fullWidth: false - - /* - Set to \c true if the \l source Item is the same height as its parent and the shadow - should be full height instead of rounding around the corner of the Item. - - \sa fullWidth - */ - property bool fullHeight: false - - /* - \internal - - The actual source Item the effect is applied to. - */ - readonly property Item sourceItem: source.sourceItem - - /* - * The following shadow values are taken from Angular Material - * - * The MIT License (MIT) - * - * Copyright (c) 2014-2016 Google, Inc. http://angularjs.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - /* - \internal - - The shadows to use for each possible elevation. There are three shadows that when combined - make up the elevation. - */ - readonly property var _shadows: [ - [{offset: 0, blur: 0, spread: 0}, - {offset: 0, blur: 0, spread: 0}, - {offset: 0, blur: 0, spread: 0}], - - [{offset: 1, blur: 3, spread: 0}, - {offset: 1, blur: 1, spread: 0}, - {offset: 2, blur: 1, spread: -1}], - - [{offset: 1, blur: 5, spread: 0}, - {offset: 2, blur: 2, spread: 0}, - {offset: 3, blur: 1, spread: -2}], - - [{offset: 1, blur: 8, spread: 0}, - {offset: 3, blur: 4, spread: 0}, - {offset: 3, blur: 3, spread: -2}], - - [{offset: 2, blur: 4, spread: -1}, - {offset: 4, blur: 5, spread: 0}, - {offset: 1, blur: 10, spread: 0}], - - [{offset: 3, blur: 5, spread: -1}, - {offset: 5, blur: 8, spread: 0}, - {offset: 1, blur: 14, spread: 0}], - - [{offset: 3, blur: 5, spread: -1}, - {offset: 6, blur: 10, spread: 0}, - {offset: 1, blur: 18, spread: 0}], - - [{offset: 4, blur: 5, spread: -2}, - {offset: 7, blur: 10, spread: 1}, - {offset: 2, blur: 16, spread: 1}], - - [{offset: 5, blur: 5, spread: -3}, - {offset: 8, blur: 10, spread: 1}, - {offset: 3, blur: 14, spread: 2}], - - [{offset: 5, blur: 6, spread: -3}, - {offset: 9, blur: 12, spread: 1}, - {offset: 3, blur: 16, spread: 2}], - - [{offset: 6, blur: 6, spread: -3}, - {offset: 10, blur: 14, spread: 1}, - {offset: 4, blur: 18, spread: 3}], - - [{offset: 6, blur: 7, spread: -4}, - {offset: 11, blur: 15, spread: 1}, - {offset: 4, blur: 20, spread: 3}], - - [{offset: 7, blur: 8, spread: -4}, - {offset: 12, blur: 17, spread: 2}, - {offset: 5, blur: 22, spread: 4}], - - [{offset: 7, blur: 8, spread: -4}, - {offset: 13, blur: 19, spread: 2}, - {offset: 5, blur: 24, spread: 4}], - - [{offset: 7, blur: 9, spread: -4}, - {offset: 14, blur: 21, spread: 2}, - {offset: 5, blur: 26, spread: 4}], - - [{offset: 8, blur: 9, spread: -5}, - {offset: 15, blur: 22, spread: 2}, - {offset: 6, blur: 28, spread: 5}], - - [{offset: 8, blur: 10, spread: -5}, - {offset: 16, blur: 24, spread: 2}, - {offset: 6, blur: 30, spread: 5}], - - [{offset: 8, blur: 11, spread: -5}, - {offset: 17, blur: 26, spread: 2}, - {offset: 6, blur: 32, spread: 5}], - - [{offset: 9, blur: 11, spread: -5}, - {offset: 18, blur: 28, spread: 2}, - {offset: 7, blur: 34, spread: 6}], - - [{offset: 9, blur: 12, spread: -6}, - {offset: 19, blur: 29, spread: 2}, - {offset: 7, blur: 36, spread: 6}], - - [{offset: 10, blur: 13, spread: -6}, - {offset: 20, blur: 31, spread: 3}, - {offset: 8, blur: 38, spread: 7}], - - [{offset: 10, blur: 13, spread: -6}, - {offset: 21, blur: 33, spread: 3}, - {offset: 8, blur: 40, spread: 7}], - - [{offset: 10, blur: 14, spread: -6}, - {offset: 22, blur: 35, spread: 3}, - {offset: 8, blur: 42, spread: 7}], - - [{offset: 11, blur: 14, spread: -7}, - {offset: 23, blur: 36, spread: 3}, - {offset: 9, blur: 44, spread: 8}], - - [{offset: 11, blur: 15, spread: -7}, - {offset: 24, blur: 38, spread: 3}, - {offset: 9, blur: 46, spread: 8}] - ] - - /* - \internal - - The current shadow based on the elevation. - */ - readonly property var _shadow: _shadows[Math.max(0, Math.min(elevation, _shadows.length - 1))] - - // Nest the shadows and source view in two items rendered as a layer - // so the shadow is not clipped by the bounds of the source view - Item { - property int margin: -100 - - x: margin - y: margin - width: parent.width - 2 * margin - height: parent.height - 2 * margin - - // By rendering as a layer, the shadow will never show through the source item, - // even when the source item's opacity is less than 1 - layer.enabled: true - - // The box shadows automatically pick up the size of the source Item and not - // the size of the parent, so we don't need to worry about the extra padding - // in the parent Item - BoxShadow { - offsetY: effect._shadow[0].offset - blurRadius: effect._shadow[0].blur - spreadRadius: effect._shadow[0].spread - color: Qt.rgba(0,0,0, 0.2) - - fullWidth: effect.fullWidth - fullHeight: effect.fullHeight - source: effect.sourceItem - } - - BoxShadow { - offsetY: effect._shadow[1].offset - blurRadius: effect._shadow[1].blur - spreadRadius: effect._shadow[1].spread - color: Qt.rgba(0,0,0, 0.14) - - fullWidth: effect.fullWidth - fullHeight: effect.fullHeight - source: effect.sourceItem - } - - BoxShadow { - offsetY: effect._shadow[2].offset - blurRadius: effect._shadow[2].blur - spreadRadius: effect._shadow[2].spread - color: Qt.rgba(0,0,0, 0.12) - - fullWidth: effect.fullWidth - fullHeight: effect.fullHeight - source: effect.sourceItem - } - - ShaderEffect { - property alias source: effect.source - - x: (parent.width - width)/2 - y: (parent.height - height)/2 - width: effect.sourceItem.width - height: effect.sourceItem.height - } - } -} diff --git a/src/imports/controls/material/impl/RadioIndicator.qml b/src/imports/controls/material/impl/RadioIndicator.qml deleted file mode 100644 index 68681c44..00000000 --- a/src/imports/controls/material/impl/RadioIndicator.qml +++ /dev/null @@ -1,62 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -Rectangle { - id: indicator - implicitWidth: 20 - implicitHeight: 20 - radius: width / 2 - border.width: 2 - border.color: !control.enabled ? control.Material.hintTextColor - : control.checked || control.down ? control.Material.accentColor : control.Material.secondaryTextColor - color: "transparent" - - property Item control - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 10 - height: 10 - radius: width / 2 - color: parent.border.color - visible: indicator.control.checked || indicator.control.down - } -} diff --git a/src/imports/controls/material/impl/RectangularGlow.qml b/src/imports/controls/material/impl/RectangularGlow.qml deleted file mode 100644 index b2337afc..00000000 --- a/src/imports/controls/material/impl/RectangularGlow.qml +++ /dev/null @@ -1,240 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick - -/* - A cross-graphics API implementation of QtGraphicalEffects' RectangularGlow. - */ -Item { - id: rootItem - - /* - This property defines how many pixels outside the item area are reached - by the glow. - - The value ranges from 0.0 (no glow) to inf (infinite glow). By default, - the property is set to \c 0.0. - - \table - \header - \li Output examples with different glowRadius values - \li - \li - \row - \li \image RectangularGlow_glowRadius1.png - \li \image RectangularGlow_glowRadius2.png - \li \image RectangularGlow_glowRadius3.png - \row - \li \b { glowRadius: 10 } - \li \b { glowRadius: 20 } - \li \b { glowRadius: 40 } - \row - \li \l spread: 0 - \li \l spread: 0 - \li \l spread: 0 - \row - \li \l color: #ffffff - \li \l color: #ffffff - \li \l color: #ffffff - \row - \li \l cornerRadius: 25 - \li \l cornerRadius: 25 - \li \l cornerRadius: 25 - \endtable - - */ - property real glowRadius: 0.0 - - /* - This property defines how large part of the glow color is strenghtened - near the source edges. - - The value ranges from 0.0 (no strenght increase) to 1.0 (maximum - strenght increase). By default, the property is set to \c 0.0. - - \table - \header - \li Output examples with different spread values - \li - \li - \row - \li \image RectangularGlow_spread1.png - \li \image RectangularGlow_spread2.png - \li \image RectangularGlow_spread3.png - \row - \li \b { spread: 0.0 } - \li \b { spread: 0.5 } - \li \b { spread: 1.0 } - \row - \li \l glowRadius: 20 - \li \l glowRadius: 20 - \li \l glowRadius: 20 - \row - \li \l color: #ffffff - \li \l color: #ffffff - \li \l color: #ffffff - \row - \li \l cornerRadius: 25 - \li \l cornerRadius: 25 - \li \l cornerRadius: 25 - \endtable - */ - property real spread: 0.0 - - /* - This property defines the RGBA color value which is used for the glow. - - By default, the property is set to \c "white". - - \table - \header - \li Output examples with different color values - \li - \li - \row - \li \image RectangularGlow_color1.png - \li \image RectangularGlow_color2.png - \li \image RectangularGlow_color3.png - \row - \li \b { color: #ffffff } - \li \b { color: #55ff55 } - \li \b { color: #5555ff } - \row - \li \l glowRadius: 20 - \li \l glowRadius: 20 - \li \l glowRadius: 20 - \row - \li \l spread: 0 - \li \l spread: 0 - \li \l spread: 0 - \row - \li \l cornerRadius: 25 - \li \l cornerRadius: 25 - \li \l cornerRadius: 25 - \endtable - */ - property color color: "white" - - /* - This property defines the corner radius that is used to draw a glow with - rounded corners. - - The value ranges from 0.0 to half of the effective width or height of - the glow, whichever is smaller. This can be calculated with: \c{ - min(width, height) / 2.0 + glowRadius} - - By default, the property is bound to glowRadius property. The glow - behaves as if the rectangle was blurred when adjusting the glowRadius - property. - - \table - \header - \li Output examples with different cornerRadius values - \li - \li - \row - \li \image RectangularGlow_cornerRadius1.png - \li \image RectangularGlow_cornerRadius2.png - \li \image RectangularGlow_cornerRadius3.png - \row - \li \b { cornerRadius: 0 } - \li \b { cornerRadius: 25 } - \li \b { cornerRadius: 50 } - \row - \li \l glowRadius: 20 - \li \l glowRadius: 20 - \li \l glowRadius: 20 - \row - \li \l spread: 0 - \li \l spread: 0 - \li \l spread: 0 - \row - \li \l color: #ffffff - \li \l color: #ffffff - \li \l color: #ffffff - \endtable - */ - property real cornerRadius: glowRadius - - /* - This property allows the effect output pixels to be cached in order to - improve the rendering performance. - - Every time the source or effect properties are changed, the pixels in - the cache must be updated. Memory consumption is increased, because an - extra buffer of memory is required for storing the effect output. - - It is recommended to disable the cache when the source or the effect - properties are animated. - - By default, the property is set to \c false. - */ - property bool cached: false - - ShaderEffectSource { - id: cacheItem - anchors.fill: shaderItem - visible: rootItem.cached - smooth: true - sourceItem: shaderItem - live: true - hideSource: visible - } - - ShaderEffect { - id: shaderItem - - x: (parent.width - width) / 2.0 - y: (parent.height - height) / 2.0 - width: parent.width + rootItem.glowRadius * 2 + cornerRadius * 2 - height: parent.height + rootItem.glowRadius * 2 + cornerRadius * 2 - - function clampedCornerRadius() { - var maxCornerRadius = Math.min(rootItem.width, rootItem.height) / 2 + rootItem.glowRadius; - return Math.max(0, Math.min(rootItem.cornerRadius, maxCornerRadius)) - } - - property color color: rootItem.color - property real inverseSpread: 1.0 - rootItem.spread - property real relativeSizeX: ((inverseSpread * inverseSpread) * rootItem.glowRadius + cornerRadius * 2.0) / width - property real relativeSizeY: relativeSizeX * (width / height) - property real spread: rootItem.spread / 2.0 - property real cornerRadius: clampedCornerRadius() - - fragmentShader: "qrc:/qt-project.org/imports/QtQuick/Controls/Material/shaders/RectangularGlow.frag" - } -} diff --git a/src/imports/controls/material/impl/SliderHandle.qml b/src/imports/controls/material/impl/SliderHandle.qml deleted file mode 100644 index 60fd7aed..00000000 --- a/src/imports/controls/material/impl/SliderHandle.qml +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -Item { - id: root - implicitWidth: initialSize - implicitHeight: initialSize - - property real value: 0 - property bool handleHasFocus: false - property bool handlePressed: false - property bool handleHovered: false - readonly property int initialSize: 13 - readonly property var control: parent - - Rectangle { - id: handleRect - width: parent.width - height: parent.height - radius: width / 2 - scale: root.handlePressed ? 1.5 : 1 - color: control.enabled ? root.control.Material.accentColor : root.control.Material.sliderDisabledColor - - Behavior on scale { - NumberAnimation { - duration: 250 - } - } - } - - Ripple { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: 22; height: 22 - pressed: root.handlePressed - active: root.handlePressed || root.handleHasFocus || root.handleHovered - color: root.control.Material.highlightedRippleColor - } -} diff --git a/src/imports/controls/material/impl/SwitchIndicator.qml b/src/imports/controls/material/impl/SwitchIndicator.qml deleted file mode 100644 index ae1709b6..00000000 --- a/src/imports/controls/material/impl/SwitchIndicator.qml +++ /dev/null @@ -1,81 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.Material -import QtQuick.Controls.Material.impl - -Item { - id: indicator - implicitWidth: 38 - implicitHeight: 32 - - property Item control - property alias handle: handle - - Material.elevation: 1 - - Rectangle { - width: parent.width - height: 14 - radius: height / 2 - y: parent.height / 2 - height / 2 - color: indicator.control.enabled ? (indicator.control.checked ? indicator.control.Material.switchCheckedTrackColor : indicator.control.Material.switchUncheckedTrackColor) - : indicator.control.Material.switchDisabledTrackColor - } - - Rectangle { - id: handle - x: Math.max(0, Math.min(parent.width - width, indicator.control.visualPosition * parent.width - (width / 2))) - y: (parent.height - height) / 2 - width: 20 - height: 20 - radius: width / 2 - color: indicator.control.enabled ? (indicator.control.checked ? indicator.control.Material.switchCheckedHandleColor : indicator.control.Material.switchUncheckedHandleColor) - : indicator.control.Material.switchDisabledHandleColor - - Behavior on x { - enabled: !indicator.control.pressed - SmoothedAnimation { - duration: 300 - } - } - layer.enabled: indicator.Material.elevation > 0 - layer.effect: ElevationEffect { - elevation: indicator.Material.elevation - } - } -} diff --git a/src/imports/controls/material/impl/qquickmaterialbusyindicator.cpp b/src/imports/controls/material/impl/qquickmaterialbusyindicator.cpp deleted file mode 100644 index 10bcc035..00000000 --- a/src/imports/controls/material/impl/qquickmaterialbusyindicator.cpp +++ /dev/null @@ -1,245 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickmaterialbusyindicator_p.h" - -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -/* - Relevant Android code: - - - core/res/res/anim/progress_indeterminate_rotation_material.xml contains - the rotation animation data. - - core/res/res/anim/progress_indeterminate_material.xml contains the trim - animation data. - - core/res/res/interpolator/trim_start_interpolator.xml and - core/res/res/interpolator/trim_end_interpolator.xml contain the start - and end trim path interpolators. - - addCommand() in core/java/android/util/PathParser.java has a list of the - different path commands available. -*/ - -static const int SpanAnimationDuration = 700; -static const int RotationAnimationDuration = SpanAnimationDuration * 6; -static const int TargetRotation = 720; -static const int OneDegree = 16; -static const qreal MinSweepSpan = 10 * OneDegree; -static const qreal MaxSweepSpan = 300 * OneDegree; - -class QQuickMaterialBusyIndicatorNode : public QQuickAnimatedNode -{ -public: - QQuickMaterialBusyIndicatorNode(QQuickMaterialBusyIndicator *item); - - void sync(QQuickItem *item) override; - -protected: - void updateCurrentTime(int time) override; - -private: - int m_lastStartAngle = 0; - int m_lastEndAngle = 0; - qreal m_width = 0; - qreal m_height = 0; - qreal m_devicePixelRatio = 1; - QColor m_color; -}; - -QQuickMaterialBusyIndicatorNode::QQuickMaterialBusyIndicatorNode(QQuickMaterialBusyIndicator *item) - : QQuickAnimatedNode(item) -{ - setLoopCount(Infinite); - setCurrentTime(item->elapsed()); - setDuration(RotationAnimationDuration); - - QSGImageNode *textureNode = item->window()->createImageNode(); - textureNode->setOwnsTexture(true); - appendChildNode(textureNode); - - // A texture seems to be required here, but we don't have one yet, as we haven't drawn anything, - // so just use a blank image. - QImage blankImage(item->width(), item->height(), QImage::Format_ARGB32_Premultiplied); - blankImage.fill(Qt::transparent); - textureNode->setTexture(item->window()->createTextureFromImage(blankImage)); -} - -void QQuickMaterialBusyIndicatorNode::updateCurrentTime(int time) -{ - const qreal w = m_width; - const qreal h = m_height; - const qreal size = qMin(w, h); - const qreal dx = (w - size) / 2; - const qreal dy = (h - size) / 2; - - QImage image(size * m_devicePixelRatio, size * m_devicePixelRatio, QImage::Format_ARGB32_Premultiplied); - image.fill(Qt::transparent); - - QPainter painter(&image); - painter.setRenderHint(QPainter::Antialiasing); - - QPen pen; - QSGImageNode *textureNode = static_cast(firstChild()); - pen.setColor(m_color); - pen.setWidth(qCeil(size / 12) * m_devicePixelRatio); - painter.setPen(pen); - - const qreal percentageComplete = time / qreal(RotationAnimationDuration); - const qreal spanPercentageComplete = (time % SpanAnimationDuration) / qreal(SpanAnimationDuration); - const int iteration = time / SpanAnimationDuration; - int startAngle = 0; - int endAngle = 0; - - if (iteration % 2 == 0) { - if (m_lastStartAngle > 360 * OneDegree) - m_lastStartAngle -= 360 * OneDegree; - - // The start angle is only affected by the rotation animation for the "grow" phase. - startAngle = m_lastStartAngle; - QEasingCurve angleCurve(QEasingCurve::OutQuad); - const qreal percentage = angleCurve.valueForProgress(spanPercentageComplete); - endAngle = m_lastStartAngle + MinSweepSpan + percentage * (MaxSweepSpan - MinSweepSpan); - m_lastEndAngle = endAngle; - } else { - // Both the start angle *and* the span are affected by the "shrink" phase. - QEasingCurve angleCurve(QEasingCurve::InQuad); - const qreal percentage = angleCurve.valueForProgress(spanPercentageComplete); - startAngle = m_lastEndAngle - MaxSweepSpan + percentage * (MaxSweepSpan - MinSweepSpan); - endAngle = m_lastEndAngle; - m_lastStartAngle = startAngle; - } - - const int halfPen = pen.width() / 2; - const QRectF arcBounds = QRectF(halfPen, halfPen, - m_devicePixelRatio * size - pen.width(), - m_devicePixelRatio * size - pen.width()); - // The current angle of the rotation animation. - const qreal rotation = OneDegree * percentageComplete * -TargetRotation; - startAngle -= rotation; - endAngle -= rotation; - const int angleSpan = endAngle - startAngle; - painter.drawArc(arcBounds, -startAngle, -angleSpan); - painter.end(); - - textureNode->setRect(QRectF(dx, dy, size, size)); - textureNode->setTexture(window()->createTextureFromImage(image)); -} - -void QQuickMaterialBusyIndicatorNode::sync(QQuickItem *item) -{ - QQuickMaterialBusyIndicator *indicator = static_cast(item); - m_color = indicator->color(); - m_width = indicator->width(); - m_height = indicator->height(); - m_devicePixelRatio = indicator->window()->effectiveDevicePixelRatio(); -} - -QQuickMaterialBusyIndicator::QQuickMaterialBusyIndicator(QQuickItem *parent) : - QQuickItem(parent) -{ - setFlag(ItemHasContents); -} - -QColor QQuickMaterialBusyIndicator::color() const -{ - return m_color; -} - -void QQuickMaterialBusyIndicator::setColor(const QColor &color) -{ - if (m_color == color) - return; - - m_color = color; - update(); -} - -bool QQuickMaterialBusyIndicator::isRunning() const -{ - return isVisible(); -} - -void QQuickMaterialBusyIndicator::setRunning(bool running) -{ - if (running) - setVisible(true); -} - -int QQuickMaterialBusyIndicator::elapsed() const -{ - return m_elapsed; -} - -void QQuickMaterialBusyIndicator::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data) -{ - QQuickItem::itemChange(change, data); - switch (change) { - case ItemOpacityHasChanged: - if (qFuzzyIsNull(data.realValue)) - setVisible(false); - break; - case ItemVisibleHasChanged: - update(); - break; - default: - break; - } -} - -QSGNode *QQuickMaterialBusyIndicator::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) -{ - QQuickMaterialBusyIndicatorNode *node = static_cast(oldNode); - if (isRunning() && width() > 0 && height() > 0) { - if (!node) { - node = new QQuickMaterialBusyIndicatorNode(this); - node->start(); - } - node->sync(this); - } else { - m_elapsed = node ? node->currentTime() : 0; - delete node; - node = nullptr; - } - return node; -} - -QT_END_NAMESPACE diff --git a/src/imports/controls/material/impl/qquickmaterialbusyindicator_p.h b/src/imports/controls/material/impl/qquickmaterialbusyindicator_p.h deleted file mode 100644 index 72aeaf66..00000000 --- a/src/imports/controls/material/impl/qquickmaterialbusyindicator_p.h +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKMATERIALBUSYINDICATOR_P_H -#define QQUICKMATERIALBUSYINDICATOR_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include - -QT_BEGIN_NAMESPACE - -class QQuickMaterialBusyIndicator : public QQuickItem -{ - Q_OBJECT - Q_PROPERTY(QColor color READ color WRITE setColor FINAL) - Q_PROPERTY(bool running READ isRunning WRITE setRunning FINAL) - QML_NAMED_ELEMENT(BusyIndicatorImpl) - QML_ADDED_IN_VERSION(2, 0) - -public: - explicit QQuickMaterialBusyIndicator(QQuickItem *parent = nullptr); - - QColor color() const; - void setColor(const QColor &color); - - bool isRunning() const; - void setRunning(bool running); - - int elapsed() const; - -protected: - void itemChange(ItemChange change, const ItemChangeData &data) override; - QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override; - -private: - int m_elapsed = 0; - QColor m_color = Qt::black; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickMaterialBusyIndicator) - -#endif // QQUICKMATERIALBUSYINDICATOR_P_H diff --git a/src/imports/controls/material/impl/qquickmaterialprogressbar.cpp b/src/imports/controls/material/impl/qquickmaterialprogressbar.cpp deleted file mode 100644 index 8b3dde23..00000000 --- a/src/imports/controls/material/impl/qquickmaterialprogressbar.cpp +++ /dev/null @@ -1,245 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickmaterialprogressbar_p.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -static const int PauseDuration = 520; -static const int SlideDuration = 1240; -static const int TotalDuration = SlideDuration + PauseDuration; - -class QQuickMaterialProgressBarNode : public QQuickAnimatedNode -{ -public: - QQuickMaterialProgressBarNode(QQuickMaterialProgressBar *item); - - void updateCurrentTime(int time) override; - void sync(QQuickItem *item) override; - -private: - void moveNode(QSGTransformNode *node, const QRectF &geometry, qreal progress); - - bool m_indeterminate = false; - QEasingCurve m_easing = QEasingCurve::OutCubic; -}; - -QQuickMaterialProgressBarNode::QQuickMaterialProgressBarNode(QQuickMaterialProgressBar *item) - : QQuickAnimatedNode(item) -{ - setLoopCount(Infinite); - setDuration(TotalDuration); -} - -void QQuickMaterialProgressBarNode::updateCurrentTime(int time) -{ - QSGRectangleNode *geometryNode = static_cast(firstChild()); - Q_ASSERT(geometryNode->type() == QSGNode::GeometryNodeType); - const QRectF geometry = geometryNode->rect(); - - QSGTransformNode *firstNode = static_cast(geometryNode->firstChild()); - if (firstNode) { - Q_ASSERT(firstNode->type() == QSGNode::TransformNodeType); - - const qreal progress = qMin(1.0, static_cast(time) / SlideDuration); - moveNode(static_cast(firstNode), geometry, progress); - } - - QSGTransformNode *secondNode = static_cast(geometryNode->lastChild()); - if (secondNode) { - Q_ASSERT(secondNode->type() == QSGNode::TransformNodeType); - - const qreal progress = qMax(0.0, static_cast(time - PauseDuration) / SlideDuration); - moveNode(static_cast(secondNode), geometry, progress); - } -} - -void QQuickMaterialProgressBarNode::sync(QQuickItem *item) -{ - QQuickMaterialProgressBar *bar = static_cast(item); - if (m_indeterminate != bar->isIndeterminate()) { - m_indeterminate = bar->isIndeterminate(); - if (m_indeterminate) - start(); - else - stop(); - } - - QQuickItemPrivate *d = QQuickItemPrivate::get(item); - - QRectF bounds = item->boundingRect(); - bounds.setHeight(item->implicitHeight()); - bounds.moveTop((item->height() - bounds.height()) / 2.0); - - QSGRectangleNode *geometryNode = static_cast(firstChild()); - if (!geometryNode) { - geometryNode = item->window()->createRectangleNode(); - geometryNode->setColor(Qt::transparent); - appendChildNode(geometryNode); - } - geometryNode->setRect(bounds); - - const int count = m_indeterminate ? 2 : 1; - const qreal w = m_indeterminate ? 0 : bar->progress() * item->width(); - const QRectF rect(0, bounds.y(), w, bounds.height()); - - QSGNode *transformNode = geometryNode->firstChild(); - for (int i = 0; i < count; ++i) { - if (!transformNode) { - transformNode = new QSGTransformNode; - geometryNode->appendChildNode(transformNode); - - QSGInternalRectangleNode *rectNode = d->sceneGraphContext()->createInternalRectangleNode(); - rectNode->setAntialiasing(true); - transformNode->appendChildNode(rectNode); - } - Q_ASSERT(transformNode->type() == QSGNode::TransformNodeType); - static_cast(transformNode)->setMatrix(QMatrix4x4()); - - QSGInternalRectangleNode *rectNode = static_cast(transformNode->firstChild()); - Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType); - - rectNode->setRect(rect); - rectNode->setColor(bar->color()); - rectNode->update(); - - transformNode = transformNode->nextSibling(); - } - - while (transformNode) { - QSGNode *nextSibling = transformNode->nextSibling(); - delete transformNode; - transformNode = nextSibling; - } -} - -void QQuickMaterialProgressBarNode::moveNode(QSGTransformNode *transformNode, const QRectF &geometry, qreal progress) -{ - const qreal value = m_easing.valueForProgress(progress); - const qreal x = value * geometry.width(); - - QMatrix4x4 matrix; - matrix.translate(x, 0); - transformNode->setMatrix(matrix); - - QSGInternalRectangleNode *rectNode = static_cast(transformNode->firstChild()); - Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType); - - QRectF r = geometry; - r.setWidth(value * (geometry.width() - x)); - rectNode->setRect(r); - rectNode->update(); -} - -QQuickMaterialProgressBar::QQuickMaterialProgressBar(QQuickItem *parent) - : QQuickItem(parent) -{ - setFlag(ItemHasContents); -} - -QColor QQuickMaterialProgressBar::color() const -{ - return m_color; -} - -void QQuickMaterialProgressBar::setColor(const QColor &color) -{ - if (color == m_color) - return; - - m_color = color; - update(); -} - -qreal QQuickMaterialProgressBar::progress() const -{ - return m_progress; -} - -void QQuickMaterialProgressBar::setProgress(qreal progress) -{ - if (progress == m_progress) - return; - - m_progress = progress; - update(); -} - -bool QQuickMaterialProgressBar::isIndeterminate() const -{ - return m_indeterminate; -} - -void QQuickMaterialProgressBar::setIndeterminate(bool indeterminate) -{ - if (indeterminate == m_indeterminate) - return; - - m_indeterminate = indeterminate; - update(); -} - -void QQuickMaterialProgressBar::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data) -{ - QQuickItem::itemChange(change, data); - if (change == ItemVisibleHasChanged) - update(); -} - -QSGNode *QQuickMaterialProgressBar::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *) -{ - QQuickMaterialProgressBarNode *node = static_cast(oldNode); - if (isVisible() && width() > 0 && height() > 0) { - if (!node) - node = new QQuickMaterialProgressBarNode(this); - node->sync(this); - } else { - delete node; - node = nullptr; - } - return node; -} - -QT_END_NAMESPACE diff --git a/src/imports/controls/material/impl/qquickmaterialprogressbar_p.h b/src/imports/controls/material/impl/qquickmaterialprogressbar_p.h deleted file mode 100644 index bf93812d..00000000 --- a/src/imports/controls/material/impl/qquickmaterialprogressbar_p.h +++ /dev/null @@ -1,91 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKMATERIALPROGRESSBAR_P_H -#define QQUICKMATERIALPROGRESSBAR_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include - -QT_BEGIN_NAMESPACE - -class QQuickMaterialProgressBar : public QQuickItem -{ - Q_OBJECT - Q_PROPERTY(QColor color READ color WRITE setColor FINAL) - Q_PROPERTY(qreal progress READ progress WRITE setProgress FINAL) - Q_PROPERTY(bool indeterminate READ isIndeterminate WRITE setIndeterminate FINAL) - QML_NAMED_ELEMENT(ProgressBarImpl) - QML_ADDED_IN_VERSION(2, 0) - -public: - explicit QQuickMaterialProgressBar(QQuickItem *parent = nullptr); - - QColor color() const; - void setColor(const QColor &color); - - qreal progress() const; - void setProgress(qreal progress); - - bool isIndeterminate() const; - void setIndeterminate(bool indeterminate); - -protected: - void itemChange(ItemChange change, const ItemChangeData &data) override; - QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override; - -private: - QColor m_color = Qt::black; - qreal m_progress = 0.0; - bool m_indeterminate = false; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickMaterialProgressBar) - -#endif // QQUICKMATERIALPROGRESSBAR_P_H diff --git a/src/imports/controls/material/impl/qquickmaterialripple.cpp b/src/imports/controls/material/impl/qquickmaterialripple.cpp deleted file mode 100644 index a39a115b..00000000 --- a/src/imports/controls/material/impl/qquickmaterialripple.cpp +++ /dev/null @@ -1,442 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickmaterialripple_p.h" - -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -namespace { - enum WavePhase { WaveEnter, WaveExit }; -} - -static const int RIPPLE_ENTER_DELAY = 80; -static const int OPACITY_ENTER_DURATION_FAST = 120; -static const int WAVE_OPACITY_DECAY_DURATION = 333; -static const qreal WAVE_TOUCH_DOWN_ACCELERATION = 1024.0; - -class QQuickMaterialRippleWaveNode : public QQuickAnimatedNode -{ -public: - QQuickMaterialRippleWaveNode(QQuickMaterialRipple *ripple); - - void exit(); - void updateCurrentTime(int time) override; - void sync(QQuickItem *item) override; - -private: - qreal m_from = 0; - qreal m_to = 0; - qreal m_value = 0; - WavePhase m_phase = WaveEnter; - QPointF m_anchor; - QRectF m_bounds; -}; - -QQuickMaterialRippleWaveNode::QQuickMaterialRippleWaveNode(QQuickMaterialRipple *ripple) - : QQuickAnimatedNode(ripple) -{ - start(qRound(1000.0 * qSqrt(ripple->diameter() / 2.0 / WAVE_TOUCH_DOWN_ACCELERATION))); - - QSGOpacityNode *opacityNode = new QSGOpacityNode; - appendChildNode(opacityNode); - - QQuickItemPrivate *d = QQuickItemPrivate::get(ripple); - QSGInternalRectangleNode *rectNode = d->sceneGraphContext()->createInternalRectangleNode(); - rectNode->setAntialiasing(true); - opacityNode->appendChildNode(rectNode); -} - -void QQuickMaterialRippleWaveNode::exit() -{ - m_phase = WaveExit; - m_from = m_value; - setDuration(WAVE_OPACITY_DECAY_DURATION); - restart(); - connect(this, &QQuickAnimatedNode::stopped, this, &QObject::deleteLater); -} - -void QQuickMaterialRippleWaveNode::updateCurrentTime(int time) -{ - qreal p = 1.0; - if (duration() > 0) - p = time / static_cast(duration()); - - m_value = m_from + (m_to - m_from) * p; - p = m_value / m_to; - - const qreal dx = (1.0 - p) * (m_anchor.x() - m_bounds.width() / 2); - const qreal dy = (1.0 - p) * (m_anchor.y() - m_bounds.height() / 2); - - QMatrix4x4 m; - m.translate(qRound((m_bounds.width() - m_value) / 2 + dx), - qRound((m_bounds.height() - m_value) / 2 + dy)); - setMatrix(m); - - QSGOpacityNode *opacityNode = static_cast(firstChild()); - Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType); - qreal opacity = 1.0; - if (m_phase == WaveExit) - opacity -= static_cast(time) / WAVE_OPACITY_DECAY_DURATION; - opacityNode->setOpacity(opacity); - - QSGInternalRectangleNode *rectNode = static_cast(opacityNode->firstChild()); - Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType); - rectNode->setRect(QRectF(0, 0, m_value, m_value)); - rectNode->setRadius(m_value / 2); - rectNode->update(); -} - -void QQuickMaterialRippleWaveNode::sync(QQuickItem *item) -{ - QQuickMaterialRipple *ripple = static_cast(item); - m_to = ripple->diameter(); - m_anchor = ripple->anchorPoint(); - m_bounds = ripple->boundingRect(); - - QSGOpacityNode *opacityNode = static_cast(firstChild()); - Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType); - - QSGInternalRectangleNode *rectNode = static_cast(opacityNode->firstChild()); - Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType); - rectNode->setColor(ripple->color()); -} - -class QQuickMaterialRippleBackgroundNode : public QQuickAnimatedNode -{ - Q_OBJECT - -public: - QQuickMaterialRippleBackgroundNode(QQuickMaterialRipple *ripple); - - void updateCurrentTime(int time) override; - void sync(QQuickItem *item) override; - -private: - bool m_active = false; -}; - -QQuickMaterialRippleBackgroundNode::QQuickMaterialRippleBackgroundNode(QQuickMaterialRipple *ripple) - : QQuickAnimatedNode(ripple) -{ - setDuration(OPACITY_ENTER_DURATION_FAST); - - QSGOpacityNode *opacityNode = new QSGOpacityNode; - opacityNode->setOpacity(0.0); - appendChildNode(opacityNode); - - QQuickItemPrivate *d = QQuickItemPrivate::get(ripple); - QSGInternalRectangleNode *rectNode = d->sceneGraphContext()->createInternalRectangleNode(); - rectNode->setAntialiasing(true); - opacityNode->appendChildNode(rectNode); -} - -void QQuickMaterialRippleBackgroundNode::updateCurrentTime(int time) -{ - qreal opacity = time / static_cast(duration()); - if (!m_active) - opacity = 1.0 - opacity; - - QSGOpacityNode *opacityNode = static_cast(firstChild()); - Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType); - opacityNode->setOpacity(opacity); -} - -void QQuickMaterialRippleBackgroundNode::sync(QQuickItem *item) -{ - QQuickMaterialRipple *ripple = static_cast(item); - if (m_active != ripple->isActive()) { - m_active = ripple->isActive(); - setDuration(m_active ? OPACITY_ENTER_DURATION_FAST : WAVE_OPACITY_DECAY_DURATION); - restart(); - } - - QSGOpacityNode *opacityNode = static_cast(firstChild()); - Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType); - - QSGInternalRectangleNode *rectNode = static_cast(opacityNode->firstChild()); - Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType); - - const qreal w = ripple->width(); - const qreal h = ripple->height(); - const qreal sz = qSqrt(w * w + h * h); - - QMatrix4x4 matrix; - if (qFuzzyIsNull(ripple->clipRadius())) { - matrix.translate(qRound((w - sz) / 2), qRound((h - sz) / 2)); - rectNode->setRect(QRectF(0, 0, sz, sz)); - rectNode->setRadius(sz / 2); - } else { - rectNode->setRect(QRectF(0, 0, w, h)); - rectNode->setRadius(ripple->clipRadius()); - } - - setMatrix(matrix); - rectNode->setColor(ripple->color()); - rectNode->update(); -} - -QQuickMaterialRipple::QQuickMaterialRipple(QQuickItem *parent) - : QQuickItem(parent) -{ - setFlag(ItemHasContents); -} - -bool QQuickMaterialRipple::isActive() const -{ - return m_active; -} - -void QQuickMaterialRipple::setActive(bool active) -{ - if (active == m_active) - return; - - m_active = active; - update(); -} - -QColor QQuickMaterialRipple::color() const -{ - return m_color; -} - -void QQuickMaterialRipple::setColor(const QColor &color) -{ - if (m_color == color) - return; - - m_color = color; - update(); -} - -qreal QQuickMaterialRipple::clipRadius() const -{ - return m_clipRadius; -} - -void QQuickMaterialRipple::setClipRadius(qreal radius) -{ - if (qFuzzyCompare(m_clipRadius, radius)) - return; - - m_clipRadius = radius; - setClip(!qFuzzyIsNull(radius)); - update(); -} - -bool QQuickMaterialRipple::isPressed() const -{ - return m_pressed; -} - -void QQuickMaterialRipple::setPressed(bool pressed) -{ - if (pressed == m_pressed) - return; - - m_pressed = pressed; - - if (!isEnabled()) { - exitWave(); - return; - } - - if (pressed) { - if (m_trigger == Press) - prepareWave(); - else - exitWave(); - } else { - if (m_trigger == Release) - enterWave(); - else - exitWave(); - } -} - -QQuickMaterialRipple::Trigger QQuickMaterialRipple::trigger() const -{ - return m_trigger; -} - -void QQuickMaterialRipple::setTrigger(Trigger trigger) -{ - m_trigger = trigger; -} - -QPointF QQuickMaterialRipple::anchorPoint() const -{ - const QRectF bounds = boundingRect(); - const QPointF center = bounds.center(); - if (!m_anchor) - return center; - - QPointF anchorPoint = bounds.center(); - if (QQuickAbstractButton *button = qobject_cast(m_anchor)) - anchorPoint = QQuickAbstractButtonPrivate::get(button)->pressPoint; - anchorPoint = mapFromItem(m_anchor, anchorPoint); - - // calculate whether the anchor point is within the ripple circle bounds, - // that is, whether waves should start expanding from the anchor point - const qreal r = qSqrt(bounds.width() * bounds.width() + bounds.height() * bounds.height()) / 2; - if (QLineF(center, anchorPoint).length() < r) - return anchorPoint; - - // if the anchor point is outside the ripple circle bounds, start expanding - // from the intersection point of the ripple circle and a line from its center - // to the the anchor point - const qreal p = qAtan2(anchorPoint.y() - center.y(), anchorPoint.x() - center.x()); - return QPointF(center.x() + r * qCos(p), center.y() + r * qSin(p)); -} - -QQuickItem *QQuickMaterialRipple::anchor() const -{ - return m_anchor; -} - -void QQuickMaterialRipple::setAnchor(QQuickItem *item) -{ - m_anchor = item; -} - -qreal QQuickMaterialRipple::diameter() const -{ - const qreal w = width(); - const qreal h = height(); - return qSqrt(w * w + h * h); -} - -void QQuickMaterialRipple::itemChange(ItemChange change, const ItemChangeData &data) -{ - QQuickItem::itemChange(change, data); -} - -QSGNode *QQuickMaterialRipple::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) -{ - QQuickItemPrivate *d = QQuickItemPrivate::get(this); - QQuickDefaultClipNode *clipNode = d->clipNode(); - if (clipNode) { - // TODO: QTBUG-51894 - // clipNode->setRadius(m_clipRadius); - clipNode->setRect(boundingRect()); - clipNode->update(); - } - - QSGNode *container = oldNode; - if (!container) - container = new QSGNode; - - QQuickMaterialRippleBackgroundNode *backgroundNode = static_cast(container->firstChild()); - if (!backgroundNode) { - backgroundNode = new QQuickMaterialRippleBackgroundNode(this); - backgroundNode->setObjectName(objectName()); - container->appendChildNode(backgroundNode); - } - backgroundNode->sync(this); - - // enter new waves - int i = m_waves; - QQuickMaterialRippleWaveNode *enterNode = static_cast(backgroundNode->nextSibling()); - while (i-- > 0) { - if (!enterNode) { - enterNode = new QQuickMaterialRippleWaveNode(this); - container->appendChildNode(enterNode); - } - enterNode->sync(this); - enterNode = static_cast(enterNode->nextSibling()); - } - - // exit old waves - int j = container->childCount() - 1 - m_waves; - while (j-- > 0) { - QQuickMaterialRippleWaveNode *exitNode = static_cast(backgroundNode->nextSibling()); - if (exitNode) { - exitNode->exit(); - exitNode->sync(this); - } - } - - return container; -} - -void QQuickMaterialRipple::timerEvent(QTimerEvent *event) -{ - QQuickItem::timerEvent(event); - - if (event->timerId() == m_enterDelay) - enterWave(); -} - -void QQuickMaterialRipple::prepareWave() -{ - if (m_enterDelay <= 0) - m_enterDelay = startTimer(RIPPLE_ENTER_DELAY); -} - -void QQuickMaterialRipple::enterWave() -{ - if (m_enterDelay > 0) { - killTimer(m_enterDelay); - m_enterDelay = 0; - } - - ++m_waves; - update(); -} - -void QQuickMaterialRipple::exitWave() -{ - if (m_enterDelay > 0) { - killTimer(m_enterDelay); - m_enterDelay = 0; - } - - if (m_waves > 0) { - --m_waves; - update(); - } -} - -QT_END_NAMESPACE - -#include "qquickmaterialripple.moc" diff --git a/src/imports/controls/material/impl/qquickmaterialripple_p.h b/src/imports/controls/material/impl/qquickmaterialripple_p.h deleted file mode 100644 index 51728389..00000000 --- a/src/imports/controls/material/impl/qquickmaterialripple_p.h +++ /dev/null @@ -1,120 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKMATERIALRIPPLE_P_H -#define QQUICKMATERIALRIPPLE_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include - -QT_BEGIN_NAMESPACE - -class QQuickMaterialRipple : public QQuickItem -{ - Q_OBJECT - Q_PROPERTY(QColor color READ color WRITE setColor FINAL) - Q_PROPERTY(qreal clipRadius READ clipRadius WRITE setClipRadius FINAL) - Q_PROPERTY(bool pressed READ isPressed WRITE setPressed FINAL) - Q_PROPERTY(bool active READ isActive WRITE setActive FINAL) - Q_PROPERTY(QQuickItem *anchor READ anchor WRITE setAnchor FINAL) - Q_PROPERTY(Trigger trigger READ trigger WRITE setTrigger FINAL) - QML_NAMED_ELEMENT(Ripple) - QML_ADDED_IN_VERSION(2, 0) - -public: - QQuickMaterialRipple(QQuickItem *parent = nullptr); - - QColor color() const; - void setColor(const QColor &color); - - qreal clipRadius() const; - void setClipRadius(qreal radius); - - bool isActive() const; - void setActive(bool active); - - bool isPressed() const; - void setPressed(bool pressed); - - enum Trigger { Press, Release }; - Q_ENUM (Trigger) - - Trigger trigger() const; - void setTrigger(Trigger trigger); - - QPointF anchorPoint() const; - - QQuickItem *anchor() const; - void setAnchor(QQuickItem *anchor); - - qreal diameter() const; - -protected: - void itemChange(ItemChange change, const ItemChangeData &data) override; - QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override; - void timerEvent(QTimerEvent *event) override; - - void prepareWave(); - void enterWave(); - void exitWave(); - -private: - bool m_active = false; - bool m_pressed = false; - int m_waves = 0; - int m_enterDelay = 0; - Trigger m_trigger = Press; - qreal m_clipRadius = 0.0; - QColor m_color; - QQuickItem *m_anchor = nullptr; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickMaterialRipple) - -#endif // QQUICKMATERIALRIPPLE_P_H diff --git a/src/imports/controls/material/impl/qtquickcontrols2materialstyleimplplugin.cpp b/src/imports/controls/material/impl/qtquickcontrols2materialstyleimplplugin.cpp deleted file mode 100644 index 6ac920b1..00000000 --- a/src/imports/controls/material/impl/qtquickcontrols2materialstyleimplplugin.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include - -extern void qml_register_types_QtQuick_Controls_Material_impl(); - -QT_BEGIN_NAMESPACE - -class QtQuickControls2MaterialStyleImplPlugin : public QQmlEngineExtensionPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) - -public: - QtQuickControls2MaterialStyleImplPlugin(QObject *parent = nullptr); -}; - -QtQuickControls2MaterialStyleImplPlugin::QtQuickControls2MaterialStyleImplPlugin(QObject *parent) - : QQmlEngineExtensionPlugin(parent) -{ - volatile auto registration = &qml_register_types_QtQuick_Controls_Material_impl; - Q_UNUSED(registration); -} - -QT_END_NAMESPACE - -#include "qtquickcontrols2materialstyleimplplugin.moc" diff --git a/src/imports/controls/material/material.pri b/src/imports/controls/material/material.pri deleted file mode 100644 index 9eb14233..00000000 --- a/src/imports/controls/material/material.pri +++ /dev/null @@ -1,60 +0,0 @@ -HEADERS += \ - $$PWD/qquickmaterialstyle_p.h \ - $$PWD/qquickmaterialtheme_p.h - -SOURCES += \ - $$PWD/qquickmaterialstyle.cpp \ - $$PWD/qquickmaterialtheme.cpp - -QML_FILES += \ - $$PWD/ApplicationWindow.qml \ - $$PWD/BusyIndicator.qml \ - $$PWD/Button.qml \ - $$PWD/CheckBox.qml \ - $$PWD/CheckDelegate.qml \ - $$PWD/ComboBox.qml \ - $$PWD/DelayButton.qml \ - $$PWD/Dial.qml \ - $$PWD/Dialog.qml \ - $$PWD/DialogButtonBox.qml \ - $$PWD/Drawer.qml \ - $$PWD/Frame.qml \ - $$PWD/GroupBox.qml \ - $$PWD/HorizontalHeaderView.qml \ - $$PWD/ItemDelegate.qml \ - $$PWD/Label.qml \ - $$PWD/Menu.qml \ - $$PWD/MenuBar.qml \ - $$PWD/MenuBarItem.qml \ - $$PWD/MenuItem.qml \ - $$PWD/MenuSeparator.qml \ - $$PWD/Page.qml \ - $$PWD/PageIndicator.qml \ - $$PWD/Pane.qml \ - $$PWD/Popup.qml \ - $$PWD/ProgressBar.qml \ - $$PWD/RadioButton.qml \ - $$PWD/RadioDelegate.qml \ - $$PWD/RangeSlider.qml \ - $$PWD/RoundButton.qml \ - $$PWD/ScrollView.qml \ - $$PWD/ScrollBar.qml \ - $$PWD/ScrollIndicator.qml \ - $$PWD/Slider.qml \ - $$PWD/SpinBox.qml \ - $$PWD/SplitView.qml \ - $$PWD/StackView.qml \ - $$PWD/SwipeDelegate.qml \ - $$PWD/SwipeView.qml \ - $$PWD/Switch.qml \ - $$PWD/SwitchDelegate.qml \ - $$PWD/TabBar.qml \ - $$PWD/TabButton.qml \ - $$PWD/TextArea.qml \ - $$PWD/TextField.qml \ - $$PWD/ToolBar.qml \ - $$PWD/ToolButton.qml \ - $$PWD/ToolSeparator.qml \ - $$PWD/ToolTip.qml \ - $$PWD/Tumbler.qml \ - $$PWD/VerticalHeaderView.qml diff --git a/src/imports/controls/material/qquickmaterialstyle.cpp b/src/imports/controls/material/qquickmaterialstyle.cpp deleted file mode 100644 index d70728a0..00000000 --- a/src/imports/controls/material/qquickmaterialstyle.cpp +++ /dev/null @@ -1,1383 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickmaterialstyle_p.h" - -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -static const QRgb colors[][14] = { - // Red - { - 0xFFFFEBEE, // Shade50 - 0xFFFFCDD2, // Shade100 - 0xFFEF9A9A, // Shade200 - 0xFFE57373, // Shade300 - 0xFFEF5350, // Shade400 - 0xFFF44336, // Shade500 - 0xFFE53935, // Shade600 - 0xFFD32F2F, // Shade700 - 0xFFC62828, // Shade800 - 0xFFB71C1C, // Shade900 - 0xFFFF8A80, // ShadeA100 - 0xFFFF5252, // ShadeA200 - 0xFFFF1744, // ShadeA400 - 0xFFD50000 // ShadeA700 - }, - // Pink - { - 0xFFFCE4EC, // Shade50 - 0xFFF8BBD0, // Shade100 - 0xFFF48FB1, // Shade200 - 0xFFF06292, // Shade300 - 0xFFEC407A, // Shade400 - 0xFFE91E63, // Shade500 - 0xFFD81B60, // Shade600 - 0xFFC2185B, // Shade700 - 0xFFAD1457, // Shade800 - 0xFF880E4F, // Shade900 - 0xFFFF80AB, // ShadeA100 - 0xFFFF4081, // ShadeA200 - 0xFFF50057, // ShadeA400 - 0xFFC51162 // ShadeA700 - }, - // Purple - { - 0xFFF3E5F5, // Shade50 - 0xFFE1BEE7, // Shade100 - 0xFFCE93D8, // Shade200 - 0xFFBA68C8, // Shade300 - 0xFFAB47BC, // Shade400 - 0xFF9C27B0, // Shade500 - 0xFF8E24AA, // Shade600 - 0xFF7B1FA2, // Shade700 - 0xFF6A1B9A, // Shade800 - 0xFF4A148C, // Shade900 - 0xFFEA80FC, // ShadeA100 - 0xFFE040FB, // ShadeA200 - 0xFFD500F9, // ShadeA400 - 0xFFAA00FF // ShadeA700 - }, - // DeepPurple - { - 0xFFEDE7F6, // Shade50 - 0xFFD1C4E9, // Shade100 - 0xFFB39DDB, // Shade200 - 0xFF9575CD, // Shade300 - 0xFF7E57C2, // Shade400 - 0xFF673AB7, // Shade500 - 0xFF5E35B1, // Shade600 - 0xFF512DA8, // Shade700 - 0xFF4527A0, // Shade800 - 0xFF311B92, // Shade900 - 0xFFB388FF, // ShadeA100 - 0xFF7C4DFF, // ShadeA200 - 0xFF651FFF, // ShadeA400 - 0xFF6200EA // ShadeA700 - }, - // Indigo - { - 0xFFE8EAF6, // Shade50 - 0xFFC5CAE9, // Shade100 - 0xFF9FA8DA, // Shade200 - 0xFF7986CB, // Shade300 - 0xFF5C6BC0, // Shade400 - 0xFF3F51B5, // Shade500 - 0xFF3949AB, // Shade600 - 0xFF303F9F, // Shade700 - 0xFF283593, // Shade800 - 0xFF1A237E, // Shade900 - 0xFF8C9EFF, // ShadeA100 - 0xFF536DFE, // ShadeA200 - 0xFF3D5AFE, // ShadeA400 - 0xFF304FFE // ShadeA700 - }, - // Blue - { - 0xFFE3F2FD, // Shade50 - 0xFFBBDEFB, // Shade100 - 0xFF90CAF9, // Shade200 - 0xFF64B5F6, // Shade300 - 0xFF42A5F5, // Shade400 - 0xFF2196F3, // Shade500 - 0xFF1E88E5, // Shade600 - 0xFF1976D2, // Shade700 - 0xFF1565C0, // Shade800 - 0xFF0D47A1, // Shade900 - 0xFF82B1FF, // ShadeA100 - 0xFF448AFF, // ShadeA200 - 0xFF2979FF, // ShadeA400 - 0xFF2962FF // ShadeA700 - }, - // LightBlue - { - 0xFFE1F5FE, // Shade50 - 0xFFB3E5FC, // Shade100 - 0xFF81D4FA, // Shade200 - 0xFF4FC3F7, // Shade300 - 0xFF29B6F6, // Shade400 - 0xFF03A9F4, // Shade500 - 0xFF039BE5, // Shade600 - 0xFF0288D1, // Shade700 - 0xFF0277BD, // Shade800 - 0xFF01579B, // Shade900 - 0xFF80D8FF, // ShadeA100 - 0xFF40C4FF, // ShadeA200 - 0xFF00B0FF, // ShadeA400 - 0xFF0091EA // ShadeA700 - }, - // Cyan - { - 0xFFE0F7FA, // Shade50 - 0xFFB2EBF2, // Shade100 - 0xFF80DEEA, // Shade200 - 0xFF4DD0E1, // Shade300 - 0xFF26C6DA, // Shade400 - 0xFF00BCD4, // Shade500 - 0xFF00ACC1, // Shade600 - 0xFF0097A7, // Shade700 - 0xFF00838F, // Shade800 - 0xFF006064, // Shade900 - 0xFF84FFFF, // ShadeA100 - 0xFF18FFFF, // ShadeA200 - 0xFF00E5FF, // ShadeA400 - 0xFF00B8D4 // ShadeA700 - }, - // Teal - { - 0xFFE0F2F1, // Shade50 - 0xFFB2DFDB, // Shade100 - 0xFF80CBC4, // Shade200 - 0xFF4DB6AC, // Shade300 - 0xFF26A69A, // Shade400 - 0xFF009688, // Shade500 - 0xFF00897B, // Shade600 - 0xFF00796B, // Shade700 - 0xFF00695C, // Shade800 - 0xFF004D40, // Shade900 - 0xFFA7FFEB, // ShadeA100 - 0xFF64FFDA, // ShadeA200 - 0xFF1DE9B6, // ShadeA400 - 0xFF00BFA5 // ShadeA700 - }, - // Green - { - 0xFFE8F5E9, // Shade50 - 0xFFC8E6C9, // Shade100 - 0xFFA5D6A7, // Shade200 - 0xFF81C784, // Shade300 - 0xFF66BB6A, // Shade400 - 0xFF4CAF50, // Shade500 - 0xFF43A047, // Shade600 - 0xFF388E3C, // Shade700 - 0xFF2E7D32, // Shade800 - 0xFF1B5E20, // Shade900 - 0xFFB9F6CA, // ShadeA100 - 0xFF69F0AE, // ShadeA200 - 0xFF00E676, // ShadeA400 - 0xFF00C853 // ShadeA700 - }, - // LightGreen - { - 0xFFF1F8E9, // Shade50 - 0xFFDCEDC8, // Shade100 - 0xFFC5E1A5, // Shade200 - 0xFFAED581, // Shade300 - 0xFF9CCC65, // Shade400 - 0xFF8BC34A, // Shade500 - 0xFF7CB342, // Shade600 - 0xFF689F38, // Shade700 - 0xFF558B2F, // Shade800 - 0xFF33691E, // Shade900 - 0xFFCCFF90, // ShadeA100 - 0xFFB2FF59, // ShadeA200 - 0xFF76FF03, // ShadeA400 - 0xFF64DD17 // ShadeA700 - }, - // Lime - { - 0xFFF9FBE7, // Shade50 - 0xFFF0F4C3, // Shade100 - 0xFFE6EE9C, // Shade200 - 0xFFDCE775, // Shade300 - 0xFFD4E157, // Shade400 - 0xFFCDDC39, // Shade500 - 0xFFC0CA33, // Shade600 - 0xFFAFB42B, // Shade700 - 0xFF9E9D24, // Shade800 - 0xFF827717, // Shade900 - 0xFFF4FF81, // ShadeA100 - 0xFFEEFF41, // ShadeA200 - 0xFFC6FF00, // ShadeA400 - 0xFFAEEA00 // ShadeA700 - }, - // Yellow - { - 0xFFFFFDE7, // Shade50 - 0xFFFFF9C4, // Shade100 - 0xFFFFF59D, // Shade200 - 0xFFFFF176, // Shade300 - 0xFFFFEE58, // Shade400 - 0xFFFFEB3B, // Shade500 - 0xFFFDD835, // Shade600 - 0xFFFBC02D, // Shade700 - 0xFFF9A825, // Shade800 - 0xFFF57F17, // Shade900 - 0xFFFFFF8D, // ShadeA100 - 0xFFFFFF00, // ShadeA200 - 0xFFFFEA00, // ShadeA400 - 0xFFFFD600 // ShadeA700 - }, - // Amber - { - 0xFFFFF8E1, // Shade50 - 0xFFFFECB3, // Shade100 - 0xFFFFE082, // Shade200 - 0xFFFFD54F, // Shade300 - 0xFFFFCA28, // Shade400 - 0xFFFFC107, // Shade500 - 0xFFFFB300, // Shade600 - 0xFFFFA000, // Shade700 - 0xFFFF8F00, // Shade800 - 0xFFFF6F00, // Shade900 - 0xFFFFE57F, // ShadeA100 - 0xFFFFD740, // ShadeA200 - 0xFFFFC400, // ShadeA400 - 0xFFFFAB00 // ShadeA700 - }, - // Orange - { - 0xFFFFF3E0, // Shade50 - 0xFFFFE0B2, // Shade100 - 0xFFFFCC80, // Shade200 - 0xFFFFB74D, // Shade300 - 0xFFFFA726, // Shade400 - 0xFFFF9800, // Shade500 - 0xFFFB8C00, // Shade600 - 0xFFF57C00, // Shade700 - 0xFFEF6C00, // Shade800 - 0xFFE65100, // Shade900 - 0xFFFFD180, // ShadeA100 - 0xFFFFAB40, // ShadeA200 - 0xFFFF9100, // ShadeA400 - 0xFFFF6D00 // ShadeA700 - }, - // DeepOrange - { - 0xFFFBE9E7, // Shade50 - 0xFFFFCCBC, // Shade100 - 0xFFFFAB91, // Shade200 - 0xFFFF8A65, // Shade300 - 0xFFFF7043, // Shade400 - 0xFFFF5722, // Shade500 - 0xFFF4511E, // Shade600 - 0xFFE64A19, // Shade700 - 0xFFD84315, // Shade800 - 0xFFBF360C, // Shade900 - 0xFFFF9E80, // ShadeA100 - 0xFFFF6E40, // ShadeA200 - 0xFFFF3D00, // ShadeA400 - 0xFFDD2C00 // ShadeA700 - }, - // Brown - { - 0xFFEFEBE9, // Shade50 - 0xFFD7CCC8, // Shade100 - 0xFFBCAAA4, // Shade200 - 0xFFA1887F, // Shade300 - 0xFF8D6E63, // Shade400 - 0xFF795548, // Shade500 - 0xFF6D4C41, // Shade600 - 0xFF5D4037, // Shade700 - 0xFF4E342E, // Shade800 - 0xFF3E2723, // Shade900 - 0xFF000000, // ShadeA100 - 0xFF000000, // ShadeA200 - 0xFF000000, // ShadeA400 - 0xFF000000 // ShadeA700 - }, - // Grey - { - 0xFFFAFAFA, // Shade50 - 0xFFF5F5F5, // Shade100 - 0xFFEEEEEE, // Shade200 - 0xFFE0E0E0, // Shade300 - 0xFFBDBDBD, // Shade400 - 0xFF9E9E9E, // Shade500 - 0xFF757575, // Shade600 - 0xFF616161, // Shade700 - 0xFF424242, // Shade800 - 0xFF212121, // Shade900 - 0xFF000000, // ShadeA100 - 0xFF000000, // ShadeA200 - 0xFF000000, // ShadeA400 - 0xFF000000 // ShadeA700 - }, - // BlueGrey - { - 0xFFECEFF1, // Shade50 - 0xFFCFD8DC, // Shade100 - 0xFFB0BEC5, // Shade200 - 0xFF90A4AE, // Shade300 - 0xFF78909C, // Shade400 - 0xFF607D8B, // Shade500 - 0xFF546E7A, // Shade600 - 0xFF455A64, // Shade700 - 0xFF37474F, // Shade800 - 0xFF263238, // Shade900 - 0xFF000000, // ShadeA100 - 0xFF000000, // ShadeA200 - 0xFF000000, // ShadeA400 - 0xFF000000 // ShadeA700 - } -}; - -// If no value was inherited from a parent or explicitly set, the "global" values are used. -// The initial, default values of the globals are hard-coded here, but the environment -// variables and .conf file override them if specified. -static QQuickMaterialStyle::Theme globalTheme = QQuickMaterialStyle::Light; -static uint globalPrimary = QQuickMaterialStyle::Indigo; -static uint globalAccent = QQuickMaterialStyle::Pink; -static uint globalForeground = 0xDD000000; // primaryTextColorLight -static uint globalBackground = 0xFFFAFAFA; // backgroundColorLight -// These represent whether a global foreground/background was set. -// Each style's m_hasForeground/m_hasBackground are initialized to these values. -static bool hasGlobalForeground = false; -static bool hasGlobalBackground = false; -// These represent whether or not the global color value was specified as one of the -// values that QColor accepts, as opposed to one of the pre-defined colors like Red. -static bool globalPrimaryCustom = false; -static bool globalAccentCustom = false; -static bool globalForegroundCustom = true; -static bool globalBackgroundCustom = true; -// This is global because: -// 1) The theme needs access to it to determine font sizes. -// 2) There can only be one variant used for the whole application. -static QQuickMaterialStyle::Variant globalVariant = QQuickMaterialStyle::Normal; - -static const QRgb backgroundColorLight = 0xFFFAFAFA; -static const QRgb backgroundColorDark = 0xFF303030; -static const QRgb dialogColorLight = 0xFFFFFFFF; -static const QRgb dialogColorDark = 0xFF424242; -static const QRgb primaryTextColorLight = 0xDD000000; -static const QRgb primaryTextColorDark = 0xFFFFFFFF; -static const QRgb secondaryTextColorLight = 0x89000000; -static const QRgb secondaryTextColorDark = 0xB2FFFFFF; -static const QRgb hintTextColorLight = 0x60000000; -static const QRgb hintTextColorDark = 0x4CFFFFFF; -static const QRgb dividerColorLight = 0x1E000000; -static const QRgb dividerColorDark = 0x1EFFFFFF; -static const QRgb iconColorLight = 0x89000000; -static const QRgb iconColorDark = 0xFFFFFFFF; -static const QRgb iconDisabledColorLight = 0x42000000; -static const QRgb iconDisabledColorDark = 0x4CFFFFFF; -static const QRgb raisedButtonColorLight = 0xFFD6D7D7; -static const QRgb raisedButtonColorDark = 0x3FCCCCCC; -static const QRgb raisedButtonDisabledColorLight = dividerColorLight; -static const QRgb raisedButtonDisabledColorDark = dividerColorDark; -static const QRgb frameColorLight = hintTextColorLight; -static const QRgb frameColorDark = hintTextColorDark; -static const QRgb switchUncheckedTrackColorLight = 0x42000000; -static const QRgb switchUncheckedTrackColorDark = 0x4CFFFFFF; -static const QRgb switchDisabledTrackColorLight = 0x1E000000; -static const QRgb switchDisabledTrackColorDark = 0x19FFFFFF; -static const QRgb rippleColorLight = 0x10000000; -static const QRgb rippleColorDark = 0x20FFFFFF; -static const QRgb spinBoxDisabledIconColorLight = 0xFFCCCCCC; -static const QRgb spinBoxDisabledIconColorDark = 0xFF666666; -static const QRgb sliderDisabledColorLight = 0xFF9E9E9E; -static const QRgb sliderDisabledColorDark = 0xFF616161; - -static QQuickMaterialStyle::Theme effectiveTheme(QQuickMaterialStyle::Theme theme) -{ - if (theme == QQuickMaterialStyle::System) - theme = QQuickStylePrivate::isDarkSystemTheme() ? QQuickMaterialStyle::Dark : QQuickMaterialStyle::Light; - return theme; -} - -QQuickMaterialStyle::QQuickMaterialStyle(QObject *parent) : QQuickAttachedObject(parent), - m_customPrimary(globalPrimaryCustom), - m_customAccent(globalAccentCustom), - m_customForeground(globalForegroundCustom), - m_customBackground(globalBackgroundCustom), - m_hasForeground(hasGlobalForeground), - m_hasBackground(hasGlobalBackground), - m_theme(globalTheme), - m_primary(globalPrimary), - m_accent(globalAccent), - m_foreground(globalForeground), - m_background(globalBackground) -{ - QQuickAttachedObject::init(); -} - -QQuickMaterialStyle *QQuickMaterialStyle::qmlAttachedProperties(QObject *object) -{ - return new QQuickMaterialStyle(object); -} - -QQuickMaterialStyle::Theme QQuickMaterialStyle::theme() const -{ - return m_theme; -} - -void QQuickMaterialStyle::setTheme(Theme theme) -{ - if (theme == System) - theme = QQuickStylePrivate::isDarkSystemTheme() ? Dark : Light; - - m_explicitTheme = true; - if (m_theme == theme) - return; - - m_theme = theme; - propagateTheme(); - themeChange(); - if (!m_customAccent) - accentChange(); - if (!m_hasBackground) - backgroundChange(); - if (!m_hasForeground) - foregroundChange(); -} - -void QQuickMaterialStyle::inheritTheme(Theme theme) -{ - if (m_explicitTheme || m_theme == theme) - return; - - m_theme = theme; - propagateTheme(); - themeChange(); - if (!m_customAccent) - accentChange(); - if (!m_hasBackground) - backgroundChange(); - if (!m_hasForeground) - foregroundChange(); -} - -void QQuickMaterialStyle::propagateTheme() -{ - const auto styles = attachedChildren(); - for (QQuickAttachedObject *child : styles) { - QQuickMaterialStyle *material = qobject_cast(child); - if (material) - material->inheritTheme(m_theme); - } -} - -void QQuickMaterialStyle::resetTheme() -{ - if (!m_explicitTheme) - return; - - m_explicitTheme = false; - QQuickMaterialStyle *material = qobject_cast(attachedParent()); - inheritTheme(material ? material->theme() : globalTheme); -} - -void QQuickMaterialStyle::themeChange() -{ - emit themeChanged(); - emit themeOrAccentChanged(); - emit primaryHighlightedTextColor(); - emit buttonColorChanged(); - emit buttonDisabledColorChanged(); - emit dialogColorChanged(); - emit tooltipColorChanged(); - emit toolBarColorChanged(); - emit toolTextColorChanged(); -} - -QVariant QQuickMaterialStyle::primary() const -{ - return primaryColor(); -} - -void QQuickMaterialStyle::setPrimary(const QVariant &var) -{ - QRgb primary = 0; - bool custom = false; - if (!variantToRgba(var, "primary", &primary, &custom)) - return; - - m_explicitPrimary = true; - if (m_primary == primary) - return; - - m_customPrimary = custom; - m_primary = primary; - propagatePrimary(); - primaryChange(); -} - -void QQuickMaterialStyle::inheritPrimary(uint primary, bool custom) -{ - if (m_explicitPrimary || m_primary == primary) - return; - - m_customPrimary = custom; - m_primary = primary; - propagatePrimary(); - primaryChange(); -} - -void QQuickMaterialStyle::propagatePrimary() -{ - const auto styles = attachedChildren(); - for (QQuickAttachedObject *child : styles) { - QQuickMaterialStyle *material = qobject_cast(child); - if (material) - material->inheritPrimary(m_primary, m_customPrimary); - } -} - -void QQuickMaterialStyle::resetPrimary() -{ - if (!m_explicitPrimary) - return; - - m_customPrimary = false; - m_explicitPrimary = false; - QQuickMaterialStyle *material = qobject_cast(attachedParent()); - if (material) - inheritPrimary(material->m_primary, material->m_customPrimary); - else - inheritPrimary(globalPrimary, false); -} - -void QQuickMaterialStyle::primaryChange() -{ - emit primaryChanged(); - emit toolBarColorChanged(); - emit toolTextColorChanged(); -} - -QVariant QQuickMaterialStyle::accent() const -{ - return accentColor(); -} - -void QQuickMaterialStyle::setAccent(const QVariant &var) -{ - QRgb accent = 0; - bool custom = false; - if (!variantToRgba(var, "accent", &accent, &custom)) - return; - - m_explicitAccent = true; - if (m_accent == accent) - return; - - m_customAccent = custom; - m_accent = accent; - propagateAccent(); - accentChange(); -} - -void QQuickMaterialStyle::inheritAccent(uint accent, bool custom) -{ - if (m_explicitAccent || m_accent == accent) - return; - - m_customAccent = custom; - m_accent = accent; - propagateAccent(); - accentChange(); -} - -void QQuickMaterialStyle::propagateAccent() -{ - const auto styles = attachedChildren(); - for (QQuickAttachedObject *child : styles) { - QQuickMaterialStyle *material = qobject_cast(child); - if (material) - material->inheritAccent(m_accent, m_customAccent); - } -} - -void QQuickMaterialStyle::resetAccent() -{ - if (!m_explicitAccent) - return; - - m_customAccent = false; - m_explicitAccent = false; - QQuickMaterialStyle *material = qobject_cast(attachedParent()); - if (material) - inheritAccent(material->m_accent, material->m_customAccent); - else - inheritAccent(globalAccent, false); -} - -void QQuickMaterialStyle::accentChange() -{ - emit accentChanged(); - emit themeOrAccentChanged(); - emit buttonColorChanged(); -} - -QVariant QQuickMaterialStyle::foreground() const -{ - if (!m_hasForeground) - return QColor::fromRgba(m_theme == Light ? primaryTextColorLight : primaryTextColorDark); - if (m_customForeground) - return QColor::fromRgba(m_foreground); - if (m_foreground > BlueGrey) - return QColor(); - return QColor::fromRgba(colors[m_foreground][Shade500]); -} - -void QQuickMaterialStyle::setForeground(const QVariant &var) -{ - QRgb foreground = 0; - bool custom = false; - if (!variantToRgba(var, "foreground", &foreground, &custom)) - return; - - m_hasForeground = true; - m_explicitForeground = true; - if (m_foreground == foreground) - return; - - m_customForeground = custom; - m_foreground = foreground; - propagateForeground(); - foregroundChange(); -} - -void QQuickMaterialStyle::inheritForeground(uint foreground, bool custom, bool has) -{ - if (m_explicitForeground || m_foreground == foreground) - return; - - m_hasForeground = has; - m_customForeground = custom; - m_foreground = foreground; - propagateForeground(); - foregroundChange(); -} - -void QQuickMaterialStyle::propagateForeground() -{ - const auto styles = attachedChildren(); - for (QQuickAttachedObject *child : styles) { - QQuickMaterialStyle *material = qobject_cast(child); - if (material) - material->inheritForeground(m_foreground, m_customForeground, m_hasForeground); - } -} - -void QQuickMaterialStyle::resetForeground() -{ - if (!m_explicitForeground) - return; - - m_hasForeground = false; - m_customForeground = false; - m_explicitForeground = false; - QQuickMaterialStyle *material = qobject_cast(attachedParent()); - inheritForeground(material ? material->m_foreground : globalForeground, true, material ? material->m_hasForeground : false); -} - -void QQuickMaterialStyle::foregroundChange() -{ - emit foregroundChanged(); - emit primaryHighlightedTextColorChanged(); - // TODO: This causes a binding loop: see QTBUG-85699 and the comments on its fix -// emit toolTextColorChanged(); -} - -QVariant QQuickMaterialStyle::background() const -{ - return backgroundColor(); -} - -void QQuickMaterialStyle::setBackground(const QVariant &var) -{ - QRgb background = 0; - bool custom = false; - if (!variantToRgba(var, "background", &background, &custom)) - return; - - m_hasBackground = true; - m_explicitBackground = true; - if (m_background == background) - return; - - m_customBackground = custom; - m_background = background; - propagateBackground(); - backgroundChange(); -} - -void QQuickMaterialStyle::inheritBackground(uint background, bool custom, bool has) -{ - if (m_explicitBackground || m_background == background) - return; - - m_hasBackground = has; - m_customBackground = custom; - m_background = background; - propagateBackground(); - backgroundChange(); -} - -void QQuickMaterialStyle::propagateBackground() -{ - const auto styles = attachedChildren(); - for (QQuickAttachedObject *child : styles) { - QQuickMaterialStyle *material = qobject_cast(child); - if (material) - material->inheritBackground(m_background, m_customBackground, m_hasBackground); - } -} - -void QQuickMaterialStyle::resetBackground() -{ - if (!m_explicitBackground) - return; - - m_hasBackground = false; - m_customBackground = false; - m_explicitBackground = false; - QQuickMaterialStyle *material = qobject_cast(attachedParent()); - inheritBackground(material ? material->m_background : globalBackground, true, material ? material->m_hasBackground : false); -} - -void QQuickMaterialStyle::backgroundChange() -{ - emit backgroundChanged(); - emit buttonColorChanged(); - emit dialogColorChanged(); - emit tooltipColorChanged(); - emit toolBarColorChanged(); -} - -int QQuickMaterialStyle::elevation() const -{ - return m_elevation; -} - -void QQuickMaterialStyle::setElevation(int elevation) -{ - if (m_elevation == elevation) - return; - - m_elevation = elevation; - elevationChange(); -} - -void QQuickMaterialStyle::resetElevation() -{ - setElevation(0); -} - -void QQuickMaterialStyle::elevationChange() -{ - emit elevationChanged(); - emit buttonDisabledColorChanged(); -} - -QColor QQuickMaterialStyle::primaryColor() const -{ - if (m_customPrimary) - return QColor::fromRgba(m_primary); - if (m_primary > BlueGrey) - return QColor(); - return colors[m_primary][Shade500]; -} - -QColor QQuickMaterialStyle::accentColor(Shade shade) const -{ - if (m_customAccent) - return shade == themeShade() ? QColor::fromRgba(m_accent) - : this->shade(QColor::fromRgba(m_accent), shade); - if (m_accent > BlueGrey) - return QColor(); - return colors[m_accent][shade]; -} - -QColor QQuickMaterialStyle::accentColor() const -{ - return accentColor(themeShade()); -} - -QColor QQuickMaterialStyle::backgroundColor(Shade shade) const -{ - if (!m_hasBackground) - return QColor::fromRgba(m_theme == Light ? backgroundColorLight : backgroundColorDark); - if (m_customBackground) - return shade == themeShade() ? QColor::fromRgba(m_background) - : this->shade(QColor::fromRgba(m_background), shade); - if (m_background > BlueGrey) - return QColor(); - return colors[m_background][shade]; -} - -QColor QQuickMaterialStyle::backgroundColor() const -{ - return backgroundColor(themeShade()); -} - -QColor QQuickMaterialStyle::primaryTextColor() const -{ - return QColor::fromRgba(m_theme == Light ? primaryTextColorLight : primaryTextColorDark); -} - -QColor QQuickMaterialStyle::primaryHighlightedTextColor() const -{ - if (m_explicitForeground) - return primaryTextColor(); - return QColor::fromRgba(primaryTextColorDark); -} - -QColor QQuickMaterialStyle::secondaryTextColor() const -{ - return QColor::fromRgba(m_theme == Light ? secondaryTextColorLight : secondaryTextColorDark); -} - -QColor QQuickMaterialStyle::hintTextColor() const -{ - return QColor::fromRgba(m_theme == Light ? hintTextColorLight : hintTextColorDark); -} - -QColor QQuickMaterialStyle::textSelectionColor() const -{ - QColor color = accentColor(); - color.setAlphaF(0.4f); - return color; -} - -QColor QQuickMaterialStyle::dropShadowColor() const -{ - return QColor::fromRgba(0x40000000); -} - -QColor QQuickMaterialStyle::dividerColor() const -{ - return QColor::fromRgba(m_theme == Light ? dividerColorLight : dividerColorDark); -} - -QColor QQuickMaterialStyle::iconColor() const -{ - return QColor::fromRgba(m_theme == Light ? iconColorLight : iconColorDark); -} - -QColor QQuickMaterialStyle::iconDisabledColor() const -{ - return QColor::fromRgba(m_theme == Light ? iconDisabledColorLight : iconDisabledColorDark); -} - -QColor QQuickMaterialStyle::buttonColor(bool highlighted) const -{ - Shade shade = themeShade(); - - QColor color = Qt::transparent; - - if (m_explicitBackground) { - color = backgroundColor(shade); - } else if (highlighted) { - color = accentColor(shade); - } else if (elevation() > 0) { - color = QColor::fromRgba(m_theme == Light ? raisedButtonColorLight - : raisedButtonColorDark); - } - - return color; -} - -QColor QQuickMaterialStyle::buttonColor() const -{ - return buttonColor(false); -} - -QColor QQuickMaterialStyle::buttonDisabledColor() const -{ - if (elevation() > 0) { - return QColor::fromRgba(m_theme == Light ? raisedButtonDisabledColorLight - : raisedButtonDisabledColorDark); - } else { - return Qt::transparent; - } -} - -QColor QQuickMaterialStyle::highlightedButtonColor() const -{ - return buttonColor(true); -} - -QColor QQuickMaterialStyle::frameColor() const -{ - return QColor::fromRgba(m_theme == Light ? frameColorLight : frameColorDark); -} - -QColor QQuickMaterialStyle::rippleColor() const -{ - return QColor::fromRgba(m_theme == Light ? rippleColorLight : rippleColorDark); -} - -QColor QQuickMaterialStyle::highlightedRippleColor() const -{ - QColor pressColor = accentColor(); - pressColor.setAlpha(m_theme == Light ? 30 : 50); - return pressColor; -} - -QColor QQuickMaterialStyle::switchUncheckedTrackColor() const -{ - return QColor::fromRgba(m_theme == Light ? switchUncheckedTrackColorLight : switchUncheckedTrackColorDark); -} - -QColor QQuickMaterialStyle::switchCheckedTrackColor() const -{ - QColor trackColor(accentColor()); - trackColor.setAlphaF(0.5); - return trackColor; -} - -QColor QQuickMaterialStyle::switchUncheckedHandleColor() const -{ - return m_theme == Light ? color(Grey, Shade50) : color(Grey, Shade400); -} - -QColor QQuickMaterialStyle::switchCheckedHandleColor() const -{ - return m_theme == Light ? accentColor() : shade(accentColor(), Shade200); -} - -QColor QQuickMaterialStyle::switchDisabledTrackColor() const -{ - return QColor::fromRgba(m_theme == Light ? switchDisabledTrackColorLight : switchDisabledTrackColorDark); -} - -QColor QQuickMaterialStyle::switchDisabledHandleColor() const -{ - return m_theme == Light ? color(Grey, Shade400) : color(Grey, Shade800); -} - -QColor QQuickMaterialStyle::scrollBarColor() const -{ - return QColor::fromRgba(m_theme == Light ? 0x40000000 : 0x40FFFFFF); -} - -QColor QQuickMaterialStyle::scrollBarHoveredColor() const -{ - return QColor::fromRgba(m_theme == Light ? 0x60000000 : 0x60FFFFFF); -} - -QColor QQuickMaterialStyle::scrollBarPressedColor() const -{ - return QColor::fromRgba(m_theme == Light ? 0x80000000 : 0x80FFFFFF); -} - -QColor QQuickMaterialStyle::dialogColor() const -{ - if (m_hasBackground) - return backgroundColor(); - return QColor::fromRgba(m_theme == Light ? dialogColorLight : dialogColorDark); -} - -QColor QQuickMaterialStyle::backgroundDimColor() const -{ - return QColor::fromRgba(m_theme == Light ? 0x99303030 : 0x99fafafa); -} - -QColor QQuickMaterialStyle::listHighlightColor() const -{ - return QColor::fromRgba(m_theme == Light ? 0x1e000000 : 0x1effffff); -} - -QColor QQuickMaterialStyle::tooltipColor() const -{ - if (m_explicitBackground) - return backgroundColor(); - return color(Grey, Shade700); -} - -QColor QQuickMaterialStyle::toolBarColor() const -{ - if (m_explicitBackground) - return backgroundColor(); - return primaryColor(); -} - -QColor QQuickMaterialStyle::toolTextColor() const -{ - if (m_hasForeground || m_customPrimary) - return primaryTextColor(); - - switch (m_primary) { - case Red: - case Pink: - case Purple: - case DeepPurple: - case Indigo: - case Blue: - case Teal: - case DeepOrange: - case Brown: - case BlueGrey: - return QColor::fromRgba(primaryTextColorDark); - - case LightBlue: - case Cyan: - case Green: - case LightGreen: - case Lime: - case Yellow: - case Amber: - case Orange: - case Grey: - return QColor::fromRgba(primaryTextColorLight); - - default: - break; - } - - return primaryTextColor(); -} - -QColor QQuickMaterialStyle::spinBoxDisabledIconColor() const -{ - return QColor::fromRgba(m_theme == Light ? spinBoxDisabledIconColorLight : spinBoxDisabledIconColorDark); -} - -QColor QQuickMaterialStyle::sliderDisabledColor() const -{ - return QColor::fromRgba(m_theme == Light ? sliderDisabledColorLight : sliderDisabledColorDark); -} - -QColor QQuickMaterialStyle::color(QQuickMaterialStyle::Color color, QQuickMaterialStyle::Shade shade) const -{ - int count = sizeof(colors) / sizeof(colors[0]); - if (color < 0 || color >= count) - return QColor(); - - count = sizeof(colors[0]) / sizeof(colors[0][0]); - if (shade < 0 || shade >= count) - return QColor(); - - return colors[color][shade]; -} - -static QColor lighterShade(const QColor &color, qreal amount) -{ - QColor hsl = color.toHsl(); - hsl.setHslF(hsl.hueF(), hsl.saturationF(), qBound(0.0, hsl.lightnessF() + amount, 1.0), color.alphaF()); - return hsl.convertTo(color.spec()); -} - -static QColor darkerShade(const QColor &color, qreal amount) -{ - QColor hsl = color.toHsl(); - hsl.setHslF(hsl.hueF(), hsl.saturationF(), qBound(0.0, hsl.lightnessF() - amount, 1.0), color.alphaF()); - return hsl.convertTo(color.spec()); -} - -QQuickMaterialStyle::Shade QQuickMaterialStyle::themeShade() const -{ - return m_theme == Light ? Shade500 : Shade200; -} - -/* - * The following lightness values originate from the Material Design Color Generator project. - * - * The MIT License (MIT) - * - * Copyright (c) 2015 mbitson - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -// Returns the same color, if shade == themeShade() -QColor QQuickMaterialStyle::shade(const QColor &color, Shade shade) const -{ - switch (shade) { - case Shade50: - return lighterShade(color, m_theme == Light ? 0.52 : 0.26); - case Shade100: - return lighterShade(color, m_theme == Light ? 0.37 : 0.11); - case Shade200: - return m_theme == Light ? lighterShade(color, 0.26) : color; - case Shade300: - return m_theme == Light ? lighterShade(color, 0.12) : darkerShade(color, 0.14); - case Shade400: - return m_theme == Light ? lighterShade(color, 0.06) : darkerShade(color, 0.20); - case Shade500: - return m_theme == Light ? color : darkerShade(color, 0.26); - case Shade600: - return darkerShade(color, m_theme == Light ? 0.06 : 0.32); - case Shade700: - return darkerShade(color, m_theme == Light ? 0.12 : 0.38); - case Shade800: - return darkerShade(color, m_theme == Light ? 0.18 : 0.44); - case Shade900: - return darkerShade(color, m_theme == Light ? 0.24 : 0.50); - case ShadeA100: - return lighterShade(color, m_theme == Light ? 0.54 : 0.28); - case ShadeA200: - return lighterShade(color, m_theme == Light ? 0.37 : 0.11); - case ShadeA400: - return m_theme == Light ? lighterShade(color, 0.06) : darkerShade(color, 0.20); - case ShadeA700: - return darkerShade(color, m_theme == Light ? 0.12 : 0.38); - default: - Q_UNREACHABLE(); - return QColor(); - } -} - -int QQuickMaterialStyle::touchTarget() const -{ - // https://material.io/guidelines/components/buttons.html#buttons-style - return globalVariant == Dense ? 44 : 48; -} - -int QQuickMaterialStyle::buttonHeight() const -{ - // https://material.io/guidelines/components/buttons.html#buttons-style - return globalVariant == Dense ? 32 : 36; -} - -int QQuickMaterialStyle::delegateHeight() const -{ - // https://material.io/guidelines/components/lists.html#lists-specs - return globalVariant == Dense ? 40 : 48; -} - -int QQuickMaterialStyle::dialogButtonBoxHeight() const -{ - return globalVariant == Dense ? 48 : 52; -} - -int QQuickMaterialStyle::frameVerticalPadding() const -{ - return globalVariant == Dense ? 8 : 12; -} - -int QQuickMaterialStyle::menuItemHeight() const -{ - // https://material.io/guidelines/components/menus.html#menus-simple-menus - return globalVariant == Dense ? 32 : 48; -} - -int QQuickMaterialStyle::menuItemVerticalPadding() const -{ - return globalVariant == Dense ? 8 : 12; -} - -int QQuickMaterialStyle::switchDelegateVerticalPadding() const -{ - // SwitchDelegate's indicator is much larger than the others due to the shadow, - // so we must reduce its padding to ensure its implicitHeight is 40 when dense. - return globalVariant == Dense ? 4 : 8; -} - -int QQuickMaterialStyle::tooltipHeight() const -{ - // https://material.io/guidelines/components/tooltips.html - return globalVariant == Dense ? 22 : 32; -} - -QQuickMaterialStyle::Variant QQuickMaterialStyle::variant() -{ - return globalVariant; -} - -template -static Enum toEnumValue(const QByteArray &value, bool *ok) -{ - QMetaEnum enumeration = QMetaEnum::fromType(); - return static_cast(enumeration.keyToValue(value, ok)); -} - -static QByteArray resolveSetting(const QByteArray &env, const QSharedPointer &settings, const QString &name) -{ - QByteArray value = qgetenv(env); -#if QT_CONFIG(settings) - if (value.isNull() && !settings.isNull()) - value = settings->value(name).toByteArray(); -#endif - return value; -} - -void QQuickMaterialStyle::initGlobals() -{ - QSharedPointer settings = QQuickStylePrivate::settings(QStringLiteral("Material")); - - bool ok = false; - QByteArray themeValue = resolveSetting("QT_QUICK_CONTROLS_MATERIAL_THEME", settings, QStringLiteral("Theme")); - Theme themeEnum = toEnumValue(themeValue, &ok); - if (ok) - globalTheme = effectiveTheme(themeEnum); - else if (!themeValue.isEmpty()) - qWarning().nospace().noquote() << "Material: unknown theme value: " << themeValue; - - QByteArray variantValue = resolveSetting("QT_QUICK_CONTROLS_MATERIAL_VARIANT", settings, QStringLiteral("Variant")); - Variant variantEnum = toEnumValue(variantValue, &ok); - if (ok) - globalVariant = variantEnum; - else if (!variantValue.isEmpty()) - qWarning().nospace().noquote() << "Material: unknown variant value: " << variantValue; - - QByteArray primaryValue = resolveSetting("QT_QUICK_CONTROLS_MATERIAL_PRIMARY", settings, QStringLiteral("Primary")); - Color primaryEnum = toEnumValue(primaryValue, &ok); - if (ok) { - globalPrimaryCustom = false; - globalPrimary = primaryEnum; - } else { - QColor color(primaryValue.constData()); - if (color.isValid()) { - globalPrimaryCustom = true; - globalPrimary = color.rgba(); - } else if (!primaryValue.isEmpty()) { - qWarning().nospace().noquote() << "Material: unknown primary value: " << primaryValue; - } - } - - QByteArray accentValue = resolveSetting("QT_QUICK_CONTROLS_MATERIAL_ACCENT", settings, QStringLiteral("Accent")); - Color accentEnum = toEnumValue(accentValue, &ok); - if (ok) { - globalAccentCustom = false; - globalAccent = accentEnum; - } else if (!accentValue.isEmpty()) { - QColor color(accentValue.constData()); - if (color.isValid()) { - globalAccentCustom = true; - globalAccent = color.rgba(); - } else { - qWarning().nospace().noquote() << "Material: unknown accent value: " << accentValue; - } - } - - QByteArray foregroundValue = resolveSetting("QT_QUICK_CONTROLS_MATERIAL_FOREGROUND", settings, QStringLiteral("Foreground")); - Color foregroundEnum = toEnumValue(foregroundValue, &ok); - if (ok) { - globalForegroundCustom = false; - globalForeground = foregroundEnum; - hasGlobalForeground = true; - } else if (!foregroundValue.isEmpty()) { - QColor color(foregroundValue.constData()); - if (color.isValid()) { - globalForegroundCustom = true; - globalForeground = color.rgba(); - hasGlobalForeground = true; - } else { - qWarning().nospace().noquote() << "Material: unknown foreground value: " << foregroundValue; - } - } - - QByteArray backgroundValue = resolveSetting("QT_QUICK_CONTROLS_MATERIAL_BACKGROUND", settings, QStringLiteral("Background")); - Color backgroundEnum = toEnumValue(backgroundValue, &ok); - if (ok) { - globalBackgroundCustom = false; - globalBackground = backgroundEnum; - hasGlobalBackground = true; - } else if (!backgroundValue.isEmpty()) { - QColor color(backgroundValue.constData()); - if (color.isValid()) { - globalBackgroundCustom = true; - globalBackground = color.rgba(); - hasGlobalBackground = true; - } else { - qWarning().nospace().noquote() << "Material: unknown background value: " << backgroundValue; - } - } -} - -void QQuickMaterialStyle::attachedParentChange(QQuickAttachedObject *newParent, QQuickAttachedObject *oldParent) -{ - Q_UNUSED(oldParent); - QQuickMaterialStyle *material = qobject_cast(newParent); - if (material) { - inheritPrimary(material->m_primary, material->m_customPrimary); - inheritAccent(material->m_accent, material->m_customAccent); - inheritForeground(material->m_foreground, material->m_customForeground, material->m_hasForeground); - inheritBackground(material->m_background, material->m_customBackground, material->m_hasBackground); - inheritTheme(material->theme()); - } -} - -bool QQuickMaterialStyle::variantToRgba(const QVariant &var, const char *name, QRgb *rgba, bool *custom) const -{ - *custom = false; - if (var.metaType().id() == QMetaType::Int) { - int val = var.toInt(); - if (val > BlueGrey) { - qmlWarning(parent()) << "unknown Material." << name << " value: " << val; - return false; - } - *rgba = val; - } else { - int val = QMetaEnum::fromType().keyToValue(var.toByteArray()); - if (val != -1) { - *rgba = val; - } else { - QColor color(var.toString()); - if (!color.isValid()) { - qmlWarning(parent()) << "unknown Material." << name << " value: " << var.toString(); - return false; - } - *custom = true; - *rgba = color.rgba(); - } - } - return true; -} - -QT_END_NAMESPACE diff --git a/src/imports/controls/material/qquickmaterialstyle_p.h b/src/imports/controls/material/qquickmaterialstyle_p.h deleted file mode 100644 index 56cf141c..00000000 --- a/src/imports/controls/material/qquickmaterialstyle_p.h +++ /dev/null @@ -1,334 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKMATERIALSTYLE_P_H -#define QQUICKMATERIALSTYLE_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include - -QT_BEGIN_NAMESPACE - -class QQuickMaterialStyle : public QQuickAttachedObject -{ - Q_OBJECT - Q_PROPERTY(Theme theme READ theme WRITE setTheme RESET resetTheme NOTIFY themeChanged FINAL) - Q_PROPERTY(QVariant primary READ primary WRITE setPrimary RESET resetPrimary NOTIFY primaryChanged FINAL) - Q_PROPERTY(QVariant accent READ accent WRITE setAccent RESET resetAccent NOTIFY accentChanged FINAL) - Q_PROPERTY(QVariant foreground READ foreground WRITE setForeground RESET resetForeground NOTIFY foregroundChanged FINAL) - Q_PROPERTY(QVariant background READ background WRITE setBackground RESET resetBackground NOTIFY backgroundChanged FINAL) - Q_PROPERTY(int elevation READ elevation WRITE setElevation RESET resetElevation NOTIFY elevationChanged FINAL) - - Q_PROPERTY(QColor primaryColor READ primaryColor NOTIFY primaryChanged FINAL) // TODO: remove? - Q_PROPERTY(QColor accentColor READ accentColor NOTIFY accentChanged FINAL) // TODO: remove? - Q_PROPERTY(QColor backgroundColor READ backgroundColor NOTIFY backgroundChanged FINAL) - Q_PROPERTY(QColor primaryTextColor READ primaryTextColor NOTIFY themeChanged FINAL) - Q_PROPERTY(QColor primaryHighlightedTextColor READ primaryHighlightedTextColor NOTIFY primaryHighlightedTextColorChanged FINAL) - Q_PROPERTY(QColor secondaryTextColor READ secondaryTextColor NOTIFY themeChanged FINAL) - Q_PROPERTY(QColor hintTextColor READ hintTextColor NOTIFY themeChanged FINAL) - Q_PROPERTY(QColor textSelectionColor READ textSelectionColor NOTIFY themeOrAccentChanged FINAL) - Q_PROPERTY(QColor dropShadowColor READ dropShadowColor CONSTANT FINAL) - Q_PROPERTY(QColor dividerColor READ dividerColor NOTIFY themeChanged FINAL) - Q_PROPERTY(QColor iconColor READ iconColor NOTIFY themeChanged FINAL) - Q_PROPERTY(QColor iconDisabledColor READ iconDisabledColor NOTIFY themeChanged FINAL) - Q_PROPERTY(QColor buttonColor READ buttonColor NOTIFY buttonColorChanged FINAL) - Q_PROPERTY(QColor buttonDisabledColor READ buttonDisabledColor NOTIFY buttonDisabledColorChanged FINAL) - Q_PROPERTY(QColor highlightedButtonColor READ highlightedButtonColor NOTIFY buttonColorChanged FINAL) - Q_PROPERTY(QColor frameColor READ frameColor NOTIFY themeChanged FINAL) - Q_PROPERTY(QColor rippleColor READ rippleColor NOTIFY themeChanged FINAL) - Q_PROPERTY(QColor highlightedRippleColor READ highlightedRippleColor NOTIFY themeOrAccentChanged FINAL) - Q_PROPERTY(QColor switchUncheckedTrackColor READ switchUncheckedTrackColor NOTIFY themeChanged FINAL) - Q_PROPERTY(QColor switchCheckedTrackColor READ switchCheckedTrackColor NOTIFY themeOrAccentChanged FINAL) - Q_PROPERTY(QColor switchUncheckedHandleColor READ switchUncheckedHandleColor NOTIFY themeChanged FINAL) - Q_PROPERTY(QColor switchCheckedHandleColor READ switchCheckedHandleColor NOTIFY themeOrAccentChanged FINAL) - Q_PROPERTY(QColor switchDisabledTrackColor READ switchDisabledTrackColor NOTIFY themeChanged FINAL) - Q_PROPERTY(QColor switchDisabledHandleColor READ switchDisabledHandleColor NOTIFY themeChanged FINAL) - Q_PROPERTY(QColor scrollBarColor READ scrollBarColor NOTIFY themeChanged FINAL) - Q_PROPERTY(QColor scrollBarHoveredColor READ scrollBarHoveredColor NOTIFY themeChanged FINAL) - Q_PROPERTY(QColor scrollBarPressedColor READ scrollBarPressedColor NOTIFY themeChanged FINAL) - Q_PROPERTY(QColor dialogColor READ dialogColor NOTIFY dialogColorChanged FINAL) - Q_PROPERTY(QColor backgroundDimColor READ backgroundDimColor NOTIFY themeChanged FINAL) - Q_PROPERTY(QColor listHighlightColor READ listHighlightColor NOTIFY themeChanged FINAL) - Q_PROPERTY(QColor tooltipColor READ tooltipColor NOTIFY tooltipColorChanged FINAL) - Q_PROPERTY(QColor toolBarColor READ toolBarColor NOTIFY toolBarColorChanged FINAL) - Q_PROPERTY(QColor toolTextColor READ toolTextColor NOTIFY toolTextColorChanged FINAL) - Q_PROPERTY(QColor spinBoxDisabledIconColor READ spinBoxDisabledIconColor NOTIFY themeChanged FINAL) - Q_PROPERTY(QColor sliderDisabledColor READ sliderDisabledColor NOTIFY themeChanged FINAL REVISION 15) - - Q_PROPERTY(int touchTarget READ touchTarget CONSTANT FINAL) - Q_PROPERTY(int buttonHeight READ buttonHeight CONSTANT FINAL) - Q_PROPERTY(int delegateHeight READ delegateHeight CONSTANT FINAL) - Q_PROPERTY(int dialogButtonBoxHeight READ dialogButtonBoxHeight CONSTANT FINAL) - Q_PROPERTY(int frameVerticalPadding READ frameVerticalPadding CONSTANT FINAL) - Q_PROPERTY(int menuItemHeight READ menuItemHeight CONSTANT FINAL) - Q_PROPERTY(int menuItemVerticalPadding READ menuItemVerticalPadding CONSTANT FINAL) - Q_PROPERTY(int switchDelegateVerticalPadding READ switchDelegateVerticalPadding CONSTANT FINAL) - Q_PROPERTY(int tooltipHeight READ tooltipHeight CONSTANT FINAL) - - QML_NAMED_ELEMENT(Material) - QML_ATTACHED(QQuickMaterialStyle) - QML_UNCREATABLE("") - QML_ADDED_IN_VERSION(2, 0) - -public: - enum Theme { - Light, - Dark, - System - }; - - enum Variant { - Normal, - Dense - }; - - enum Color { - Red, - Pink, - Purple, - DeepPurple, - Indigo, - Blue, - LightBlue, - Cyan, - Teal, - Green, - LightGreen, - Lime, - Yellow, - Amber, - Orange, - DeepOrange, - Brown, - Grey, - BlueGrey - }; - - enum Shade { - Shade50, - Shade100, - Shade200, - Shade300, - Shade400, - Shade500, - Shade600, - Shade700, - Shade800, - Shade900, - ShadeA100, - ShadeA200, - ShadeA400, - ShadeA700, - }; - - Q_ENUM(Theme) - Q_ENUM(Variant) - Q_ENUM(Color) - Q_ENUM(Shade) - - explicit QQuickMaterialStyle(QObject *parent = nullptr); - - static QQuickMaterialStyle *qmlAttachedProperties(QObject *object); - - Theme theme() const; - void setTheme(Theme theme); - void inheritTheme(Theme theme); - void propagateTheme(); - void resetTheme(); - void themeChange(); - - QVariant primary() const; - void setPrimary(const QVariant &accent); - void inheritPrimary(uint primary, bool custom); - void propagatePrimary(); - void resetPrimary(); - void primaryChange(); - - QVariant accent() const; - void setAccent(const QVariant &accent); - void inheritAccent(uint accent, bool custom); - void propagateAccent(); - void resetAccent(); - void accentChange(); - - QVariant foreground() const; - void setForeground(const QVariant &foreground); - void inheritForeground(uint foreground, bool custom, bool has); - void propagateForeground(); - void resetForeground(); - void foregroundChange(); - - QVariant background() const; - void setBackground(const QVariant &background); - void inheritBackground(uint background, bool custom, bool has); - void propagateBackground(); - void resetBackground(); - void backgroundChange(); - - int elevation() const; - void setElevation(int elevation); - void resetElevation(); - void elevationChange(); - - QColor primaryColor() const; - QColor accentColor() const; - QColor backgroundColor() const; - QColor primaryTextColor() const; - QColor primaryHighlightedTextColor() const; - QColor secondaryTextColor() const; - QColor hintTextColor() const; - QColor textSelectionColor() const; - QColor dropShadowColor() const; - QColor dividerColor() const; - QColor iconColor() const; - QColor iconDisabledColor() const; - QColor buttonColor() const; - QColor buttonDisabledColor() const; - QColor highlightedButtonColor() const; - QColor highlightedButtonDisabledColor() const; - QColor frameColor() const; - QColor rippleColor() const; - QColor highlightedRippleColor() const; - QColor switchUncheckedTrackColor() const; - QColor switchCheckedTrackColor() const; - QColor switchUncheckedHandleColor() const; - QColor switchCheckedHandleColor() const; - QColor switchDisabledTrackColor() const; - QColor switchDisabledHandleColor() const; - QColor scrollBarColor() const; - QColor scrollBarHoveredColor() const; - QColor scrollBarPressedColor() const; - QColor dialogColor() const; - QColor backgroundDimColor() const; - QColor listHighlightColor() const; - QColor tooltipColor() const; - QColor toolBarColor() const; - QColor toolTextColor() const; - QColor spinBoxDisabledIconColor() const; - QColor sliderDisabledColor() const; - - Q_INVOKABLE QColor color(Color color, Shade shade = Shade500) const; - Q_INVOKABLE QColor shade(const QColor &color, Shade shade) const; - - int touchTarget() const; - int buttonHeight() const; - int delegateHeight() const; - int dialogButtonBoxHeight() const; - int frameVerticalPadding() const; - int menuItemHeight() const; - int menuItemVerticalPadding() const; - int switchDelegateVerticalPadding() const; - int tooltipHeight() const; - - static void initGlobals(); - - static Variant variant(); - -Q_SIGNALS: - void themeChanged(); - void primaryChanged(); - void accentChanged(); - void foregroundChanged(); - void backgroundChanged(); - void elevationChanged(); - - void themeOrAccentChanged(); - - void primaryHighlightedTextColorChanged(); - void buttonColorChanged(); - void buttonDisabledColorChanged(); - void dialogColorChanged(); - void tooltipColorChanged(); - void toolBarColorChanged(); - void toolTextColorChanged(); - -protected: - void attachedParentChange(QQuickAttachedObject *newParent, QQuickAttachedObject *oldParent) override; - -private: - void init(); - bool variantToRgba(const QVariant &var, const char *name, QRgb *rgba, bool *custom) const; - - QColor backgroundColor(Shade shade) const; - QColor accentColor(Shade shade) const; - QColor buttonColor(bool highlighted) const; - Shade themeShade() const; - - // These reflect whether a color value was explicitly set on the specific - // item that this attached style object represents. - bool m_explicitTheme = false; - bool m_explicitPrimary = false; - bool m_explicitAccent = false; - bool m_explicitForeground = false; - bool m_explicitBackground = false; - // These reflect whether the color value that was either inherited or - // explicitly set is in the form that QColor expects, rather than one of - // our pre-defined color enum values. - bool m_customPrimary = false; - bool m_customAccent = false; - bool m_customForeground = false; - bool m_customBackground = false; - // These will be true when this item has an explicit or inherited foreground/background - // color, or these colors were declared globally via settings (e.g. conf or env vars). - // Some color properties of the style will return different values depending on whether - // or not these are set. - bool m_hasForeground = false; - bool m_hasBackground = false; - // The actual values for this item, whether explicit, inherited or globally set. - Theme m_theme = Light; - uint m_primary = 0; - uint m_accent = 0; - uint m_foreground = 0; - uint m_background = 0; - int m_elevation = 0; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPEINFO(QQuickMaterialStyle, QML_HAS_ATTACHED_PROPERTIES) - -#endif // QQUICKMATERIALSTYLE_P_H diff --git a/src/imports/controls/material/qquickmaterialtheme.cpp b/src/imports/controls/material/qquickmaterialtheme.cpp deleted file mode 100644 index aec9e232..00000000 --- a/src/imports/controls/material/qquickmaterialtheme.cpp +++ /dev/null @@ -1,113 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickmaterialtheme_p.h" -#include "qquickmaterialstyle_p.h" - -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -void QQuickMaterialTheme::initialize(QQuickTheme *theme) -{ - QFont systemFont; - QFont buttonFont; - QFont toolTipFont; - QFont itemViewFont; - QFont listViewFont; - QFont menuItemFont; - QFont editorFont; - - QFont font; - font.setFamilies(QStringList{QLatin1String("Roboto")}); - QString family = QFontInfo(font).family(); - - if (family != QLatin1String("Roboto")) { - font.setFamilies(QStringList{QLatin1String("Noto")}); - family = QFontInfo(font).family(); - } - - if (family == QLatin1String("Roboto") || family == QLatin1String("Noto")) { - const QStringList families{family}; - systemFont.setFamilies(families); - buttonFont.setFamilies(families); - toolTipFont.setFamilies(families); - itemViewFont.setFamilies(families); - listViewFont.setFamilies(families); - menuItemFont.setFamilies(families); - editorFont.setFamilies(families); - } - - const bool dense = QQuickMaterialStyle::variant() == QQuickMaterialStyle::Dense; - systemFont.setPixelSize(dense ? 13 : 14); - theme->setFont(QQuickTheme::System, systemFont); - - // https://material.io/guidelines/components/buttons.html#buttons-style - buttonFont.setPixelSize(dense ? 13 : 14); - buttonFont.setCapitalization(QFont::AllUppercase); - buttonFont.setWeight(QFont::Medium); - theme->setFont(QQuickTheme::Button, buttonFont); - theme->setFont(QQuickTheme::TabBar, buttonFont); - theme->setFont(QQuickTheme::ToolBar, buttonFont); - - // https://material.io/guidelines/components/tooltips.html - toolTipFont.setPixelSize(dense ? 10 : 14); - toolTipFont.setWeight(QFont::Medium); - theme->setFont(QQuickTheme::ToolTip, toolTipFont); - - itemViewFont.setPixelSize(dense ? 13 : 14); - itemViewFont.setWeight(QFont::Medium); - theme->setFont(QQuickTheme::ItemView, itemViewFont); - - // https://material.io/guidelines/components/lists.html#lists-specs - listViewFont.setPixelSize(dense ? 13 : 16); - theme->setFont(QQuickTheme::ListView, listViewFont); - - menuItemFont.setPixelSize(dense ? 13 : 16); - theme->setFont(QQuickTheme::Menu, menuItemFont); - theme->setFont(QQuickTheme::MenuBar, menuItemFont); - theme->setFont(QQuickTheme::ComboBox, menuItemFont); - - editorFont.setPixelSize(dense ? 13 : 16); - theme->setFont(QQuickTheme::TextArea, editorFont); - theme->setFont(QQuickTheme::TextField, editorFont); - theme->setFont(QQuickTheme::SpinBox, editorFont); -} - -QT_END_NAMESPACE diff --git a/src/imports/controls/material/qquickmaterialtheme_p.h b/src/imports/controls/material/qquickmaterialtheme_p.h deleted file mode 100644 index 9a1362b8..00000000 --- a/src/imports/controls/material/qquickmaterialtheme_p.h +++ /dev/null @@ -1,65 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKMATERIALTHEME_P_H -#define QQUICKMATERIALTHEME_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include - -QT_BEGIN_NAMESPACE - -class QQuickTheme; - -class QQuickMaterialTheme -{ -public: - static void initialize(QQuickTheme *theme); -}; - -QT_END_NAMESPACE - -#endif // QQUICKMATERIALTHEME_P_H diff --git a/src/imports/controls/material/qt_attribution.json b/src/imports/controls/material/qt_attribution.json deleted file mode 100644 index 85fdadf9..00000000 --- a/src/imports/controls/material/qt_attribution.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "Id": "shadow_angular_material", - "Name": "Shadow values from Angular Material", - "QDocModule": "qtquickcontrols", - "QtUsage": "Used in the Material Style of Qt Quick Controls 2.", - "Files": "ElevationEffect.qml", - "Description": "Shadow values for the elevation effect.", - "Homepage": "https://angularjs.org/", - "License": "MIT License", - "LicenseId": "MIT", - "LicenseFile": "LICENSE_ANGULARJS.txt", - "Copyright": "Copyright (c) 2014-2016 Google, Inc" -} diff --git a/src/imports/controls/material/qtquickcontrols2materialstyleplugin.cpp b/src/imports/controls/material/qtquickcontrols2materialstyleplugin.cpp deleted file mode 100644 index c8e7ebbc..00000000 --- a/src/imports/controls/material/qtquickcontrols2materialstyleplugin.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickmaterialstyle_p.h" -#include "qquickmaterialtheme_p.h" - -#include -#include -#include - -extern void qml_register_types_QtQuick_Controls_Material(); - -QT_BEGIN_NAMESPACE - -class QtQuickControls2MaterialStylePlugin : public QQuickStylePlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) - -public: - QtQuickControls2MaterialStylePlugin(QObject *parent = nullptr); - - QString name() const override; - void initializeTheme(QQuickTheme *theme) override; - - QQuickMaterialTheme theme; -}; - -QtQuickControls2MaterialStylePlugin::QtQuickControls2MaterialStylePlugin(QObject *parent) : QQuickStylePlugin(parent) -{ - volatile auto registration = &qml_register_types_QtQuick_Controls_Material; - Q_UNUSED(registration); -} - -QString QtQuickControls2MaterialStylePlugin::name() const -{ - return QStringLiteral("Material"); -} - -void QtQuickControls2MaterialStylePlugin::initializeTheme(QQuickTheme *theme) -{ - QQuickMaterialStyle::initGlobals(); - this->theme.initialize(theme); -} - -QT_END_NAMESPACE - -#include "qtquickcontrols2materialstyleplugin.moc" diff --git a/src/imports/controls/material/qtquickcontrols2materialstyleplugin.qrc b/src/imports/controls/material/qtquickcontrols2materialstyleplugin.qrc deleted file mode 100644 index 981960c4..00000000 --- a/src/imports/controls/material/qtquickcontrols2materialstyleplugin.qrc +++ /dev/null @@ -1,20 +0,0 @@ - - - images/arrow-indicator.png - images/arrow-indicator@2x.png - images/arrow-indicator@3x.png - images/arrow-indicator@4x.png - images/check.png - images/check@2x.png - images/check@3x.png - images/check@4x.png - images/drop-indicator.png - images/drop-indicator@2x.png - images/drop-indicator@3x.png - images/drop-indicator@4x.png - shaders/RectangularGlow.frag - shaders/+glslcore/RectangularGlow.frag - shaders/+hlsl/RectangularGlow.frag - shaders/+qsb/RectangularGlow.frag - - diff --git a/src/imports/controls/material/shaders/+glslcore/RectangularGlow.frag b/src/imports/controls/material/shaders/+glslcore/RectangularGlow.frag deleted file mode 100644 index 432d86b5..00000000 --- a/src/imports/controls/material/shaders/+glslcore/RectangularGlow.frag +++ /dev/null @@ -1,25 +0,0 @@ -#version 150 - -uniform float qt_Opacity; -uniform float relativeSizeX; -uniform float relativeSizeY; -uniform float spread; -uniform vec4 color; - -in vec2 qt_TexCoord0; -out vec4 fragColor; - -float linearstep(float e0, float e1, float x) -{ - return clamp((x - e0) / (e1 - e0), 0.0, 1.0); -} - -void main() -{ - float alpha = - smoothstep(0.0, relativeSizeX, 0.5 - abs(0.5 - qt_TexCoord0.x)) * - smoothstep(0.0, relativeSizeY, 0.5 - abs(0.5 - qt_TexCoord0.y)); - - float spreadMultiplier = linearstep(spread, 1.0 - spread, alpha); - fragColor = color * qt_Opacity * spreadMultiplier * spreadMultiplier; -} diff --git a/src/imports/controls/material/shaders/+hlsl/RectangularGlow.frag b/src/imports/controls/material/shaders/+hlsl/RectangularGlow.frag deleted file mode 100644 index 69d9f852..00000000 --- a/src/imports/controls/material/shaders/+hlsl/RectangularGlow.frag +++ /dev/null @@ -1,21 +0,0 @@ -cbuffer ConstantBuffer : register(b0) -{ - float4x4 qt_Matrix; - float qt_Opacity; - float relativeSizeX; - float relativeSizeY; - float spread; - float4 color; -} - -float linearstep(float e0, float e1, float x) { return clamp((x - e0) / (e1 - e0), 0.0, 1.0); } - -float4 main(float4 position : SV_POSITION, float2 coord : TEXCOORD0) : SV_TARGET -{ - float alpha = - smoothstep(0.0, relativeSizeX, 0.5 - abs(0.5 - coord.x)) * - smoothstep(0.0, relativeSizeY, 0.5 - abs(0.5 - coord.y)); - - float spreadMultiplier = linearstep(spread, 1.0 - spread, alpha); - return color * qt_Opacity * spreadMultiplier * spreadMultiplier; -} diff --git a/src/imports/controls/material/shaders/+qsb/RectangularGlow.frag b/src/imports/controls/material/shaders/+qsb/RectangularGlow.frag deleted file mode 100644 index 5cfa2db6..00000000 Binary files a/src/imports/controls/material/shaders/+qsb/RectangularGlow.frag and /dev/null differ diff --git a/src/imports/controls/material/shaders/RectangularGlow.frag b/src/imports/controls/material/shaders/RectangularGlow.frag deleted file mode 100644 index 40bab580..00000000 --- a/src/imports/controls/material/shaders/RectangularGlow.frag +++ /dev/null @@ -1,19 +0,0 @@ -uniform highp float qt_Opacity; -uniform mediump float relativeSizeX; -uniform mediump float relativeSizeY; -uniform mediump float spread; -uniform lowp vec4 color; -varying highp vec2 qt_TexCoord0; - -highp float linearstep(highp float e0, highp float e1, highp float x) { - return clamp((x - e0) / (e1 - e0), 0.0, 1.0); -} - -void main() { - lowp float alpha = - smoothstep(0.0, relativeSizeX, 0.5 - abs(0.5 - qt_TexCoord0.x)) * - smoothstep(0.0, relativeSizeY, 0.5 - abs(0.5 - qt_TexCoord0.y)); - - highp float spreadMultiplier = linearstep(spread, 1.0 - spread, alpha); - gl_FragColor = color * qt_Opacity * spreadMultiplier * spreadMultiplier; -} diff --git a/src/imports/controls/material/shaders/RectangularGlow_rhi.frag b/src/imports/controls/material/shaders/RectangularGlow_rhi.frag deleted file mode 100644 index 3e7d2dfe..00000000 --- a/src/imports/controls/material/shaders/RectangularGlow_rhi.frag +++ /dev/null @@ -1,28 +0,0 @@ -#version 440 - -layout(location = 0) in vec2 qt_TexCoord0; -layout(location = 0) out vec4 fragColor; - -layout(std140, binding = 0) uniform buf { - mat4 qt_Matrix; - float qt_Opacity; - float relativeSizeX; - float relativeSizeY; - float spread; - vec4 color; -} ubuf; - -float linearstep(float e0, float e1, float x) -{ - return clamp((x - e0) / (e1 - e0), 0.0, 1.0); -} - -void main() -{ - float alpha = - smoothstep(0.0, ubuf.relativeSizeX, 0.5 - abs(0.5 - qt_TexCoord0.x)) * - smoothstep(0.0, ubuf.relativeSizeY, 0.5 - abs(0.5 - qt_TexCoord0.y)); - - float spreadMultiplier = linearstep(ubuf.spread, 1.0 - ubuf.spread, alpha); - fragColor = ubuf.color * ubuf.qt_Opacity * spreadMultiplier * spreadMultiplier; -} diff --git a/src/imports/controls/material/shaders/compile.bat b/src/imports/controls/material/shaders/compile.bat deleted file mode 100644 index e87efa7a..00000000 --- a/src/imports/controls/material/shaders/compile.bat +++ /dev/null @@ -1,40 +0,0 @@ -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -:: -:: Copyright (C) 2019 The Qt Company Ltd. -:: Contact: https://www.qt.io/licensing/ -:: -:: This file is part of the QtQuick module of the Qt Toolkit. -:: -:: $QT_BEGIN_LICENSE:LGPL$ -:: Commercial License Usage -:: Licensees holding valid commercial Qt licenses may use this file in -:: accordance with the commercial license agreement provided with the -:: Software or, alternatively, in accordance with the terms contained in -:: a written agreement between you and The Qt Company. For licensing terms -:: and conditions see https://www.qt.io/terms-conditions. For further -:: information use the contact form at https://www.qt.io/contact-us. -:: -:: GNU Lesser General Public License Usage -:: Alternatively, this file may be used under the terms of the GNU Lesser -:: General Public License version 3 as published by the Free Software -:: Foundation and appearing in the file LICENSE.LGPL3 included in the -:: packaging of this file. Please review the following information to -:: ensure the GNU Lesser General Public License version 3 requirements -:: will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -:: -:: GNU General Public License Usage -:: Alternatively, this file may be used under the terms of the GNU -:: General Public License version 2.0 or (at your option) the GNU General -:: Public license version 3 or any later version approved by the KDE Free -:: Qt Foundation. The licenses are as published by the Free Software -:: Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -:: included in the packaging of this file. Please review the following -:: information to ensure the GNU General Public License requirements will -:: be met: https://www.gnu.org/licenses/gpl-2.0.html and -:: https://www.gnu.org/licenses/gpl-3.0.html. -:: -:: $QT_END_LICENSE$ -:: -::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - -qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -o +qsb/RectangularGlow.frag RectangularGlow_rhi.frag diff --git a/src/imports/controls/qtquickcontrols2plugin.cpp b/src/imports/controls/qtquickcontrols2plugin.cpp deleted file mode 100644 index fcd025e0..00000000 --- a/src/imports/controls/qtquickcontrols2plugin.cpp +++ /dev/null @@ -1,167 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -Q_LOGGING_CATEGORY(lcQtQuickControls2Plugin, "qt.quick.controls.qtquickcontrols2plugin") - -class QtQuickControls2Plugin : public QQmlExtensionPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) - -public: - QtQuickControls2Plugin(QObject *parent = nullptr); - ~QtQuickControls2Plugin(); - - void registerTypes(const char *uri) override; - void unregisterTypes() override; - -private: - // We store these because the style plugins can be unregistered before - // QtQuickControls2Plugin, and since QQuickStylePlugin calls QQuickStylePrivate::reset(), - // the style information can be lost when it comes time to call qmlUnregisterModuleImport(). - // It also avoids unnecessarily resolving the style after resetting it just to get the style - // name in unregisterTypes(). - bool customStyle = false; - QString registeredStyleUri; - QString registeredFallbackStyleUri; -}; - -static const char *qtQuickControlsUri = "QtQuick.Controls"; - -QString styleUri() -{ - const QString style = QQuickStyle::name(); - if (!QQuickStylePrivate::isCustomStyle()) { - // The style set is a built-in style. - const QString styleName = QQuickStylePrivate::effectiveStyleName(style); - return QString::fromLatin1("QtQuick.Controls.%1").arg(styleName); - } - - // This is a custom style, so just use the name as the import uri. - QString styleName = style; - if (styleName.startsWith(QLatin1String(":/"))) - styleName.remove(0, 2); - return styleName; -} - -QString fallbackStyleUri() -{ - // The fallback style must be a built-in style, so we don't need to check for custom styles here. - const QString fallbackStyle = QQuickStylePrivate::fallbackStyle(); - const QString fallbackStyleName = QQuickStylePrivate::effectiveStyleName(fallbackStyle); - return QString::fromLatin1("QtQuick.Controls.%1").arg(fallbackStyleName); -} - -QtQuickControls2Plugin::QtQuickControls2Plugin(QObject *parent) : QQmlExtensionPlugin(parent) -{ - volatile auto registration = &qml_register_types_QtQuick_Controls; - Q_UNUSED(registration); -} - -QtQuickControls2Plugin::~QtQuickControls2Plugin() -{ - // Intentionally empty: we use register/unregisterTypes() to do - // initialization and cleanup, as plugins are not unloaded on macOS. -} - -void QtQuickControls2Plugin::registerTypes(const char *uri) -{ - qCDebug(lcQtQuickControls2Plugin) << "registerTypes() called with uri" << uri; - - // It's OK that the style is resolved more than once; some accessors like name() cause it to be called, for example. - QQuickStylePrivate::init(); - - const QString styleName = QQuickStylePrivate::effectiveStyleName(QQuickStyle::name()); - const QString fallbackStyleName = QQuickStylePrivate::effectiveStyleName(QQuickStylePrivate::fallbackStyle()); - qCDebug(lcQtQuickControls2Plugin) << "style:" << QQuickStyle::name() << "effective style:" << styleName - << "fallback style:" << QQuickStylePrivate::fallbackStyle() << "effective fallback style:" << fallbackStyleName; - - // If the style is Basic, we don't need to register the fallback because the Basic style - // provides all controls. Also, if we didn't return early here, we can get an infinite import loop - // when the style is set to Basic. - if (styleName != fallbackStyleName && styleName != QLatin1String("Basic")) { - registeredFallbackStyleUri = ::fallbackStyleUri(); - qCDebug(lcQtQuickControls2Plugin) << "calling qmlRegisterModuleImport() to register fallback style with" - << " uri \"" << qtQuickControlsUri << "\" moduleMajor" << QQmlModuleImportModuleAny - << "import" << registeredFallbackStyleUri << "importMajor" << QQmlModuleImportAuto; - // The fallback style must be a built-in style, so we match the version number. - qmlRegisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, registeredFallbackStyleUri.toUtf8().constData(), - QQmlModuleImportAuto, QQmlModuleImportAuto); - } - - // If the user imports QtQuick.Controls 2.15, and they're using the Material style, we should import version 2.15. - // However, if they import QtQuick.Controls 2.15, but are using a custom style, we want to use the latest version - // number of their style. - customStyle = QQuickStylePrivate::isCustomStyle(); - registeredStyleUri = ::styleUri(); - const int importMajor = !customStyle ? QQmlModuleImportAuto : QQmlModuleImportLatest; - qCDebug(lcQtQuickControls2Plugin).nospace() << "calling qmlRegisterModuleImport() to register primary style with" - << " uri \"" << qtQuickControlsUri << "\" moduleMajor " << importMajor - << " import " << registeredStyleUri << " importMajor " << importMajor; - qmlRegisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, registeredStyleUri.toUtf8().constData(), importMajor); -} - -void QtQuickControls2Plugin::unregisterTypes() -{ - qCDebug(lcQtQuickControls2Plugin) << "unregisterTypes() called"; - - if (!registeredFallbackStyleUri.isEmpty()) { - // We registered a fallback style, so now we need to unregister it. - qmlUnregisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, registeredFallbackStyleUri.toUtf8().constData(), - QQmlModuleImportAuto, QQmlModuleImportAuto); - registeredFallbackStyleUri.clear(); - } - - const int importMajor = !customStyle ? QQmlModuleImportAuto : QQmlModuleImportLatest; - qmlUnregisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, registeredStyleUri.toUtf8().constData(), importMajor); - customStyle = false; - registeredStyleUri.clear(); -} - -QT_END_NAMESPACE - -#include "qtquickcontrols2plugin.moc" diff --git a/src/imports/controls/universal/ApplicationWindow.qml b/src/imports/controls/universal/ApplicationWindow.qml deleted file mode 100644 index 2ec9c565..00000000 --- a/src/imports/controls/universal/ApplicationWindow.qml +++ /dev/null @@ -1,54 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Window -import QtQuick.Templates as T -import QtQuick.Controls.Universal -import QtQuick.Controls.Universal.impl - -T.ApplicationWindow { - id: window - - color: Universal.background - - FocusRectangle { - parent: window.activeFocusControl - width: parent ? parent.width : 0 - height: parent ? parent.height : 0 - visible: parent && !!parent.useSystemFocusVisuals && !!parent.visualFocus - } -} diff --git a/src/imports/controls/universal/BusyIndicator.qml b/src/imports/controls/universal/BusyIndicator.qml deleted file mode 100644 index 0bd3ca03..00000000 --- a/src/imports/controls/universal/BusyIndicator.qml +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal -import QtQuick.Controls.Universal.impl - -T.BusyIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - contentItem: BusyIndicatorImpl { - implicitWidth: 20 - implicitHeight: 20 - - readonly property real size: Math.min(control.availableWidth, control.availableHeight) - - count: size < 60 ? 5 : 6 // "Small" vs. "Large" - color: control.Universal.accent - visible: control.running - } -} diff --git a/src/imports/controls/universal/Button.qml b/src/imports/controls/universal/Button.qml deleted file mode 100644 index 18a82e17..00000000 --- a/src/imports/controls/universal/Button.qml +++ /dev/null @@ -1,89 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.Button { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 8 - verticalPadding: padding - 4 - spacing: 8 - - icon.width: 20 - icon.height: 20 - icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) - - property bool useSystemFocusVisuals: true - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) - } - - background: Rectangle { - implicitWidth: 32 - implicitHeight: 32 - - visible: !control.flat || control.down || control.checked || control.highlighted - color: control.down ? control.Universal.baseMediumLowColor : - control.enabled && (control.highlighted || control.checked) ? control.Universal.accent : - control.Universal.baseLowColor - - Rectangle { - width: parent.width - height: parent.height - color: "transparent" - visible: control.hovered - border.width: 2 // ButtonBorderThemeThickness - border.color: control.Universal.baseMediumLowColor - } - } -} diff --git a/src/imports/controls/universal/CMakeLists.txt b/src/imports/controls/universal/CMakeLists.txt deleted file mode 100644 index af7cde66..00000000 --- a/src/imports/controls/universal/CMakeLists.txt +++ /dev/null @@ -1,278 +0,0 @@ -# Generated from universal.pro. - -##################################################################### -## qtquickcontrols2universalstyleplugin Plugin: -##################################################################### - -qt_internal_add_qml_module(qtquickcontrols2universalstyleplugin - URI "QtQuick.Controls.Universal" - VERSION "${PROJECT_VERSION}" - CLASSNAME QtQuickControls2UniversalStylePlugin - IMPORTS - QtQuick.Controls.Basic/auto - GENERATE_QMLTYPES - INSTALL_QMLTYPES - SOURCES - qquickuniversalstyle.cpp qquickuniversalstyle_p.h - qquickuniversaltheme.cpp qquickuniversaltheme_p.h - qtquickcontrols2universalstyleplugin.cpp - DEFINES - QT_NO_CAST_FROM_ASCII - QT_NO_CAST_TO_ASCII - LIBRARIES - Qt::CorePrivate - Qt::GuiPrivate - Qt::QmlPrivate - Qt::QuickControls2ImplPrivate - Qt::QuickControls2Private - Qt::QuickPrivate - Qt::QuickTemplates2Private - PUBLIC_LIBRARIES - Qt::Core - Qt::Gui - Qt::Qml - Qt::Quick -) - -# Resources: -set(qtquickcontrols2universalstyleplugin_resource_files - "images/checkmark.png" - "images/checkmark@2x.png" - "images/checkmark@3x.png" - "images/checkmark@4x.png" - "images/downarrow.png" - "images/downarrow@2x.png" - "images/downarrow@3x.png" - "images/downarrow@4x.png" - "images/leftarrow.png" - "images/leftarrow@2x.png" - "images/leftarrow@3x.png" - "images/leftarrow@4x.png" - "images/rightarrow.png" - "images/rightarrow@2x.png" - "images/rightarrow@3x.png" - "images/rightarrow@4x.png" -) - -qt_internal_add_resource(qtquickcontrols2universalstyleplugin "qtquickcontrols2universalstyleplugin" - PREFIX - "/qt-project.org/imports/QtQuick/Controls/Universal" - FILES - ${qtquickcontrols2universalstyleplugin_resource_files} -) - - -#### Keys ignored in scope 1:.:.:universal.pro:: -# OTHER_FILES = "qmldir" "$$QML_FILES" -# QML_IMPORT_NAME = "QtQuick.Controls.Universal" -# QML_IMPORT_VERSION = "$$QT_VERSION" -# TARGETPATH = "QtQuick/Controls/Universal" -# _REQUIREMENTS = "qtConfig(quickcontrols2-universal)" - -set(qml_files - "ApplicationWindow.qml" - "BusyIndicator.qml" - "Button.qml" - "CheckBox.qml" - "CheckDelegate.qml" - "ComboBox.qml" - "DelayButton.qml" - "Dial.qml" - "Dialog.qml" - "DialogButtonBox.qml" - "Drawer.qml" - "Frame.qml" - "GroupBox.qml" - "HorizontalHeaderView.qml" - "ItemDelegate.qml" - "Label.qml" - "Menu.qml" - "MenuBar.qml" - "MenuBarItem.qml" - "MenuItem.qml" - "MenuSeparator.qml" - "Page.qml" - "PageIndicator.qml" - "Pane.qml" - "Popup.qml" - "ProgressBar.qml" - "RadioButton.qml" - "RadioDelegate.qml" - "RangeSlider.qml" - "RoundButton.qml" - "ScrollView.qml" - "ScrollBar.qml" - "ScrollIndicator.qml" - "Slider.qml" - "SpinBox.qml" - "SplitView.qml" - "StackView.qml" - "SwipeDelegate.qml" - "SwitchDelegate.qml" - "Switch.qml" - "TabBar.qml" - "TabButton.qml" - "TextArea.qml" - "TextField.qml" - "ToolBar.qml" - "ToolButton.qml" - "ToolSeparator.qml" - "ToolTip.qml" - "Tumbler.qml" - "VerticalHeaderView.qml" -) -set_source_files_properties(ApplicationWindow.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(BusyIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Button.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(CheckBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(CheckDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ComboBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(DelayButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.2;6.0" -) -set_source_files_properties(Dial.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Dialog.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(DialogButtonBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(Drawer.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Frame.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(GroupBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(HorizontalHeaderView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.15;6.0" -) -set_source_files_properties(ItemDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Label.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Menu.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(MenuBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.3;6.0" -) -set_source_files_properties(MenuBarItem.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.3;6.0" -) -set_source_files_properties(MenuItem.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(MenuSeparator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(Page.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(PageIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Pane.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Popup.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ProgressBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(RadioButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(RadioDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(RangeSlider.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(RoundButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(ScrollView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ScrollBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ScrollIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Slider.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SpinBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SplitView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.13;6.0" -) -set_source_files_properties(StackView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SwipeDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SwitchDelegate.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Switch.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TabBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TabButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TextArea.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TextField.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ToolBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ToolButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ToolSeparator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.1;6.0" -) -set_source_files_properties(ToolTip.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Tumbler.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(VerticalHeaderView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.15;6.0" -) - -qt6_target_qml_files(qtquickcontrols2universalstyleplugin - FILES - ${qml_files} -) diff --git a/src/imports/controls/universal/CheckBox.qml b/src/imports/controls/universal/CheckBox.qml deleted file mode 100644 index ff35d372..00000000 --- a/src/imports/controls/universal/CheckBox.qml +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal -import QtQuick.Controls.Universal.impl - -T.CheckBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 8 - - property bool useSystemFocusVisuals: true - - indicator: CheckIndicator { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - - opacity: enabled ? 1.0 : 0.2 - color: control.Universal.foreground - } -} diff --git a/src/imports/controls/universal/CheckDelegate.qml b/src/imports/controls/universal/CheckDelegate.qml deleted file mode 100644 index 8e455a56..00000000 --- a/src/imports/controls/universal/CheckDelegate.qml +++ /dev/null @@ -1,96 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal -import QtQuick.Controls.Universal.impl - -T.CheckDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 - - padding: 12 - topPadding: padding - 1 - bottomPadding: padding + 1 - - icon.width: 20 - icon.height: 20 - icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) - - indicator: CheckIndicator { - x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: IconLabel { - leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing - rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) - } - - background: Rectangle { - visible: control.down || control.highlighted || control.visualFocus || control.hovered - color: control.down ? control.Universal.listMediumColor : - control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor - Rectangle { - width: parent.width - height: parent.height - visible: control.visualFocus || control.highlighted - color: control.Universal.accent - opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 - } - - } -} diff --git a/src/imports/controls/universal/ComboBox.qml b/src/imports/controls/universal/ComboBox.qml deleted file mode 100644 index b3179849..00000000 --- a/src/imports/controls/universal/ComboBox.qml +++ /dev/null @@ -1,158 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Window -import QtQuick.Controls.impl -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.ComboBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) - rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) - - Universal.theme: editable && activeFocus ? Universal.Light : undefined - - delegate: ItemDelegate { - width: ListView.view.width - text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData - font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal - highlighted: control.highlightedIndex === index - hoverEnabled: control.hoverEnabled - } - - indicator: ColorImage { - x: control.mirrored ? control.padding : control.width - width - control.padding - y: control.topPadding + (control.availableHeight - height) / 2 - color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseMediumHighColor - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/downarrow.png" - - Rectangle { - z: -1 - width: parent.width - height: parent.height - color: control.activeFocus ? control.Universal.accent : - control.pressed ? control.Universal.baseMediumLowColor : - control.hovered ? control.Universal.baseLowColor : "transparent" - visible: control.editable && !contentItem.hovered && (control.pressed || control.hovered) - opacity: control.activeFocus && !control.pressed ? 0.4 : 1.0 - } - } - - contentItem: T.TextField { - leftPadding: control.mirrored ? 1 : 12 - rightPadding: control.mirrored ? 10 : 1 - topPadding: 5 - control.topPadding - bottomPadding: 7 - control.bottomPadding - - text: control.editable ? control.editText : control.displayText - - enabled: control.editable - autoScroll: control.editable - readOnly: control.down - inputMethodHints: control.inputMethodHints - validator: control.validator - selectByMouse: control.selectTextByMouse - - font: control.font - color: !control.enabled ? control.Universal.chromeDisabledLowColor : - control.editable && control.activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.foreground - selectionColor: control.Universal.accent - selectedTextColor: control.Universal.chromeWhiteColor - verticalAlignment: Text.AlignVCenter - } - - background: Rectangle { - implicitWidth: 120 - implicitHeight: 32 - - border.width: control.flat ? 0 : 2 // ComboBoxBorderThemeThickness - border.color: !control.enabled ? control.Universal.baseLowColor : - control.editable && control.activeFocus ? control.Universal.accent : - control.down ? control.Universal.baseMediumLowColor : - control.hovered ? control.Universal.baseMediumColor : control.Universal.baseMediumLowColor - color: !control.enabled ? control.Universal.baseLowColor : - control.down ? control.Universal.listMediumColor : - control.flat && control.hovered ? control.Universal.listLowColor : - control.editable && control.activeFocus ? control.Universal.background : control.Universal.altMediumLowColor - visible: !control.flat || control.pressed || control.hovered || control.visualFocus - - Rectangle { - x: 2 - y: 2 - width: parent.width - 4 - height: parent.height - 4 - - visible: control.visualFocus && !control.editable - color: control.Universal.accent - opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 - } - } - - popup: T.Popup { - width: control.width - height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin) - topMargin: 8 - bottomMargin: 8 - - Universal.theme: control.Universal.theme - Universal.accent: control.Universal.accent - - contentItem: ListView { - clip: true - implicitHeight: contentHeight - model: control.delegateModel - currentIndex: control.highlightedIndex - highlightMoveDuration: 0 - - T.ScrollIndicator.vertical: ScrollIndicator { } - } - - background: Rectangle { - color: control.Universal.chromeMediumLowColor - border.color: control.Universal.chromeHighColor - border.width: 1 // FlyoutBorderThemeThickness - } - } -} diff --git a/src/imports/controls/universal/DelayButton.qml b/src/imports/controls/universal/DelayButton.qml deleted file mode 100644 index 5840fa86..00000000 --- a/src/imports/controls/universal/DelayButton.qml +++ /dev/null @@ -1,94 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.DelayButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 8 - verticalPadding: padding - 4 - - property bool useSystemFocusVisuals: true - - transition: Transition { - NumberAnimation { - duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress) - } - } - - contentItem: Text { - text: control.text - font: control.font - elide: Text.ElideRight - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - - opacity: enabled ? 1.0 : 0.2 - color: control.Universal.foreground - } - - background: Rectangle { - implicitWidth: 32 - implicitHeight: 32 - - color: control.down ? control.Universal.baseMediumLowColor : - control.enabled && control.checked ? control.Universal.accent : control.Universal.baseLowColor - - Rectangle { - visible: !control.checked - width: parent.width * control.progress - height: parent.height - color: control.Universal.accent - } - - Rectangle { - width: parent.width - height: parent.height - color: "transparent" - visible: control.hovered - border.width: 2 // ButtonBorderThemeThickness - border.color: control.Universal.baseMediumLowColor - } - } -} diff --git a/src/imports/controls/universal/Dial.qml b/src/imports/controls/universal/Dial.qml deleted file mode 100644 index cd9e615e..00000000 --- a/src/imports/controls/universal/Dial.qml +++ /dev/null @@ -1,86 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.Dial { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 100 - - x: control.width / 2 - width / 2 - y: control.height / 2 - height / 2 - width: Math.max(64, Math.min(control.width, control.height)) - height: width - radius: width / 2 - color: "transparent" - border.color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseMediumColor - border.width: 2 - } - - handle: Rectangle { - implicitWidth: 14 - implicitHeight: 14 - - x: control.background.x + control.background.width / 2 - width / 2 - y: control.background.y + control.background.height / 2 - height / 2 - - radius: width / 2 - color: !control.enabled ? control.Universal.baseLowColor : - control.pressed ? control.Universal.baseMediumColor : - control.hovered ? control.Universal.baseHighColor : control.Universal.baseMediumHighColor - - transform: [ - Translate { - y: -control.background.height * 0.4 + control.handle.height / 2 - }, - Rotation { - angle: control.angle - origin.x: control.handle.width / 2 - origin.y: control.handle.height / 2 - } - ] - } -} diff --git a/src/imports/controls/universal/Dialog.qml b/src/imports/controls/universal/Dialog.qml deleted file mode 100644 index 3cebf7f0..00000000 --- a/src/imports/controls/universal/Dialog.qml +++ /dev/null @@ -1,90 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.Dialog { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - padding: 24 - verticalPadding: 18 - - background: Rectangle { - color: control.Universal.chromeMediumLowColor - border.color: control.Universal.chromeHighColor - border.width: 1 // FlyoutBorderThemeThickness - } - - header: Label { - text: control.title - visible: control.title - elide: Label.ElideRight - topPadding: 18 - leftPadding: 24 - rightPadding: 24 - // TODO: QPlatformTheme::TitleBarFont - font.pixelSize: 20 - background: Rectangle { - x: 1; y: 1 // // FlyoutBorderThemeThickness - color: control.Universal.chromeMediumLowColor - width: parent.width - 2 - height: parent.height - 1 - } - } - - footer: DialogButtonBox { - visible: count > 0 - } - - T.Overlay.modal: Rectangle { - color: control.Universal.baseLowColor - } - - T.Overlay.modeless: Rectangle { - color: control.Universal.baseLowColor - } -} diff --git a/src/imports/controls/universal/DialogButtonBox.qml b/src/imports/controls/universal/DialogButtonBox.qml deleted file mode 100644 index 811c12f7..00000000 --- a/src/imports/controls/universal/DialogButtonBox.qml +++ /dev/null @@ -1,75 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.DialogButtonBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - (control.count === 1 ? implicitContentWidth * 2 : implicitContentWidth) + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - contentWidth: contentItem.contentWidth - - spacing: 4 - padding: 24 - topPadding: position === T.DialogButtonBox.Footer ? 6 : 24 - bottomPadding: position === T.DialogButtonBox.Header ? 6 : 24 - alignment: count === 1 ? Qt.AlignRight : undefined - - delegate: Button { - width: control.count === 1 ? control.availableWidth / 2 : undefined - } - - contentItem: ListView { - model: control.contentModel - spacing: control.spacing - orientation: ListView.Horizontal - boundsBehavior: Flickable.StopAtBounds - snapMode: ListView.SnapToItem - } - - background: Rectangle { - implicitHeight: 32 - color: control.Universal.chromeMediumLowColor - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - } -} diff --git a/src/imports/controls/universal/Drawer.qml b/src/imports/controls/universal/Drawer.qml deleted file mode 100644 index 19f78f1e..00000000 --- a/src/imports/controls/universal/Drawer.qml +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.Drawer { - id: control - - parent: T.Overlay.overlay - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - topPadding: control.edge === Qt.BottomEdge - leftPadding: control.edge === Qt.RightEdge - rightPadding: control.edge === Qt.LeftEdge - bottomPadding: control.edge === Qt.TopEdge - - enter: Transition { SmoothedAnimation { velocity: 5 } } - exit: Transition { SmoothedAnimation { velocity: 5 } } - - background: Rectangle { - color: control.Universal.chromeMediumLowColor - Rectangle { - readonly property bool horizontal: control.edge === Qt.LeftEdge || control.edge === Qt.RightEdge - width: horizontal ? 1 : parent.width - height: horizontal ? parent.height : 1 - color: control.Universal.chromeHighColor - x: control.edge === Qt.LeftEdge ? parent.width - 1 : 0 - y: control.edge === Qt.TopEdge ? parent.height - 1 : 0 - } - } - - T.Overlay.modal: Rectangle { - color: control.Universal.baseLowColor - } - - T.Overlay.modeless: Rectangle { - color: control.Universal.baseLowColor - } -} diff --git a/src/imports/controls/universal/Frame.qml b/src/imports/controls/universal/Frame.qml deleted file mode 100644 index 780ba734..00000000 --- a/src/imports/controls/universal/Frame.qml +++ /dev/null @@ -1,55 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.Frame { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 12 - - background: Rectangle { - color: "transparent" - border.color: control.Universal.chromeDisabledLowColor - } -} diff --git a/src/imports/controls/universal/GroupBox.qml b/src/imports/controls/universal/GroupBox.qml deleted file mode 100644 index 5104b710..00000000 --- a/src/imports/controls/universal/GroupBox.qml +++ /dev/null @@ -1,75 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.GroupBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitLabelWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - spacing: 12 - padding: 12 - topPadding: padding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) - - label: Text { - x: control.leftPadding - width: control.availableWidth - - text: control.title - font: control.font - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - - opacity: enabled ? 1.0 : 0.2 - color: control.Universal.foreground - } - - background: Rectangle { - y: control.topPadding - control.bottomPadding - width: parent.width - height: parent.height - control.topPadding + control.bottomPadding - - color: "transparent" - border.color: control.Universal.chromeDisabledLowColor - } -} diff --git a/src/imports/controls/universal/HorizontalHeaderView.qml b/src/imports/controls/universal/HorizontalHeaderView.qml deleted file mode 100644 index 0bf88ebc..00000000 --- a/src/imports/controls/universal/HorizontalHeaderView.qml +++ /dev/null @@ -1,69 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T -import QtQuick.Controls.Universal -import QtQuick.Controls.Universal.impl - -T.HorizontalHeaderView { - id: control - - implicitWidth: syncView ? syncView.width : 0 - implicitHeight: contentHeight - - delegate: Rectangle { - // Qt6: add cellPadding (and font etc) as public API in headerview - readonly property real cellPadding: 8 - - implicitWidth: text.implicitWidth + (cellPadding * 2) - implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2)) - color: control.Universal.background - - Text { - id: text - text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] - : model[control.textRole]) - : modelData - width: parent.width - height: parent.height - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) - } - } -} diff --git a/src/imports/controls/universal/ItemDelegate.qml b/src/imports/controls/universal/ItemDelegate.qml deleted file mode 100644 index 50fa0af9..00000000 --- a/src/imports/controls/universal/ItemDelegate.qml +++ /dev/null @@ -1,86 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.ItemDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 - - padding: 12 - topPadding: padding - 1 - bottomPadding: padding + 1 - - icon.width: 20 - icon.height: 20 - icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) - } - - background: Rectangle { - visible: control.down || control.highlighted || control.visualFocus || control.hovered - color: control.down ? control.Universal.listMediumColor : - control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor - Rectangle { - width: parent.width - height: parent.height - visible: control.visualFocus || control.highlighted - color: control.Universal.accent - opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 - } - - } -} diff --git a/src/imports/controls/universal/Label.qml b/src/imports/controls/universal/Label.qml deleted file mode 100644 index 9460c997..00000000 --- a/src/imports/controls/universal/Label.qml +++ /dev/null @@ -1,47 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.Label { - id: control - - opacity: enabled ? 1.0 : 0.2 - color: control.Universal.foreground - linkColor: Universal.accent -} diff --git a/src/imports/controls/universal/Menu.qml b/src/imports/controls/universal/Menu.qml deleted file mode 100644 index c4723f32..00000000 --- a/src/imports/controls/universal/Menu.qml +++ /dev/null @@ -1,82 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal -import QtQuick.Window - -T.Menu { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - margins: 0 - overlap: 1 - - delegate: MenuItem { } - - contentItem: ListView { - implicitHeight: contentHeight - model: control.contentModel - interactive: Window.window - ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height - : false - clip: true - currentIndex: control.currentIndex - - ScrollIndicator.vertical: ScrollIndicator {} - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 40 - color: control.Universal.chromeMediumLowColor - border.color: control.Universal.chromeHighColor - border.width: 1 // FlyoutBorderThemeThickness - } - - T.Overlay.modal: Rectangle { - color: control.Universal.baseLowColor - } - - T.Overlay.modeless: Rectangle { - color: control.Universal.baseLowColor - } -} diff --git a/src/imports/controls/universal/MenuBar.qml b/src/imports/controls/universal/MenuBar.qml deleted file mode 100644 index 2ab58919..00000000 --- a/src/imports/controls/universal/MenuBar.qml +++ /dev/null @@ -1,63 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.MenuBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - delegate: MenuBarItem { } - - contentItem: Row { - spacing: control.spacing - Repeater { - model: control.contentModel - } - } - - background: Rectangle { - implicitHeight: 40 - color: control.Universal.chromeMediumColor - } -} diff --git a/src/imports/controls/universal/MenuBarItem.qml b/src/imports/controls/universal/MenuBarItem.qml deleted file mode 100644 index 786be132..00000000 --- a/src/imports/controls/universal/MenuBarItem.qml +++ /dev/null @@ -1,90 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.MenuBarItem { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 12 - topPadding: padding - 1 - bottomPadding: padding + 1 - spacing: 12 - - icon.width: 20 - icon.height: 20 - icon.color: !enabled ? Universal.baseLowColor : Universal.baseHighColor - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor - } - - background: Rectangle { - implicitWidth: 40 - implicitHeight: 40 - - color: !control.enabled ? control.Universal.baseLowColor : - control.down ? control.Universal.listMediumColor : - control.highlighted ? control.Universal.listLowColor : "transparent" - - Rectangle { - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - - visible: control.visualFocus - color: control.Universal.accent - opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 - } - } -} diff --git a/src/imports/controls/universal/MenuItem.qml b/src/imports/controls/universal/MenuItem.qml deleted file mode 100644 index 8287b0a8..00000000 --- a/src/imports/controls/universal/MenuItem.qml +++ /dev/null @@ -1,114 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.MenuItem { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 12 - topPadding: padding - 1 - bottomPadding: padding + 1 - spacing: 12 - - icon.width: 20 - icon.height: 20 - icon.color: !enabled ? Universal.baseLowColor : Universal.baseHighColor - - contentItem: IconLabel { - readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0 - readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0 - leftPadding: !control.mirrored ? indicatorPadding : arrowPadding - rightPadding: control.mirrored ? indicatorPadding : arrowPadding - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor - } - - arrow: ColorImage { - x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding - y: control.topPadding + (control.availableHeight - height) / 2 - - visible: control.subMenu - mirror: control.mirrored - color: !enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/rightarrow.png" - } - - indicator: ColorImage { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - - visible: control.checked - color: !control.enabled ? control.Universal.baseLowColor : control.down ? control.Universal.baseHighColor : control.Universal.baseMediumHighColor - source: !control.checkable ? "" : "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/checkmark.png" - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 40 - - color: !control.enabled ? control.Universal.baseLowColor : - control.down ? control.Universal.listMediumColor : - control.highlighted ? control.Universal.listLowColor : control.Universal.altMediumLowColor - - Rectangle { - x: 1; y: 1 - width: parent.width - 2 - height: parent.height - 2 - - visible: control.visualFocus - color: control.Universal.accent - opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 - } - } -} diff --git a/src/imports/controls/universal/MenuSeparator.qml b/src/imports/controls/universal/MenuSeparator.qml deleted file mode 100644 index be6fad45..00000000 --- a/src/imports/controls/universal/MenuSeparator.qml +++ /dev/null @@ -1,62 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.MenuSeparator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 12 - topPadding: 9 - bottomPadding: 10 - - contentItem: Rectangle { - implicitWidth: 188 - implicitHeight: 1 - color: control.Universal.baseMediumLowColor - } - - background: Rectangle { - color: control.Universal.altMediumLowColor - } -} diff --git a/src/imports/controls/universal/Page.qml b/src/imports/controls/universal/Page.qml deleted file mode 100644 index 8946e7ad..00000000 --- a/src/imports/controls/universal/Page.qml +++ /dev/null @@ -1,56 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.Page { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitHeaderWidth, - implicitFooterWidth) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding - + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) - + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) - - background: Rectangle { - color: control.Universal.background - } -} diff --git a/src/imports/controls/universal/PageIndicator.qml b/src/imports/controls/universal/PageIndicator.qml deleted file mode 100644 index 2adb85c6..00000000 --- a/src/imports/controls/universal/PageIndicator.qml +++ /dev/null @@ -1,69 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.PageIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 7 - - delegate: Rectangle { - implicitWidth: 5 - implicitHeight: 5 - - radius: width / 2 - color: index === control.currentIndex ? control.Universal.baseMediumHighColor : - pressed ? control.Universal.baseMediumLowColor : control.Universal.baseLowColor - } - - contentItem: Row { - spacing: control.spacing - - Repeater { - model: control.count - delegate: control.delegate - } - } -} diff --git a/src/imports/controls/universal/Pane.qml b/src/imports/controls/universal/Pane.qml deleted file mode 100644 index 257f9caf..00000000 --- a/src/imports/controls/universal/Pane.qml +++ /dev/null @@ -1,54 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.Pane { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 12 - - background: Rectangle { - color: control.Universal.background - } -} diff --git a/src/imports/controls/universal/Popup.qml b/src/imports/controls/universal/Popup.qml deleted file mode 100644 index 5e972ea9..00000000 --- a/src/imports/controls/universal/Popup.qml +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.Popup { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - padding: 12 - - background: Rectangle { - color: control.Universal.chromeMediumLowColor - border.color: control.Universal.chromeHighColor - border.width: 1 // FlyoutBorderThemeThickness - } - - T.Overlay.modal: Rectangle { - color: control.Universal.baseLowColor - } - - T.Overlay.modeless: Rectangle { - color: control.Universal.baseLowColor - } -} diff --git a/src/imports/controls/universal/ProgressBar.qml b/src/imports/controls/universal/ProgressBar.qml deleted file mode 100644 index 4f8cc874..00000000 --- a/src/imports/controls/universal/ProgressBar.qml +++ /dev/null @@ -1,68 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal -import QtQuick.Controls.Universal.impl - -T.ProgressBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - contentItem: ProgressBarImpl { - implicitHeight: 10 - - scale: control.mirrored ? -1 : 1 - color: control.Universal.accent - progress: control.position - indeterminate: control.visible && control.indeterminate - } - - background: Rectangle { - implicitWidth: 100 - implicitHeight: 10 - y: (control.height - height) / 2 - height: 10 - - visible: !control.indeterminate - color: control.Universal.baseLowColor - } -} diff --git a/src/imports/controls/universal/README.md b/src/imports/controls/universal/README.md deleted file mode 100644 index 8d02d18b..00000000 --- a/src/imports/controls/universal/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Universal Style - -This style is based on the [Microsoft Universal Design Guidelines](https://dev.windows.com/design). - -The colors and metrics used all around the QML and C++ files originate from the Windows 10 SDK. The files are called **generic.xaml** and **themeresources.xml**, and they are located in the following folder: - - \(Program Files)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\\Generic - -See also [XAML theme resources](https://msdn.microsoft.com/en-us/library/windows/apps/mt187274.aspx). diff --git a/src/imports/controls/universal/RadioButton.qml b/src/imports/controls/universal/RadioButton.qml deleted file mode 100644 index abd386ce..00000000 --- a/src/imports/controls/universal/RadioButton.qml +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal -import QtQuick.Controls.Universal.impl - -T.RadioButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 8 - - property bool useSystemFocusVisuals: true - - indicator: RadioIndicator { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - - opacity: enabled ? 1.0 : 0.2 - color: control.Universal.foreground - } -} diff --git a/src/imports/controls/universal/RadioDelegate.qml b/src/imports/controls/universal/RadioDelegate.qml deleted file mode 100644 index fda2560d..00000000 --- a/src/imports/controls/universal/RadioDelegate.qml +++ /dev/null @@ -1,96 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal -import QtQuick.Controls.Universal.impl - -T.RadioDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 - - padding: 12 - topPadding: padding - 1 - bottomPadding: padding + 1 - - icon.width: 20 - icon.height: 20 - icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) - - indicator: RadioIndicator { - x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: IconLabel { - leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing - rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) - } - - background: Rectangle { - visible: control.down || control.highlighted || control.visualFocus || control.hovered - color: control.down ? control.Universal.listMediumColor : - control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor - Rectangle { - width: parent.width - height: parent.height - visible: control.visualFocus || control.highlighted - color: control.Universal.accent - opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 - } - - } -} diff --git a/src/imports/controls/universal/RangeSlider.qml b/src/imports/controls/universal/RangeSlider.qml deleted file mode 100644 index 5bdc4d8f..00000000 --- a/src/imports/controls/universal/RangeSlider.qml +++ /dev/null @@ -1,109 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.RangeSlider { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - first.implicitHandleWidth + leftPadding + rightPadding, - second.implicitHandleWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - first.implicitHandleHeight + topPadding + bottomPadding, - second.implicitHandleHeight + topPadding + bottomPadding) - - padding: 6 - - first.handle: Rectangle { - implicitWidth: control.horizontal ? 8 : 24 - implicitHeight: control.horizontal ? 24 : 8 - - x: control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height)) - - radius: 4 - color: control.first.pressed ? control.Universal.chromeHighColor : - control.first.hovered ? control.Universal.chromeAltLowColor : - control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor - } - - second.handle: Rectangle { - implicitWidth: control.horizontal ? 8 : 24 - implicitHeight: control.horizontal ? 24 : 8 - - x: control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height)) - - radius: 4 - color: control.second.pressed ? control.Universal.chromeHighColor : - control.second.hovered ? control.Universal.chromeAltLowColor : - control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor - } - - background: Item { - implicitWidth: control.horizontal ? 200 : 18 - implicitHeight: control.horizontal ? 18 : 200 - - x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) - width: control.horizontal ? control.availableWidth : implicitWidth - height: control.horizontal ? implicitHeight : control.availableHeight - - scale: control.horizontal && control.mirrored ? -1 : 1 - - Rectangle { - x: control.horizontal ? 0 : (parent.width - width) / 2 - y: control.horizontal ? (parent.height - height) / 2 : 0 - width: control.horizontal ? parent.width : 2 // SliderBackgroundThemeHeight - height: control.vertical ? parent.height : 2 // SliderBackgroundThemeHeight - - color: control.hovered && !control.pressed ? control.Universal.baseMediumColor : - control.enabled ? control.Universal.baseMediumLowColor : control.Universal.chromeDisabledHighColor - } - - Rectangle { - x: control.horizontal ? control.first.position * parent.width : (parent.width - width) / 2 - y: control.horizontal ? (parent.height - height) / 2 : control.second.visualPosition * parent.height - width: control.horizontal ? control.second.position * parent.width - control.first.position * parent.width : 2 // SliderBackgroundThemeHeight - height: control.vertical ? control.second.position * parent.height - control.first.position * parent.height : 2 // SliderBackgroundThemeHeight - - color: control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor - } - } -} diff --git a/src/imports/controls/universal/RoundButton.qml b/src/imports/controls/universal/RoundButton.qml deleted file mode 100644 index 156a472c..00000000 --- a/src/imports/controls/universal/RoundButton.qml +++ /dev/null @@ -1,90 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.RoundButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 8 - spacing: 8 - - icon.width: 20 - icon.height: 20 - icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) - - property bool useSystemFocusVisuals: true - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) - } - - background: Rectangle { - implicitWidth: 32 - implicitHeight: 32 - - radius: control.radius - visible: !control.flat || control.down || control.checked || control.highlighted - color: control.down ? control.Universal.baseMediumLowColor : - control.enabled && (control.highlighted || control.checked) ? control.Universal.accent : - control.Universal.baseLowColor - - Rectangle { - width: parent.width - height: parent.height - radius: control.radius - color: "transparent" - visible: control.hovered - border.width: 2 // ButtonBorderThemeThickness - border.color: control.Universal.baseMediumLowColor - } - } -} diff --git a/src/imports/controls/universal/ScrollBar.qml b/src/imports/controls/universal/ScrollBar.qml deleted file mode 100644 index d101658c..00000000 --- a/src/imports/controls/universal/ScrollBar.qml +++ /dev/null @@ -1,93 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.ScrollBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - visible: control.policy !== T.ScrollBar.AlwaysOff - minimumSize: orientation == Qt.Horizontal ? height / width : width / height - - // TODO: arrows - - contentItem: Rectangle { - implicitWidth: control.interactive ? 12 : 6 - implicitHeight: control.interactive ? 12: 6 - - color: control.pressed ? control.Universal.baseMediumColor : - control.interactive && control.hovered ? control.Universal.baseMediumLowColor : control.Universal.chromeHighColor - opacity: 0.0 - } - - background: Rectangle { - implicitWidth: control.interactive ? 12 : 6 - implicitHeight: control.interactive ? 12: 6 - - color: control.Universal.chromeLowColor - visible: control.size < 1.0 - opacity: 0.0 - } - - states: [ - State { - name: "active" - when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0) - } - ] - - transitions: [ - Transition { - to: "active" - NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 1.0 } - }, - Transition { - from: "active" - SequentialAnimation { - PropertyAction{ targets: [control.contentItem, control.background]; property: "opacity"; value: 1.0 } - PauseAnimation { duration: 3000 } - NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 0.0 } - } - } - ] -} diff --git a/src/imports/controls/universal/ScrollIndicator.qml b/src/imports/controls/universal/ScrollIndicator.qml deleted file mode 100644 index f66a9658..00000000 --- a/src/imports/controls/universal/ScrollIndicator.qml +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.ScrollIndicator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - contentItem: Rectangle { - implicitWidth: 6 - implicitHeight: 6 - - color: control.Universal.baseMediumLowColor - visible: control.size < 1.0 - opacity: 0.0 - - states: [ - State { - name: "active" - when: control.active - } - ] - - transitions: [ - Transition { - to: "active" - NumberAnimation { target: control.contentItem; property: "opacity"; to: 1.0 } - }, - Transition { - from: "active" - SequentialAnimation { - PauseAnimation { duration: 5000 } - NumberAnimation { target: control.contentItem; property: "opacity"; to: 0.0 } - } - } - ] - } -} diff --git a/src/imports/controls/universal/ScrollView.qml b/src/imports/controls/universal/ScrollView.qml deleted file mode 100644 index a6bba9de..00000000 --- a/src/imports/controls/universal/ScrollView.qml +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ScrollView { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - ScrollBar.vertical: ScrollBar { - parent: control - x: control.mirrored ? 0 : control.width - width - y: control.topPadding - height: control.availableHeight - active: control.ScrollBar.horizontal.active - } - - ScrollBar.horizontal: ScrollBar { - parent: control - x: control.leftPadding - y: control.height - height - width: control.availableWidth - active: control.ScrollBar.vertical.active - } -} diff --git a/src/imports/controls/universal/Slider.qml b/src/imports/controls/universal/Slider.qml deleted file mode 100644 index 37c77a35..00000000 --- a/src/imports/controls/universal/Slider.qml +++ /dev/null @@ -1,96 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.Slider { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitHandleWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitHandleHeight + topPadding + bottomPadding) - - padding: 6 - - property bool useSystemFocusVisuals: true - - handle: Rectangle { - implicitWidth: control.horizontal ? 8 : 24 - implicitHeight: control.horizontal ? 24 : 8 - - x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)) - - radius: 4 - color: control.pressed ? control.Universal.chromeHighColor : - control.hovered ? control.Universal.chromeAltLowColor : - control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor - } - - background: Item { - implicitWidth: control.horizontal ? 200 : 18 - implicitHeight: control.horizontal ? 18 : 200 - - x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) - width: control.horizontal ? control.availableWidth : implicitWidth - height: control.horizontal ? implicitHeight : control.availableHeight - - scale: control.horizontal && control.mirrored ? -1 : 1 - - Rectangle { - x: control.horizontal ? 0 : (parent.width - width) / 2 - y: control.horizontal ? (parent.height - height) / 2 : 0 - width: control.horizontal ? parent.width : 2 // SliderTrackThemeHeight - height: !control.horizontal ? parent.height : 2 // SliderTrackThemeHeight - - color: control.hovered && !control.pressed ? control.Universal.baseMediumColor : - control.enabled ? control.Universal.baseMediumLowColor : control.Universal.chromeDisabledHighColor - } - - Rectangle { - x: control.horizontal ? 0 : (parent.width - width) / 2 - y: control.horizontal ? (parent.height - height) / 2 : control.visualPosition * parent.height - width: control.horizontal ? control.position * parent.width : 2 // SliderTrackThemeHeight - height: !control.horizontal ? control.position * parent.height : 2 // SliderTrackThemeHeight - - color: control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor - } - } -} diff --git a/src/imports/controls/universal/SpinBox.qml b/src/imports/controls/universal/SpinBox.qml deleted file mode 100644 index 10c12589..00000000 --- a/src/imports/controls/universal/SpinBox.qml +++ /dev/null @@ -1,147 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.SpinBox { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentItem.implicitWidth + 16 + - up.implicitIndicatorWidth + - down.implicitIndicatorWidth) - implicitHeight: Math.max(implicitContentHeight + topPadding + bottomPadding, - implicitBackgroundHeight, - up.implicitIndicatorHeight, - down.implicitIndicatorHeight) - - // TextControlThemePadding + 2 (border) - padding: 12 - topPadding: padding - 7 - leftPadding: padding + (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0)) - rightPadding: padding - 4 + (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0)) - bottomPadding: padding - 5 - - Universal.theme: activeFocus ? Universal.Light : undefined - - validator: IntValidator { - locale: control.locale.name - bottom: Math.min(control.from, control.to) - top: Math.max(control.from, control.to) - } - - contentItem: TextInput { - text: control.displayText - - font: control.font - color: !enabled ? control.Universal.chromeDisabledLowColor : - activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.foreground - selectionColor: control.Universal.accent - selectedTextColor: control.Universal.chromeWhiteColor - horizontalAlignment: Qt.AlignHCenter - verticalAlignment: TextInput.AlignVCenter - - readOnly: !control.editable - validator: control.validator - inputMethodHints: control.inputMethodHints - } - - up.indicator: Item { - implicitWidth: 28 - height: parent.height + 4 - y: -2 - x: control.mirrored ? 0 : parent.width - width - - Rectangle { - x: 2; y: 4 - width: parent.width - 4 - height: parent.height - 8 - color: control.activeFocus ? control.Universal.accent : - control.up.pressed ? control.Universal.baseMediumLowColor : - control.up.hovered ? control.Universal.baseLowColor : "transparent" - visible: control.up.pressed || control.up.hovered - opacity: control.activeFocus && !control.up.pressed ? 0.4 : 1.0 - } - - ColorImage { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - color: !enabled ? control.Universal.chromeDisabledLowColor : - control.activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.baseHighColor - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/" + (control.mirrored ? "left" : "right") + "arrow.png" - } - } - - down.indicator: Item { - implicitWidth: 28 - height: parent.height + 4 - y: -2 - x: control.mirrored ? parent.width - width : 0 - - Rectangle { - x: 2; y: 4 - width: parent.width - 4 - height: parent.height - 8 - color: control.activeFocus ? control.Universal.accent : - control.down.pressed ? control.Universal.baseMediumLowColor : - control.down.hovered ? control.Universal.baseLowColor : "transparent" - visible: control.down.pressed || control.down.hovered - opacity: control.activeFocus && !control.down.pressed ? 0.4 : 1.0 - } - - ColorImage { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - color: !enabled ? control.Universal.chromeDisabledLowColor : - control.activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.baseHighColor - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/" + (control.mirrored ? "right" : "left") + "arrow.png" - } - } - - background: Rectangle { - implicitWidth: 60 + 28 // TextControlThemeMinWidth - 4 (border) - implicitHeight: 28 // TextControlThemeMinHeight - 4 (border) - - border.width: 2 // TextControlBorderThemeThickness - border.color: !control.enabled ? control.Universal.baseLowColor : - control.activeFocus ? control.Universal.accent : - control.hovered ? control.Universal.baseMediumColor : control.Universal.chromeDisabledLowColor - color: control.enabled ? control.Universal.background : control.Universal.baseLowColor - } -} diff --git a/src/imports/controls/universal/SplitView.qml b/src/imports/controls/universal/SplitView.qml deleted file mode 100644 index 78362cea..00000000 --- a/src/imports/controls/universal/SplitView.qml +++ /dev/null @@ -1,55 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.SplitView { - id: control - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - handle: Rectangle { - implicitWidth: control.orientation === Qt.Horizontal ? 6 : control.width - implicitHeight: control.orientation === Qt.Horizontal ? control.height : 6 - color: T.SplitHandle.pressed ? control.Universal.baseMediumColor - : (T.SplitHandle.hovered ? control.Universal.baseMediumLowColor : control.Universal.chromeHighColor) - } -} diff --git a/src/imports/controls/universal/StackView.qml b/src/imports/controls/universal/StackView.qml deleted file mode 100644 index 41611dd3..00000000 --- a/src/imports/controls/universal/StackView.qml +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.StackView { - id: control - - popEnter: Transition { - ParallelAnimation { - NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 200; easing.type: Easing.InQuint } - NumberAnimation { property: "x"; from: (control.mirrored ? -0.3 : 0.3) * -control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } - } - } - - popExit: Transition { - NumberAnimation { property: "opacity"; from: 1; to: 0; duration: 200; easing.type: Easing.OutQuint } - } - - pushEnter: Transition { - ParallelAnimation { - NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 200; easing.type: Easing.InQuint } - NumberAnimation { property: "x"; from: (control.mirrored ? -0.3 : 0.3) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } - } - } - - pushExit: Transition { - NumberAnimation { property: "opacity"; from: 1; to: 0; duration: 200; easing.type: Easing.OutQuint } - } - - replaceEnter: Transition { - ParallelAnimation { - NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 200; easing.type: Easing.InQuint } - NumberAnimation { property: "x"; from: (control.mirrored ? -0.3 : 0.3) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } - } - } - - replaceExit: Transition { - NumberAnimation { property: "opacity"; from: 1; to: 0; duration: 200; easing.type: Easing.OutQuint } - } -} diff --git a/src/imports/controls/universal/SwipeDelegate.qml b/src/imports/controls/universal/SwipeDelegate.qml deleted file mode 100644 index e36f8ee0..00000000 --- a/src/imports/controls/universal/SwipeDelegate.qml +++ /dev/null @@ -1,92 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.SwipeDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 - - padding: 12 - topPadding: padding - 1 - bottomPadding: padding + 1 - - icon.width: 20 - icon.height: 20 - icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) - - swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } } - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) - } - - background: Rectangle { - color: control.Universal.background - - Rectangle { - width: parent.width - height: parent.height - color: control.down ? control.Universal.listMediumColor : - control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor - Rectangle { - width: parent.width - height: parent.height - visible: control.visualFocus || control.highlighted - color: control.Universal.accent - opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 - } - } - } -} diff --git a/src/imports/controls/universal/Switch.qml b/src/imports/controls/universal/Switch.qml deleted file mode 100644 index 33ee4abb..00000000 --- a/src/imports/controls/universal/Switch.qml +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal -import QtQuick.Controls.Universal.impl - -T.Switch { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - padding: 5 - spacing: 8 - - property bool useSystemFocusVisuals: true - - indicator: SwitchIndicator { - x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: Text { - leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 - rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 - - text: control.text - font: control.font - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - - opacity: enabled ? 1.0 : 0.2 - color: control.Universal.foreground - } -} diff --git a/src/imports/controls/universal/SwitchDelegate.qml b/src/imports/controls/universal/SwitchDelegate.qml deleted file mode 100644 index 41ea2ce0..00000000 --- a/src/imports/controls/universal/SwitchDelegate.qml +++ /dev/null @@ -1,96 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal -import QtQuick.Controls.Universal.impl - -T.SwitchDelegate { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - spacing: 12 - - padding: 12 - topPadding: padding - 1 - bottomPadding: padding + 1 - - icon.width: 20 - icon.height: 20 - icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) - - indicator: SwitchIndicator { - x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 - y: control.topPadding + (control.availableHeight - height) / 2 - control: control - } - - contentItem: IconLabel { - leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing - rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing - - spacing: control.spacing - mirrored: control.mirrored - display: control.display - alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft - - icon: control.icon - text: control.text - font: control.font - color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) - } - - background: Rectangle { - visible: control.down || control.highlighted || control.visualFocus || control.hovered - color: control.down ? control.Universal.listMediumColor : - control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor - Rectangle { - width: parent.width - height: parent.height - visible: control.visualFocus || control.highlighted - color: control.Universal.accent - opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 - } - - } -} diff --git a/src/imports/controls/universal/TabBar.qml b/src/imports/controls/universal/TabBar.qml deleted file mode 100644 index 9b98c10e..00000000 --- a/src/imports/controls/universal/TabBar.qml +++ /dev/null @@ -1,70 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.TabBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - contentItem: ListView { - model: control.contentModel - currentIndex: control.currentIndex - - spacing: control.spacing - orientation: ListView.Horizontal - boundsBehavior: Flickable.StopAtBounds - flickableDirection: Flickable.AutoFlickIfNeeded - snapMode: ListView.SnapToItem - - highlightMoveDuration: 100 - highlightRangeMode: ListView.ApplyRange - preferredHighlightBegin: 48 - preferredHighlightEnd: width - 48 - } - - background: Rectangle { - implicitWidth: 200 - implicitHeight: 48 - color: control.Universal.background - } -} diff --git a/src/imports/controls/universal/TabButton.qml b/src/imports/controls/universal/TabButton.qml deleted file mode 100644 index 3709bdda..00000000 --- a/src/imports/controls/universal/TabButton.qml +++ /dev/null @@ -1,69 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.TabButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 12 // PivotItemMargin - spacing: 8 - - icon.width: 20 - icon.height: 20 - icon.color: Color.transparent(control.hovered ? control.Universal.baseMediumHighColor : control.Universal.foreground, - control.checked || control.down || control.hovered ? 1.0 : 0.2) - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: Color.transparent(control.hovered ? control.Universal.baseMediumHighColor : control.Universal.foreground, - control.checked || control.down || control.hovered ? 1.0 : 0.2) - } -} diff --git a/src/imports/controls/universal/TextArea.qml b/src/imports/controls/universal/TextArea.qml deleted file mode 100644 index 6fa0066b..00000000 --- a/src/imports/controls/universal/TextArea.qml +++ /dev/null @@ -1,93 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.TextArea { - id: control - - implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, - implicitBackgroundWidth + leftInset + rightInset, - placeholder.implicitWidth + leftPadding + rightPadding) - implicitHeight: Math.max(contentHeight + topPadding + bottomPadding, - implicitBackgroundHeight + topInset + bottomInset, - placeholder.implicitHeight + topPadding + bottomPadding) - - // TextControlThemePadding + 2 (border) - padding: 12 - topPadding: padding - 7 - rightPadding: padding - 4 - bottomPadding: padding - 5 - - Universal.theme: activeFocus ? Universal.Light : undefined - - color: !enabled ? Universal.chromeDisabledLowColor : Universal.foreground - selectionColor: Universal.accent - selectedTextColor: Universal.chromeWhiteColor - placeholderTextColor: !enabled ? Universal.chromeDisabledLowColor : - activeFocus ? Universal.chromeBlackMediumLowColor : - Universal.baseMediumColor - - PlaceholderText { - id: placeholder - x: control.leftPadding - y: control.topPadding - width: control.width - (control.leftPadding + control.rightPadding) - height: control.height - (control.topPadding + control.bottomPadding) - - text: control.placeholderText - font: control.font - color: control.placeholderTextColor - visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) - verticalAlignment: control.verticalAlignment - elide: Text.ElideRight - renderType: control.renderType - } - - background: Rectangle { - implicitWidth: 60 // TextControlThemeMinWidth - 4 (border) - implicitHeight: 28 // TextControlThemeMinHeight - 4 (border) - - border.width: 2 // TextControlBorderThemeThickness - border.color: !control.enabled ? control.Universal.baseLowColor : - control.activeFocus ? control.Universal.accent : - control.hovered ? control.Universal.baseMediumColor : control.Universal.chromeDisabledLowColor - color: control.enabled ? control.Universal.background : control.Universal.baseLowColor - } -} diff --git a/src/imports/controls/universal/TextField.qml b/src/imports/controls/universal/TextField.qml deleted file mode 100644 index 903f6728..00000000 --- a/src/imports/controls/universal/TextField.qml +++ /dev/null @@ -1,93 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.TextField { - id: control - - implicitWidth: implicitBackgroundWidth + leftInset + rightInset - || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding, - placeholder.implicitHeight + topPadding + bottomPadding) - - // TextControlThemePadding + 2 (border) - padding: 12 - topPadding: padding - 7 - rightPadding: padding - 4 - bottomPadding: padding - 5 - - Universal.theme: activeFocus ? Universal.Light : undefined - - color: !enabled ? Universal.chromeDisabledLowColor : Universal.foreground - selectionColor: Universal.accent - selectedTextColor: Universal.chromeWhiteColor - placeholderTextColor: !enabled ? Universal.chromeDisabledLowColor : - activeFocus ? Universal.chromeBlackMediumLowColor : - Universal.baseMediumColor - verticalAlignment: TextInput.AlignVCenter - - PlaceholderText { - id: placeholder - x: control.leftPadding - y: control.topPadding - width: control.width - (control.leftPadding + control.rightPadding) - height: control.height - (control.topPadding + control.bottomPadding) - - text: control.placeholderText - font: control.font - color: control.placeholderTextColor - visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) - verticalAlignment: control.verticalAlignment - elide: Text.ElideRight - renderType: control.renderType - } - - background: Rectangle { - implicitWidth: 60 // TextControlThemeMinWidth - 4 (border) - implicitHeight: 28 // TextControlThemeMinHeight - 4 (border) - - border.width: 2 // TextControlBorderThemeThickness - border.color: !control.enabled ? control.Universal.baseLowColor : - control.activeFocus ? control.Universal.accent : - control.hovered ? control.Universal.baseMediumColor : control.Universal.chromeDisabledLowColor - color: control.enabled ? control.Universal.background : control.Universal.baseLowColor - } -} diff --git a/src/imports/controls/universal/ToolBar.qml b/src/imports/controls/universal/ToolBar.qml deleted file mode 100644 index 0266056f..00000000 --- a/src/imports/controls/universal/ToolBar.qml +++ /dev/null @@ -1,53 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.ToolBar { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - background: Rectangle { - implicitHeight: 48 // AppBarThemeCompactHeight - color: control.Universal.chromeMediumColor - } -} diff --git a/src/imports/controls/universal/ToolButton.qml b/src/imports/controls/universal/ToolButton.qml deleted file mode 100644 index c305342d..00000000 --- a/src/imports/controls/universal/ToolButton.qml +++ /dev/null @@ -1,83 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -T.ToolButton { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - padding: 6 - spacing: 8 - - icon.width: 20 - icon.height: 20 - icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) - - property bool useSystemFocusVisuals: true - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) - } - - background: Rectangle { - implicitWidth: 68 - implicitHeight: 48 // AppBarThemeCompactHeight - - color: control.enabled && (control.highlighted || control.checked) ? control.Universal.accent : "transparent" - - Rectangle { - width: parent.width - height: parent.height - visible: control.down || control.hovered - color: control.down ? control.Universal.listMediumColor : control.Universal.listLowColor - } - } -} diff --git a/src/imports/controls/universal/ToolSeparator.qml b/src/imports/controls/universal/ToolSeparator.qml deleted file mode 100644 index cd9be32d..00000000 --- a/src/imports/controls/universal/ToolSeparator.qml +++ /dev/null @@ -1,59 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.ToolSeparator { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - leftPadding: vertical ? 16 : 12 - rightPadding: vertical ? 15 : 12 - topPadding: vertical ? 12 : 16 - bottomPadding: vertical ? 12 : 15 - - contentItem: Rectangle { - implicitWidth: vertical ? 1 : 20 - implicitHeight: vertical ? 20 : 1 - color: control.Universal.baseMediumLowColor - } -} diff --git a/src/imports/controls/universal/ToolTip.qml b/src/imports/controls/universal/ToolTip.qml deleted file mode 100644 index bf931a4c..00000000 --- a/src/imports/controls/universal/ToolTip.qml +++ /dev/null @@ -1,72 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -T.ToolTip { - id: control - - x: parent ? (parent.width - implicitWidth) / 2 : 0 - y: -implicitHeight - 16 - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - margins: 8 - padding: 8 - topPadding: padding - 3 - bottomPadding: padding - 1 - - closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent - - contentItem: Text { - text: control.text - font: control.font - wrapMode: Text.Wrap - opacity: enabled ? 1.0 : 0.2 - color: control.Universal.foreground - } - - background: Rectangle { - color: control.Universal.chromeMediumLowColor - border.color: control.Universal.chromeHighColor - border.width: 1 // ToolTipBorderThemeThickness - } -} diff --git a/src/imports/controls/universal/Tumbler.qml b/src/imports/controls/universal/Tumbler.qml deleted file mode 100644 index 5b9f5725..00000000 --- a/src/imports/controls/universal/Tumbler.qml +++ /dev/null @@ -1,75 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal -import QtQuick.Controls.impl - -T.Tumbler { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - delegate: Text { - text: modelData - font: control.font - color: control.Universal.foreground - opacity: (1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)) * (control.enabled ? 1 : 0.6) - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - } - - contentItem: TumblerView { - implicitWidth: 60 - implicitHeight: 200 - model: control.model - delegate: control.delegate - path: Path { - startX: control.contentItem.width / 2 - startY: -control.contentItem.delegateHeight / 2 - PathLine { - x: control.contentItem.width / 2 - y: (control.visibleItemCount + 1) * control.contentItem.delegateHeight - control.contentItem.delegateHeight / 2 - } - } - - property real delegateHeight: control.availableHeight / control.visibleItemCount - } -} diff --git a/src/imports/controls/universal/VerticalHeaderView.qml b/src/imports/controls/universal/VerticalHeaderView.qml deleted file mode 100644 index 7dc1efd3..00000000 --- a/src/imports/controls/universal/VerticalHeaderView.qml +++ /dev/null @@ -1,69 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T -import QtQuick.Controls.Universal -import QtQuick.Controls.Universal.impl - -T.VerticalHeaderView { - id: control - - implicitWidth: contentWidth - implicitHeight: syncView ? syncView.height : 0 - - delegate: Rectangle { - // Qt6: add cellPadding (and font etc) as public API in headerview - readonly property real cellPadding: 8 - - implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2)) - implicitHeight: text.implicitHeight + (cellPadding * 2) - color: control.Universal.background - - Text { - id: text - text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] - : model[control.textRole]) - : modelData - width: parent.width - height: parent.height - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) - } - } -} diff --git a/src/imports/controls/universal/images/checkmark.png b/src/imports/controls/universal/images/checkmark.png deleted file mode 100644 index e2aae6fe..00000000 Binary files a/src/imports/controls/universal/images/checkmark.png and /dev/null differ diff --git a/src/imports/controls/universal/images/checkmark@2x.png b/src/imports/controls/universal/images/checkmark@2x.png deleted file mode 100644 index 0df4159a..00000000 Binary files a/src/imports/controls/universal/images/checkmark@2x.png and /dev/null differ diff --git a/src/imports/controls/universal/images/checkmark@3x.png b/src/imports/controls/universal/images/checkmark@3x.png deleted file mode 100644 index 43466cbc..00000000 Binary files a/src/imports/controls/universal/images/checkmark@3x.png and /dev/null differ diff --git a/src/imports/controls/universal/images/checkmark@4x.png b/src/imports/controls/universal/images/checkmark@4x.png deleted file mode 100644 index 7a47bd21..00000000 Binary files a/src/imports/controls/universal/images/checkmark@4x.png and /dev/null differ diff --git a/src/imports/controls/universal/images/downarrow.png b/src/imports/controls/universal/images/downarrow.png deleted file mode 100644 index b66e2efc..00000000 Binary files a/src/imports/controls/universal/images/downarrow.png and /dev/null differ diff --git a/src/imports/controls/universal/images/downarrow@2x.png b/src/imports/controls/universal/images/downarrow@2x.png deleted file mode 100644 index a704376c..00000000 Binary files a/src/imports/controls/universal/images/downarrow@2x.png and /dev/null differ diff --git a/src/imports/controls/universal/images/downarrow@3x.png b/src/imports/controls/universal/images/downarrow@3x.png deleted file mode 100644 index 3b6d55ab..00000000 Binary files a/src/imports/controls/universal/images/downarrow@3x.png and /dev/null differ diff --git a/src/imports/controls/universal/images/downarrow@4x.png b/src/imports/controls/universal/images/downarrow@4x.png deleted file mode 100644 index 818c6b24..00000000 Binary files a/src/imports/controls/universal/images/downarrow@4x.png and /dev/null differ diff --git a/src/imports/controls/universal/images/leftarrow.png b/src/imports/controls/universal/images/leftarrow.png deleted file mode 100644 index 0153ccd4..00000000 Binary files a/src/imports/controls/universal/images/leftarrow.png and /dev/null differ diff --git a/src/imports/controls/universal/images/leftarrow@2x.png b/src/imports/controls/universal/images/leftarrow@2x.png deleted file mode 100644 index fa692d5b..00000000 Binary files a/src/imports/controls/universal/images/leftarrow@2x.png and /dev/null differ diff --git a/src/imports/controls/universal/images/leftarrow@3x.png b/src/imports/controls/universal/images/leftarrow@3x.png deleted file mode 100644 index 06b0207a..00000000 Binary files a/src/imports/controls/universal/images/leftarrow@3x.png and /dev/null differ diff --git a/src/imports/controls/universal/images/leftarrow@4x.png b/src/imports/controls/universal/images/leftarrow@4x.png deleted file mode 100644 index 1049f616..00000000 Binary files a/src/imports/controls/universal/images/leftarrow@4x.png and /dev/null differ diff --git a/src/imports/controls/universal/images/rightarrow.png b/src/imports/controls/universal/images/rightarrow.png deleted file mode 100644 index b24d117d..00000000 Binary files a/src/imports/controls/universal/images/rightarrow.png and /dev/null differ diff --git a/src/imports/controls/universal/images/rightarrow@2x.png b/src/imports/controls/universal/images/rightarrow@2x.png deleted file mode 100644 index 80aca7c1..00000000 Binary files a/src/imports/controls/universal/images/rightarrow@2x.png and /dev/null differ diff --git a/src/imports/controls/universal/images/rightarrow@3x.png b/src/imports/controls/universal/images/rightarrow@3x.png deleted file mode 100644 index ba017240..00000000 Binary files a/src/imports/controls/universal/images/rightarrow@3x.png and /dev/null differ diff --git a/src/imports/controls/universal/images/rightarrow@4x.png b/src/imports/controls/universal/images/rightarrow@4x.png deleted file mode 100644 index 21f7ed4d..00000000 Binary files a/src/imports/controls/universal/images/rightarrow@4x.png and /dev/null differ diff --git a/src/imports/controls/universal/impl/CMakeLists.txt b/src/imports/controls/universal/impl/CMakeLists.txt deleted file mode 100644 index 1c1f5984..00000000 --- a/src/imports/controls/universal/impl/CMakeLists.txt +++ /dev/null @@ -1,62 +0,0 @@ -# Generated from universal-impl.pro. - -##################################################################### -## qtquickcontrols2universalstyleimplplugin Plugin: -##################################################################### - -qt_internal_add_qml_module(qtquickcontrols2universalstyleimplplugin - URI "QtQuick.Controls.Universal.impl" - VERSION "${PROJECT_VERSION}" - CLASSNAME QtQuickControls2UniversalStyleImplPlugin - GENERATE_QMLTYPES - INSTALL_QMLTYPES - SOURCES - qquickuniversalbusyindicator.cpp qquickuniversalbusyindicator_p.h - qquickuniversalfocusrectangle.cpp qquickuniversalfocusrectangle_p.h - qquickuniversalprogressbar.cpp qquickuniversalprogressbar_p.h - qtquickcontrols2universalstyleimplplugin.cpp - DEFINES - QT_NO_CAST_FROM_ASCII - QT_NO_CAST_TO_ASCII - LIBRARIES - Qt::CorePrivate - Qt::Gui - Qt::QmlPrivate - Qt::QuickControls2ImplPrivate - Qt::QuickPrivate - Qt::QuickTemplates2Private - PUBLIC_LIBRARIES - Qt::Core - Qt::Gui - Qt::Qml - Qt::Quick -) - -#### Keys ignored in scope 1:.:.:universal-impl.pro:: -# OTHER_FILES = "qmldir" "$$QML_FILES" -# QML_FILES = "$$PWD/CheckIndicator.qml" "$$PWD/RadioIndicator.qml" "$$PWD/SwitchIndicator.qml" -# QML_IMPORT_NAME = "QtQuick.Controls.Universal.impl" -# QML_IMPORT_VERSION = "$$QT_VERSION" -# QT_FOR_CONFIG = "quickcontrols2-private" -# TARGETPATH = "QtQuick/Controls/Universal/impl" -# _REQUIREMENTS = "qtConfig(quickcontrols2-universal)" - -set(qml_files - "CheckIndicator.qml" - "RadioIndicator.qml" - "SwitchIndicator.qml" -) -set_source_files_properties(CheckIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0" -) -set_source_files_properties(RadioIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0" -) -set_source_files_properties(SwitchIndicator.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0" -) - -qt6_target_qml_files(qtquickcontrols2universalstyleimplplugin - FILES - ${qml_files} -) diff --git a/src/imports/controls/universal/impl/CheckIndicator.qml b/src/imports/controls/universal/impl/CheckIndicator.qml deleted file mode 100644 index e4cd5409..00000000 --- a/src/imports/controls/universal/impl/CheckIndicator.qml +++ /dev/null @@ -1,81 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.impl -import QtQuick.Controls.Universal - -Rectangle { - id: indicator - implicitWidth: 20 - implicitHeight: 20 - - color: !control.enabled ? "transparent" : - control.down && !partiallyChecked ? control.Universal.baseMediumColor : - control.checkState === Qt.Checked ? control.Universal.accent : "transparent" - border.color: !control.enabled ? control.Universal.baseLowColor : - control.down ? control.Universal.baseMediumColor : - control.checked ? control.Universal.accent : control.Universal.baseMediumHighColor - border.width: 2 // CheckBoxBorderThemeThickness - - property Item control - readonly property bool partiallyChecked: control.checkState === Qt.PartiallyChecked - - ColorImage { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - - visible: indicator.control.checkState === Qt.Checked - color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor : indicator.control.Universal.chromeWhiteColor - source: "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/checkmark.png" - } - - Rectangle { - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: indicator.partiallyChecked ? parent.width / 2 : parent.width - height: indicator.partiallyChecked ? parent.height / 2 : parent.height - - visible: !indicator.control.pressed && indicator.control.hovered || indicator.partiallyChecked - color: !indicator.partiallyChecked ? "transparent" : - !indicator.control.enabled ? indicator.control.Universal.baseLowColor : - indicator.control.down ? indicator.control.Universal.baseMediumColor : - indicator.control.hovered ? indicator.control.Universal.baseHighColor : indicator.control.Universal.baseMediumHighColor - border.width: indicator.partiallyChecked ? 0 : 2 // CheckBoxBorderThemeThickness - border.color: indicator.control.Universal.baseMediumLowColor - } -} diff --git a/src/imports/controls/universal/impl/RadioIndicator.qml b/src/imports/controls/universal/impl/RadioIndicator.qml deleted file mode 100644 index 3cf1bf37..00000000 --- a/src/imports/controls/universal/impl/RadioIndicator.qml +++ /dev/null @@ -1,80 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.Universal - -Rectangle { - id: indicator - implicitWidth: 20 - implicitHeight: 20 - radius: width / 2 - color: "transparent" - border.width: 2 // RadioButtonBorderThemeThickness - border.color: control.checked ? "transparent" : - !control.enabled ? control.Universal.baseLowColor : - control.down ? control.Universal.baseMediumColor : - control.hovered ? control.Universal.baseHighColor : control.Universal.baseMediumHighColor - - property var control - - Rectangle { - id: checkOuterEllipse - width: parent.width - height: parent.height - - radius: width / 2 - opacity: indicator.control.checked ? 1 : 0 - color: "transparent" - border.width: 2 // RadioButtonBorderThemeThickness - border.color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor : - indicator.control.down ? indicator.control.Universal.baseMediumColor : indicator.control.Universal.accent - } - - Rectangle { - id: checkGlyph - x: (parent.width - width) / 2 - y: (parent.height - height) / 2 - width: parent.width / 2 - height: parent.height / 2 - - radius: width / 2 - opacity: indicator.control.checked ? 1 : 0 - color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor : - indicator.control.down ? indicator.control.Universal.baseMediumColor : - indicator.control.hovered ? indicator.control.Universal.baseHighColor : indicator.control.Universal.baseMediumHighColor - } -} diff --git a/src/imports/controls/universal/impl/SwitchIndicator.qml b/src/imports/controls/universal/impl/SwitchIndicator.qml deleted file mode 100644 index aa455419..00000000 --- a/src/imports/controls/universal/impl/SwitchIndicator.qml +++ /dev/null @@ -1,81 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls.Universal - -Item { - id: indicator - implicitWidth: 44 - implicitHeight: 20 - - Rectangle { - width: parent.width - height: parent.height - - radius: 10 - color: !indicator.control.enabled ? "transparent" : - indicator.control.pressed ? indicator.control.Universal.baseMediumColor : - indicator.control.checked ? indicator.control.Universal.accent : "transparent" - border.color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor : - indicator.control.checked && !indicator.control.pressed ? indicator.control.Universal.accent : - indicator.control.hovered && !indicator.control.checked && !indicator.control.pressed ? indicator.control.Universal.baseHighColor : indicator.control.Universal.baseMediumColor - opacity: indicator.control.hovered && indicator.control.checked && !indicator.control.pressed ? (indicator.control.Universal.theme === Universal.Light ? 0.7 : 0.9) : 1.0 - border.width: 2 - } - - property Item control - - Rectangle { - width: 10 - height: 10 - radius: 5 - - color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor : - indicator.control.pressed || indicator.control.checked ? indicator.control.Universal.chromeWhiteColor : - indicator.control.hovered && !indicator.control.checked ? indicator.control.Universal.baseHighColor : indicator.control.Universal.baseMediumHighColor - - x: Math.max(5, Math.min(parent.width - width - 5, - indicator.control.visualPosition * parent.width - (width / 2))) - y: (parent.height - height) / 2 - - Behavior on x { - enabled: !indicator.control.pressed - SmoothedAnimation { velocity: 200 } - } - } -} diff --git a/src/imports/controls/universal/impl/qquickuniversalbusyindicator.cpp b/src/imports/controls/universal/impl/qquickuniversalbusyindicator.cpp deleted file mode 100644 index 2f0ada49..00000000 --- a/src/imports/controls/universal/impl/qquickuniversalbusyindicator.cpp +++ /dev/null @@ -1,251 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickuniversalbusyindicator_p.h" - -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -static const int PhaseCount = 6; -static const int Interval = 167; -static const int TotalDuration = 4052; - -class QQuickUniversalBusyIndicatorNode : public QQuickAnimatedNode -{ -public: - QQuickUniversalBusyIndicatorNode(QQuickUniversalBusyIndicator *item); - - void updateCurrentTime(int time) override; - void sync(QQuickItem *item) override; - -private: - struct Phase { - Phase() = default; - Phase(int d, qreal f, qreal t, QEasingCurve::Type c) : duration(d), from(f), to(t), curve(c) { } - int duration = 0; - qreal from = 0; - qreal to = 0; - QEasingCurve curve = QEasingCurve::Linear; - }; - - Phase m_phases[PhaseCount]; -}; - -QQuickUniversalBusyIndicatorNode::QQuickUniversalBusyIndicatorNode(QQuickUniversalBusyIndicator *item) - : QQuickAnimatedNode(item) -{ - setLoopCount(Infinite); - setDuration(TotalDuration); - setCurrentTime(item->elapsed()); - - m_phases[0] = Phase(433, -110, 10, QEasingCurve::BezierSpline); - m_phases[1] = Phase(767, 10, 93, QEasingCurve::Linear ); - m_phases[2] = Phase(417, 93, 205, QEasingCurve::BezierSpline); - m_phases[3] = Phase(400, 205, 357, QEasingCurve::BezierSpline); - m_phases[4] = Phase(766, 357, 439, QEasingCurve::Linear ); - m_phases[5] = Phase(434, 439, 585, QEasingCurve::BezierSpline); - - m_phases[0].curve.addCubicBezierSegment(QPointF(0.02, 0.33), QPointF(0.38, 0.77), QPointF(1.00, 1.00)); - m_phases[2].curve.addCubicBezierSegment(QPointF(0.57, 0.17), QPointF(0.95, 0.75), QPointF(1.00, 1.00)); - m_phases[3].curve.addCubicBezierSegment(QPointF(0.00, 0.19), QPointF(0.07, 0.72), QPointF(1.00, 1.00)); - m_phases[5].curve.addCubicBezierSegment(QPointF(0.00, 0.00), QPointF(0.95, 0.37), QPointF(1.00, 1.00)); -} - -void QQuickUniversalBusyIndicatorNode::updateCurrentTime(int time) -{ - int nodeIndex = 0; - int count = childCount(); - QSGTransformNode *transformNode = static_cast(firstChild()); - while (transformNode) { - Q_ASSERT(transformNode->type() == QSGNode::TransformNodeType); - - QSGOpacityNode *opacityNode = static_cast(transformNode->firstChild()); - Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType); - - int begin = nodeIndex * Interval; - int end = TotalDuration - (PhaseCount - nodeIndex - 1) * Interval; - - bool visible = time >= begin && time <= end; - opacityNode->setOpacity(visible ? 1.0 : 0.0); - - if (visible) { - int phaseIndex, remain = time, elapsed = 0; - for (phaseIndex = 0; phaseIndex < PhaseCount - 1; ++phaseIndex) { - if (remain <= m_phases[phaseIndex].duration + begin) - break; - remain -= m_phases[phaseIndex].duration; - elapsed += m_phases[phaseIndex].duration; - } - - const Phase &phase = m_phases[phaseIndex]; - - qreal from = phase.from - nodeIndex * count; - qreal to = phase.to - nodeIndex * count; - qreal pos = time - elapsed - begin; - - qreal value = phase.curve.valueForProgress(pos / phase.duration); - qreal rotation = from + (to - from) * value; - - QMatrix4x4 matrix; - matrix.rotate(rotation, 0, 0, 1); - transformNode->setMatrix(matrix); - } - - transformNode = static_cast(transformNode->nextSibling()); - ++nodeIndex; - } -} - -void QQuickUniversalBusyIndicatorNode::sync(QQuickItem *item) -{ - QQuickUniversalBusyIndicator *indicator = static_cast(item); - QQuickItemPrivate *d = QQuickItemPrivate::get(item); - - QMatrix4x4 matrix; - matrix.translate(item->width() / 2, item->height() / 2); - setMatrix(matrix); - - qreal size = qMin(item->width(), item->height()); - qreal diameter = size / 10.0; - qreal radius = diameter / 2; - qreal offset = (size - diameter * 2) / M_PI; - const QRectF rect(offset, offset, diameter, diameter); - - int count = indicator->count(); - QSGNode *transformNode = firstChild(); - for (int i = 0; i < count; ++i) { - if (!transformNode) { - transformNode = new QSGTransformNode; - appendChildNode(transformNode); - - QSGOpacityNode *opacityNode = new QSGOpacityNode; - transformNode->appendChildNode(opacityNode); - - QSGInternalRectangleNode *rectNode = d->sceneGraphContext()->createInternalRectangleNode(); - rectNode->setAntialiasing(true); - opacityNode->appendChildNode(rectNode); - } - - QSGNode *opacityNode = transformNode->firstChild(); - Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType); - - QSGInternalRectangleNode *rectNode = static_cast(opacityNode->firstChild()); - Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType); - - rectNode->setRect(rect); - rectNode->setColor(indicator->color()); - rectNode->setRadius(radius); - rectNode->update(); - - transformNode = transformNode->nextSibling(); - } - - while (transformNode) { - QSGNode *nextSibling = transformNode->nextSibling(); - delete transformNode; - transformNode = nextSibling; - } -} - -QQuickUniversalBusyIndicator::QQuickUniversalBusyIndicator(QQuickItem *parent) - : QQuickItem(parent) -{ - setFlag(ItemHasContents); -} - -int QQuickUniversalBusyIndicator::count() const -{ - return m_count; -} - -void QQuickUniversalBusyIndicator::setCount(int count) -{ - if (m_count == count) - return; - - m_count = count; - update(); -} - -QColor QQuickUniversalBusyIndicator::color() const -{ - return m_color; -} - -void QQuickUniversalBusyIndicator::setColor(const QColor &color) -{ - if (m_color == color) - return; - - m_color = color; - update(); -} - -int QQuickUniversalBusyIndicator::elapsed() const -{ - return m_elapsed; -} - -void QQuickUniversalBusyIndicator::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data) -{ - QQuickItem::itemChange(change, data); - if (change == ItemVisibleHasChanged) - update(); -} - -QSGNode *QQuickUniversalBusyIndicator::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) -{ - QQuickUniversalBusyIndicatorNode *node = static_cast(oldNode); - if (isVisible() && width() > 0 && height() > 0) { - if (!node) { - node = new QQuickUniversalBusyIndicatorNode(this); - node->start(); - } - node->sync(this); - } else { - m_elapsed = node ? node->currentTime() : 0; - delete node; - node = nullptr; - } - return node; -} - -QT_END_NAMESPACE diff --git a/src/imports/controls/universal/impl/qquickuniversalbusyindicator_p.h b/src/imports/controls/universal/impl/qquickuniversalbusyindicator_p.h deleted file mode 100644 index 6d3ebb84..00000000 --- a/src/imports/controls/universal/impl/qquickuniversalbusyindicator_p.h +++ /dev/null @@ -1,89 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKUNIVERSALBUSYINDICATOR_P_H -#define QQUICKUNIVERSALBUSYINDICATOR_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include - -QT_BEGIN_NAMESPACE - -class QQuickUniversalBusyIndicator : public QQuickItem -{ - Q_OBJECT - Q_PROPERTY(int count READ count WRITE setCount FINAL) - Q_PROPERTY(QColor color READ color WRITE setColor FINAL) - QML_NAMED_ELEMENT(BusyIndicatorImpl) - QML_ADDED_IN_VERSION(2, 0) - -public: - explicit QQuickUniversalBusyIndicator(QQuickItem *parent = nullptr); - - int count() const; - void setCount(int count); - - QColor color() const; - void setColor(const QColor &color); - - int elapsed() const; - -protected: - void itemChange(ItemChange change, const ItemChangeData &data) override; - QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override; - -private: - int m_count = 5; - int m_elapsed = 0; - QColor m_color = Qt::black; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickUniversalBusyIndicator) - -#endif // QQUICKUNIVERSALBUSYINDICATOR_P_H diff --git a/src/imports/controls/universal/impl/qquickuniversalfocusrectangle.cpp b/src/imports/controls/universal/impl/qquickuniversalfocusrectangle.cpp deleted file mode 100644 index 51508c6f..00000000 --- a/src/imports/controls/universal/impl/qquickuniversalfocusrectangle.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickuniversalfocusrectangle_p.h" - -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -QQuickUniversalFocusRectangle::QQuickUniversalFocusRectangle(QQuickItem *parent) - : QQuickPaintedItem(parent) -{ - QQuickItemPrivate::get(this)->setTransparentForPositioner(true); -} - -void QQuickUniversalFocusRectangle::paint(QPainter *painter) -{ - if (!isVisible() || width() <= 0 || height() <= 0) - return; - - QRect bounds = boundingRect().toAlignedRect(); - const int boundsWidth = bounds.width(); - const int boundsHeight = bounds.width(); - const QString key = QStringLiteral("qquickuniversalfocusrectangle_%1_%2").arg(QString::number(boundsWidth), QString::number(boundsHeight)); - - QPixmap pixmap(boundsWidth, boundsHeight); - if (!QPixmapCache::find(key, &pixmap)) { - bounds.adjust(0, 0, -1, -1); - pixmap.fill(Qt::transparent); - QPainter p(&pixmap); - - QPen pen; - pen.setWidth(1); - pen.setColor(Qt::white); - p.setPen(pen); - p.drawRect(bounds); - - pen.setColor(Qt::black); - pen.setDashPattern(QList(2, 1)); - p.setPen(pen); - p.drawRect(bounds); - - QPixmapCache::insert(key, pixmap); - } - painter->drawPixmap(0, 0, pixmap); -} - -QT_END_NAMESPACE diff --git a/src/imports/controls/universal/impl/qquickuniversalfocusrectangle_p.h b/src/imports/controls/universal/impl/qquickuniversalfocusrectangle_p.h deleted file mode 100644 index f309b512..00000000 --- a/src/imports/controls/universal/impl/qquickuniversalfocusrectangle_p.h +++ /dev/null @@ -1,69 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKUNIVERSALFOCUSRECTANGLE_P_H -#define QQUICKUNIVERSALFOCUSRECTANGLE_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include - -QT_BEGIN_NAMESPACE - -class QQuickUniversalFocusRectangle : public QQuickPaintedItem -{ - Q_OBJECT - QML_NAMED_ELEMENT(FocusRectangle) - QML_ADDED_IN_VERSION(2, 0) - -public: - QQuickUniversalFocusRectangle(QQuickItem *parent = nullptr); - - void paint(QPainter *painter) override; -}; - -QT_END_NAMESPACE - -#endif // QQUICKUNIVERSALFOCUSRECTANGLE_P_H diff --git a/src/imports/controls/universal/impl/qquickuniversalprogressbar.cpp b/src/imports/controls/universal/impl/qquickuniversalprogressbar.cpp deleted file mode 100644 index 8f907b75..00000000 --- a/src/imports/controls/universal/impl/qquickuniversalprogressbar.cpp +++ /dev/null @@ -1,338 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickuniversalprogressbar_p.h" - -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -static const int PhaseCount = 4; -static const int EllipseCount = 5; -static const int Interval = 167; -static const int TotalDuration = 3917; -static const int VisibleDuration = 3000; -static const qreal EllipseDiameter = 4; -static const qreal EllipseOffset = 4; -static const qreal ContainerAnimationStartPosition = -34; // absolute -static const qreal ContainerAnimationEndPosition = 0.435222; // relative -static const qreal EllipseAnimationWellPosition = 0.333333333333333; // relative -static const qreal EllipseAnimationEndPosition = 0.666666666666667; // relative - -class QQuickUniversalProgressBarNode : public QQuickAnimatedNode -{ -public: - QQuickUniversalProgressBarNode(QQuickUniversalProgressBar *item); - - void updateCurrentTime(int time) override; - void sync(QQuickItem *item) override; - -private: - struct Phase { - Phase() = default; - Phase(int d, qreal f, qreal t) : duration(d), from(f), to(t) { } - int duration = 0; - qreal from = 0; - qreal to = 0; - }; - - bool m_indeterminate = false; - Phase m_borderPhases[PhaseCount]; - Phase m_ellipsePhases[PhaseCount]; -}; - -QQuickUniversalProgressBarNode::QQuickUniversalProgressBarNode(QQuickUniversalProgressBar *item) - : QQuickAnimatedNode(item) -{ - setLoopCount(Infinite); - setDuration(TotalDuration); - - m_borderPhases[0] = Phase( 500, -50, 0); - m_borderPhases[1] = Phase(1500, 0, 0); - m_borderPhases[2] = Phase(1000, 0, 100); - m_borderPhases[3] = Phase( 917, 100, 100); - - m_ellipsePhases[0] = Phase(1000, 0, EllipseAnimationWellPosition); - m_ellipsePhases[1] = Phase(1000, EllipseAnimationWellPosition, EllipseAnimationWellPosition); - m_ellipsePhases[2] = Phase(1000, EllipseAnimationWellPosition, EllipseAnimationEndPosition); - m_ellipsePhases[3] = Phase(1000, EllipseAnimationWellPosition, EllipseAnimationEndPosition); -} - -void QQuickUniversalProgressBarNode::updateCurrentTime(int time) -{ - QSGRectangleNode *geometryNode = static_cast(firstChild()); - Q_ASSERT(!geometryNode || geometryNode->type() == QSGNode::GeometryNodeType); - if (!geometryNode) - return; - - QSGTransformNode *gridNode = static_cast(geometryNode->firstChild()); - Q_ASSERT(!gridNode || gridNode->type() == QSGNode::TransformNodeType); - if (!gridNode) - return; - - qreal width = geometryNode->rect().width(); - { - qreal from = ContainerAnimationStartPosition; - qreal to = from + ContainerAnimationEndPosition * width; - qreal progress = static_cast(time) / TotalDuration; - qreal dx = from + (to - from) * progress; - - QMatrix4x4 matrix; - matrix.translate(dx, 0); - gridNode->setMatrix(matrix); - } - - int nodeIndex = 0; - QSGTransformNode *borderNode = static_cast(gridNode->firstChild()); - while (borderNode) { - Q_ASSERT(borderNode->type() == QSGNode::TransformNodeType); - - QSGTransformNode *ellipseNode = static_cast(borderNode->firstChild()); - Q_ASSERT(ellipseNode->type() == QSGNode::TransformNodeType); - - QSGOpacityNode *opacityNode = static_cast(ellipseNode->firstChild()); - Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType); - - int begin = nodeIndex * Interval; - int end = VisibleDuration + nodeIndex * Interval; - - bool visible = time >= begin && time <= end; - opacityNode->setOpacity(visible ? 1.0 : 0.0); - - if (visible) { - { - int phaseIndex, remain = time, elapsed = 0; - for (phaseIndex = 0; phaseIndex < PhaseCount - 1; ++phaseIndex) { - if (remain <= m_borderPhases[phaseIndex].duration + begin) - break; - remain -= m_borderPhases[phaseIndex].duration; - elapsed += m_borderPhases[phaseIndex].duration; - } - - const Phase &phase = m_borderPhases[phaseIndex]; - - qreal pos = time - elapsed - begin; - qreal progress = pos / phase.duration; - qreal dx = phase.from + (phase.to - phase.from) * progress; - - QMatrix4x4 matrix; - matrix.translate(dx, 0); - borderNode->setMatrix(matrix); - } - - { - QEasingCurve curve(QEasingCurve::BezierSpline); - curve.addCubicBezierSegment(QPointF(0.4, 0.0), QPointF(0.6, 1.0), QPointF(1.0, 1.0)); - - int phaseIndex, remain = time, elapsed = 0; - for (phaseIndex = 0; phaseIndex < PhaseCount - 1; ++phaseIndex) { - if (remain <= m_ellipsePhases[phaseIndex].duration + begin) - break; - remain -= m_ellipsePhases[phaseIndex].duration; - elapsed += m_ellipsePhases[phaseIndex].duration; - } - - const Phase &phase = m_ellipsePhases[phaseIndex]; - - qreal from = phase.from * width; - qreal to = phase.to * width; - qreal pos = time - elapsed - begin; - qreal progress = curve.valueForProgress(pos / phase.duration); - qreal dx = from + (to - from) * progress; - - QMatrix4x4 matrix; - matrix.translate(dx, 0); - ellipseNode->setMatrix(matrix); - } - } - - borderNode = static_cast(borderNode->nextSibling()); - ++nodeIndex; - } -} - -void QQuickUniversalProgressBarNode::sync(QQuickItem *item) -{ - QQuickUniversalProgressBar *bar = static_cast(item); - if (m_indeterminate != bar->isIndeterminate()) { - m_indeterminate = bar->isIndeterminate(); - if (m_indeterminate) - start(); - else - stop(); - } - - QQuickItemPrivate *d = QQuickItemPrivate::get(item); - - QRectF bounds = item->boundingRect(); - bounds.setHeight(item->implicitHeight()); - bounds.moveTop((item->height() - bounds.height()) / 2.0); - if (!m_indeterminate) - bounds.setWidth(bar->progress() * bounds.width()); - - QSGRectangleNode *geometryNode = static_cast(firstChild()); - if (!geometryNode) { - geometryNode = item->window()->createRectangleNode(); - appendChildNode(geometryNode); - } - geometryNode->setRect(bounds); - geometryNode->setColor(m_indeterminate ? Qt::transparent : bar->color()); - - if (!m_indeterminate) { - while (QSGNode *node = geometryNode->firstChild()) - delete node; - return; - } - - QSGTransformNode *gridNode = static_cast(geometryNode->firstChild()); - if (!gridNode) { - gridNode = new QSGTransformNode; - geometryNode->appendChildNode(gridNode); - } - Q_ASSERT(gridNode->type() == QSGNode::TransformNodeType); - - QSGNode *borderNode = gridNode->firstChild(); - for (int i = 0; i < EllipseCount; ++i) { - if (!borderNode) { - borderNode = new QSGTransformNode; - gridNode->appendChildNode(borderNode); - - QSGTransformNode *ellipseNode = new QSGTransformNode; - borderNode->appendChildNode(ellipseNode); - - QSGOpacityNode *opacityNode = new QSGOpacityNode; - ellipseNode->appendChildNode(opacityNode); - - QSGInternalRectangleNode *rectNode = d->sceneGraphContext()->createInternalRectangleNode(); - rectNode->setAntialiasing(true); - rectNode->setRadius(EllipseDiameter / 2); - opacityNode->appendChildNode(rectNode); - } - Q_ASSERT(borderNode->type() == QSGNode::TransformNodeType); - - QSGNode *ellipseNode = borderNode->firstChild(); - Q_ASSERT(ellipseNode->type() == QSGNode::TransformNodeType); - - QSGNode *opacityNode = ellipseNode->firstChild(); - Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType); - - QSGInternalRectangleNode *rectNode = static_cast(opacityNode->firstChild()); - Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType); - - rectNode->setRect(QRectF((EllipseCount - i - 1) * (EllipseDiameter + EllipseOffset), (item->height() - EllipseDiameter) / 2, EllipseDiameter, EllipseDiameter)); - rectNode->setColor(bar->color()); - rectNode->update(); - - borderNode = borderNode->nextSibling(); - } -} - -QQuickUniversalProgressBar::QQuickUniversalProgressBar(QQuickItem *parent) - : QQuickItem(parent) -{ - setFlag(ItemHasContents); -} - -QColor QQuickUniversalProgressBar::color() const -{ - return m_color; -} - -void QQuickUniversalProgressBar::setColor(const QColor &color) -{ - if (m_color == color) - return; - - m_color = color; - update(); -} - -qreal QQuickUniversalProgressBar::progress() const -{ - return m_progress; -} - -void QQuickUniversalProgressBar::setProgress(qreal progress) -{ - if (progress == m_progress) - return; - - m_progress = progress; - update(); -} - -bool QQuickUniversalProgressBar::isIndeterminate() const -{ - return m_indeterminate; -} - -void QQuickUniversalProgressBar::setIndeterminate(bool indeterminate) -{ - if (indeterminate == m_indeterminate) - return; - - m_indeterminate = indeterminate; - setClip(m_indeterminate); - update(); -} - -void QQuickUniversalProgressBar::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data) -{ - QQuickItem::itemChange(change, data); - if (change == ItemVisibleHasChanged) - update(); -} - -QSGNode *QQuickUniversalProgressBar::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *) -{ - QQuickUniversalProgressBarNode *node = static_cast(oldNode); - if (isVisible() && width() > 0 && height() > 0) { - if (!node) - node = new QQuickUniversalProgressBarNode(this); - node->sync(this); - } else { - delete node; - node = nullptr; - } - return node; -} - -QT_END_NAMESPACE diff --git a/src/imports/controls/universal/impl/qquickuniversalprogressbar_p.h b/src/imports/controls/universal/impl/qquickuniversalprogressbar_p.h deleted file mode 100644 index 31cb4a32..00000000 --- a/src/imports/controls/universal/impl/qquickuniversalprogressbar_p.h +++ /dev/null @@ -1,91 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKUNIVERSALPROGRESSBAR_P_H -#define QQUICKUNIVERSALPROGRESSBAR_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include - -QT_BEGIN_NAMESPACE - -class QQuickUniversalProgressBar : public QQuickItem -{ - Q_OBJECT - Q_PROPERTY(QColor color READ color WRITE setColor FINAL) - Q_PROPERTY(qreal progress READ progress WRITE setProgress FINAL) - Q_PROPERTY(bool indeterminate READ isIndeterminate WRITE setIndeterminate FINAL) - QML_NAMED_ELEMENT(ProgressBarImpl) - QML_ADDED_IN_VERSION(2, 0) - -public: - explicit QQuickUniversalProgressBar(QQuickItem *parent = nullptr); - - QColor color() const; - void setColor(const QColor &color); - - qreal progress() const; - void setProgress(qreal progress); - - bool isIndeterminate() const; - void setIndeterminate(bool indeterminate); - -protected: - void itemChange(ItemChange change, const ItemChangeData &data) override; - QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override; - -private: - QColor m_color = Qt::black; - qreal m_progress = 0.0; - bool m_indeterminate = false; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickUniversalProgressBar) - -#endif // QQUICKUNIVERSALPROGRESSBAR_P_H diff --git a/src/imports/controls/universal/impl/qtquickcontrols2universalstyleimplplugin.cpp b/src/imports/controls/universal/impl/qtquickcontrols2universalstyleimplplugin.cpp deleted file mode 100644 index 91c43261..00000000 --- a/src/imports/controls/universal/impl/qtquickcontrols2universalstyleimplplugin.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include - -extern void qml_register_types_QtQuick_Controls_Universal_impl(); - -QT_BEGIN_NAMESPACE - -class QtQuickControls2UniversalStyleImplPlugin : public QQmlEngineExtensionPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) - -public: - QtQuickControls2UniversalStyleImplPlugin(QObject *parent = nullptr); -}; - -QtQuickControls2UniversalStyleImplPlugin::QtQuickControls2UniversalStyleImplPlugin(QObject *parent) - : QQmlEngineExtensionPlugin(parent) -{ - volatile auto registration = &qml_register_types_QtQuick_Controls_Universal_impl; - Q_UNUSED(registration); -} - -QT_END_NAMESPACE - -#include "qtquickcontrols2universalstyleimplplugin.moc" diff --git a/src/imports/controls/universal/qquickuniversalstyle.cpp b/src/imports/controls/universal/qquickuniversalstyle.cpp deleted file mode 100644 index 605cfce2..00000000 --- a/src/imports/controls/universal/qquickuniversalstyle.cpp +++ /dev/null @@ -1,618 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickuniversalstyle_p.h" - -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -static QRgb qquickuniversal_light_color(QQuickUniversalStyle::SystemColor role) -{ - static const QRgb colors[] = { - 0xFFFFFFFF, // SystemAltHighColor - 0x33FFFFFF, // SystemAltLowColor - 0x99FFFFFF, // SystemAltMediumColor - 0xCCFFFFFF, // SystemAltMediumHighColor - 0x66FFFFFF, // SystemAltMediumLowColor - 0xFF000000, // SystemBaseHighColor - 0x33000000, // SystemBaseLowColor - 0x99000000, // SystemBaseMediumColor - 0xCC000000, // SystemBaseMediumHighColor - 0x66000000, // SystemBaseMediumLowColor - 0xFF171717, // SystemChromeAltLowColor - 0xFF000000, // SystemChromeBlackHighColor - 0x33000000, // SystemChromeBlackLowColor - 0x66000000, // SystemChromeBlackMediumLowColor - 0xCC000000, // SystemChromeBlackMediumColor - 0xFFCCCCCC, // SystemChromeDisabledHighColor - 0xFF7A7A7A, // SystemChromeDisabledLowColor - 0xFFCCCCCC, // SystemChromeHighColor - 0xFFF2F2F2, // SystemChromeLowColor - 0xFFE6E6E6, // SystemChromeMediumColor - 0xFFF2F2F2, // SystemChromeMediumLowColor - 0xFFFFFFFF, // SystemChromeWhiteColor - 0x19000000, // SystemListLowColor - 0x33000000 // SystemListMediumColor - }; - return colors[role]; -} - -static QRgb qquickuniversal_dark_color(QQuickUniversalStyle::SystemColor role) -{ - static const QRgb colors[] = { - 0xFF000000, // SystemAltHighColor - 0x33000000, // SystemAltLowColor - 0x99000000, // SystemAltMediumColor - 0xCC000000, // SystemAltMediumHighColor - 0x66000000, // SystemAltMediumLowColor - 0xFFFFFFFF, // SystemBaseHighColor - 0x33FFFFFF, // SystemBaseLowColor - 0x99FFFFFF, // SystemBaseMediumColor - 0xCCFFFFFF, // SystemBaseMediumHighColor - 0x66FFFFFF, // SystemBaseMediumLowColor - 0xFFF2F2F2, // SystemChromeAltLowColor - 0xFF000000, // SystemChromeBlackHighColor - 0x33000000, // SystemChromeBlackLowColor - 0x66000000, // SystemChromeBlackMediumLowColor - 0xCC000000, // SystemChromeBlackMediumColor - 0xFF333333, // SystemChromeDisabledHighColor - 0xFF858585, // SystemChromeDisabledLowColor - 0xFF767676, // SystemChromeHighColor - 0xFF171717, // SystemChromeLowColor - 0xFF1F1F1F, // SystemChromeMediumColor - 0xFF2B2B2B, // SystemChromeMediumLowColor - 0xFFFFFFFF, // SystemChromeWhiteColor - 0x19FFFFFF, // SystemListLowColor - 0x33FFFFFF // SystemListMediumColor - }; - return colors[role]; -} - -static QRgb qquickuniversal_accent_color(QQuickUniversalStyle::Color accent) -{ - static const QRgb colors[] = { - 0xFFA4C400, // Lime - 0xFF60A917, // Green - 0xFF008A00, // Emerald - 0xFF00ABA9, // Teal - 0xFF1BA1E2, // Cyan - 0xFF3E65FF, // Cobalt - 0xFF6A00FF, // Indigo - 0xFFAA00FF, // Violet - 0xFFF472D0, // Pink - 0xFFD80073, // Magenta - 0xFFA20025, // Crimson - 0xFFE51400, // Red - 0xFFFA6800, // Orange - 0xFFF0A30A, // Amber - 0xFFE3C800, // Yellow - 0xFF825A2C, // Brown - 0xFF6D8764, // Olive - 0xFF647687, // Steel - 0xFF76608A, // Mauve - 0xFF87794E // Taupe - }; - return colors[accent]; -} - -static QQuickUniversalStyle::Theme qquickuniversal_effective_theme(QQuickUniversalStyle::Theme theme) -{ - if (theme == QQuickUniversalStyle::System) - theme = QQuickStylePrivate::isDarkSystemTheme() ? QQuickUniversalStyle::Dark : QQuickUniversalStyle::Light; - return theme; -} - -// If no value was inherited from a parent or explicitly set, the "global" values are used. -// The initial, default values of the globals are hard-coded here, but the environment -// variables and .conf file override them if specified. -static QQuickUniversalStyle::Theme GlobalTheme = QQuickUniversalStyle::Light; -static QRgb GlobalAccent = qquickuniversal_accent_color(QQuickUniversalStyle::Cobalt); -static QRgb GlobalForeground = qquickuniversal_light_color(QQuickUniversalStyle::BaseHigh); -static QRgb GlobalBackground = qquickuniversal_light_color(QQuickUniversalStyle::AltHigh); -// These represent whether a global foreground/background was set. -// Each style's m_hasForeground/m_hasBackground are initialized to these values. -static bool HasGlobalForeground = false; -static bool HasGlobalBackground = false; - -QQuickUniversalStyle::QQuickUniversalStyle(QObject *parent) : QQuickAttachedObject(parent), - m_hasForeground(HasGlobalForeground), m_hasBackground(HasGlobalBackground), m_theme(GlobalTheme), - m_accent(GlobalAccent), m_foreground(GlobalForeground), m_background(GlobalBackground) -{ - init(); -} - -QQuickUniversalStyle *QQuickUniversalStyle::qmlAttachedProperties(QObject *object) -{ - return new QQuickUniversalStyle(object); -} - -QQuickUniversalStyle::Theme QQuickUniversalStyle::theme() const -{ - return m_theme; -} - -void QQuickUniversalStyle::setTheme(Theme theme) -{ - theme = qquickuniversal_effective_theme(theme); - m_explicitTheme = true; - if (m_theme == theme) - return; - - m_theme = theme; - propagateTheme(); - emit themeChanged(); - emit paletteChanged(); - emit foregroundChanged(); - emit backgroundChanged(); -} - -void QQuickUniversalStyle::inheritTheme(Theme theme) -{ - if (m_explicitTheme || m_theme == theme) - return; - - m_theme = theme; - propagateTheme(); - emit themeChanged(); - emit paletteChanged(); - emit foregroundChanged(); - emit backgroundChanged(); -} - -void QQuickUniversalStyle::propagateTheme() -{ - const auto styles = attachedChildren(); - for (QQuickAttachedObject *child : styles) { - QQuickUniversalStyle *universal = qobject_cast(child); - if (universal) - universal->inheritTheme(m_theme); - } -} - -void QQuickUniversalStyle::resetTheme() -{ - if (!m_explicitTheme) - return; - - m_explicitTheme = false; - QQuickUniversalStyle *universal = qobject_cast(attachedParent()); - inheritTheme(universal ? universal->theme() : GlobalTheme); -} - -QVariant QQuickUniversalStyle::accent() const -{ - return QColor::fromRgba(m_accent); -} - -void QQuickUniversalStyle::setAccent(const QVariant &var) -{ - QRgb accent = 0; - if (!variantToRgba(var, "accent", &accent)) - return; - - m_explicitAccent = true; - if (m_accent == accent) - return; - - m_accent = accent; - propagateAccent(); - emit accentChanged(); -} - -void QQuickUniversalStyle::inheritAccent(QRgb accent) -{ - if (m_explicitAccent || m_accent == accent) - return; - - m_accent = accent; - propagateAccent(); - emit accentChanged(); -} - -void QQuickUniversalStyle::propagateAccent() -{ - const auto styles = attachedChildren(); - for (QQuickAttachedObject *child : styles) { - QQuickUniversalStyle *universal = qobject_cast(child); - if (universal) - universal->inheritAccent(m_accent); - } -} - -void QQuickUniversalStyle::resetAccent() -{ - if (!m_explicitAccent) - return; - - m_explicitAccent = false; - QQuickUniversalStyle *universal = qobject_cast(attachedParent()); - inheritAccent(universal ? universal->m_accent : GlobalAccent); -} - -QVariant QQuickUniversalStyle::foreground() const -{ - if (m_hasForeground) - return QColor::fromRgba(m_foreground); - return baseHighColor(); -} - -void QQuickUniversalStyle::setForeground(const QVariant &var) -{ - QRgb foreground = 0; - if (!variantToRgba(var, "foreground", &foreground)) - return; - - m_hasForeground = true; - m_explicitForeground = true; - if (m_foreground == foreground) - return; - - m_foreground = foreground; - propagateForeground(); - emit foregroundChanged(); -} - -void QQuickUniversalStyle::inheritForeground(QRgb foreground, bool has) -{ - if (m_explicitForeground || m_foreground == foreground) - return; - - m_hasForeground = has; - m_foreground = foreground; - propagateForeground(); - emit foregroundChanged(); -} - -void QQuickUniversalStyle::propagateForeground() -{ - const auto styles = attachedChildren(); - for (QQuickAttachedObject *child : styles) { - QQuickUniversalStyle *universal = qobject_cast(child); - if (universal) - universal->inheritForeground(m_foreground, m_hasForeground); - } -} - -void QQuickUniversalStyle::resetForeground() -{ - if (!m_explicitForeground) - return; - - m_hasForeground = false; - m_explicitForeground = false; - QQuickUniversalStyle *universal = qobject_cast(attachedParent()); - inheritForeground(universal ? universal->m_foreground : GlobalForeground, universal ? universal->m_hasForeground : false); -} - -QVariant QQuickUniversalStyle::background() const -{ - if (m_hasBackground) - return QColor::fromRgba(m_background); - return altHighColor(); -} - -void QQuickUniversalStyle::setBackground(const QVariant &var) -{ - QRgb background = 0; - if (!variantToRgba(var, "background", &background)) - return; - - m_hasBackground = true; - m_explicitBackground = true; - if (m_background == background) - return; - - m_background = background; - propagateBackground(); - emit backgroundChanged(); -} - -void QQuickUniversalStyle::inheritBackground(QRgb background, bool has) -{ - if (m_explicitBackground || m_background == background) - return; - - m_hasBackground = has; - m_background = background; - propagateBackground(); - emit backgroundChanged(); -} - -void QQuickUniversalStyle::propagateBackground() -{ - const auto styles = attachedChildren(); - for (QQuickAttachedObject *child : styles) { - QQuickUniversalStyle *universal = qobject_cast(child); - if (universal) - universal->inheritBackground(m_background, m_hasBackground); - } -} - -void QQuickUniversalStyle::resetBackground() -{ - if (!m_explicitBackground) - return; - - m_hasBackground = false; - m_explicitBackground = false; - QQuickUniversalStyle *universal = qobject_cast(attachedParent()); - inheritBackground(universal ? universal->m_background : GlobalBackground, universal ? universal->m_hasBackground : false); -} - -QColor QQuickUniversalStyle::color(Color color) const -{ - return qquickuniversal_accent_color(color); -} - -QColor QQuickUniversalStyle::altHighColor() const -{ - return systemColor(AltHigh); -} - -QColor QQuickUniversalStyle::altLowColor() const -{ - return systemColor(AltLow); -} - -QColor QQuickUniversalStyle::altMediumColor() const -{ - return systemColor(AltMedium); -} - -QColor QQuickUniversalStyle::altMediumHighColor() const -{ - return systemColor(AltMediumHigh); -} - -QColor QQuickUniversalStyle::altMediumLowColor() const -{ - return systemColor(AltMediumLow); -} - -QColor QQuickUniversalStyle::baseHighColor() const -{ - return systemColor(BaseHigh); -} - -QColor QQuickUniversalStyle::baseLowColor() const -{ - return systemColor(BaseLow); -} - -QColor QQuickUniversalStyle::baseMediumColor() const -{ - return systemColor(BaseMedium); -} - -QColor QQuickUniversalStyle::baseMediumHighColor() const -{ - return systemColor(BaseMediumHigh); -} - -QColor QQuickUniversalStyle::baseMediumLowColor() const -{ - return systemColor(BaseMediumLow); -} - -QColor QQuickUniversalStyle::chromeAltLowColor() const -{ - return systemColor(ChromeAltLow); -} - -QColor QQuickUniversalStyle::chromeBlackHighColor() const -{ - return systemColor(ChromeBlackHigh); -} - -QColor QQuickUniversalStyle::chromeBlackLowColor() const -{ - return systemColor(ChromeBlackLow); -} - -QColor QQuickUniversalStyle::chromeBlackMediumLowColor() const -{ - return systemColor(ChromeBlackMediumLow); -} - -QColor QQuickUniversalStyle::chromeBlackMediumColor() const -{ - return systemColor(ChromeBlackMedium); -} - -QColor QQuickUniversalStyle::chromeDisabledHighColor() const -{ - return systemColor(ChromeDisabledHigh); -} - -QColor QQuickUniversalStyle::chromeDisabledLowColor() const -{ - return systemColor(ChromeDisabledLow); -} - -QColor QQuickUniversalStyle::chromeHighColor() const -{ - return systemColor(ChromeHigh); -} - -QColor QQuickUniversalStyle::chromeLowColor() const -{ - return systemColor(ChromeLow); -} - -QColor QQuickUniversalStyle::chromeMediumColor() const -{ - return systemColor(ChromeMedium); -} - -QColor QQuickUniversalStyle::chromeMediumLowColor() const -{ - return systemColor(ChromeMediumLow); -} - -QColor QQuickUniversalStyle::chromeWhiteColor() const -{ - return systemColor(ChromeWhite); -} - -QColor QQuickUniversalStyle::listLowColor() const -{ - return systemColor(ListLow); -} - -QColor QQuickUniversalStyle::listMediumColor() const -{ - return systemColor(ListMedium); -} - -QColor QQuickUniversalStyle::systemColor(SystemColor role) const -{ - return QColor::fromRgba(m_theme == QQuickUniversalStyle::Dark ? qquickuniversal_dark_color(role) : qquickuniversal_light_color(role)); -} - -void QQuickUniversalStyle::attachedParentChange(QQuickAttachedObject *newParent, QQuickAttachedObject *oldParent) -{ - Q_UNUSED(oldParent); - QQuickUniversalStyle *universal = qobject_cast(newParent); - if (universal) { - inheritTheme(universal->theme()); - inheritAccent(universal->m_accent); - inheritForeground(universal->m_foreground, universal->m_hasForeground); - inheritBackground(universal->m_background, universal->m_hasBackground); - } -} - -template -static Enum toEnumValue(const QByteArray &value, bool *ok) -{ - QMetaEnum enumeration = QMetaEnum::fromType(); - return static_cast(enumeration.keyToValue(value, ok)); -} - -static QByteArray resolveSetting(const QByteArray &env, const QSharedPointer &settings, const QString &name) -{ - QByteArray value = qgetenv(env); -#if QT_CONFIG(settings) - if (value.isNull() && !settings.isNull()) - value = settings->value(name).toByteArray(); -#endif - return value; -} - -void QQuickUniversalStyle::initGlobals() -{ - QSharedPointer settings = QQuickStylePrivate::settings(QStringLiteral("Universal")); - - bool ok = false; - QByteArray themeValue = resolveSetting("QT_QUICK_CONTROLS_UNIVERSAL_THEME", settings, QStringLiteral("Theme")); - Theme themeEnum = toEnumValue(themeValue, &ok); - if (ok) - GlobalTheme = qquickuniversal_effective_theme(themeEnum); - else if (!themeValue.isEmpty()) - qWarning().nospace().noquote() << "Universal: unknown theme value: " << themeValue; - - QByteArray accentValue = resolveSetting("QT_QUICK_CONTROLS_UNIVERSAL_ACCENT", settings, QStringLiteral("Accent")); - Color accentEnum = toEnumValue(accentValue, &ok); - if (ok) { - GlobalAccent = qquickuniversal_accent_color(accentEnum); - } else if (!accentValue.isEmpty()) { - QColor color(accentValue.constData()); - if (color.isValid()) - GlobalAccent = color.rgba(); - else - qWarning().nospace().noquote() << "Universal: unknown accent value: " << accentValue; - } - - QByteArray foregroundValue = resolveSetting("QT_QUICK_CONTROLS_UNIVERSAL_FOREGROUND", settings, QStringLiteral("Foreground")); - Color foregroundEnum = toEnumValue(foregroundValue, &ok); - if (ok) { - GlobalForeground = qquickuniversal_accent_color(foregroundEnum); - HasGlobalForeground = true; - } else if (!foregroundValue.isEmpty()) { - QColor color(foregroundValue.constData()); - if (color.isValid()) { - GlobalForeground = color.rgba(); - HasGlobalForeground = true; - } else { - qWarning().nospace().noquote() << "Universal: unknown foreground value: " << foregroundValue; - } - } - - QByteArray backgroundValue = resolveSetting("QT_QUICK_CONTROLS_UNIVERSAL_BACKGROUND", settings, QStringLiteral("Background")); - Color backgroundEnum = toEnumValue(backgroundValue, &ok); - if (ok) { - GlobalBackground = qquickuniversal_accent_color(backgroundEnum); - HasGlobalBackground = true; - } else if (!backgroundValue.isEmpty()) { - QColor color(backgroundValue.constData()); - if (color.isValid()) { - GlobalBackground = color.rgba(); - HasGlobalBackground = true; - } else { - qWarning().nospace().noquote() << "Universal: unknown background value: " << backgroundValue; - } - } -} - -bool QQuickUniversalStyle::variantToRgba(const QVariant &var, const char *name, QRgb *rgba) const -{ - if (var.metaType().id() == QMetaType::Int) { - int val = var.toInt(); - if (val < Lime || val > Taupe) { - qmlWarning(parent()) << "unknown Universal." << name << " value: " << val; - return false; - } - *rgba = qquickuniversal_accent_color(static_cast(val)); - } else { - int val = QMetaEnum::fromType().keyToValue(var.toByteArray()); - if (val != -1) { - *rgba = qquickuniversal_accent_color(static_cast(val)); - } else { - QColor color(var.toString()); - if (!color.isValid()) { - qmlWarning(parent()) << "unknown Universal." << name << " value: " << var.toString(); - return false; - } - *rgba = color.rgba(); - } - } - return true; -} - -QT_END_NAMESPACE diff --git a/src/imports/controls/universal/qquickuniversalstyle_p.h b/src/imports/controls/universal/qquickuniversalstyle_p.h deleted file mode 100644 index 50b07071..00000000 --- a/src/imports/controls/universal/qquickuniversalstyle_p.h +++ /dev/null @@ -1,246 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKUNIVERSALSTYLE_P_H -#define QQUICKUNIVERSALSTYLE_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include - -QT_BEGIN_NAMESPACE - -class QQuickUniversalStylePrivate; - -class QQuickUniversalStyle : public QQuickAttachedObject -{ - Q_OBJECT - Q_PROPERTY(Theme theme READ theme WRITE setTheme RESET resetTheme NOTIFY themeChanged FINAL) - Q_PROPERTY(QVariant accent READ accent WRITE setAccent RESET resetAccent NOTIFY accentChanged FINAL) - Q_PROPERTY(QVariant foreground READ foreground WRITE setForeground RESET resetForeground NOTIFY foregroundChanged FINAL) - Q_PROPERTY(QVariant background READ background WRITE setBackground RESET resetBackground NOTIFY backgroundChanged FINAL) - - Q_PROPERTY(QColor altHighColor READ altHighColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor altLowColor READ altLowColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor altMediumColor READ altMediumColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor altMediumHighColor READ altMediumHighColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor altMediumLowColor READ altMediumLowColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor baseHighColor READ baseHighColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor baseLowColor READ baseLowColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor baseMediumColor READ baseMediumColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor baseMediumHighColor READ baseMediumHighColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor baseMediumLowColor READ baseMediumLowColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor chromeAltLowColor READ chromeAltLowColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor chromeBlackHighColor READ chromeBlackHighColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor chromeBlackLowColor READ chromeBlackLowColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor chromeBlackMediumLowColor READ chromeBlackMediumLowColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor chromeBlackMediumColor READ chromeBlackMediumColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor chromeDisabledHighColor READ chromeDisabledHighColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor chromeDisabledLowColor READ chromeDisabledLowColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor chromeHighColor READ chromeHighColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor chromeLowColor READ chromeLowColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor chromeMediumColor READ chromeMediumColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor chromeMediumLowColor READ chromeMediumLowColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor chromeWhiteColor READ chromeWhiteColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor listLowColor READ listLowColor NOTIFY paletteChanged FINAL) - Q_PROPERTY(QColor listMediumColor READ listMediumColor NOTIFY paletteChanged FINAL) - - QML_NAMED_ELEMENT(Universal) - QML_ATTACHED(QQuickUniversalStyle) - QML_UNCREATABLE("") - QML_ADDED_IN_VERSION(2, 0) - -public: - explicit QQuickUniversalStyle(QObject *parent = nullptr); - - static QQuickUniversalStyle *qmlAttachedProperties(QObject *object); - - enum Theme { Light, Dark, System }; - Q_ENUM(Theme) - - Theme theme() const; - void setTheme(Theme theme); - void inheritTheme(Theme theme); - void propagateTheme(); - void resetTheme(); - - enum Color { - Lime, - Green, - Emerald, - Teal, - Cyan, - Cobalt, - Indigo, - Violet, - Pink, - Magenta, - Crimson, - Red, - Orange, - Amber, - Yellow, - Brown, - Olive, - Steel, - Mauve, - Taupe - }; - Q_ENUM(Color) - - QVariant accent() const; - void setAccent(const QVariant &accent); - void inheritAccent(QRgb accent); - void propagateAccent(); - void resetAccent(); - - QVariant foreground() const; - void setForeground(const QVariant &foreground); - void inheritForeground(QRgb foreground, bool has); - void propagateForeground(); - void resetForeground(); - - QVariant background() const; - void setBackground(const QVariant &background); - void inheritBackground(QRgb background, bool has); - void propagateBackground(); - void resetBackground(); - - Q_INVOKABLE QColor color(Color color) const; - - QColor altHighColor() const; - QColor altLowColor() const; - QColor altMediumColor() const; - QColor altMediumHighColor() const; - QColor altMediumLowColor() const; - QColor baseHighColor() const; - QColor baseLowColor() const; - QColor baseMediumColor() const; - QColor baseMediumHighColor() const; - QColor baseMediumLowColor() const; - QColor chromeAltLowColor() const; - QColor chromeBlackHighColor() const; - QColor chromeBlackLowColor() const; - QColor chromeBlackMediumLowColor() const; - QColor chromeBlackMediumColor() const; - QColor chromeDisabledHighColor() const; - QColor chromeDisabledLowColor() const; - QColor chromeHighColor() const; - QColor chromeLowColor() const; - QColor chromeMediumColor() const; - QColor chromeMediumLowColor() const; - QColor chromeWhiteColor() const; - QColor listLowColor() const; - QColor listMediumColor() const; - - enum SystemColor { - AltHigh, - AltLow, - AltMedium, - AltMediumHigh, - AltMediumLow, - BaseHigh, - BaseLow, - BaseMedium, - BaseMediumHigh, - BaseMediumLow, - ChromeAltLow, - ChromeBlackHigh, - ChromeBlackLow, - ChromeBlackMediumLow, - ChromeBlackMedium, - ChromeDisabledHigh, - ChromeDisabledLow, - ChromeHigh, - ChromeLow, - ChromeMedium, - ChromeMediumLow, - ChromeWhite, - ListLow, - ListMedium - }; - - QColor systemColor(SystemColor role) const; - - static void initGlobals(); - -Q_SIGNALS: - void themeChanged(); - void accentChanged(); - void foregroundChanged(); - void backgroundChanged(); - void paletteChanged(); - -protected: - void attachedParentChange(QQuickAttachedObject *newParent, QQuickAttachedObject *oldParent) override; - -private: - bool variantToRgba(const QVariant &var, const char *name, QRgb *rgba) const; - - // These reflect whether a color value was explicitly set on the specific - // item that this attached style object represents. - bool m_explicitTheme = false; - bool m_explicitAccent = false; - bool m_explicitForeground = false; - bool m_explicitBackground = false; - // These will be true when this item has an explicit or inherited foreground/background - // color, or these colors were declared globally via settings (e.g. conf or env vars). - // Some color properties of the style will return different values depending on whether - // or not these are set. - bool m_hasForeground = false; - bool m_hasBackground = false; - // The actual values for this item, whether explicit, inherited or globally set. - Theme m_theme = Light; - QRgb m_accent = Qt::blue; - QRgb m_foreground = Qt::black; - QRgb m_background = Qt::white; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPEINFO(QQuickUniversalStyle, QML_HAS_ATTACHED_PROPERTIES) - -#endif // QQUICKUNIVERSALSTYLE_P_H diff --git a/src/imports/controls/universal/qquickuniversaltheme.cpp b/src/imports/controls/universal/qquickuniversaltheme.cpp deleted file mode 100644 index 46f7c52e..00000000 --- a/src/imports/controls/universal/qquickuniversaltheme.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickuniversaltheme_p.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -void QQuickUniversalTheme::initialize(QQuickTheme *theme) -{ - QFont systemFont; - QFont groupBoxTitleFont; - QFont tabButtonFont; - - const QFont font(QLatin1String("Segoe UI")); - if (QFontInfo(font).family() == QLatin1String("Segoe UI")) { - const QStringList families{font.family()}; - systemFont.setFamilies(families); - groupBoxTitleFont.setFamilies(families); - tabButtonFont.setFamilies(families); - } - - systemFont.setPixelSize(15); - theme->setFont(QQuickTheme::System, systemFont); - - groupBoxTitleFont.setPixelSize(15); - groupBoxTitleFont.setWeight(QFont::DemiBold); - theme->setFont(QQuickTheme::GroupBox, groupBoxTitleFont); - - tabButtonFont.setPixelSize(24); - tabButtonFont.setWeight(QFont::Light); - theme->setFont(QQuickTheme::TabBar, tabButtonFont); -} - -QT_END_NAMESPACE diff --git a/src/imports/controls/universal/qquickuniversaltheme_p.h b/src/imports/controls/universal/qquickuniversaltheme_p.h deleted file mode 100644 index f762d0e3..00000000 --- a/src/imports/controls/universal/qquickuniversaltheme_p.h +++ /dev/null @@ -1,65 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKUNIVERSALTHEME_P_H -#define QQUICKUNIVERSALTHEME_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include - -QT_BEGIN_NAMESPACE - -class QQuickTheme; - -class QQuickUniversalTheme -{ -public: - static void initialize(QQuickTheme *theme); -}; - -QT_END_NAMESPACE - -#endif // QQUICKUNIVERSALTHEME_P_H diff --git a/src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp b/src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp deleted file mode 100644 index e3bbc00a..00000000 --- a/src/imports/controls/universal/qtquickcontrols2universalstyleplugin.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickuniversalstyle_p.h" -#include "qquickuniversaltheme_p.h" - -#include -#include - -extern void qml_register_types_QtQuick_Controls_Universal(); - -QT_BEGIN_NAMESPACE - -class QtQuickControls2UniversalStylePlugin : public QQuickStylePlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) - -public: - QtQuickControls2UniversalStylePlugin(QObject *parent = nullptr); - - QString name() const override; - void initializeTheme(QQuickTheme *theme) override; - - QQuickUniversalTheme theme; -}; - -QtQuickControls2UniversalStylePlugin::QtQuickControls2UniversalStylePlugin(QObject *parent) : QQuickStylePlugin(parent) -{ - volatile auto registration = &qml_register_types_QtQuick_Controls_Universal; - Q_UNUSED(registration); -} - -QString QtQuickControls2UniversalStylePlugin::name() const -{ - return QStringLiteral("Universal"); -} - -void QtQuickControls2UniversalStylePlugin::initializeTheme(QQuickTheme *theme) -{ - QQuickUniversalStyle::initGlobals(); - this->theme.initialize(theme); -} - -QT_END_NAMESPACE - -#include "qtquickcontrols2universalstyleplugin.moc" diff --git a/src/imports/controls/universal/qtquickcontrols2universalstyleplugin.qrc b/src/imports/controls/universal/qtquickcontrols2universalstyleplugin.qrc deleted file mode 100644 index bfcb0974..00000000 --- a/src/imports/controls/universal/qtquickcontrols2universalstyleplugin.qrc +++ /dev/null @@ -1,20 +0,0 @@ - - - images/checkmark.png - images/checkmark@2x.png - images/checkmark@3x.png - images/checkmark@4x.png - images/downarrow.png - images/downarrow@2x.png - images/downarrow@3x.png - images/downarrow@4x.png - images/leftarrow.png - images/leftarrow@2x.png - images/leftarrow@3x.png - images/leftarrow@4x.png - images/rightarrow.png - images/rightarrow@2x.png - images/rightarrow@3x.png - images/rightarrow@4x.png - - diff --git a/src/imports/controls/universal/universal.pri b/src/imports/controls/universal/universal.pri deleted file mode 100644 index b946a8f3..00000000 --- a/src/imports/controls/universal/universal.pri +++ /dev/null @@ -1,59 +0,0 @@ -HEADERS += \ - $$PWD/qquickuniversalstyle_p.h \ - $$PWD/qquickuniversaltheme_p.h - -SOURCES += \ - $$PWD/qquickuniversalstyle.cpp \ - $$PWD/qquickuniversaltheme.cpp - -QML_FILES += \ - $$PWD/ApplicationWindow.qml \ - $$PWD/BusyIndicator.qml \ - $$PWD/Button.qml \ - $$PWD/CheckBox.qml \ - $$PWD/CheckDelegate.qml \ - $$PWD/ComboBox.qml \ - $$PWD/DelayButton.qml \ - $$PWD/Dial.qml \ - $$PWD/Dialog.qml \ - $$PWD/DialogButtonBox.qml \ - $$PWD/Drawer.qml \ - $$PWD/Frame.qml \ - $$PWD/GroupBox.qml \ - $$PWD/HorizontalHeaderView.qml \ - $$PWD/ItemDelegate.qml \ - $$PWD/Label.qml \ - $$PWD/Menu.qml \ - $$PWD/MenuBar.qml \ - $$PWD/MenuBarItem.qml \ - $$PWD/MenuItem.qml \ - $$PWD/MenuSeparator.qml \ - $$PWD/Page.qml \ - $$PWD/PageIndicator.qml \ - $$PWD/Pane.qml \ - $$PWD/Popup.qml \ - $$PWD/ProgressBar.qml \ - $$PWD/RadioButton.qml \ - $$PWD/RadioDelegate.qml \ - $$PWD/RangeSlider.qml \ - $$PWD/RoundButton.qml \ - $$PWD/ScrollView.qml \ - $$PWD/ScrollBar.qml \ - $$PWD/ScrollIndicator.qml \ - $$PWD/Slider.qml \ - $$PWD/SpinBox.qml \ - $$PWD/SplitView.qml \ - $$PWD/StackView.qml \ - $$PWD/SwipeDelegate.qml \ - $$PWD/SwitchDelegate.qml \ - $$PWD/Switch.qml \ - $$PWD/TabBar.qml \ - $$PWD/TabButton.qml \ - $$PWD/TextArea.qml \ - $$PWD/TextField.qml \ - $$PWD/ToolBar.qml \ - $$PWD/ToolButton.qml \ - $$PWD/ToolSeparator.qml \ - $$PWD/ToolTip.qml \ - $$PWD/Tumbler.qml \ - $$PWD/VerticalHeaderView.qml diff --git a/src/imports/controls/windows/Button.qml b/src/imports/controls/windows/Button.qml deleted file mode 100644 index 5480d7f7..00000000 --- a/src/imports/controls/windows/Button.qml +++ /dev/null @@ -1,95 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.Button { - id: control - - readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem - - // Since QQuickControl will subtract the insets from the control size to - // figure out the background size, we need to reverse that here, otherwise - // the control ends up too big. - implicitWidth: implicitBackgroundWidth + leftInset + rightInset - implicitHeight: implicitBackgroundHeight + topInset + bottomInset - - font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined - - leftPadding: __nativeBackground ? background.contentPadding.left : 5 - rightPadding: __nativeBackground ? background.contentPadding.right : 5 - topPadding: __nativeBackground ? background.contentPadding.top : 5 - bottomPadding: __nativeBackground ? background.contentPadding.bottom : 5 - - background: NativeStyle.Button { - control: control - contentWidth: contentItem.implicitWidth - contentHeight: contentItem.implicitHeight - useNinePatchImage: false - overrideState: NativeStyle.StyleItem.NeverHovered - } - - NativeStyle.Button { - control: control - x: background.x - y: background.y - width: background.width - height: background.height - useNinePatchImage: false - overrideState: NativeStyle.StyleItem.AlwaysHovered - opacity: control.hovered ? 1 : 0 - Behavior on opacity { NumberAnimation { duration: parent.transitionDuration } } - } - - icon.width: 24 - icon.height: 24 - icon.color: control.checked || control.highlighted ? control.palette.brightText : - control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText - } -} diff --git a/src/imports/controls/windows/CMakeLists.txt b/src/imports/controls/windows/CMakeLists.txt deleted file mode 100644 index 0b552919..00000000 --- a/src/imports/controls/windows/CMakeLists.txt +++ /dev/null @@ -1,103 +0,0 @@ -# Generated from windows.pro. - -##################################################################### -## qtquickcontrols2windowsstyleplugin Plugin: -##################################################################### - -qt_internal_add_qml_module(qtquickcontrols2windowsstyleplugin - URI "QtQuick.Controls.Windows" - VERSION "${PROJECT_VERSION}" - CLASSNAME QtQuickControls2WindowsStylePlugin - IMPORTS - QtQuick.Controls.Fusion/auto - PAST_MAJOR_VERSIONS 2 - GENERATE_QMLTYPES - INSTALL_QMLTYPES - SOURCES - qtquickcontrols2windowsstyleplugin.cpp - DEFINES - QT_NO_CAST_FROM_ASCII - QT_NO_CAST_TO_ASCII - LIBRARIES - Qt::CorePrivate - Qt::GuiPrivate - Qt::QmlPrivate - Qt::QuickControls2Private - Qt::QuickPrivate - Qt::QuickTemplates2Private - PUBLIC_LIBRARIES - Qt::Core - Qt::Gui - Qt::Qml - Qt::Quick - Qt::QuickControls2 - Qt::QuickTemplates2 -) - -#### Keys ignored in scope 1:.:.:windows.pro:: -# OTHER_FILES = "qmldir" "$$QML_FILES" -# QML_IMPORT_NAME = "QtQuick.Controls.Windows" -# QML_IMPORT_VERSION = "$$QT_VERSION" -# QML_PAST_MAJOR_VERSIONS = "2" -# TARGETPATH = "QtQuick/Controls/Windows" -# _REQUIREMENTS = "qtConfig(quickcontrols2-windows)" - -set(qml_files - "Button.qml" - "CheckBox.qml" - "ComboBox.qml" - "Frame.qml" - "GroupBox.qml" - "ProgressBar.qml" - "RadioButton.qml" - "Slider.qml" - "SpinBox.qml" - "TextArea.qml" - "TextField.qml" - "ScrollBar.qml" - "ScrollView.qml" -) -set_source_files_properties(Button.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(CheckBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ComboBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Frame.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(GroupBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ProgressBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(RadioButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(Slider.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(SpinBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TextArea.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(TextField.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ScrollBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(ScrollView.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) - -qt6_target_qml_files(qtquickcontrols2windowsstyleplugin - FILES - ${qml_files} -) diff --git a/src/imports/controls/windows/CheckBox.qml b/src/imports/controls/windows/CheckBox.qml deleted file mode 100644 index 03778c4f..00000000 --- a/src/imports/controls/windows/CheckBox.qml +++ /dev/null @@ -1,107 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.NativeStyle as NativeStyle - -T.CheckBox { - id: control - - readonly property bool nativeIndicator: indicator instanceof NativeStyle.StyleItem - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - font.pixelSize: nativeIndicator ? indicator.styleFont(control).pixelSize : undefined - - spacing: nativeIndicator ? 0 : 6 - padding: nativeIndicator ? 0 : 6 - - indicator: NativeStyle.CheckBox { - control: control - y: control.topPadding + (control.availableHeight - height) >> 1 - contentWidth: contentItem.implicitWidth - contentHeight: contentItem.implicitHeight - useNinePatchImage: false - overrideState: NativeStyle.StyleItem.NeverHovered - } - - NativeStyle.CheckBox { - control: control - x: indicator.x - y: indicator.y - z: 99 // Needs to be above the "unhovered" indicator - width: indicator.width - height: indicator.height - useNinePatchImage: false - overrideState: NativeStyle.StyleItem.AlwaysHovered - opacity: control.hovered ? 1 : 0 - Behavior on opacity { NumberAnimation { duration: parent.transitionDuration } } - } - - contentItem: CheckLabel { - text: control.text - font: control.font - color: control.palette.windowText - - // For some reason, the other styles set padding here (in the delegate), instead of in - // the control above. And they also adjust the indicator position by setting x and y - // explicitly (instead of using insets). So we follow the same pattern to ensure that - // setting a custom contentItem delegate from the app will end up looking the same for - // all styles. But this should probably be fixed for all styles (to make them work the - // same way as e.g Buttons). - leftPadding: { - if (nativeIndicator) - indicator.contentPadding.left - else - indicator && !mirrored ? indicator.width + spacing : 0 - } - - topPadding: nativeIndicator ? indicator.contentPadding.top : 0 - rightPadding: { - if (nativeIndicator) - indicator.contentPadding.right - else - indicator && mirrored ? indicator.width + spacing : 0 - } - } -} diff --git a/src/imports/controls/windows/ComboBox.qml b/src/imports/controls/windows/ComboBox.qml deleted file mode 100644 index 237d90b5..00000000 --- a/src/imports/controls/windows/ComboBox.qml +++ /dev/null @@ -1,130 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Window -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.ComboBox { - id: control - - readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding, - 90 /* minimum */ ) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined - - leftPadding: __nativeBackground ? background.contentPadding.left : 5 - rightPadding: __nativeBackground ? background.contentPadding.right : 5 - topPadding: __nativeBackground ? background.contentPadding.top : 5 - bottomPadding: __nativeBackground ? background.contentPadding.bottom : 5 - - contentItem: T.TextField { - implicitWidth: contentWidth - implicitHeight: contentHeight - text: control.editable ? control.editText : control.displayText - - enabled: control.editable - autoScroll: control.editable - readOnly: control.down - inputMethodHints: control.inputMethodHints - validator: control.validator - selectByMouse: control.selectTextByMouse - - font: control.font - color: control.editable ? control.palette.text : control.palette.buttonText - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - verticalAlignment: Text.AlignVCenter - } - - background: NativeStyle.ComboBox { - control: control - contentWidth: contentItem.implicitWidth - contentHeight: contentItem.implicitHeight - useNinePatchImage: false - } - - delegate: ItemDelegate { - width: ListView.view.width - text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData - palette.text: control.palette.text - palette.highlightedText: control.palette.highlightedText - font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal - highlighted: control.highlightedIndex === index - hoverEnabled: control.hoverEnabled - } - - popup: T.Popup { - readonly property var layoutMargins: control.__nativeBackground ? control.background.layoutMargins : null - x: layoutMargins ? layoutMargins.left : 0 - y: control.height - (layoutMargins ? layoutMargins.bottom : 0) - width: control.width - (layoutMargins ? layoutMargins.left + layoutMargins.right : 0) - height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin) - topMargin: 6 - bottomMargin: 6 - - contentItem: ListView { - clip: true - implicitHeight: contentHeight - model: control.delegateModel - currentIndex: control.highlightedIndex - highlightMoveDuration: 0 - - Rectangle { - z: 10 - width: parent.width - height: parent.height - color: "transparent" - border.color: control.palette.mid - } - - T.ScrollIndicator.vertical: ScrollIndicator { } - } - - background: Rectangle { - color: control.palette.window - } - } -} diff --git a/src/imports/controls/windows/Frame.qml b/src/imports/controls/windows/Frame.qml deleted file mode 100644 index f16a0835..00000000 --- a/src/imports/controls/windows/Frame.qml +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.NativeStyle as NativeStyle - -NativeStyle.DefaultFrame { -} diff --git a/src/imports/controls/windows/GroupBox.qml b/src/imports/controls/windows/GroupBox.qml deleted file mode 100644 index 4ffbaae6..00000000 --- a/src/imports/controls/windows/GroupBox.qml +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.NativeStyle as NativeStyle - -NativeStyle.DefaultGroupBox { -} diff --git a/src/imports/controls/windows/ProgressBar.qml b/src/imports/controls/windows/ProgressBar.qml deleted file mode 100644 index 59a1689d..00000000 --- a/src/imports/controls/windows/ProgressBar.qml +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.NativeStyle as NativeStyle - -NativeStyle.DefaultProgressBar { -} diff --git a/src/imports/controls/windows/RadioButton.qml b/src/imports/controls/windows/RadioButton.qml deleted file mode 100644 index 82b85698..00000000 --- a/src/imports/controls/windows/RadioButton.qml +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.NativeStyle as NativeStyle - -NativeStyle.DefaultRadioButton { -} diff --git a/src/imports/controls/windows/ScrollBar.qml b/src/imports/controls/windows/ScrollBar.qml deleted file mode 100644 index 0ccbb155..00000000 --- a/src/imports/controls/windows/ScrollBar.qml +++ /dev/null @@ -1,128 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.NativeStyle as NativeStyle - -NativeStyle.DefaultScrollBar { - id: controlRoot - - topPadding: orientation === Qt.Vertical ? controlRoot.__decreaseVisual.indicator.height : 0 - bottomPadding: orientation === Qt.Vertical ? controlRoot.__increaseVisual.indicator.height : 0 - leftPadding: orientation === Qt.Horizontal ? controlRoot.__decreaseVisual.indicator.width : 0 - rightPadding: orientation === Qt.Horizontal ? controlRoot.__increaseVisual.indicator.width : 0 - - contentItem: NativeStyle.ScrollBar { - control: controlRoot - subControl: NativeStyle.ScrollBar.Handle - } - - NativeStyle.ScrollBar { - // Fade a hovered-looking version of the handle - // on top of the default handle when hovering it - x: contentItem.x - y: contentItem.y - z: 1 - width: contentItem.width - height: contentItem.height - control: controlRoot - subControl: NativeStyle.ScrollBar.Handle - overrideState: NativeStyle.StyleItem.AlwaysHovered - opacity: controlRoot.hovered || control.pressed ? 1 : 0 - visible: contentItem instanceof NativeStyle.StyleItem - Behavior on opacity { NumberAnimation { duration: contentItem.transitionDuration } } - } - - // The groove background should have window color - Rectangle { - x: background.x - y: background.y - z: -1 - width: background.width - height: background.height - color: controlRoot.palette.window - } - - background: NativeStyle.ScrollBar { - control: controlRoot - subControl: NativeStyle.ScrollBar.Groove - overrideState: NativeStyle.ScrollBar.NeverHovered - } - - __decreaseVisual.indicator: NativeStyle.ScrollBar { - control: controlRoot - subControl: NativeStyle.ScrollBar.SubLine - overrideState: NativeStyle.ScrollBar.AlwaysHovered - opacity: controlRoot.__decreaseVisual.hovered ? 1 : 0 - visible: contentItem instanceof NativeStyle.StyleItem - Behavior on opacity { NumberAnimation { duration: contentItem.transitionDuration } } - useNinePatchImage: false - } - - NativeStyle.ScrollBar { - control: controlRoot - subControl: NativeStyle.ScrollBar.SubLine - overrideState: NativeStyle.ScrollBar.AlwaysSunken - opacity: controlRoot.__decreaseVisual.pressed ? 1 : 0 - visible: contentItem instanceof NativeStyle.StyleItem - useNinePatchImage: false - z: 1 - } - - __increaseVisual.indicator: NativeStyle.ScrollBar { - control: controlRoot - subControl: NativeStyle.ScrollBar.AddLine - x: orientation == Qt.Horizontal ? controlRoot.width - width : 0 - y: orientation == Qt.Vertical ? controlRoot.height - height : 0 - overrideState: NativeStyle.ScrollBar.AlwaysHovered - opacity: controlRoot.__increaseVisual.hovered ? 1 : 0 - visible: contentItem instanceof NativeStyle.StyleItem - Behavior on opacity { NumberAnimation { duration: contentItem.transitionDuration } } - useNinePatchImage: false - } - - NativeStyle.ScrollBar { - control: controlRoot - subControl: NativeStyle.ScrollBar.AddLine - x: __increaseVisual.indicator.x - y: __increaseVisual.indicator.y - z: 1 - overrideState: NativeStyle.ScrollBar.AlwaysSunken - opacity: controlRoot.__increaseVisual.pressed ? 1 : 0 - visible: contentItem instanceof NativeStyle.StyleItem - useNinePatchImage: false - } -} diff --git a/src/imports/controls/windows/ScrollView.qml b/src/imports/controls/windows/ScrollView.qml deleted file mode 100644 index 0e5ffff4..00000000 --- a/src/imports/controls/windows/ScrollView.qml +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls.impl -import QtQuick.Templates as T - -T.ScrollView { - id: control - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - rightPadding: ScrollBar.vertical.visible ? ScrollBar.vertical.width : 0 - bottomPadding: ScrollBar.horizontal.visible ? ScrollBar.horizontal.height : 0 - - ScrollBar.vertical: ScrollBar { - parent: control - x: control.mirrored ? 0 : control.width - width - y: 0 - height: control.height - (control.ScrollBar.horizontal.visible ? control.ScrollBar.horizontal.height : 0) - active: control.ScrollBar.horizontal.active - } - - ScrollBar.horizontal: ScrollBar { - parent: control - x: 0 - y: control.height - height - width: control.width - (control.ScrollBar.vertical.visible ? control.ScrollBar.vertical.width : 0) - active: control.ScrollBar.vertical.active - } -} diff --git a/src/imports/controls/windows/Slider.qml b/src/imports/controls/windows/Slider.qml deleted file mode 100644 index ab72fcaa..00000000 --- a/src/imports/controls/windows/Slider.qml +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.NativeStyle as NativeStyle - -NativeStyle.DefaultSlider { -} diff --git a/src/imports/controls/windows/SpinBox.qml b/src/imports/controls/windows/SpinBox.qml deleted file mode 100644 index 72309c60..00000000 --- a/src/imports/controls/windows/SpinBox.qml +++ /dev/null @@ -1,124 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.SpinBox { - id: control - - property bool __nativeBackground: background instanceof NativeStyle.StyleItem - property bool nativeIndicators: up.indicator.hasOwnProperty("_qt_default") - && down.indicator.hasOwnProperty("_qt_default") - - font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined - - implicitWidth: Math.max(contentItem.implicitWidth + leftInset + rightInset, - 90 /* minimum */ ) - implicitHeight: Math.max(contentItem.implicitHeight, up.implicitIndicatorHeight + down.implicitIndicatorHeight) - + topInset + bottomInset - - spacing: 2 - - leftPadding: __nativeBackground ? background.contentPadding.left: 0 - topPadding: __nativeBackground ? background.contentPadding.top: 0 - rightPadding: (__nativeBackground ? background.contentPadding.right : 0) + rightInset - bottomPadding: __nativeBackground ? background.contentPadding.bottom: 0 - - validator: IntValidator { - locale: control.locale.name - bottom: Math.min(control.from, control.to) - top: Math.max(control.from, control.to) - } - - contentItem: TextField { - text: control.displayText - font: control.font - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - horizontalAlignment: Qt.AlignLeft - verticalAlignment: Qt.AlignVCenter - - topPadding: 0 - bottomPadding: 0 - leftPadding: 10 - rightPadding: 10 - - readOnly: !control.editable - validator: control.validator - inputMethodHints: control.inputMethodHints - - // Since the indicators are embedded inside the TextField we need to avoid that - // the TextField consumes mouse events for that area. - // We achieve that by setting a containmentMask - containmentMask: Item { height: contentItem.height; width: contentItem.width - upAndDown.width } - } - - NativeStyle.SpinBox { - id: upAndDown - control: control - subControl: NativeStyle.SpinBox.Up - visible: nativeIndicators - x: up.indicator.x - y: up.indicator.y - //implicitHeight: contentItem.implicitHeight-2 - height: parent.height-2 - useNinePatchImage: false - z:99 - } - - up.indicator: Item { - x: parent.width - width - 2 - y: 1 - height: upAndDown.height >> 1 - implicitWidth: upAndDown.implicitWidth - implicitHeight: (upAndDown.implicitHeight >> 1) - property bool _qt_default - } - - down.indicator: Item { - x: parent.width - width - 2 - y: up.indicator.y + (upAndDown.height >> 1) - height: upAndDown.height - up.indicator.height - implicitWidth: upAndDown.implicitWidth - implicitHeight: upAndDown.implicitHeight >> 1 - property bool _qt_default - } - - background: Item {} // No background, the TextField will cover the whole control -} diff --git a/src/imports/controls/windows/TextArea.qml b/src/imports/controls/windows/TextArea.qml deleted file mode 100644 index f6b88303..00000000 --- a/src/imports/controls/windows/TextArea.qml +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.NativeStyle as NativeStyle - -NativeStyle.DefaultTextArea { -} diff --git a/src/imports/controls/windows/TextField.qml b/src/imports/controls/windows/TextField.qml deleted file mode 100644 index bc0e2cb7..00000000 --- a/src/imports/controls/windows/TextField.qml +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.NativeStyle as NativeStyle - -NativeStyle.DefaultTextField { -} diff --git a/src/imports/controls/windows/qtquickcontrols2windowsstyleplugin.cpp b/src/imports/controls/windows/qtquickcontrols2windowsstyleplugin.cpp deleted file mode 100644 index c893d93e..00000000 --- a/src/imports/controls/windows/qtquickcontrols2windowsstyleplugin.cpp +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include - -extern void qml_register_types_QtQuick_Controls_Windows(); - -QT_BEGIN_NAMESPACE - -class QtQuickControls2WindowsStylePlugin : public QQuickStylePlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) - -public: - QtQuickControls2WindowsStylePlugin(QObject *parent = nullptr); - QString name() const override; - void initializeTheme(QQuickTheme *theme) override; -}; - -QtQuickControls2WindowsStylePlugin::QtQuickControls2WindowsStylePlugin(QObject *parent): - QQuickStylePlugin(parent) -{ - volatile auto registration = &qml_register_types_QtQuick_Controls_Windows; - Q_UNUSED(registration); -} - -QString QtQuickControls2WindowsStylePlugin::name() const -{ - return QStringLiteral("Windows"); -} - -void QtQuickControls2WindowsStylePlugin::initializeTheme(QQuickTheme */*theme*/) -{ -} - -QT_END_NAMESPACE - -#include "qtquickcontrols2windowsstyleplugin.moc" diff --git a/src/imports/controls/windows/windows.pri b/src/imports/controls/windows/windows.pri deleted file mode 100644 index 7f13eab0..00000000 --- a/src/imports/controls/windows/windows.pri +++ /dev/null @@ -1,14 +0,0 @@ -QML_FILES += \ - $$PWD/Button.qml \ - $$PWD/CheckBox.qml \ - $$PWD/ComboBox.qml \ - $$PWD/Frame.qml \ - $$PWD/GroupBox.qml \ - $$PWD/ProgressBar.qml \ - $$PWD/RadioButton.qml \ - $$PWD/Slider.qml \ - $$PWD/SpinBox.qml \ - $$PWD/TextArea.qml \ - $$PWD/TextField.qml \ - $$PWD/ScrollBar.qml \ - $$PWD/ScrollView.qml \ diff --git a/src/imports/controlsimpl/CMakeLists.txt b/src/imports/controlsimpl/CMakeLists.txt deleted file mode 100644 index 06c6179b..00000000 --- a/src/imports/controlsimpl/CMakeLists.txt +++ /dev/null @@ -1,37 +0,0 @@ -# Generated from controlsimpl.pro. - -##################################################################### -## qtquickcontrols2implplugin Plugin: -##################################################################### - -qt_internal_add_qml_module(qtquickcontrols2implplugin - URI "QtQuick.Controls.impl" - VERSION "${PROJECT_VERSION}" - CLASSNAME QtQuickControls2ImplPlugin - DEPENDENCIES - QtQuick/auto - SKIP_TYPE_REGISTRATION - SOURCES - qtquickcontrols2implplugin.cpp - DEFINES - QT_NO_CAST_FROM_ASCII - QT_NO_CAST_TO_ASCII - LIBRARIES - Qt::CorePrivate - Qt::GuiPrivate - Qt::QmlPrivate - Qt::QuickControls2ImplPrivate - Qt::QuickControls2Private - Qt::QuickPrivate - Qt::QuickTemplates2Private - PUBLIC_LIBRARIES - Qt::Core - Qt::Gui - Qt::Qml - Qt::Quick -) - -#### Keys ignored in scope 1:.:.:controlsimpl.pro:: -# OTHER_FILES = "qmldir" -# QML_IMPORT_VERSION = "$$QT_VERSION" -# TARGETPATH = "QtQuick/Controls/impl" diff --git a/src/imports/controlsimpl/qtquickcontrols2implplugin.cpp b/src/imports/controlsimpl/qtquickcontrols2implplugin.cpp deleted file mode 100644 index d5f29f5c..00000000 --- a/src/imports/controlsimpl/qtquickcontrols2implplugin.cpp +++ /dev/null @@ -1,59 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include - -QT_BEGIN_NAMESPACE - -class QtQuickControls2ImplPlugin : public QQmlEngineExtensionPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) - -public: - QtQuickControls2ImplPlugin(QObject *parent = nullptr); -}; - -QtQuickControls2ImplPlugin::QtQuickControls2ImplPlugin(QObject *parent) : QQmlEngineExtensionPlugin(parent) -{ - volatile auto registration = &qml_register_types_QtQuick_Controls_impl; - Q_UNUSED(registration) -} - -QT_END_NAMESPACE - -#include "qtquickcontrols2implplugin.moc" diff --git a/src/imports/dialogs/CMakeLists.txt b/src/imports/dialogs/CMakeLists.txt deleted file mode 100644 index f96fd9ff..00000000 --- a/src/imports/dialogs/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -qt_internal_add_qml_module(qtquickdialogsplugin - URI "QtQuick.Dialogs" - VERSION "${CMAKE_PROJECT_VERSION}" - CLASSNAME QtQuickDialogsPlugin - SKIP_TYPE_REGISTRATION - SOURCES - qtquickdialogsplugin.cpp - DEFINES - QT_NO_CAST_FROM_ASCII - QT_NO_CAST_TO_ASCII - INCLUDE_DIRECTORIES - quick - LIBRARIES - Qt::CorePrivate - Qt::GuiPrivate - Qt::QmlPrivate - Qt::QuickDialogs2Private - Qt::QuickPrivate - Qt::QuickTemplates2Private - PUBLIC_LIBRARIES - Qt::Core - Qt::Gui - Qt::Qml - Qt::Quick -) - -qt_internal_add_docs(qtquickdialogsplugin - doc/qtquickdialogs.qdocconf -) diff --git a/src/imports/dialogs/doc/images/qtquickdialogs-filedialog-gtk.png b/src/imports/dialogs/doc/images/qtquickdialogs-filedialog-gtk.png deleted file mode 100644 index 9360d747..00000000 Binary files a/src/imports/dialogs/doc/images/qtquickdialogs-filedialog-gtk.png and /dev/null differ diff --git a/src/imports/dialogs/doc/images/qtquickdialogs-fontdialog-gtk.png b/src/imports/dialogs/doc/images/qtquickdialogs-fontdialog-gtk.png deleted file mode 100644 index 0c6217bd..00000000 Binary files a/src/imports/dialogs/doc/images/qtquickdialogs-fontdialog-gtk.png and /dev/null differ diff --git a/src/imports/dialogs/doc/qtquickdialogs.qdocconf b/src/imports/dialogs/doc/qtquickdialogs.qdocconf deleted file mode 100644 index 575c84d0..00000000 --- a/src/imports/dialogs/doc/qtquickdialogs.qdocconf +++ /dev/null @@ -1,40 +0,0 @@ -include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf) -include($QT_INSTALL_DOCS/config/exampleurl-qtquickcontrols2.qdocconf) - -project = QtQuickDialogs -description = Qt Quick Dialogs Reference Documentation -version = $QT_VERSION - -qhp.projects = QtQuickDialogs - -qhp.QtQuickDialogs.file = qtquickdialogs.qhp -qhp.QtQuickDialogs.namespace = org.qt-project.qtquickdialogs.$QT_VERSION_TAG -qhp.QtQuickDialogs.virtualFolder = qtquickdialogs -qhp.QtQuickDialogs.indexTitle = Qt Quick Dialogs -qhp.QtQuickDialogs.indexRoot = - -qhp.QtQuickDialogs.filterAttributes = qtquickdialogs $QT_VERSION qtrefdoc -qhp.QtQuickDialogs.customFilters.Qt.name = QtQuickDialogs $QT_VERSION -qhp.QtQuickDialogs.customFilters.Qt.filterAttributes = qtquickdialogs $QT_VERSION - -qhp.QtQuickDialogs.subprojects = qmltypes -qhp.QtQuickDialogs.subprojects.qmltypes.title = QML Types -qhp.QtQuickDialogs.subprojects.qmltypes.indexTitle = Qt Quick Dialogs QML Types -qhp.QtQuickDialogs.subprojects.qmltypes.selectors = qmlclass -qhp.QtQuickDialogs.subprojects.qmltypes.sortPages = true - -depends = qtcore qtgui qtdoc qtqml qtquick qtquickcontrols - -# This module has no documented C++ types, clear the module header -moduleheader = - -headerdirs += ../../../quickdialogs2/quickdialogs2 -sourcedirs += ../../../quickdialogs2/quickdialogs2 \ - src - -imagedirs += images - -navigation.landingpage = "Qt Quick Dialogs" -navigation.qmltypespage = "Qt Quick Dialogs QML Types" - -tagfile = qtquickdialogs.tags diff --git a/src/imports/dialogs/doc/src/includes/fallback.qdocinc b/src/imports/dialogs/doc/src/includes/fallback.qdocinc deleted file mode 100644 index f3a4a180..00000000 --- a/src/imports/dialogs/doc/src/includes/fallback.qdocinc +++ /dev/null @@ -1 +0,0 @@ -Qt Quick Dialogs uses a Qt Quick implementation as a fallback on platforms that do not have a native implementation available. diff --git a/src/imports/dialogs/qmldir b/src/imports/dialogs/qmldir deleted file mode 100644 index 11d5bcdf..00000000 --- a/src/imports/dialogs/qmldir +++ /dev/null @@ -1,3 +0,0 @@ -module QtQuick.Dialogs -plugin qtquickdialogsplugin -classname QtQuickDialogsPlugin diff --git a/src/imports/dialogs/qtquickdialogsplugin.cpp b/src/imports/dialogs/qtquickdialogsplugin.cpp deleted file mode 100644 index 9bc06c25..00000000 --- a/src/imports/dialogs/qtquickdialogsplugin.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2021 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Templates module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class QtQuickDialogsPlugin: public QQmlEngineExtensionPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) - -public: - QtQuickDialogsPlugin(QObject *parent = nullptr); -}; - -QtQuickDialogsPlugin::QtQuickDialogsPlugin(QObject *parent) : QQmlEngineExtensionPlugin(parent) -{ - volatile auto registration = &qml_register_types_QtQuick_Dialogs; - Q_UNUSED(registration) -} - -QT_END_NAMESPACE - -#include "qtquickdialogsplugin.moc" diff --git a/src/imports/nativestyle/CMakeLists.txt b/src/imports/nativestyle/CMakeLists.txt deleted file mode 100644 index 83e75278..00000000 --- a/src/imports/nativestyle/CMakeLists.txt +++ /dev/null @@ -1,170 +0,0 @@ -# Generated from nativestyle.pro. - -##################################################################### -## qtquickcontrols2nativestyleplugin Plugin: -##################################################################### - -qt_internal_add_qml_module(qtquickcontrols2nativestyleplugin - URI "QtQuick.NativeStyle" - VERSION "${PROJECT_VERSION}" - CLASSNAME QtQuickControls2NativeStylePlugin - DEPENDENCIES - QtQuick.Controls/auto - QtQuick.Layouts/auto - PAST_MAJOR_VERSIONS 2 - GENERATE_QMLTYPES - INSTALL_QMLTYPES - SOURCES - items/qquickstyleitem.cpp items/qquickstyleitem.h - items/qquickstyleitembutton.cpp items/qquickstyleitembutton.h - items/qquickstyleitemcheckbox.cpp items/qquickstyleitemcheckbox.h - items/qquickstyleitemcombobox.cpp items/qquickstyleitemcombobox.h - items/qquickstyleitemdial.cpp items/qquickstyleitemdial.h - items/qquickstyleitemframe.cpp items/qquickstyleitemframe.h - items/qquickstyleitemgroupbox.cpp items/qquickstyleitemgroupbox.h - items/qquickstyleitemprogressbar.cpp items/qquickstyleitemprogressbar.h - items/qquickstyleitemradiobutton.cpp items/qquickstyleitemradiobutton.h - items/qquickstyleitemscrollbar.cpp items/qquickstyleitemscrollbar.h - items/qquickstyleitemslider.cpp items/qquickstyleitemslider.h - items/qquickstyleitemspinbox.cpp items/qquickstyleitemspinbox.h - items/qquickstyleitemtextfield.cpp items/qquickstyleitemtextfield.h - qstyle/qquickcommonstyle.cpp qstyle/qquickcommonstyle.h qstyle/qquickcommonstyle_p.h - qstyle/qquickcommonstylepixmaps_p.h - qstyle/qquickdrawutil.cpp qstyle/qquickdrawutil.h - qstyle/qquicknativestyle.cpp qstyle/qquicknativestyle.h - qstyle/qquickstyle.cpp qstyle/qquickstyle.h qstyle/qquickstyle_p.h - qstyle/qquickstylehelper.cpp qstyle/qquickstylehelper_p.h - qstyle/qquickstyleoption.cpp qstyle/qquickstyleoption.h - qtquickcontrols2nativestyleplugin.cpp - DEFINES - QT_NO_CAST_FROM_ASCII - QT_NO_CAST_TO_ASCII - INCLUDE_DIRECTORIES - items - qstyle - util - LIBRARIES - Qt::CorePrivate - Qt::GuiPrivate - Qt::QmlPrivate - Qt::QuickControls2Private - Qt::QuickPrivate - Qt::QuickTemplates2Private - PUBLIC_LIBRARIES - Qt::Core - Qt::Gui - Qt::Qml - Qt::Quick - Qt::QuickControls2 - Qt::QuickTemplates2 -) - -#### Keys ignored in scope 1:.:.:nativestyle.pro:: -# OTHER_FILES = "qmldir" "$$QML_FILES" -# QML_IMPORT_MAJOR_VERSION = "6" -# QML_IMPORT_NAME = "QtQuick.NativeStyle" -# QML_PAST_MAJOR_VERSIONS = "2" -# TARGETPATH = "QtQuick/NativeStyle" -# _REQUIREMENTS = "qtConfig(quickcontrols2-macos)|qtConfig(quickcontrols2-windows)" - -## Scopes: -##################################################################### - -qt_internal_extend_target(qtquickcontrols2nativestyleplugin CONDITION MACOS - SOURCES - items/qquickstyleitemscrollviewcorner.cpp items/qquickstyleitemscrollviewcorner.h - qstyle/mac/qquickmacstyle_mac.mm qstyle/mac/qquickmacstyle_mac_p.h - qstyle/mac/qquickmacstyle_mac_p_p.h - util/qquickmacfocusframe.h util/qquickmacfocusframe.mm - INCLUDE_DIRECTORIES - qstyle/mac - LIBRARIES - ${FWAppKit} -) - -if(MACOS) - # Resources: - set(qmake_immediate_resource_files - "util/FocusFrame.qml" - ) - - qt_internal_add_resource(qtquickcontrols2nativestyleplugin "qqc2_mac_native_resources" # special case - PREFIX - "/" - FILES - ${qmake_immediate_resource_files} - ) -endif() - -qt_internal_extend_target(qtquickcontrols2nativestyleplugin CONDITION WIN32 - SOURCES - qstyle/windows/qquickwindowsstyle.cpp qstyle/windows/qquickwindowsstyle_p.h - qstyle/windows/qquickwindowsstyle_p_p.h - qstyle/windows/qquickwindowsxpstyle.cpp - INCLUDE_DIRECTORIES - qstyle/windows - LIBRARIES - gdi32 - user32 - uxtheme -) - -set(qml_files - "controls/DefaultButton.qml" - "controls/DefaultSlider.qml" - "controls/DefaultGroupBox.qml" - "controls/DefaultCheckBox.qml" - "controls/DefaultRadioButton.qml" - "controls/DefaultSpinBox.qml" - "controls/DefaultTextField.qml" - "controls/DefaultFrame.qml" - "controls/DefaultTextArea.qml" - "controls/DefaultComboBox.qml" - "controls/DefaultScrollBar.qml" - "controls/DefaultProgressBar.qml" - "controls/DefaultDial.qml" -) -set_source_files_properties(controls/DefaultButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(controls/DefaultSlider.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(controls/DefaultGroupBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(controls/DefaultCheckBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(controls/DefaultRadioButton.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(controls/DefaultSpinBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(controls/DefaultTextField.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(controls/DefaultFrame.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(controls/DefaultTextArea.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(controls/DefaultComboBox.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(controls/DefaultScrollBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(controls/DefaultProgressBar.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) -set_source_files_properties(controls/DefaultDial.qml PROPERTIES - QT_QML_SOURCE_VERSION "2.0;6.0" -) - -qt6_target_qml_files(qtquickcontrols2nativestyleplugin - FILES - ${qml_files} -) diff --git a/src/imports/nativestyle/controls/DefaultButton.qml b/src/imports/nativestyle/controls/DefaultButton.qml deleted file mode 100644 index 7e55aaa2..00000000 --- a/src/imports/nativestyle/controls/DefaultButton.qml +++ /dev/null @@ -1,83 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.Button { - id: control - - readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem - - // Since QQuickControl will subtract the insets from the control size to - // figure out the background size, we need to reverse that here, otherwise - // the control ends up too big. - implicitWidth: implicitBackgroundWidth + leftInset + rightInset - implicitHeight: implicitBackgroundHeight + topInset + bottomInset - - font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined - - leftPadding: __nativeBackground ? background.contentPadding.left : 5 - rightPadding: __nativeBackground ? background.contentPadding.right : 5 - topPadding: __nativeBackground ? background.contentPadding.top : 5 - bottomPadding: __nativeBackground ? background.contentPadding.bottom : 5 - - background: NativeStyle.Button { - control: control - contentWidth: contentItem.implicitWidth - contentHeight: contentItem.implicitHeight - } - - icon.width: 24 - icon.height: 24 - icon.color: control.checked || control.highlighted ? control.palette.brightText : - control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText - - contentItem: IconLabel { - spacing: control.spacing - mirrored: control.mirrored - display: control.display - - icon: control.icon - text: control.text - font: control.font - color: control.checked || control.highlighted ? control.palette.brightText : - control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText - } -} diff --git a/src/imports/nativestyle/controls/DefaultCheckBox.qml b/src/imports/nativestyle/controls/DefaultCheckBox.qml deleted file mode 100644 index 09166820..00000000 --- a/src/imports/nativestyle/controls/DefaultCheckBox.qml +++ /dev/null @@ -1,93 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.NativeStyle as NativeStyle - -T.CheckBox { - id: control - - readonly property bool nativeIndicator: indicator instanceof NativeStyle.StyleItem - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - font.pixelSize: nativeIndicator ? indicator.styleFont(control).pixelSize : undefined - - spacing: nativeIndicator ? 0 : 6 - padding: nativeIndicator ? 0 : 6 - - indicator: NativeStyle.CheckBox { - control: control - y: control.topPadding + (control.availableHeight - height) >> 1 - contentWidth: contentItem.implicitWidth - contentHeight: contentItem.implicitHeight - useNinePatchImage: false - } - - contentItem: CheckLabel { - text: control.text - font: control.font - color: control.palette.windowText - - // For some reason, the other styles set padding here (in the delegate), instead of in - // the control above. And they also adjust the indicator position by setting x and y - // explicitly (instead of using insets). So we follow the same pattern to ensure that - // setting a custom contentItem delegate from the app will end up looking the same for - // all styles. But this should probably be fixed for all styles (to make them work the - // same way as e.g Buttons). - leftPadding: { - if (nativeIndicator) - indicator.contentPadding.left - else - indicator && !mirrored ? indicator.width + spacing : 0 - } - - topPadding: nativeIndicator ? indicator.contentPadding.top : 0 - rightPadding: { - if (nativeIndicator) - indicator.contentPadding.right - else - indicator && mirrored ? indicator.width + spacing : 0 - } - } -} diff --git a/src/imports/nativestyle/controls/DefaultComboBox.qml b/src/imports/nativestyle/controls/DefaultComboBox.qml deleted file mode 100644 index 7b286a1e..00000000 --- a/src/imports/nativestyle/controls/DefaultComboBox.qml +++ /dev/null @@ -1,129 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Window -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.ComboBox { - id: control - - readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding, - 90 /* minimum */ ) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined - - leftPadding: __nativeBackground ? background.contentPadding.left : 5 - rightPadding: __nativeBackground ? background.contentPadding.right : 5 - topPadding: __nativeBackground ? background.contentPadding.top : 5 - bottomPadding: __nativeBackground ? background.contentPadding.bottom : 5 - - contentItem: T.TextField { - implicitWidth: contentWidth - implicitHeight: contentHeight - text: control.editable ? control.editText : control.displayText - - enabled: control.editable - autoScroll: control.editable - readOnly: control.down - inputMethodHints: control.inputMethodHints - validator: control.validator - selectByMouse: control.selectTextByMouse - - font: control.font - color: control.editable ? control.palette.text : control.palette.buttonText - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - verticalAlignment: Text.AlignVCenter - } - - background: NativeStyle.ComboBox { - control: control - contentWidth: contentItem.implicitWidth - contentHeight: contentItem.implicitHeight - } - - delegate: ItemDelegate { - width: ListView.view.width - text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData - palette.text: control.palette.text - palette.highlightedText: control.palette.highlightedText - font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal - highlighted: control.highlightedIndex === index - hoverEnabled: control.hoverEnabled - } - - popup: T.Popup { - readonly property var layoutMargins: control.__nativeBackground ? control.background.layoutMargins : null - x: layoutMargins ? layoutMargins.left : 0 - y: control.height - (layoutMargins ? layoutMargins.bottom : 0) - width: control.width - (layoutMargins ? layoutMargins.left + layoutMargins.right : 0) - height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin) - topMargin: 6 - bottomMargin: 6 - - contentItem: ListView { - clip: true - implicitHeight: contentHeight - model: control.delegateModel - currentIndex: control.highlightedIndex - highlightMoveDuration: 0 - - Rectangle { - z: 10 - width: parent.width - height: parent.height - color: "transparent" - border.color: control.palette.mid - } - - T.ScrollIndicator.vertical: ScrollIndicator { } - } - - background: Rectangle { - color: control.palette.window - } - } -} diff --git a/src/imports/nativestyle/controls/DefaultDial.qml b/src/imports/nativestyle/controls/DefaultDial.qml deleted file mode 100644 index b628ed09..00000000 --- a/src/imports/nativestyle/controls/DefaultDial.qml +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.Dial { - id: control - - readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding, - 80 /* minimum */ ) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - 80 /* minimum */ ) - - font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined - - background: NativeStyle.Dial { - control: control - useNinePatchImage: false - } -} diff --git a/src/imports/nativestyle/controls/DefaultFrame.qml b/src/imports/nativestyle/controls/DefaultFrame.qml deleted file mode 100644 index 77ca6125..00000000 --- a/src/imports/nativestyle/controls/DefaultFrame.qml +++ /dev/null @@ -1,62 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.Frame { - id: control - - readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - leftPadding: __nativeBackground ? background.contentPadding.left : 12 - rightPadding: __nativeBackground ? background.contentPadding.right : 12 - topPadding: __nativeBackground ? background.contentPadding.top : 12 - bottomPadding: __nativeBackground ? background.contentPadding.bottom : 12 - - background: NativeStyle.Frame { - control: control - contentWidth: control.contentWidth - contentHeight: control.contentHeight - } -} diff --git a/src/imports/nativestyle/controls/DefaultGroupBox.qml b/src/imports/nativestyle/controls/DefaultGroupBox.qml deleted file mode 100644 index a7f3f9d0..00000000 --- a/src/imports/nativestyle/controls/DefaultGroupBox.qml +++ /dev/null @@ -1,91 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.GroupBox { - id: control - - readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - contentWidth + leftPadding + rightPadding, - implicitLabelWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding) - - font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined - - label: Rectangle { - color: control.palette.window - property point labelPos : control.__nativeBackground - ? background.labelPos - : Qt.point(0,0) - x: labelPos.x + background.x - y: labelPos.y + background.y - (__nativeBackground ? background.groupBoxPadding.top : 0) - width: children[0].implicitWidth - height: children[0].implicitHeight - Text { - width: parent.width - height: parent.height - text: control.title - font: control.font - color: control.palette.windowText - elide: Text.ElideRight - verticalAlignment: Text.AlignVCenter - } - } - - leftPadding: __nativeBackground ? background.contentPadding.left : 0 - rightPadding: __nativeBackground ? background.contentPadding.right : 0 - topPadding: __nativeBackground ? background.contentPadding.top : 0 - bottomPadding: __nativeBackground ? background.contentPadding.bottom : 0 - - background: NativeStyle.GroupBox { - control: control - - x: groupBoxPadding.left - y: groupBoxPadding.top - width: contentItem.width + control.leftPadding + control.rightPadding - groupBoxPadding.left - groupBoxPadding.right - height: contentItem.height + control.topPadding + control.bottomPadding - groupBoxPadding.top - groupBoxPadding.bottom - - contentWidth: contentItem.implicitWidth - contentHeight: contentItem.implicitHeight - } -} diff --git a/src/imports/nativestyle/controls/DefaultProgressBar.qml b/src/imports/nativestyle/controls/DefaultProgressBar.qml deleted file mode 100644 index 037bdbae..00000000 --- a/src/imports/nativestyle/controls/DefaultProgressBar.qml +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls -import QtQuick.NativeStyle as NativeStyle - -T.ProgressBar { - id: control - - readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding, - control.horizontal ? 90 : 0 /* minimum */ ) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - control.vertical ? 90 : 0 /* minimum */ ) - - font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined - - background: NativeStyle.ProgressBar { - control: control - useNinePatchImage: false - } -} diff --git a/src/imports/nativestyle/controls/DefaultRadioButton.qml b/src/imports/nativestyle/controls/DefaultRadioButton.qml deleted file mode 100644 index 29746ba7..00000000 --- a/src/imports/nativestyle/controls/DefaultRadioButton.qml +++ /dev/null @@ -1,96 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Templates as T -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.NativeStyle as NativeStyle - -T.RadioButton { - id: control - - readonly property bool nativeIndicator: indicator instanceof NativeStyle.StyleItem - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding, - implicitIndicatorHeight + topPadding + bottomPadding) - - font.pixelSize: nativeIndicator ? indicator.styleFont(control).pixelSize : undefined - - spacing: nativeIndicator ? 0 : 6 - padding: nativeIndicator ? 0 : 6 - - indicator: NativeStyle.RadioButton { - control: control - contentWidth: contentItem.implicitWidth - contentHeight: contentItem.implicitHeight - useNinePatchImage: false -// Component.onCompleted: { -// var f = indicator.font(control) -// control.font.pixelSize = f.pixelSize -// print(f) -// } - } - - contentItem: CheckLabel { - text: control.text - font: control.font - color: control.palette.windowText - - // For some reason, the other styles set padding here (in the delegate), instead of in - // the control above. And they also adjust the indicator position by setting x and y - // explicitly (instead of using insets). So we follow the same pattern to ensure that - // setting a custom contentItem delegate from the app will end up looking the same for - // all styles. But this should probably be fixed for all styles (to make them work the - // same way as e.g Buttons). - leftPadding: { - if (nativeIndicator) - indicator.contentPadding.left - else - indicator && !mirrored ? indicator.width + spacing : 0 - } - - rightPadding: { - if (nativeIndicator) - indicator.contentPadding.right - else - indicator && mirrored ? indicator.width + spacing : 0 - } - } -} diff --git a/src/imports/nativestyle/controls/DefaultScrollBar.qml b/src/imports/nativestyle/controls/DefaultScrollBar.qml deleted file mode 100644 index b7b78732..00000000 --- a/src/imports/nativestyle/controls/DefaultScrollBar.qml +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.ScrollBar { - id: control - - readonly property bool __nativeContentItem: contentItem instanceof NativeStyle.StyleItem - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitContentWidth + leftPadding + rightPadding) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitContentHeight + topPadding + bottomPadding) - - font.pixelSize: __nativeContentItem ? contentItem.styleFont(control).pixelSize : undefined - - visible: policy === T.ScrollBar.AlwaysOn || (policy === T.ScrollBar.AsNeeded && size < 1.0) - minimumSize: !__nativeContentItem ? 10 : orientation === Qt.Vertical ? - contentItem.minimumSize.height / height : contentItem.minimumSize.width / width - - background: NativeStyle.ScrollBar { - control: control - subControl: NativeStyle.ScrollBar.Groove - } - - contentItem: NativeStyle.ScrollBar { - control: control - subControl: NativeStyle.ScrollBar.Handle - } -} diff --git a/src/imports/nativestyle/controls/DefaultSlider.qml b/src/imports/nativestyle/controls/DefaultSlider.qml deleted file mode 100644 index ebc1c265..00000000 --- a/src/imports/nativestyle/controls/DefaultSlider.qml +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.Slider { - id: control - - readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem - - implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, - implicitHandleWidth + leftPadding + rightPadding, - control.horizontal ? 90 : 0 /* minimum */ ) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - implicitHandleHeight + topPadding + bottomPadding, - control.vertical ? 90 : 0 /* minimum */ ) - - font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined - - background: NativeStyle.Slider { - control: control - subControl: NativeStyle.Slider.Groove - // We normally cannot use a nine patch image for the - // groove if we draw tickmarks (since then the scaling - // would scale the tickmarks too). The groove might - // also use a different background color before, and - // after, the handle. - useNinePatchImage: false - } - - handle: NativeStyle.Slider { - control: control - subControl: NativeStyle.Slider.Handle - x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) - y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)) - useNinePatchImage: false - } -} diff --git a/src/imports/nativestyle/controls/DefaultSpinBox.qml b/src/imports/nativestyle/controls/DefaultSpinBox.qml deleted file mode 100644 index 869ff411..00000000 --- a/src/imports/nativestyle/controls/DefaultSpinBox.qml +++ /dev/null @@ -1,109 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.SpinBox { - id: control - - readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem - - implicitWidth: Math.max(implicitBackgroundWidth + spacing + up.implicitIndicatorWidth - + leftInset + rightInset, - 90 /* minimum */ ) - implicitHeight: Math.max(implicitBackgroundHeight, up.implicitIndicatorHeight + down.implicitIndicatorHeight - + (spacing * 3)) + topInset + bottomInset - - font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined - - spacing: 2 - - leftPadding: (__nativeBackground ? background.contentPadding.left: 0) - topPadding: (__nativeBackground ? background.contentPadding.top: 0) - rightPadding: (__nativeBackground ? background.contentPadding.right : 0) + up.implicitIndicatorWidth + spacing - bottomPadding: (__nativeBackground ? background.contentPadding.bottom: 0) + spacing - - validator: IntValidator { - locale: control.locale.name - bottom: Math.min(control.from, control.to) - top: Math.max(control.from, control.to) - } - - contentItem: TextInput { - text: control.displayText - font: font.font - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - horizontalAlignment: Qt.AlignLeft - verticalAlignment: Qt.AlignVCenter - - topPadding: 2 - bottomPadding: 2 - leftPadding: 10 - rightPadding: 10 - - readOnly: !control.editable - validator: control.validator - inputMethodHints: control.inputMethodHints - } - - up.indicator: NativeStyle.SpinBox { - control: control - subControl: NativeStyle.SpinBox.Up - x: parent.width - width - spacing - y: (parent.height / 2) - height - useNinePatchImage: false - } - - down.indicator: NativeStyle.SpinBox { - control: control - subControl: NativeStyle.SpinBox.Down - x: up.indicator.x - y: up.indicator.y + up.indicator.height - useNinePatchImage: false - } - - background: NativeStyle.SpinBox { - control: control - subControl: NativeStyle.SpinBox.Frame - contentWidth: contentItem.implicitWidth - contentHeight: contentItem.implicitHeight - } -} diff --git a/src/imports/nativestyle/controls/DefaultTextArea.qml b/src/imports/nativestyle/controls/DefaultTextArea.qml deleted file mode 100644 index 5a72b91a..00000000 --- a/src/imports/nativestyle/controls/DefaultTextArea.qml +++ /dev/null @@ -1,83 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -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: 7 - rightPadding: 7 - topPadding: 3 - bottomPadding: 3 - - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - placeholderTextColor: Color.transparent(control.color, 0.5) - verticalAlignment: TextInput.AlignTop - - PlaceholderText { - id: placeholder - height: control.height - topPadding: control.topPadding - bottomPadding: control.bottomPadding - leftPadding: control.leftPadding - rightPadding: control.rightPadding - 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 { - color: control.palette.light - } -} diff --git a/src/imports/nativestyle/controls/DefaultTextField.qml b/src/imports/nativestyle/controls/DefaultTextField.qml deleted file mode 100644 index d8bee337..00000000 --- a/src/imports/nativestyle/controls/DefaultTextField.qml +++ /dev/null @@ -1,89 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls -import QtQuick.Controls.impl -import QtQuick.Templates as T -import QtQuick.NativeStyle as NativeStyle - -T.TextField { - id: control - - readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem - - implicitWidth: Math.max(Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding, - implicitBackgroundWidth + leftInset + rightInset, - 90 /* minimum */ ) - implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, - contentHeight + topPadding + bottomPadding, - placeholder.implicitHeight + topPadding + bottomPadding) - - font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined - - leftPadding: __nativeBackground ? background.contentPadding.left: 7 - rightPadding: __nativeBackground ? background.contentPadding.right: 7 - topPadding: __nativeBackground ? background.contentPadding.top: 3 - bottomPadding: __nativeBackground ? background.contentPadding.bottom: 3 - - color: control.palette.text - selectionColor: control.palette.highlight - selectedTextColor: control.palette.highlightedText - placeholderTextColor: Color.transparent(control.color, 0.5) - verticalAlignment: TextInput.AlignTop - - PlaceholderText { - id: placeholder - height: control.height - topPadding: control.topPadding - bottomPadding: control.bottomPadding - leftPadding: control.leftPadding - rightPadding: control.rightPadding - 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: NativeStyle.TextField { - control: control - contentWidth: Math.max(control.contentWidth, placeholder.implicitWidth) - contentHeight: control.contentHeight - } -} diff --git a/src/imports/nativestyle/controls/controls.pri b/src/imports/nativestyle/controls/controls.pri deleted file mode 100644 index 8675989e..00000000 --- a/src/imports/nativestyle/controls/controls.pri +++ /dev/null @@ -1,14 +0,0 @@ -QML_FILES += \ - $$PWD/DefaultButton.qml \ - $$PWD/DefaultSlider.qml \ - $$PWD/DefaultGroupBox.qml \ - $$PWD/DefaultCheckBox.qml \ - $$PWD/DefaultRadioButton.qml \ - $$PWD/DefaultSpinBox.qml \ - $$PWD/DefaultTextField.qml \ - $$PWD/DefaultFrame.qml \ - $$PWD/DefaultTextArea.qml \ - $$PWD/DefaultComboBox.qml \ - $$PWD/DefaultScrollBar.qml \ - $$PWD/DefaultProgressBar.qml \ - $$PWD/DefaultDial.qml \ diff --git a/src/imports/nativestyle/items/items.pri b/src/imports/nativestyle/items/items.pri deleted file mode 100644 index 5b6d9251..00000000 --- a/src/imports/nativestyle/items/items.pri +++ /dev/null @@ -1,36 +0,0 @@ -INCLUDEPATH += $$PWD - -HEADERS += \ - $$PWD/qquickstyleitem.h \ - $$PWD/qquickstyleitembutton.h \ - $$PWD/qquickstyleitemgroupbox.h \ - $$PWD/qquickstyleitemcheckbox.h \ - $$PWD/qquickstyleitemradiobutton.h \ - $$PWD/qquickstyleitemslider.h \ - $$PWD/qquickstyleitemspinbox.h \ - $$PWD/qquickstyleitemtextfield.h \ - $$PWD/qquickstyleitemframe.h \ - $$PWD/qquickstyleitemcombobox.h \ - $$PWD/qquickstyleitemscrollbar.h \ - $$PWD/qquickstyleitemprogressbar.h \ - $$PWD/qquickstyleitemdial.h \ - -SOURCES += \ - $$PWD/qquickstyleitem.cpp \ - $$PWD/qquickstyleitembutton.cpp \ - $$PWD/qquickstyleitemgroupbox.cpp \ - $$PWD/qquickstyleitemcheckbox.cpp \ - $$PWD/qquickstyleitemradiobutton.cpp \ - $$PWD/qquickstyleitemslider.cpp \ - $$PWD/qquickstyleitemspinbox.cpp \ - $$PWD/qquickstyleitemtextfield.cpp \ - $$PWD/qquickstyleitemframe.cpp \ - $$PWD/qquickstyleitemcombobox.cpp \ - $$PWD/qquickstyleitemscrollbar.cpp \ - $$PWD/qquickstyleitemprogressbar.cpp \ - $$PWD/qquickstyleitemdial.cpp \ - -macos { - HEADERS += $$PWD/qquickstyleitemscrollviewcorner.h - SOURCES += $$PWD/qquickstyleitemscrollviewcorner.cpp -} diff --git a/src/imports/nativestyle/items/qquickstyleitem.cpp b/src/imports/nativestyle/items/qquickstyleitem.cpp deleted file mode 100644 index 23f290d3..00000000 --- a/src/imports/nativestyle/items/qquickstyleitem.cpp +++ /dev/null @@ -1,561 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickstyleitem.h" - -#include -#include - -#include -#include -#include - -#include -#include - -#include - -#include "qquickstyleitembutton.h" -#include "qquickstylehelper_p.h" - -QT_BEGIN_NAMESPACE - -QDebug operator<<(QDebug debug, const QQuickStyleMargins &padding) -{ - QDebugStateSaver saver(debug); - debug.nospace(); - debug << "StyleMargins("; - debug << padding.left() << ", "; - debug << padding.top() << ", "; - debug << padding.right() << ", "; - debug << padding.bottom(); - debug << ')'; - return debug; -} - -QDebug operator<<(QDebug debug, const StyleItemGeometry &cg) -{ - QDebugStateSaver saver(debug); - debug.nospace(); - debug << "StyleItemGeometry("; - debug << "implicitSize:" << cg.implicitSize << ", "; - debug << "contentRect:" << cg.contentRect << ", "; - debug << "layoutRect:" << cg.layoutRect << ", "; - debug << "minimumSize:" << cg.minimumSize << ", "; - debug << "9patchMargins:" << cg.ninePatchMargins; - debug << ')'; - return debug; -} - -int QQuickStyleItem::dprAlignedSize(const int size) const -{ - // Return the first value equal to or bigger than size - // that is a whole number when multiplied with the dpr. - static int multiplier = [&]() { - const qreal dpr = window()->devicePixelRatio(); - for (int m = 1; m <= 10; ++m) { - const qreal v = m * dpr; - if (v == int(v)) - return m; - } - - qWarning() << "The current dpr (" << dpr << ") is not supported" - << "by the style and might result in drawing artifacts"; - return 1; - }(); - - return int(qCeil(qreal(size) / qreal(multiplier)) * multiplier); -} - -QQuickStyleItem::QQuickStyleItem(QQuickItem *parent) - : QQuickItem(parent) -{ - setFlag(QQuickItem::ItemHasContents); -} - -QQuickStyleItem::~QQuickStyleItem() -{ -} - -void QQuickStyleItem::connectToControl() const -{ - connect(m_control, &QQuickStyleItem::enabledChanged, this, &QQuickStyleItem::markImageDirty); - connect(m_control, &QQuickItem::activeFocusChanged, this, &QQuickStyleItem::markImageDirty); - - if (QQuickWindow *win = window()) { - connect(win, &QQuickWindow::activeChanged, this, &QQuickStyleItem::markImageDirty); - m_connectedWindow = win; - } -} - -void QQuickStyleItem::markImageDirty() -{ - m_dirty.setFlag(DirtyFlag::Image); - polish(); -} - -void QQuickStyleItem::markGeometryDirty() -{ - m_dirty.setFlag(DirtyFlag::Geometry); - polish(); -} - -QSGNode *QQuickStyleItem::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *) -{ - QSGNinePatchNode *node = static_cast(oldNode); - if (!node) - node = window()->createNinePatchNode(); - if (m_paintedImage.isNull()) - return node; - - const auto texture = window()->createTextureFromImage(m_paintedImage, QQuickWindow::TextureCanUseAtlas); - - QRectF bounds = boundingRect(); - const qreal dpr = window()->devicePixelRatio(); - const QSizeF unscaledImageSize = QSizeF(m_paintedImage.size()) / dpr; - - // We can scale the image up with a nine patch node, but should - // avoid to scale it down. Otherwise the nine patch image will look - // wrapped (or look truncated, in case of no padding). So if the - // item is smaller that the image, don't scale. - if (bounds.width() < unscaledImageSize.width()) - bounds.setWidth(unscaledImageSize.width()); - if (bounds.height() < unscaledImageSize.height()) - bounds.setHeight(unscaledImageSize.height()); - -#ifdef QT_DEBUG - if (m_debugFlags.testFlag(Unscaled)) { - bounds.setSize(unscaledImageSize); - qqc2Info() << "Setting qsg node size to the unscaled size of m_paintedImage:" << bounds; - } -#endif - - if (m_useNinePatchImage) { - QMargins padding = m_styleItemGeometry.ninePatchMargins; - if (padding.right() == -1) { - // Special case: a padding of -1 means that - // the image shouldn't scale in the given direction. - padding.setLeft(0); - padding.setRight(0); - } - if (padding.bottom() == -1) { - padding.setTop(0); - padding.setBottom(0); - } - node->setPadding(padding.left(), padding.top(), padding.right(), padding.bottom()); - } - - node->setBounds(bounds); - node->setTexture(texture); - node->setDevicePixelRatio(dpr); - node->update(); - - return node; -} - -QStyle::State QQuickStyleItem::controlSize(QQuickItem *item) -{ - // TODO: add proper API for small and mini - if (item->metaObject()->indexOfProperty("qqc2_style_small") != -1) - return QStyle::State_Small; - if (item->metaObject()->indexOfProperty("qqc2_style_mini") != -1) - return QStyle::State_Mini; - return QStyle::State_None; -} - -void QQuickStyleItem::initStyleOptionBase(QStyleOption &styleOption) const -{ - Q_ASSERT(m_control); - - styleOption.control = const_cast(control()); - styleOption.window = window(); - styleOption.palette = QQuickItemPrivate::get(m_control)->palette()->toQPalette(); - styleOption.rect = QRect(QPoint(0, 0), imageSize()); - - styleOption.state = QStyle::State_None; - styleOption.state |= controlSize(styleOption.control); - - // Note: not all controls inherit from QQuickControl (e.g QQuickTextField) - if (const auto quickControl = dynamic_cast(m_control.data())) - styleOption.direction = quickControl->isMirrored() ? Qt::RightToLeft : Qt::LeftToRight; - - if (window()) { - if (styleOption.window->isActive()) - styleOption.state |= QStyle::State_Active; - if (m_control->isEnabled()) - styleOption.state |= QStyle::State_Enabled; - if (m_control->hasActiveFocus()) - styleOption.state |= QStyle::State_HasFocus; - if (m_control->isUnderMouse()) - styleOption.state |= QStyle::State_MouseOver; - // Should this depend on the focusReason (e.g. only TabFocus) ? - styleOption.state |= QStyle::State_KeyboardFocusChange; - } - - if (m_overrideState != None) { - // In Button.qml we fade between two versions of - // the handle, depending on if it's hovered or not - if (m_overrideState & AlwaysHovered) - styleOption.state |= QStyle::State_MouseOver; - else if (m_overrideState & NeverHovered) - styleOption.state &= ~QStyle::State_MouseOver; - } - - qqc2Info() << styleOption; -} - -void QQuickStyleItem::geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) -{ - QQuickItem::geometryChange(newGeometry, oldGeometry); - - // Ensure that we only schedule a new geometry update - // and polish if this geometry change was caused by - // something else than us already updating geometry. - if (!m_polishing) - markGeometryDirty(); -} - -void QQuickStyleItem::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data) -{ - QQuickItem::itemChange(change, data); - - switch (change) { - case QQuickItem::ItemVisibleHasChanged: - if (data.boolValue) - markImageDirty(); - break; - case QQuickItem::ItemSceneChange: { - markImageDirty(); - QQuickWindow *win = data.window; - if (m_connectedWindow) - disconnect(m_connectedWindow, &QQuickWindow::activeChanged, this, &QQuickStyleItem::markImageDirty); - if (win) - connect(win, &QQuickWindow::activeChanged, this, &QQuickStyleItem::markImageDirty); - m_connectedWindow = win; - break;} - default: - break; - } -} - -void QQuickStyleItem::updateGeometry() -{ - qqc2InfoHeading("GEOMETRY"); - m_dirty.setFlag(DirtyFlag::Geometry, false); - - const QQuickStyleMargins oldContentPadding = contentPadding(); - const QQuickStyleMargins oldLayoutMargins = layoutMargins(); - const QSize oldMinimumSize = minimumSize(); - - m_styleItemGeometry = calculateGeometry(); - -#ifdef QT_DEBUG - if (m_styleItemGeometry.minimumSize.isEmpty()) - qmlWarning(this) << "minimumSize is empty!"; -#endif - - if (m_styleItemGeometry.implicitSize.isEmpty()) { - // If the item has no contents (or its size is - // empty), we just use the minimum size as implicit size. - m_styleItemGeometry.implicitSize = m_styleItemGeometry.minimumSize; - qqc2Info() << "implicitSize is empty, using minimumSize instead"; - } - - if (contentPadding() != oldContentPadding) - emit contentPaddingChanged(); - if (layoutMargins() != oldLayoutMargins) - emit layoutMarginsChanged(); - if (minimumSize() != oldMinimumSize) - emit minimumSizeChanged(); - - setImplicitSize(m_styleItemGeometry.implicitSize.width(), m_styleItemGeometry.implicitSize.height()); - - qqc2Info() << m_styleItemGeometry - << "bounding rect:" << boundingRect() - << "layout margins:" << layoutMargins() - << "content padding:" << contentPadding() - << "input content size:" << m_contentSize; -} - -void QQuickStyleItem::paintControlToImage() -{ - qqc2InfoHeading("PAINT"); - const QSize imgSize = imageSize(); - if (imgSize.isEmpty()) - return; - - m_dirty.setFlag(DirtyFlag::Image, false); - - // The size of m_paintedImage should normally be imgSize * dpr. The problem is - // that the dpr can be e.g 1.25, which means that the size can end up having a - // fraction. But an image cannot have a size with a fraction, so it would need - // to be rounded. But on the flip side, rounding the size means that the size - // of the scene graph node (which is, when the texture is not scaled, - // m_paintedImage.size() / dpr), will end up with a fraction instead. And this - // causes rendering artifacts in the scene graph when the texture is mapped - // to physical screen coordinates. So for that reason we calculate an image size - // that might be slightly larger than imgSize, so that imgSize * dpr lands on a - // whole number. The result is that neither the image size, nor the scene graph - // node, ends up with a size that has a fraction. - const qreal dpr = window()->devicePixelRatio(); - const int alignedW = int(dprAlignedSize(imgSize.width()) * dpr); - const int alignedH = int(dprAlignedSize(imgSize.height()) * dpr); - const QSize alignedSize = QSize(alignedW, alignedH); - - if (m_paintedImage.size() != alignedSize) { - m_paintedImage = QImage(alignedSize, QImage::Format_ARGB32_Premultiplied); - m_paintedImage.setDevicePixelRatio(dpr); - qqc2Info() << "created image with dpr aligned size:" << alignedSize; - } - - m_paintedImage.fill(Qt::transparent); - - QPainter painter(&m_paintedImage); - paintEvent(&painter); - -#ifdef QT_DEBUG - if (m_debugFlags != NoDebug) { - painter.setPen(QColor(255, 0, 0, 255)); - if (m_debugFlags.testFlag(ImageRect)) - painter.drawRect(QRect(QPoint(0, 0), alignedSize / dpr)); - if (m_debugFlags.testFlag(LayoutRect)) { - const auto m = layoutMargins(); - QRect rect = QRect(QPoint(0, 0), imgSize); - rect.adjust(m.left(), m.top(), -m.right(), -m.bottom()); - painter.drawRect(rect); - } - if (m_debugFlags.testFlag(ContentRect)) { - const auto p = contentPadding(); - QRect rect = QRect(QPoint(0, 0), imgSize); - rect.adjust(p.left(), p.top(), -p.right(), -p.bottom()); - painter.drawRect(rect); - } - if (m_debugFlags.testFlag(InputContentSize)) { - const int offset = 2; - const QPoint p = m_styleItemGeometry.contentRect.topLeft(); - painter.drawLine(p.x() - offset, p.y() - offset, p.x() + m_contentSize.width(), p.y() - offset); - painter.drawLine(p.x() - offset, p.y() - offset, p.x() - offset, p.y() + m_contentSize.height()); - } - if (m_debugFlags.testFlag(NinePatchMargins)) { - const QMargins m = m_styleItemGeometry.ninePatchMargins; - if (m.right() != -1) { - painter.drawLine(m.left(), 0, m.left(), imgSize.height()); - painter.drawLine(imgSize.width() - m.right(), 0, imgSize.width() - m.right(), imgSize.height()); - } - if (m.bottom() != -1) { - painter.drawLine(0, m.top(), imgSize.width(), m.top()); - painter.drawLine(0, imgSize.height() - m.bottom(), imgSize.width(), imgSize.height() - m.bottom()); - } - } - if (m_debugFlags.testFlag(SaveImage)) { - static int nr = -1; - ++nr; - static QString filename = QStringLiteral("styleitem_saveimage_"); - const QString path = QDir::current().absoluteFilePath(filename); - const QString name = path + QString::number(nr) + QStringLiteral(".png"); - m_paintedImage.save(name); - qDebug() << "image saved to:" << name; - } - } -#endif - - update(); -} - -void QQuickStyleItem::updatePolish() -{ - QScopedValueRollback guard(m_polishing, true); - - const bool dirtyGeometry = m_dirty & DirtyFlag::Geometry; - const bool dirtyImage = isVisible() && ((m_dirty & DirtyFlag::Image) || (!m_useNinePatchImage && dirtyGeometry)); - - if (dirtyGeometry) - updateGeometry(); - if (dirtyImage) - paintControlToImage(); -} - -#ifdef QT_DEBUG -void QQuickStyleItem::addDebugInfo() -{ - // Example debug strings: - // "QQC2_NATIVESTYLE_DEBUG="myButton output contentRect" - // "QQC2_NATIVESTYLE_DEBUG="ComboBox ninepatchmargins" - // "QQC2_NATIVESTYLE_DEBUG="All layoutrect" - - static const auto debugString = qEnvironmentVariable("QQC2_NATIVESTYLE_DEBUG"); - static const auto matchAll = debugString.startsWith(QLatin1String("All ")); - static const auto prefix = QStringLiteral("QQuickStyleItem"); - if (debugString.isEmpty()) - return; - - const auto objectName = m_control->objectName(); - const auto typeName = QString::fromUtf8(metaObject()->className()).remove(prefix); - const bool matchName = !objectName.isEmpty() && debugString.startsWith(objectName); - const bool matchType = debugString.startsWith(typeName); - - if (!(matchAll || matchName || matchType)) - return; - -#define QQC2_DEBUG_FLAG(FLAG) \ - if (debugString.contains(QLatin1String(#FLAG), Qt::CaseInsensitive)) m_debugFlags |= FLAG - - QQC2_DEBUG_FLAG(Info); - QQC2_DEBUG_FLAG(ImageRect); - QQC2_DEBUG_FLAG(ContentRect); - QQC2_DEBUG_FLAG(LayoutRect); - QQC2_DEBUG_FLAG(InputContentSize); - QQC2_DEBUG_FLAG(DontUseNinePatchImage); - QQC2_DEBUG_FLAG(NinePatchMargins); - QQC2_DEBUG_FLAG(Unscaled); - QQC2_DEBUG_FLAG(Debug); - QQC2_DEBUG_FLAG(SaveImage); - - if (m_debugFlags & (DontUseNinePatchImage - | InputContentSize - | ContentRect - | LayoutRect - | NinePatchMargins)) { - // Some rects will not fit inside the drawn image unless - // we switch off (nine patch) image scaling. - m_debugFlags |= DontUseNinePatchImage; - m_useNinePatchImage = false; - } - - if (m_debugFlags != NoDebug) - qDebug() << "debug options set for" << typeName << "(" << objectName << "):" << m_debugFlags; - else - qDebug() << "available debug options:" << DebugFlags(0xFFFF); -} -#endif - -void QQuickStyleItem::componentComplete() -{ - Q_ASSERT_X(m_control, Q_FUNC_INFO, "You need to assign a value to property 'control'"); -#ifdef QT_DEBUG - addDebugInfo(); -#endif - QQuickItem::componentComplete(); - connectToControl(); - polish(); -} - -qreal QQuickStyleItem::contentWidth() -{ - return m_contentSize.width(); -} - -void QQuickStyleItem::setContentWidth(qreal contentWidth) -{ - if (qFuzzyCompare(m_contentSize.width(), contentWidth)) - return; - - m_contentSize.setWidth(contentWidth); - markGeometryDirty(); -} - -qreal QQuickStyleItem::contentHeight() -{ - return m_contentSize.height(); -} - -void QQuickStyleItem::setContentHeight(qreal contentHeight) -{ - if (qFuzzyCompare(m_contentSize.height(), contentHeight)) - return; - - m_contentSize.setHeight(contentHeight); - markGeometryDirty(); -} - -QQuickStyleMargins QQuickStyleItem::contentPadding() const -{ - const QRect outerRect(QPoint(0, 0), m_styleItemGeometry.implicitSize); - return QQuickStyleMargins(outerRect, m_styleItemGeometry.contentRect); -} - -QQuickStyleMargins QQuickStyleItem::layoutMargins() const -{ - // ### TODO: layoutRect is currently not being used for anything. But - // eventually this information will be needed by layouts to align the controls - // correctly. This because the images drawn by QStyle are usually a bit bigger - // than the control(frame) itself, to e.g make room for shadow effects - // or focus rects/glow. And this will differ from control to control. The - // layoutRect will then inform where the frame of the control is. - QQuickStyleMargins margins; - if (m_styleItemGeometry.layoutRect.isValid()) { - const QRect outerRect(QPoint(0, 0), m_styleItemGeometry.implicitSize); - margins = QQuickStyleMargins(outerRect, m_styleItemGeometry.layoutRect); - } - return margins; -} - -QSize QQuickStyleItem::minimumSize() const -{ - // The style item should not be scaled below this size. - // Otherwise the image will be truncated. - return m_styleItemGeometry.minimumSize; -} - -QSize QQuickStyleItem::imageSize() const -{ - // Returns the size of the QImage (unscaled) that - // is used to draw the control from QStyle. - return m_useNinePatchImage ? m_styleItemGeometry.minimumSize : size().toSize(); -} - -qreal QQuickStyleItem::focusFrameRadius() const -{ - return m_styleItemGeometry.focusFrameRadius; -} - -QFont QQuickStyleItem::styleFont(QQuickItem *control) const -{ - Q_ASSERT(control); - // Note: This function should be treated as if it was static - // (meaning, don't assume anything in this object to be initialized). - // Resolving the font/font size should be done early on from QML, before we get - // around to calculate geometry and paint. Otherwise we typically need to do it - // all over again when/if the font changes. In practice this means that other - // items in QML that uses a style font, and at the same time, affects our input - // contentSize, cannot wait for this item to be fully constructed before it - // gets the font. So we need to resolve it here and now, even if this - // object might be in a half initialized state (hence also the control - // argument, instead of relying on m_control to be set). - return QGuiApplication::font(); -} - -QT_END_NAMESPACE diff --git a/src/imports/nativestyle/items/qquickstyleitem.h b/src/imports/nativestyle/items/qquickstyleitem.h deleted file mode 100644 index 3b87faf6..00000000 --- a/src/imports/nativestyle/items/qquickstyleitem.h +++ /dev/null @@ -1,311 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKSTYLEITEM_H -#define QQUICKSTYLEITEM_H - -#include -#include -#include -#include -#include - -#include "qquicknativestyle.h" -#include "qquickstyle.h" -#include "qquickstyleoption.h" - -// Work-around for now, to avoid creator getting confused -// about missing macros. Should eventually be defined -// in qt declarative somewhere I assume. -#ifndef QML_NAMED_ELEMENT -#define QML_NAMED_ELEMENT(NAME) -#define QML_UNCREATABLE(NAME) -#endif - -#ifdef QT_DEBUG -#define qqc2Debug() if (m_debugFlags.testFlag(Debug)) qDebug() << __FUNCTION__ << ":" -#define qqc2Info() if (m_debugFlags.testFlag(Info)) qDebug() << __FUNCTION__ << ":" -#define qqc2InfoHeading(HEADING) if (m_debugFlags.testFlag(Info)) qDebug() << "--------" << HEADING << "--------" -#else -#define qqc2Debug() if (false) qDebug() -#define qqc2Info() if (false) qDebug() -#define qqc2InfoHeading(HEADING) if (false) qDebug() -#endif - -QT_BEGIN_NAMESPACE - -using namespace QQC2; - -class QQuickStyleMargins -{ - Q_GADGET - - Q_PROPERTY(int left READ left()) - Q_PROPERTY(int top READ top()) - Q_PROPERTY(int right READ right()) - Q_PROPERTY(int bottom READ bottom()) - - QML_NAMED_ELEMENT(stylemargins) - QML_UNCREATABLE("") - -public: - QQuickStyleMargins() {} - QQuickStyleMargins(const QQuickStyleMargins &other) : m_margins(other.m_margins) {} - QQuickStyleMargins(const QMargins &margins) : m_margins(margins) {} - QQuickStyleMargins(const QRect &outer, const QRect &inner) - { - const int left = inner.left() - outer.left(); - const int top = inner.top() - outer.top(); - const int right = outer.right() - inner.right(); - const int bottom = outer.bottom() - inner.bottom(); - m_margins = QMargins(left, top, right, bottom); - } - - inline void operator=(const QQuickStyleMargins &other) { m_margins = other.m_margins; } - inline bool operator==(const QQuickStyleMargins &other) const { return other.m_margins == m_margins; } - inline bool operator!=(const QQuickStyleMargins &other) const { return other.m_margins != m_margins; } - - inline int left() const { return m_margins.left(); } - inline int right() const { return m_margins.right(); } - inline int top() const { return m_margins.top(); } - inline int bottom() const { return m_margins.bottom(); } - - QMargins m_margins; -}; - -QDebug operator<<(QDebug debug, const QQuickStyleMargins &padding); - -struct StyleItemGeometry -{ - /* - A QQuickStyleItem is responsible for drawing a control, or a part of it. - - 'minimumSize' should be the minimum possible size that the item can - have _without_ taking content size into consideration (and still render - correctly). This will also be the size of the image that the item is drawn - to, unless QQuickStyleItem::useNinePatchImage is set to false. In that - case, the size of the image will be set to the size of the item instead - (which is set from QML, and will typically be the same as the size of the control). - The default way to calculate minimumSize is to call style()->sizeFromContents() - with an empty content size. This is not always well supported by the legacy QStyle - implementation, which means that you might e.g get an empty size in return. - For those cases, the correct solution is to go into the specific platform style - and change it so that it returns a valid size also for this special case. - - 'implicitSize' should reflect the preferred size of the item, taking the - given content size (as set from QML) into account. But not all controls - have contents (slider), and for many controls, the content/label is instead - placed outside the item/background image (radiobutton). In both cases, the - size of the item will not include the content size, and implicitSize can - usually be set equal to minimumSize instead. - - 'contentRect' should be the free space where the contents can be placed. Note that - this rect doesn't need to have the same size as the contentSize provided as input - to the style item. Instead, QStyle can typically calculate a rect that is bigger, to - e.g center the contents inside the control. - - 'layoutRect' can be set to shift the position of the whole control so - that aligns correctly with the other controls. This is important for - controls that draws e.g shadows or focus rings. Such adornments should - be painted, but not be included when aligning the controls. - */ - - QSize minimumSize; - QSize implicitSize; - QRect contentRect; - QRect layoutRect; // If invalid, there are no layout margins! - QMargins ninePatchMargins; - qreal focusFrameRadius; -}; - -QDebug operator<<(QDebug debug, const StyleItemGeometry &cg); - -class QQuickStyleItem : public QQuickItem -{ - Q_OBJECT - - // Input - Q_PROPERTY(QQuickItem *control MEMBER m_control NOTIFY controlChanged) - Q_PROPERTY(qreal contentWidth READ contentWidth WRITE setContentWidth) - Q_PROPERTY(qreal contentHeight READ contentHeight WRITE setContentHeight) - Q_PROPERTY(bool useNinePatchImage MEMBER m_useNinePatchImage) - Q_PROPERTY(OverrideState overrideState MEMBER m_overrideState) - - // Output - Q_PROPERTY(QQuickStyleMargins contentPadding READ contentPadding() NOTIFY contentPaddingChanged) - Q_PROPERTY(QQuickStyleMargins layoutMargins READ layoutMargins() NOTIFY layoutMarginsChanged) - Q_PROPERTY(QSize minimumSize READ minimumSize() NOTIFY minimumSizeChanged) - Q_PROPERTY(int transitionDuration MEMBER m_transitionDuration CONSTANT) - - QML_NAMED_ELEMENT(StyleItem) - QML_UNCREATABLE("StyleItem is an abstract base class.") - -public: - enum DirtyFlag { - Nothing = 0, - Geometry, - Image, - Everything = 255 - }; - Q_DECLARE_FLAGS(DirtyFlags, DirtyFlag) - - enum OverrideState { - None = 0, - AlwaysHovered, - NeverHovered, - AlwaysSunken - }; - Q_ENUM(OverrideState) - - -#ifdef QT_DEBUG - enum DebugFlag { - NoDebug = 0x000, - Debug = 0x001, - Info = 0x002, - ImageRect = 0x004, - ContentRect = 0x008, - LayoutRect = 0x010, - Unscaled = 0x020, - InputContentSize = 0x040, - DontUseNinePatchImage = 0x080, - NinePatchMargins = 0x100, - SaveImage = 0x200, - }; - Q_FLAG(DebugFlag) - Q_DECLARE_FLAGS(DebugFlags, DebugFlag) -#endif - - explicit QQuickStyleItem(QQuickItem *parent = nullptr); - ~QQuickStyleItem() override; - - qreal contentWidth(); - void setContentWidth(qreal contentWidth); - qreal contentHeight(); - void setContentHeight(qreal contentHeight); - - QQuickStyleMargins contentPadding() const; - QQuickStyleMargins layoutMargins() const; - QSize minimumSize() const; - QSize imageSize() const; - qreal focusFrameRadius() const; - - Q_INVOKABLE virtual QFont styleFont(QQuickItem *control) const; - - void markGeometryDirty(); - void markImageDirty(); - -signals: - void controlChanged(); - void contentPaddingChanged(); - void layoutMarginsChanged(); - void fontChanged(); - void minimumSizeChanged(); - -protected: - void componentComplete() override; - QSGNode *updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *updatePaintNodeData) override; - void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override; - void itemChange(ItemChange change, const ItemChangeData &data) override; - void updatePolish() override; - - virtual void connectToControl() const; - virtual void paintEvent(QPainter *painter) const = 0; - virtual StyleItemGeometry calculateGeometry() = 0; - - static QStyle::State controlSize(QQuickItem *item); - void initStyleOptionBase(QStyleOption &styleOption) const; - - inline QSize contentSize() const { return QSize(qCeil(m_contentSize.width()), qCeil(m_contentSize.height())); } - inline static QStyle *style() { return QQuickNativeStyle::style(); } - - template inline const T* control() const { -#ifdef QT_DEBUG - if (!dynamic_cast(m_control.data())) { - qmlWarning(this) << "control property is not of correct type"; - Q_UNREACHABLE(); - } -#endif - return static_cast(m_control.data()); - } - -#ifdef QT_DEBUG - DebugFlags m_debugFlags = NoDebug; -#endif - OverrideState m_overrideState = None; - -private: - inline void updateGeometry(); - inline void paintControlToImage(); - - int dprAlignedSize(const int size) const; - -#ifdef QT_DEBUG - void addDebugInfo(); -#endif - -private: - QPointer m_control; - QImage m_paintedImage; - StyleItemGeometry m_styleItemGeometry; - QSizeF m_contentSize; - - DirtyFlags m_dirty = Everything; - bool m_useNinePatchImage = true; - bool m_polishing = false; - mutable QQuickWindow *m_connectedWindow = nullptr; - -#ifdef Q_OS_MACOS - int m_transitionDuration = 150; -#else - int m_transitionDuration = 400; -#endif - -private: - friend class QtQuickControls2MacOSStylePlugin; -}; - -Q_DECLARE_OPERATORS_FOR_FLAGS(QQuickStyleItem::DirtyFlags) - -#ifdef QT_DEBUG -Q_DECLARE_OPERATORS_FOR_FLAGS(QQuickStyleItem::DebugFlags) -#endif - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickStyleItem) - -#endif // QQUICKSTYLEITEM_H diff --git a/src/imports/nativestyle/items/qquickstyleitembutton.cpp b/src/imports/nativestyle/items/qquickstyleitembutton.cpp deleted file mode 100644 index 5dfe060f..00000000 --- a/src/imports/nativestyle/items/qquickstyleitembutton.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickstyleitembutton.h" - -QFont QQuickStyleItemButton::styleFont(QQuickItem *control) const -{ - return style()->font(QStyle::CE_PushButtonLabel, controlSize(control)); -} - -void QQuickStyleItemButton::connectToControl() const -{ - QQuickStyleItem::connectToControl(); - auto button = control(); - connect(button, &QQuickButton::downChanged, this, &QQuickStyleItem::markImageDirty); -} - -StyleItemGeometry QQuickStyleItemButton::calculateGeometry() -{ - QStyleOptionButton styleOption; - initStyleOption(styleOption); - StyleItemGeometry geometry; - - geometry.minimumSize = style()->sizeFromContents(QStyle::CT_PushButton, &styleOption, QSize(0, 0)); - geometry.implicitSize = style()->sizeFromContents(QStyle::CT_PushButton, &styleOption, contentSize()); - styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize); - geometry.contentRect = style()->subElementRect(QStyle::SE_PushButtonContents, &styleOption); - geometry.layoutRect = style()->subElementRect(QStyle::SE_PushButtonLayoutItem, &styleOption); - geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CE_PushButtonBevel, &styleOption, geometry.minimumSize); - geometry.focusFrameRadius = style()->pixelMetric(QStyle::PM_PushButtonFocusFrameRadius, &styleOption); - - return geometry; -} - -void QQuickStyleItemButton::paintEvent(QPainter *painter) const -{ - QStyleOptionButton styleOption; - initStyleOption(styleOption); - style()->drawControl(QStyle::CE_PushButtonBevel, &styleOption, painter); -} - -void QQuickStyleItemButton::initStyleOption(QStyleOptionButton &styleOption) const -{ - initStyleOptionBase(styleOption); - auto button = control(); - - if (button->isDown()) - styleOption.state |= QStyle::State_Sunken; - if (!button->isFlat() && !button->isDown()) - styleOption.state |= QStyle::State_Raised; - if (button->isHighlighted() || button->isChecked()) - styleOption.state |= QStyle::State_On; - if (button->isFlat()) - styleOption.features |= QStyleOptionButton::Flat; -} diff --git a/src/imports/nativestyle/items/qquickstyleitembutton.h b/src/imports/nativestyle/items/qquickstyleitembutton.h deleted file mode 100644 index 41ca0cf1..00000000 --- a/src/imports/nativestyle/items/qquickstyleitembutton.h +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKSTYLEITEMBUTTON_H -#define QQUICKSTYLEITEMBUTTON_H - -#include "qquickstyleitem.h" -#include - -class QQuickStyleItemButton : public QQuickStyleItem -{ - Q_OBJECT - QML_NAMED_ELEMENT(Button) - -public: - QFont styleFont(QQuickItem *control) const override; - -protected: - void connectToControl() const override; - void paintEvent(QPainter *painter) const override; - StyleItemGeometry calculateGeometry() override; - -private: - void initStyleOption(QStyleOptionButton &styleOption) const; -}; - -#endif // QQUICKSTYLEITEMBUTTON_H diff --git a/src/imports/nativestyle/items/qquickstyleitemcheckbox.cpp b/src/imports/nativestyle/items/qquickstyleitemcheckbox.cpp deleted file mode 100644 index 6c4ac8ea..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemcheckbox.cpp +++ /dev/null @@ -1,89 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickstyleitemcheckbox.h" - -QFont QQuickStyleItemCheckBox::styleFont(QQuickItem *control) const -{ - return style()->font(QStyle::CE_RadioButtonLabel, controlSize(control)); -} - -void QQuickStyleItemCheckBox::connectToControl() const -{ - QQuickStyleItem::connectToControl(); - auto checkbox = control(); - connect(checkbox, &QQuickCheckBox::downChanged, this, &QQuickStyleItem::markImageDirty); - connect(checkbox, &QQuickCheckBox::checkStateChanged, this, &QQuickStyleItem::markImageDirty); -} - -StyleItemGeometry QQuickStyleItemCheckBox::calculateGeometry() -{ - QStyleOptionButton styleOption; - initStyleOption(styleOption); - StyleItemGeometry geometry; - - geometry.minimumSize = style()->sizeFromContents(QStyle::CT_CheckBox, &styleOption, QSize(0, 0)); - geometry.implicitSize = geometry.minimumSize; - styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize); - geometry.contentRect = style()->subElementRect(QStyle::SE_CheckBoxContents, &styleOption); - geometry.layoutRect = style()->subElementRect(QStyle::SE_CheckBoxLayoutItem, &styleOption); - geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CE_CheckBox, &styleOption, geometry.minimumSize); - geometry.focusFrameRadius = style()->pixelMetric(QStyle::PM_CheckBoxFocusFrameRadius, &styleOption); - - // Spacing seems to already be baked into SE_CheckBoxContents, so ignore until needed - //const int space = style()->pixelMetric(QStyle::PM_CheckBoxLabelSpacing, &styleOption); - - return geometry; -} - -void QQuickStyleItemCheckBox::paintEvent(QPainter *painter) const -{ - QStyleOptionButton styleOption; - initStyleOption(styleOption); - style()->drawControl(QStyle::CE_CheckBox, &styleOption, painter); -} - -void QQuickStyleItemCheckBox::initStyleOption(QStyleOptionButton &styleOption) const -{ - initStyleOptionBase(styleOption); - auto checkbox = control(); - - styleOption.state |= checkbox->isDown() ? QStyle::State_Sunken : QStyle::State_Raised; - if (checkbox->isTristate() && checkbox->checkState() == Qt::PartiallyChecked) - styleOption.state |= QStyle::State_NoChange; - else - styleOption.state |= checkbox->isChecked() ? QStyle::State_On : QStyle::State_Off; -} diff --git a/src/imports/nativestyle/items/qquickstyleitemcheckbox.h b/src/imports/nativestyle/items/qquickstyleitemcheckbox.h deleted file mode 100644 index 03bf34b9..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemcheckbox.h +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKSTYLEITEMCHECKBOX_H -#define QQUICKSTYLEITEMCHECKBOX_H - -#include "qquickstyleitem.h" -#include - -class QQuickStyleItemCheckBox : public QQuickStyleItem -{ - Q_OBJECT - QML_NAMED_ELEMENT(CheckBox) - -public: - QFont styleFont(QQuickItem *control) const override; - -protected: - void connectToControl() const override; - void paintEvent(QPainter *painter) const override; - StyleItemGeometry calculateGeometry() override; - -private: - void initStyleOption(QStyleOptionButton &styleOption) const; -}; - -#endif // QQUICKSTYLEITEMCHECKBOX_H diff --git a/src/imports/nativestyle/items/qquickstyleitemcombobox.cpp b/src/imports/nativestyle/items/qquickstyleitemcombobox.cpp deleted file mode 100644 index 0ac3756e..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemcombobox.cpp +++ /dev/null @@ -1,89 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickstyleitemcombobox.h" - -QFont QQuickStyleItemComboBox::styleFont(QQuickItem *control) const -{ - return style()->font(QStyle::CE_PushButtonLabel, controlSize(control)); -} - -void QQuickStyleItemComboBox::connectToControl() const -{ - QQuickStyleItem::connectToControl(); - auto comboBox = control(); - connect(comboBox, &QQuickComboBox::downChanged, this, &QQuickStyleItem::markImageDirty); -} - -StyleItemGeometry QQuickStyleItemComboBox::calculateGeometry() -{ - QStyleOptionComboBox styleOption; - initStyleOption(styleOption); - StyleItemGeometry geometry; - - geometry.minimumSize = style()->sizeFromContents(QStyle::CT_ComboBox, &styleOption, QSize(0, 0)); - geometry.implicitSize = style()->sizeFromContents(QStyle::CT_ComboBox, &styleOption, contentSize()); - styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize); - geometry.contentRect = style()->subControlRect(QStyle::CC_ComboBox, &styleOption, QStyle::SC_ComboBoxEditField); - geometry.layoutRect = style()->subElementRect(QStyle::SE_ComboBoxLayoutItem, &styleOption); - geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CC_ComboBox, &styleOption, geometry.minimumSize); - geometry.focusFrameRadius = style()->pixelMetric(QStyle::PM_ComboBoxFocusFrameRadius, &styleOption); - - return geometry; -} - -void QQuickStyleItemComboBox::paintEvent(QPainter *painter) const -{ - QStyleOptionComboBox styleOption; - initStyleOption(styleOption); - style()->drawComplexControl(QStyle::CC_ComboBox, &styleOption, painter); -} - -void QQuickStyleItemComboBox::initStyleOption(QStyleOptionComboBox &styleOption) const -{ - initStyleOptionBase(styleOption); - auto comboBox = control(); - - styleOption.subControls = QStyle::SC_ComboBoxArrow | QStyle::SC_ComboBoxFrame | QStyle::SC_ComboBoxEditField; - styleOption.frame = true; - styleOption.state |= QStyle::State_Selected; - styleOption.editable = comboBox->isEditable(); - - if (comboBox->isDown()) - styleOption.state |= QStyle::State_Sunken; - if (!comboBox->isFlat() && !comboBox->isDown()) - styleOption.state |= QStyle::State_Raised; -} diff --git a/src/imports/nativestyle/items/qquickstyleitemcombobox.h b/src/imports/nativestyle/items/qquickstyleitemcombobox.h deleted file mode 100644 index 79f1995e..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemcombobox.h +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKSTYLEITEMCOMBOBOX_H -#define QQUICKSTYLEITEMCOMBOBOX_H - -#include "qquickstyleitem.h" -#include - -class QQuickStyleItemComboBox : public QQuickStyleItem -{ - Q_OBJECT - QML_NAMED_ELEMENT(ComboBox) - -public: - QFont styleFont(QQuickItem *control) const override; - -protected: - void connectToControl() const override; - void paintEvent(QPainter *painter) const override; - StyleItemGeometry calculateGeometry() override; - -private: - void initStyleOption(QStyleOptionComboBox &styleOption) const; -}; - -#endif // QQUICKSTYLEITEMCOMBOBOX_H diff --git a/src/imports/nativestyle/items/qquickstyleitemdial.cpp b/src/imports/nativestyle/items/qquickstyleitemdial.cpp deleted file mode 100644 index bf5784e1..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemdial.cpp +++ /dev/null @@ -1,111 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickstyleitemdial.h" - -QFont QQuickStyleItemDial::styleFont(QQuickItem *control) const -{ - return style()->font(QStyle::CE_ProgressBarLabel, controlSize(control)); -} - -void QQuickStyleItemDial::connectToControl() const -{ - QQuickStyleItem::connectToControl(); - auto dial = control(); - connect(dial, &QQuickDial::fromChanged, this, &QQuickStyleItem::markImageDirty); - connect(dial, &QQuickDial::toChanged, this, &QQuickStyleItem::markImageDirty); - connect(dial, &QQuickDial::positionChanged, this, &QQuickStyleItem::markImageDirty); - connect(dial, &QQuickDial::valueChanged, this, &QQuickStyleItem::markImageDirty); - connect(dial, &QQuickDial::stepSizeChanged, this, &QQuickStyleItem::markImageDirty); - connect(dial, &QQuickDial::pressedChanged, this, &QQuickStyleItem::markImageDirty); -} - -StyleItemGeometry QQuickStyleItemDial::calculateGeometry() -{ - QStyleOptionSlider styleOption; - initStyleOption(styleOption); - - StyleItemGeometry geometry; - geometry.minimumSize = style()->sizeFromContents(QStyle::CT_Dial, &styleOption, QSize(0, 0)); - geometry.implicitSize = geometry.minimumSize; - geometry.layoutRect = style()->subElementRect(QStyle::SE_SliderLayoutItem, &styleOption); - geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CC_Dial, &styleOption, geometry.minimumSize); - geometry.focusFrameRadius = style()->pixelMetric(QStyle::PM_DialFocusFrameRadius, &styleOption); - - return geometry; -} - -void QQuickStyleItemDial::paintEvent(QPainter *painter) const -{ - QStyleOptionSlider styleOption; - initStyleOption(styleOption); - style()->drawComplexControl(QStyle::CC_Dial, &styleOption, painter); -} - -void QQuickStyleItemDial::initStyleOption(QStyleOptionSlider &styleOption) const -{ - initStyleOptionBase(styleOption); - auto dial = control(); - - styleOption.subControls = QStyle::SC_SliderGroove | QStyle::SC_SliderHandle; - styleOption.activeSubControls = QStyle::SC_None; - styleOption.tickInterval = dial->stepSize(); - styleOption.dialWrapping = dial->wrap(); - styleOption.upsideDown = true; - - if (dial->isPressed()) - styleOption.state |= QStyle::State_Sunken; - - if (dial->stepSize() == 0) { - styleOption.minimum = 0; - styleOption.maximum = 10000; - styleOption.sliderPosition = dial->position() * styleOption.maximum; - } else { - styleOption.minimum = dial->from(); - styleOption.maximum = dial->to(); - styleOption.sliderPosition = dial->value(); - } - - // TODO: add proper API for tickmarks - const int index = dial->metaObject()->indexOfProperty("qqc2_style_tickPosition"); - if (index != -1) { - const int tickPosition = dial->metaObject()->property(index).read(dial).toInt(); - styleOption.tickPosition = QStyleOptionSlider::TickPosition(tickPosition); - if (styleOption.tickPosition != QStyleOptionSlider::NoTicks) - styleOption.subControls |= QStyle::SC_DialTickmarks; - } - -} diff --git a/src/imports/nativestyle/items/qquickstyleitemdial.h b/src/imports/nativestyle/items/qquickstyleitemdial.h deleted file mode 100644 index 569820fe..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemdial.h +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKSTYLEITEMDIAL_H -#define QQUICKSTYLEITEMDIAL_H - -#include "qquickstyleitem.h" -#include - -class QQuickStyleItemDial : public QQuickStyleItem -{ - Q_OBJECT - QML_NAMED_ELEMENT(Dial) - -public: - QFont styleFont(QQuickItem *control) const override; - -protected: - void connectToControl() const override; - void paintEvent(QPainter *painter) const override; - StyleItemGeometry calculateGeometry() override; - -private: - void initStyleOption(QStyleOptionSlider &styleOption) const; -}; - -#endif // QQUICKSTYLEITEMDIAL_H diff --git a/src/imports/nativestyle/items/qquickstyleitemframe.cpp b/src/imports/nativestyle/items/qquickstyleitemframe.cpp deleted file mode 100644 index cf060492..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemframe.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickstyleitemframe.h" - -StyleItemGeometry QQuickStyleItemFrame::calculateGeometry() -{ - QStyleOptionFrame styleOption; - initStyleOption(styleOption); - StyleItemGeometry geometry; - - geometry.minimumSize = style()->sizeFromContents(QStyle::CT_Frame, &styleOption, QSize(0, 0)); - geometry.implicitSize = contentSize(); - styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize); - geometry.contentRect = style()->subElementRect(QStyle::SE_FrameContents, &styleOption); - geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CE_ShapedFrame, &styleOption, geometry.minimumSize); - - return geometry; -} - -void QQuickStyleItemFrame::paintEvent(QPainter *painter) const -{ - QStyleOptionFrame styleOption; - initStyleOption(styleOption); - style()->drawControl(QStyle::CE_ShapedFrame, &styleOption, painter); -} - -void QQuickStyleItemFrame::initStyleOption(QStyleOptionFrame &styleOption) const -{ - initStyleOptionBase(styleOption); - styleOption.lineWidth = 1; - styleOption.frameShape = QStyleOptionFrame::StyledPanel; - styleOption.features = QStyleOptionFrame::Flat; -} diff --git a/src/imports/nativestyle/items/qquickstyleitemframe.h b/src/imports/nativestyle/items/qquickstyleitemframe.h deleted file mode 100644 index 8e8da68b..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemframe.h +++ /dev/null @@ -1,56 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKSTYLEITEMFRAME_H -#define QQUICKSTYLEITEMFRAME_H - -#include "qquickstyleitem.h" -#include - -class QQuickStyleItemFrame : public QQuickStyleItem -{ - Q_OBJECT - QML_NAMED_ELEMENT(Frame) - -protected: - void paintEvent(QPainter *painter) const override; - StyleItemGeometry calculateGeometry() override; - -private: - void initStyleOption(QStyleOptionFrame &styleOption) const; -}; - -#endif // QQUICKSTYLEITEMFRAME_H diff --git a/src/imports/nativestyle/items/qquickstyleitemgroupbox.cpp b/src/imports/nativestyle/items/qquickstyleitemgroupbox.cpp deleted file mode 100644 index a828160d..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemgroupbox.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickstyleitemgroupbox.h" - -QFont QQuickStyleItemGroupBox::styleFont(QQuickItem *control) const -{ - return style()->font(QStyle::CE_HeaderLabel, controlSize(control)); -} - -StyleItemGeometry QQuickStyleItemGroupBox::calculateGeometry() -{ - QStyleOptionGroupBox styleOption; - initStyleOption(styleOption); - - StyleItemGeometry geometry; - geometry.minimumSize = style()->sizeFromContents(QStyle::CT_GroupBox, &styleOption, QSize(0, 0)); - - if (!control()->title().isEmpty()) { - // We don't draw the title, but we need to take - // it into calculation for the control size - styleOption.text = QStringLiteral(" "); - styleOption.subControls |= QStyle::SC_GroupBoxLabel; - } - - geometry.implicitSize = style()->sizeFromContents(QStyle::CT_GroupBox, &styleOption, contentSize()); - styleOption.rect.setSize(geometry.implicitSize); - geometry.contentRect = style()->subControlRect(QStyle::CC_GroupBox, &styleOption, QStyle::SC_GroupBoxContents); - geometry.layoutRect = style()->subElementRect(QStyle::SE_GroupBoxLayoutItem, &styleOption); - geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CC_GroupBox, &styleOption, geometry.minimumSize); - - const QQuickStyleMargins oldGroupBoxPadding = m_groupBoxPadding; - const QRect frame = style()->subControlRect(QStyle::CC_GroupBox, &styleOption, QStyle::SC_GroupBoxFrame); - m_groupBoxPadding = QQuickStyleMargins(QRect(QPoint(), geometry.implicitSize), frame); - if (m_groupBoxPadding != oldGroupBoxPadding) - emit groupBoxPaddingChanged(); - - const QPointF oldLabelPos = m_labelPos; - m_labelPos = style()->subControlRect(QStyle::CC_GroupBox, &styleOption, QStyle::SC_GroupBoxLabel).topLeft(); - if (m_labelPos != oldLabelPos) - emit labelPosChanged(); - return geometry; -} - -void QQuickStyleItemGroupBox::paintEvent(QPainter *painter) const -{ - QStyleOptionGroupBox styleOption; - initStyleOption(styleOption); - style()->drawComplexControl(QStyle::CC_GroupBox, &styleOption, painter); -} - -void QQuickStyleItemGroupBox::initStyleOption(QStyleOptionGroupBox &styleOption) const -{ - initStyleOptionBase(styleOption); - styleOption.subControls = QStyle::SC_GroupBoxFrame; - styleOption.lineWidth = 1; -} - -QQuickStyleMargins QQuickStyleItemGroupBox::groupBoxPadding() const -{ - return m_groupBoxPadding; -} - -QPointF QQuickStyleItemGroupBox::labelPos() const -{ - return m_labelPos; -} diff --git a/src/imports/nativestyle/items/qquickstyleitemgroupbox.h b/src/imports/nativestyle/items/qquickstyleitemgroupbox.h deleted file mode 100644 index 2b07287f..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemgroupbox.h +++ /dev/null @@ -1,70 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKSTYLEITEMGROUPBOX_H -#define QQUICKSTYLEITEMGROUPBOX_H - -#include "qquickstyleitem.h" -#include - -class QQuickStyleItemGroupBox : public QQuickStyleItem -{ - Q_OBJECT - Q_PROPERTY(QQuickStyleMargins groupBoxPadding READ groupBoxPadding NOTIFY groupBoxPaddingChanged) - Q_PROPERTY(QPointF labelPos READ labelPos NOTIFY labelPosChanged) - QML_NAMED_ELEMENT(GroupBox) - -public: - QQuickStyleMargins groupBoxPadding() const; - QPointF labelPos() const; - QFont styleFont(QQuickItem *control) const override; - -signals: - void groupBoxPaddingChanged(); - void labelPosChanged(); - -protected: - void paintEvent(QPainter *painter) const override; - StyleItemGeometry calculateGeometry() override; - -private: - QQuickStyleMargins m_groupBoxPadding; - QPointF m_labelPos; - - void initStyleOption(QStyleOptionGroupBox &styleOption) const; -}; - -#endif // QQUICKSTYLEITEMGROUPBOX_H diff --git a/src/imports/nativestyle/items/qquickstyleitemprogressbar.cpp b/src/imports/nativestyle/items/qquickstyleitemprogressbar.cpp deleted file mode 100644 index 480e8981..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemprogressbar.cpp +++ /dev/null @@ -1,114 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickstyleitemprogressbar.h" - -QFont QQuickStyleItemProgressBar::styleFont(QQuickItem *control) const -{ - return style()->font(QStyle::CE_ProgressBarLabel, controlSize(control)); -} - -void QQuickStyleItemProgressBar::connectToControl() const -{ - QQuickStyleItem::connectToControl(); - auto progressBar = control(); - connect(progressBar, &QQuickProgressBar::fromChanged, this, &QQuickStyleItem::markImageDirty); - connect(progressBar, &QQuickProgressBar::toChanged, this, &QQuickStyleItem::markImageDirty); - connect(progressBar, &QQuickProgressBar::positionChanged, this, &QQuickStyleItem::markImageDirty); -} - -StyleItemGeometry QQuickStyleItemProgressBar::calculateGeometry() -{ - QStyleOptionProgressBar styleOption; - initStyleOption(styleOption); - - StyleItemGeometry geometry; - geometry.minimumSize = style()->sizeFromContents(QStyle::CT_ProgressBar, &styleOption, QSize(0, 0)); - - // From qprogressbar.cpp in qtbase: - const int cw = style()->pixelMetric(QStyle::PM_ProgressBarChunkWidth, &styleOption); - QFontMetrics fm(control()->font()); - QSize size = QSize(qMax(9, cw) * 7 + fm.horizontalAdvance(QLatin1Char('0')) * 4, fm.height() + 8); - if (!(styleOption.state & QStyle::State_Horizontal)) - size = size.transposed(); - - geometry.implicitSize = style()->sizeFromContents(QStyle::CT_ProgressBar, &styleOption, size); - styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize); - geometry.contentRect = style()->subElementRect(QStyle::SE_ProgressBarContents, &styleOption); - geometry.layoutRect = style()->subElementRect(QStyle::SE_ProgressBarLayoutItem, &styleOption); - geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CE_ProgressBar, &styleOption, geometry.minimumSize); - - return geometry; -} - -void QQuickStyleItemProgressBar::paintEvent(QPainter *painter) const -{ - QStyleOptionProgressBar styleOption; - initStyleOption(styleOption); -#ifndef Q_OS_MACOS - const QRect r = styleOption.rect; -#endif - // Note: on macOS, the groove will paint both the background and the contents - styleOption.rect = style()->subElementRect(QStyle::SE_ProgressBarGroove, &styleOption); - style()->drawControl(QStyle::CE_ProgressBarGroove, &styleOption, painter); -#ifndef Q_OS_MACOS - styleOption.rect = r; - styleOption.rect = style()->subElementRect(QStyle::SE_ProgressBarContents, &styleOption); - style()->drawControl(QStyle::CE_ProgressBarContents, &styleOption, painter); -#endif -} - -void QQuickStyleItemProgressBar::initStyleOption(QStyleOptionProgressBar &styleOption) const -{ - initStyleOptionBase(styleOption); - auto progressBar = control(); - - styleOption.state = QStyle::State_Horizontal; - - if (progressBar->isIndeterminate()) { - styleOption.minimum = 0; - styleOption.maximum = 0; - } else if (progressBar->to() - progressBar->from() < 100) { - // Add some range to support float numbers - styleOption.minimum = 0; - styleOption.maximum = (progressBar->to() - progressBar->from()) * 100; - styleOption.progress = (progressBar->value() - progressBar->from()) * 100; - } else { - styleOption.minimum = progressBar->from(); - styleOption.maximum = progressBar->to(); - styleOption.progress = progressBar->value(); - } -} diff --git a/src/imports/nativestyle/items/qquickstyleitemprogressbar.h b/src/imports/nativestyle/items/qquickstyleitemprogressbar.h deleted file mode 100644 index 53692dbe..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemprogressbar.h +++ /dev/null @@ -1,61 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKSTYLEITEMPROGRESSBAR_H -#define QQUICKSTYLEITEMPROGRESSBAR_H - -#include "qquickstyleitem.h" -#include - -class QQuickStyleItemProgressBar : public QQuickStyleItem -{ - Q_OBJECT - - QML_NAMED_ELEMENT(ProgressBar) - -public: - QFont styleFont(QQuickItem *control) const override; - -protected: - void connectToControl() const override; - void paintEvent(QPainter *painter) const override; - StyleItemGeometry calculateGeometry() override; - -private: - void initStyleOption(QStyleOptionProgressBar &styleOption) const; -}; - -#endif // QQUICKSTYLEITEMPROGRESSBAR_H diff --git a/src/imports/nativestyle/items/qquickstyleitemradiobutton.cpp b/src/imports/nativestyle/items/qquickstyleitemradiobutton.cpp deleted file mode 100644 index 655bb0b6..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemradiobutton.cpp +++ /dev/null @@ -1,83 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickstyleitemradiobutton.h" - -QFont QQuickStyleItemRadioButton::styleFont(QQuickItem *control) const -{ - return style()->font(QStyle::CE_RadioButtonLabel, controlSize(control)); -} - -void QQuickStyleItemRadioButton::connectToControl() const -{ - QQuickStyleItem::connectToControl(); - auto checkbox = control(); - connect(checkbox, &QQuickRadioButton::downChanged, this, &QQuickStyleItem::markImageDirty); - connect(checkbox, &QQuickRadioButton::checkedChanged, this, &QQuickStyleItem::markImageDirty); -} - -StyleItemGeometry QQuickStyleItemRadioButton::calculateGeometry() -{ - QStyleOptionButton styleOption; - initStyleOption(styleOption); - StyleItemGeometry geometry; - - geometry.minimumSize = style()->sizeFromContents(QStyle::CT_RadioButton, &styleOption, QSize(0, 0)); - geometry.implicitSize = geometry.minimumSize; - styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize); - geometry.contentRect = style()->subElementRect(QStyle::SE_RadioButtonContents, &styleOption); - geometry.layoutRect = style()->subElementRect(QStyle::SE_RadioButtonLayoutItem, &styleOption); - geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CE_RadioButton, &styleOption, geometry.minimumSize); - geometry.focusFrameRadius = style()->pixelMetric(QStyle::PM_RadioButtonFocusFrameRadius, &styleOption); - - return geometry; -} - -void QQuickStyleItemRadioButton::paintEvent(QPainter *painter) const -{ - QStyleOptionButton styleOption; - initStyleOption(styleOption); - style()->drawControl(QStyle::CE_RadioButton, &styleOption, painter); -} - -void QQuickStyleItemRadioButton::initStyleOption(QStyleOptionButton &styleOption) const -{ - initStyleOptionBase(styleOption); - auto checkbox = control(); - - styleOption.state |= checkbox->isDown() ? QStyle::State_Sunken : QStyle::State_Raised; - styleOption.state |= checkbox->isChecked() ? QStyle::State_On : QStyle::State_Off; -} diff --git a/src/imports/nativestyle/items/qquickstyleitemradiobutton.h b/src/imports/nativestyle/items/qquickstyleitemradiobutton.h deleted file mode 100644 index 56073d8f..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemradiobutton.h +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKSTYLEITEMRADIOBUTTON_H -#define QQUICKSTYLEITEMRADIOBUTTON_H - -#include "qquickstyleitem.h" -#include - -class QQuickStyleItemRadioButton : public QQuickStyleItem -{ - Q_OBJECT - QML_NAMED_ELEMENT(RadioButton) - -public: - QFont styleFont(QQuickItem *control) const override; - -protected: - void connectToControl() const override; - void paintEvent(QPainter *painter) const override; - StyleItemGeometry calculateGeometry() override; - -private: - void initStyleOption(QStyleOptionButton &styleOption) const; -}; - -#endif // QQUICKSTYLEITEMRADIOBUTTON_H diff --git a/src/imports/nativestyle/items/qquickstyleitemscrollbar.cpp b/src/imports/nativestyle/items/qquickstyleitemscrollbar.cpp deleted file mode 100644 index d6d41d96..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemscrollbar.cpp +++ /dev/null @@ -1,151 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickstyleitemscrollbar.h" - -QFont QQuickStyleItemScrollBar::styleFont(QQuickItem *control) const -{ - return style()->font(QStyle::CE_ProgressBarLabel, controlSize(control)); -} - -void QQuickStyleItemScrollBar::connectToControl() const -{ - QQuickStyleItem::connectToControl(); - auto scrollBar = control(); - connect(scrollBar, &QQuickScrollBar::orientationChanged, this, &QQuickStyleItem::markImageDirty); - connect(scrollBar, &QQuickScrollBar::pressedChanged, this, &QQuickStyleItem::markImageDirty); -} - -StyleItemGeometry QQuickStyleItemScrollBar::calculateGeometry() -{ - QStyleOptionSlider styleOption; - initStyleOption(styleOption); - - StyleItemGeometry geometry; - geometry.minimumSize = style()->sizeFromContents(QStyle::CT_ScrollBar, &styleOption, QSize(0, 0)); - if (m_subControl == SubLine || m_subControl == AddLine) { - // So far, we know that only the windows style uses these subcontrols, - // so we can use hardcoded sizes... - QSize sz(16, 17); - if (styleOption.orientation == Qt::Vertical) - sz.transpose(); - geometry.minimumSize = sz; - } - geometry.implicitSize = geometry.minimumSize; - styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize); - geometry.layoutRect = style()->subElementRect(QStyle::SE_ScrollBarLayoutItem, &styleOption); - geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CC_ScrollBar, &styleOption, geometry.minimumSize); - - return geometry; -} - -void QQuickStyleItemScrollBar::paintEvent(QPainter *painter) const -{ - QStyleOptionSlider styleOption; - initStyleOption(styleOption); - if (m_subControl == SubLine || m_subControl == AddLine) { - QStyle::SubControl sc = m_subControl == SubLine ? QStyle::SC_ScrollBarSubLine : QStyle::SC_ScrollBarAddLine; - QStyleOptionSlider opt = styleOption; - opt.subControls = QStyle::SC_ScrollBarAddLine - | QStyle::SC_ScrollBarSubLine - | QStyle::SC_ScrollBarGroove; - - const qreal scale = window()->devicePixelRatio(); - const QSize scrollBarMinSize = style()->sizeFromContents(QStyle::CT_ScrollBar, &opt, QSize(0, 0)); - const QSize sz = scrollBarMinSize * scale; - QImage scrollBarImage(sz, QImage::Format_ARGB32_Premultiplied); - scrollBarImage.setDevicePixelRatio(scale); - QPainter p(&scrollBarImage); - opt.rect = QRect(QPoint(0, 0), scrollBarMinSize); - style()->drawComplexControl(QStyle::CC_ScrollBar, &opt, &p); - QRect sourceImageRect = style()->subControlRect(QStyle::CC_ScrollBar, &opt, sc); - sourceImageRect = QRect(sourceImageRect.topLeft() * scale, sourceImageRect.size() * scale); - painter->drawImage(QPoint(0, 0), scrollBarImage, sourceImageRect); - } else { - style()->drawComplexControl(QStyle::CC_ScrollBar, &styleOption, painter); - } -} - -void QQuickStyleItemScrollBar::initStyleOption(QStyleOptionSlider &styleOption) const -{ - initStyleOptionBase(styleOption); - auto scrollBar = control(); - - switch (m_subControl) { - case Groove: - styleOption.subControls = QStyle::SC_ScrollBarGroove | QStyle::SC_ScrollBarAddLine | QStyle::SC_ScrollBarSubLine; - break; - case Handle: - styleOption.subControls = QStyle::SC_ScrollBarSlider; - break; - case AddLine: - styleOption.subControls = QStyle::SC_ScrollBarAddLine; - break; - case SubLine: - styleOption.subControls = QStyle::SC_ScrollBarSubLine; - break; - } - - styleOption.activeSubControls = QStyle::SC_None; - styleOption.orientation = scrollBar->orientation(); - if (styleOption.orientation == Qt::Horizontal) - styleOption.state |= QStyle::State_Horizontal; - - if (scrollBar->isPressed()) - styleOption.state |= QStyle::State_Sunken; - - if (m_overrideState != None) { - // In ScrollBar.qml we fade between two versions of - // the handle, depending on if it's hovered or not - - if (m_overrideState == AlwaysHovered) { - styleOption.activeSubControls = (styleOption.subControls & (QStyle::SC_ScrollBarSlider | QStyle::SC_ScrollBarGroove | QStyle::SC_ScrollBarAddLine | QStyle::SC_ScrollBarSubLine)); - } else if (m_overrideState == NeverHovered) { - styleOption.activeSubControls &= ~(styleOption.subControls & (QStyle::SC_ScrollBarSlider | QStyle::SC_ScrollBarGroove | QStyle::SC_ScrollBarAddLine | QStyle::SC_ScrollBarSubLine)); - } else if (m_overrideState == AlwaysSunken) { - styleOption.state |= QStyle::State_Sunken; - styleOption.activeSubControls = (styleOption.subControls & (QStyle::SC_ScrollBarSlider | QStyle::SC_ScrollBarGroove | QStyle::SC_ScrollBarAddLine | QStyle::SC_ScrollBarSubLine)); - } - } - - // The following values will let the handle fill 100% of the - // groove / imageSize. But when the handle is resized by - // QQuickScrollBar, it will end up with the correct size visually. - styleOption.pageStep = 1000; - styleOption.minimum = 0; - styleOption.maximum = 1; - styleOption.sliderValue = 0; -} diff --git a/src/imports/nativestyle/items/qquickstyleitemscrollbar.h b/src/imports/nativestyle/items/qquickstyleitemscrollbar.h deleted file mode 100644 index f89d8d3e..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemscrollbar.h +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKSTYLEITEMSCROLLBAR_H -#define QQUICKSTYLEITEMSCROLLBAR_H - -#include "qquickstyleitem.h" -#include - -class QQuickStyleItemScrollBar : public QQuickStyleItem -{ - Q_OBJECT - - Q_PROPERTY(SubControl subControl MEMBER m_subControl) - - QML_NAMED_ELEMENT(ScrollBar) - -public: - enum SubControl { - Groove = 1, - Handle, - AddLine, - SubLine - }; - Q_ENUM(SubControl) - - QFont styleFont(QQuickItem *control) const override; - -protected: - void connectToControl() const override; - void paintEvent(QPainter *painter) const override; - StyleItemGeometry calculateGeometry() override; - -private: - void initStyleOption(QStyleOptionSlider &styleOption) const; - -private: - SubControl m_subControl = Groove; -}; - -#endif // QQUICKSTYLEITEMSCROLLBAR_H diff --git a/src/imports/nativestyle/items/qquickstyleitemscrollviewcorner.cpp b/src/imports/nativestyle/items/qquickstyleitemscrollviewcorner.cpp deleted file mode 100644 index 3a992f2d..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemscrollviewcorner.cpp +++ /dev/null @@ -1,119 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickstyleitemscrollviewcorner.h" - -StyleItemGeometry QQuickStyleItemScrollViewCorner::calculateGeometry() -{ - QStyleOptionSlider styleOption; - initStyleOption(styleOption); - - StyleItemGeometry geometry; - - // The size of the corner should be the width of the vertical - // scrollbar and the height of the horizontal scrollbar. - styleOption.orientation = Qt::Vertical; - const auto vScrollBarWidth = style()->sizeFromContents(QStyle::CT_ScrollBar, &styleOption, QSize(0, 0)).width(); - styleOption.orientation = Qt::Horizontal; - const auto hScrollBarHeight = style()->sizeFromContents(QStyle::CT_ScrollBar, &styleOption, QSize(0, 0)).height(); - - geometry.minimumSize = QSize(vScrollBarWidth, hScrollBarHeight); - geometry.implicitSize = geometry.minimumSize; - - return geometry; -} - -void QQuickStyleItemScrollViewCorner::paintEvent(QPainter *painter) const -{ - QStyleOptionSlider styleOption; - initStyleOption(styleOption); - - // Grab a center piece of a vertical scrollbar groove onto a QImage, and use this - // image to draw a corner. We draw the corner by first drawing the piece as it is, and - // then rotate it 90 degrees, clip it into a triangle, and draw it once more on top. - // The result is that we end up with one vertical and one horizontal triangle that - // together form a filled corner rectangle. - - styleOption.orientation = Qt::Vertical; - - const qreal scale = window()->devicePixelRatio(); - const int grooveWidth = minimumSize().width(); - const int grooveHeight = minimumSize().height(); - const QSize scrollBarMinSize = style()->sizeFromContents(QStyle::CT_ScrollBar, &styleOption, QSize(0, 0)); - const QSize scrollBarSize = scrollBarMinSize + QSize(0, grooveHeight); - const int hStart = scrollBarMinSize.height() / 2; - const QRect targetImageRect(0, hStart * scale, grooveWidth * scale, grooveHeight * scale); - - QImage scrollBarImage(scrollBarSize * scale, QImage::Format_ARGB32_Premultiplied); - scrollBarImage.setDevicePixelRatio(scale); - scrollBarImage.fill(Qt::transparent); - QPainter scrollBarPainter(&scrollBarImage); - styleOption.rect = QRect(QPoint(0, 0), scrollBarSize); - style()->drawComplexControl(QStyle::CC_ScrollBar, &styleOption, &scrollBarPainter); - - // Draw vertical groove - painter->drawImage(QPoint(0, 0), scrollBarImage, targetImageRect); - - QPainterPath path; - path.moveTo(0, 0); - path.lineTo(0, grooveHeight); - path.lineTo(grooveWidth, grooveHeight); - path.closeSubpath(); - - QTransform transform; - transform.translate(grooveWidth, 0); - transform.rotate(90); - - painter->save(); - painter->setCompositionMode(QPainter::CompositionMode_Source); - painter->setClipPath(path); - painter->setTransform(transform); - // Draw horizontal groove, clipped to a triangle - painter->drawImage(QPoint(0, 0), scrollBarImage, targetImageRect); - painter->restore(); -} - -void QQuickStyleItemScrollViewCorner::initStyleOption(QStyleOptionSlider &styleOption) const -{ - initStyleOptionBase(styleOption); - - styleOption.subControls = QStyle::SC_ScrollBarGroove; - styleOption.activeSubControls = QStyle::SC_None; - styleOption.pageStep = 1000; - styleOption.minimum = 0; - styleOption.maximum = 1; - styleOption.sliderValue = 0; -} diff --git a/src/imports/nativestyle/items/qquickstyleitemscrollviewcorner.h b/src/imports/nativestyle/items/qquickstyleitemscrollviewcorner.h deleted file mode 100644 index 637a8ea8..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemscrollviewcorner.h +++ /dev/null @@ -1,56 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKSTYLEITEMSCROLLVIEWCORNER_H -#define QQUICKSTYLEITEMSCROLLVIEWCORNER_H - -#include "qquickstyleitem.h" -#include - -class QQuickStyleItemScrollViewCorner : public QQuickStyleItem -{ - Q_OBJECT - QML_NAMED_ELEMENT(ScrollViewCorner) - -protected: - void paintEvent(QPainter *painter) const override; - StyleItemGeometry calculateGeometry() override; - -private: - void initStyleOption(QStyleOptionSlider &styleOption) const; -}; - -#endif // QQUICKSTYLEITEMSCROLLVIEWCORNER_H diff --git a/src/imports/nativestyle/items/qquickstyleitemslider.cpp b/src/imports/nativestyle/items/qquickstyleitemslider.cpp deleted file mode 100644 index 67161ad3..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemslider.cpp +++ /dev/null @@ -1,123 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickstyleitemslider.h" - -QFont QQuickStyleItemSlider::styleFont(QQuickItem *control) const -{ - return style()->font(QStyle::CE_ProgressBarLabel, controlSize(control)); -} - -void QQuickStyleItemSlider::connectToControl() const -{ - QQuickStyleItem::connectToControl(); - auto slider = control(); - connect(slider, &QQuickSlider::fromChanged, this, &QQuickStyleItem::markImageDirty); - connect(slider, &QQuickSlider::toChanged, this, &QQuickStyleItem::markImageDirty); - connect(slider, &QQuickSlider::positionChanged, this, &QQuickStyleItem::markImageDirty); - connect(slider, &QQuickSlider::valueChanged, this, &QQuickStyleItem::markImageDirty); - connect(slider, &QQuickSlider::stepSizeChanged, this, &QQuickStyleItem::markImageDirty); - connect(slider, &QQuickSlider::pressedChanged, this, &QQuickStyleItem::markImageDirty); - connect(slider, &QQuickSlider::orientationChanged, this, &QQuickStyleItem::markImageDirty); -} - -StyleItemGeometry QQuickStyleItemSlider::calculateGeometry() -{ - QStyleOptionSlider styleOption; - initStyleOption(styleOption); - - StyleItemGeometry geometry; - geometry.minimumSize = style()->sizeFromContents(QStyle::CT_Slider, &styleOption, QSize(0, 0)); - geometry.implicitSize = geometry.minimumSize; - styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize); - geometry.layoutRect = style()->subElementRect(QStyle::SE_SliderLayoutItem, &styleOption); - geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CC_Slider, &styleOption, geometry.minimumSize); - geometry.focusFrameRadius = style()->pixelMetric(QStyle::PM_SliderFocusFrameRadius, &styleOption); - - return geometry; -} - -void QQuickStyleItemSlider::paintEvent(QPainter *painter) const -{ - QStyleOptionSlider styleOption; - initStyleOption(styleOption); - style()->drawComplexControl(QStyle::CC_Slider, &styleOption, painter); -} - -void QQuickStyleItemSlider::initStyleOption(QStyleOptionSlider &styleOption) const -{ - initStyleOptionBase(styleOption); - auto slider = control(); - - styleOption.subControls = QStyle::SC_None; - if (m_subControl & Groove) - styleOption.subControls |= QStyle::SC_SliderGroove; - if (m_subControl & Handle) - styleOption.subControls |= QStyle::SC_SliderHandle; - styleOption.activeSubControls = QStyle::SC_None; - styleOption.orientation = slider->orientation(); - - if (slider->isPressed()) - styleOption.state |= QStyle::State_Sunken; - - qreal min = 0; - qreal max = 1; - if (!qFuzzyIsNull(slider->stepSize())) { - min = slider->from(); - max = slider->to(); - - // TODO: add proper API for tickmarks - const int index = slider->metaObject()->indexOfProperty("qqc2_style_tickPosition"); - if (index != -1) { - const int tickPosition = slider->metaObject()->property(index).read(slider).toInt(); - styleOption.tickPosition = QStyleOptionSlider::TickPosition(tickPosition); - if (styleOption.tickPosition != QStyleOptionSlider::NoTicks) - styleOption.subControls |= QStyle::SC_SliderTickmarks; - } - } - - // Since the [from, to] interval in QQuickSlider is floating point, users can - // specify very small ranges and step sizes, (e.g. [0.., 0.25], step size 0.05). - // Since the style operates on ints, we cannot pass these values directly to the style, - // so we normalize all values to the range [0, 10000] - static const qreal Scale = 10000; - const qreal normalizeMultiplier = Scale/(max - min); - styleOption.tickInterval = int(slider->stepSize() * normalizeMultiplier); - styleOption.minimum = 0; - styleOption.maximum = int(Scale); - styleOption.sliderValue = int((slider->value() - min) * normalizeMultiplier); - styleOption.sliderPosition = int(slider->position() * styleOption.maximum); -} diff --git a/src/imports/nativestyle/items/qquickstyleitemslider.h b/src/imports/nativestyle/items/qquickstyleitemslider.h deleted file mode 100644 index 9a514207..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemslider.h +++ /dev/null @@ -1,72 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKSTYLEITEMSLIDER_H -#define QQUICKSTYLEITEMSLIDER_H - -#include "qquickstyleitem.h" -#include - -class QQuickStyleItemSlider : public QQuickStyleItem -{ - Q_OBJECT - - Q_PROPERTY(SubControl subControl MEMBER m_subControl) - - QML_NAMED_ELEMENT(Slider) - -public: - enum SubControl { - Groove = 1, - Handle, - }; - Q_ENUM(SubControl) - - QFont styleFont(QQuickItem *control) const override; - -protected: - void connectToControl() const override; - void paintEvent(QPainter *painter) const override; - StyleItemGeometry calculateGeometry() override; - -private: - void initStyleOption(QStyleOptionSlider &styleOption) const; - -private: - SubControl m_subControl = Groove; -}; - -#endif // QQUICKSTYLEITEMSLIDER_H diff --git a/src/imports/nativestyle/items/qquickstyleitemspinbox.cpp b/src/imports/nativestyle/items/qquickstyleitemspinbox.cpp deleted file mode 100644 index 2a232b8a..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemspinbox.cpp +++ /dev/null @@ -1,110 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickstyleitemspinbox.h" -#include - -QFont QQuickStyleItemSpinBox::styleFont(QQuickItem *control) const -{ - return style()->font(QStyle::CE_ComboBoxLabel, controlSize(control)); -} - -void QQuickStyleItemSpinBox::connectToControl() const -{ - QQuickStyleItem::connectToControl(); - auto spinbox = control(); - connect(spinbox->up(), &QQuickIndicatorButton::pressedChanged, this, &QQuickStyleItem::markImageDirty); - connect(spinbox->down(), &QQuickIndicatorButton::pressedChanged, this, &QQuickStyleItem::markImageDirty); -} - -StyleItemGeometry QQuickStyleItemSpinBox::calculateGeometry() -{ - QStyleOptionSpinBox styleOption; - initStyleOption(styleOption); - StyleItemGeometry geometry; - - geometry.minimumSize = style()->sizeFromContents(QStyle::CT_SpinBox, &styleOption, QSize(0, 0)); - - if (styleOption.subControls == QStyle::SC_SpinBoxFrame) { - geometry.implicitSize = style()->sizeFromContents(QStyle::CT_SpinBox, &styleOption, contentSize()); - styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize); - geometry.contentRect = style()->subControlRect(QStyle::CC_SpinBox, &styleOption, QStyle::SC_SpinBoxEditField); - geometry.layoutRect = style()->subElementRect(QStyle::SE_SpinBoxLayoutItem, &styleOption); - geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CC_SpinBox, &styleOption, geometry.minimumSize); - geometry.focusFrameRadius = style()->pixelMetric(QStyle::PM_SpinBoxFocusFrameRadius, &styleOption); - } else { - geometry.implicitSize = geometry.minimumSize; - } - - return geometry; -} - -void QQuickStyleItemSpinBox::paintEvent(QPainter *painter) const -{ - QStyleOptionSpinBox styleOption; - initStyleOption(styleOption); - style()->drawComplexControl(QStyle::CC_SpinBox, &styleOption, painter); -} - -void QQuickStyleItemSpinBox::initStyleOption(QStyleOptionSpinBox &styleOption) const -{ - initStyleOptionBase(styleOption); - auto spinbox = control(); - - switch (m_subControl) { - case Frame: - styleOption.subControls = QStyle::SC_SpinBoxFrame; - styleOption.frame = true; - break; - case Up: - styleOption.subControls = (QStyle::SC_SpinBoxUp | QStyle::SC_SpinBoxDown); - break; - case Down: - styleOption.subControls = QStyle::SC_SpinBoxDown; - break; - } - - if (spinbox->up()->isPressed()) { - styleOption.activeSubControls = QStyle::SC_SpinBoxUp; - styleOption.state |= QStyle::State_Sunken; - } else if (spinbox->down()->isPressed()) { - styleOption.activeSubControls = QStyle::SC_SpinBoxDown; - styleOption.state |= QStyle::State_Sunken; - } - - styleOption.buttonSymbols = QStyleOptionSpinBox::UpDownArrows; - styleOption.stepEnabled = QStyleOptionSpinBox::StepEnabled; -} diff --git a/src/imports/nativestyle/items/qquickstyleitemspinbox.h b/src/imports/nativestyle/items/qquickstyleitemspinbox.h deleted file mode 100644 index d4b9f9fa..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemspinbox.h +++ /dev/null @@ -1,73 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKSTYLEITEMSPINBOX_H -#define QQUICKSTYLEITEMSPINBOX_H - -#include "qquickstyleitem.h" -#include - -class QQuickStyleItemSpinBox : public QQuickStyleItem -{ - Q_OBJECT - - Q_PROPERTY(SubControl subControl MEMBER m_subControl) - - QML_NAMED_ELEMENT(SpinBox) - -public: - enum SubControl { - Frame = 1, - Up, - Down, - }; - Q_ENUM(SubControl) - - QFont styleFont(QQuickItem *control) const override; - -protected: - void connectToControl() const override; - void paintEvent(QPainter *painter) const override; - StyleItemGeometry calculateGeometry() override; - -private: - void initStyleOption(QStyleOptionSpinBox &styleOption) const; - -private: - SubControl m_subControl = Frame; -}; - -#endif // QQUICKSTYLEITEMSPINBOX_H diff --git a/src/imports/nativestyle/items/qquickstyleitemtextfield.cpp b/src/imports/nativestyle/items/qquickstyleitemtextfield.cpp deleted file mode 100644 index cd7d35aa..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemtextfield.cpp +++ /dev/null @@ -1,86 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickstyleitemtextfield.h" - -QFont QQuickStyleItemTextField::styleFont(QQuickItem *control) const -{ - return style()->font(QStyle::CE_ComboBoxLabel, controlSize(control)); -} - -void QQuickStyleItemTextField::connectToControl() const -{ - QQuickStyleItem::connectToControl(); - auto textField = control(); - connect(textField, &QQuickTextField::readOnlyChanged, this, &QQuickStyleItem::markImageDirty); - connect(textField, &QQuickTextField::focusChanged, this, &QQuickStyleItem::markImageDirty); -} - -StyleItemGeometry QQuickStyleItemTextField::calculateGeometry() -{ - QStyleOptionFrame styleOption; - initStyleOption(styleOption); - StyleItemGeometry geometry; - - geometry.minimumSize = style()->sizeFromContents(QStyle::CT_LineEdit, &styleOption, QSize(0, 0)); - geometry.implicitSize = style()->sizeFromContents(QStyle::CT_LineEdit, &styleOption, contentSize()); - styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize); - geometry.layoutRect = styleOption.rect; - geometry.contentRect = style()->subElementRect(QStyle::SE_LineEditContents, &styleOption); - geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CE_ShapedFrame, &styleOption, geometry.minimumSize); - geometry.focusFrameRadius = style()->pixelMetric(QStyle::PM_TextFieldFocusFrameRadius, &styleOption); - - return geometry; -} - -void QQuickStyleItemTextField::paintEvent(QPainter *painter) const -{ - QStyleOptionFrame styleOption; - initStyleOption(styleOption); - style()->drawPrimitive(QStyle::PE_PanelLineEdit, &styleOption, painter); -} - -void QQuickStyleItemTextField::initStyleOption(QStyleOptionFrame &styleOption) const -{ - initStyleOptionBase(styleOption); - auto textField = control(); - - styleOption.lineWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth, &styleOption); - styleOption.midLineWidth = 0; - styleOption.state |= QStyle::State_Sunken; - if (textField->isReadOnly()) - styleOption.state |= QStyle::State_ReadOnly; -} diff --git a/src/imports/nativestyle/items/qquickstyleitemtextfield.h b/src/imports/nativestyle/items/qquickstyleitemtextfield.h deleted file mode 100644 index 35aaf753..00000000 --- a/src/imports/nativestyle/items/qquickstyleitemtextfield.h +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKSTYLEITEMTEXTFIELD_H -#define QQUICKSTYLEITEMTEXTFIELD_H - -#include "qquickstyleitem.h" -#include - -class QQuickStyleItemTextField : public QQuickStyleItem -{ - Q_OBJECT - QML_NAMED_ELEMENT(TextField) - -public: - QFont styleFont(QQuickItem *control) const override; - -protected: - void connectToControl() const override; - void paintEvent(QPainter *painter) const override; - StyleItemGeometry calculateGeometry() override; - -private: - void initStyleOption(QStyleOptionFrame &styleOption) const; -}; - -#endif // QQUICKSTYLEITEMTEXTFIELD_H diff --git a/src/imports/nativestyle/qstyle/mac/mac.pri b/src/imports/nativestyle/qstyle/mac/mac.pri deleted file mode 100644 index 2f7ee7d4..00000000 --- a/src/imports/nativestyle/qstyle/mac/mac.pri +++ /dev/null @@ -1,12 +0,0 @@ -LIBS_PRIVATE += -framework AppKit - -INCLUDEPATH += $$PWD - -HEADERS += \ - $$PWD/qquickmacstyle_mac_p.h \ - $$PWD/qquickmacstyle_mac_p_p.h - -SOURCES += - -OBJECTIVE_SOURCES += \ - $$PWD/qquickmacstyle_mac.mm diff --git a/src/imports/nativestyle/qstyle/mac/qquickmacstyle_mac.mm b/src/imports/nativestyle/qstyle/mac/qquickmacstyle_mac.mm deleted file mode 100644 index 5d061667..00000000 --- a/src/imports/nativestyle/qstyle/mac/qquickmacstyle_mac.mm +++ /dev/null @@ -1,6072 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/* - Note: The qdoc comments for QMacStyle are contained in - .../doc/src/qstyles.qdoc. -*/ - -#include - -#include "qquickmacstyle_mac_p.h" -#include "qquickmacstyle_mac_p_p.h" -#include "qquickstylehelper_p.h" - -#include - -#define QMAC_QAQUASTYLE_SIZE_CONSTRAIN -//#define DEBUG_SIZE_CONSTRAINT - -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include - -#include - -QT_USE_NAMESPACE - -// OBS! Changing QT_MANGLE_NAMESPACE and QT_NAMESPACE_ALIAS_OBJC_CLASS to take -// both QT_NAMESPACE and QQC2_NAMESPACE into account (and not only QT_NAMESPACE, which -// would otherwise be the case). This will make it possible to link in both widgets and -// controls in the same application when building statically. -#undef QT_MANGLE_NAMESPACE -#undef QT_NAMESPACE_ALIAS_OBJC_CLASS - -#define QQC2_MANGLE1(a, b) a##_##b -#define QQC2_MANGLE2(a, b) QQC2_MANGLE1(a, b) - -#if defined(QT_NAMESPACE) - #define QT_MANGLE_NAMESPACE(name) QQC2_MANGLE2(QQC2_MANGLE1(name, QQC2_NAMESPACE), QT_NAMESPACE) - #define QT_NAMESPACE_ALIAS_OBJC_CLASS(name) @compatibility_alias name QT_MANGLE_NAMESPACE(name) -#else - #define QT_MANGLE_NAMESPACE(name) QQC2_MANGLE2(name, QQC2_NAMESPACE) - #define QT_NAMESPACE_ALIAS_OBJC_CLASS(name) @compatibility_alias name QT_MANGLE_NAMESPACE(name) -#endif - -@interface QT_MANGLE_NAMESPACE(QIndeterminateProgressIndicator) : NSProgressIndicator - -@property (readonly, nonatomic) NSInteger animators; - -- (instancetype)init; - -- (void)startAnimation; -- (void)stopAnimation; - -- (void)drawWithFrame:(CGRect)rect inView:(NSView *)view; - -@end - -QT_NAMESPACE_ALIAS_OBJC_CLASS(QIndeterminateProgressIndicator); - -@implementation QIndeterminateProgressIndicator - -- (instancetype)init -{ - if ((self = [super init])) { - _animators = 0; - self.indeterminate = YES; - self.usesThreadedAnimation = NO; - self.alphaValue = 0.0; - } - - return self; -} - -- (void)startAnimation -{ - if (_animators == 0) { - self.hidden = NO; - [super startAnimation:self]; - } - ++_animators; -} - -- (void)stopAnimation -{ - --_animators; - if (_animators == 0) { - [super stopAnimation:self]; - self.hidden = YES; - [self removeFromSuperviewWithoutNeedingDisplay]; - } -} - -- (void)drawWithFrame:(CGRect)rect inView:(NSView *)view -{ - // The alphaValue change is not strictly necessary, but feels safer. - self.alphaValue = 1.0; - if (self.superview != view) - [view addSubview:self]; - if (!CGRectEqualToRect(self.frame, rect)) - self.frame = rect; - [self drawRect:rect]; - self.alphaValue = 0.0; -} - -@end - -@interface QT_MANGLE_NAMESPACE(QVerticalSplitView) : NSSplitView -- (BOOL)isVertical; -@end - -QT_NAMESPACE_ALIAS_OBJC_CLASS(QVerticalSplitView); - -@implementation QVerticalSplitView -- (BOOL)isVertical -{ - return YES; -} -@end - -// See render code in drawPrimitive(PE_FrameTabWidget) -@interface QT_MANGLE_NAMESPACE(QDarkNSBox) : NSBox -@end - -QT_NAMESPACE_ALIAS_OBJC_CLASS(QDarkNSBox); - -@implementation QDarkNSBox -- (instancetype)init -{ - if ((self = [super init])) { - self.title = @""; - self.titlePosition = NSNoTitle; - self.boxType = NSBoxCustom; - self.cornerRadius = 3; - self.borderColor = [NSColor.controlColor colorWithAlphaComponent:0.1]; - self.fillColor = [NSColor.darkGrayColor colorWithAlphaComponent:0.2]; - } - - return self; -} - -- (void)drawRect:(NSRect)rect -{ - [super drawRect:rect]; -} -@end - -QT_BEGIN_NAMESPACE - -namespace QQC2_NAMESPACE { - -// The following constants are used for adjusting the size -// of push buttons so that they are drawn inside their bounds. -const int QMacStylePrivate::PushButtonLeftOffset = 6; -const int QMacStylePrivate::PushButtonRightOffset = 12; -const int QMacStylePrivate::PushButtonContentPadding = 6; - -QVector > QMacStylePrivate::scrollBars; - -// Title bar gradient colors for Lion were determined by inspecting PSDs exported -// using CoreUI's CoreThemeDocument; there is no public API to retrieve them - -static QLinearGradient titlebarGradientActive() -{ - static QLinearGradient darkGradient = [](){ - QLinearGradient gradient; - // FIXME: colors are chosen somewhat arbitrarily and could be fine-tuned, - // or ideally determined by calling a native API. - gradient.setColorAt(0, QColor(47, 47, 47)); - return gradient; - }(); - static QLinearGradient lightGradient = [](){ - QLinearGradient gradient; - gradient.setColorAt(0, QColor(235, 235, 235)); - gradient.setColorAt(0.5, QColor(210, 210, 210)); - gradient.setColorAt(0.75, QColor(195, 195, 195)); - gradient.setColorAt(1, QColor(180, 180, 180)); - return gradient; - }(); - return qt_mac_applicationIsInDarkMode() ? darkGradient : lightGradient; -} - -static QLinearGradient titlebarGradientInactive() -{ - static QLinearGradient darkGradient = [](){ - QLinearGradient gradient; - gradient.setColorAt(1, QColor(42, 42, 42)); - return gradient; - }(); - static QLinearGradient lightGradient = [](){ - QLinearGradient gradient; - gradient.setColorAt(0, QColor(250, 250, 250)); - gradient.setColorAt(1, QColor(225, 225, 225)); - return gradient; - }(); - return qt_mac_applicationIsInDarkMode() ? darkGradient : lightGradient; -} - -/* - Since macOS 10.14 AppKit is using transparency more extensively, especially for the - dark theme. Inactive buttons, for example, are semi-transparent. And we use them to - draw tab widget's tab bar. The combination of NSBox (also a part of tab widget) - and these transparent buttons gives us an undesired side-effect: an outline of - NSBox is visible through transparent buttons. To avoid this, we have this hack below: - we clip the area where the line would be visible through the buttons. The area we - want to clip away can be described as an intersection of the option's rect and - the tab widget's tab bar rect. But some adjustments are required, since those rects - are anyway adjusted during the rendering and they are not exactly what you'll see on - the screen. Thus this switch-statement inside. -*/ -static void clipTabBarFrame(const QStyleOption *option, const QMacStyle *style, CGContextRef ctx) -{ - Q_ASSERT(option); - Q_ASSERT(style); - Q_ASSERT(ctx); - - if (qt_mac_applicationIsInDarkMode()) { -// QTabWidget *tabWidget = qobject_cast(option->styleObject); -// Q_ASSERT(tabWidget); - -// QRect tabBarRect = style->subElementRect(QStyle::SE_TabWidgetTabBar, option, tabWidget).adjusted(2, 0, -3, 0); -// switch (tabWidget->tabPosition()) { -// case QTabWidget::South: -// tabBarRect.setY(tabBarRect.y() + tabBarRect.height() / 2); -// break; -// case QTabWidget::North: -// case QTabWidget::West: -// tabBarRect = tabBarRect.adjusted(0, 2, 0, -2); -// break; -// case QTabWidget::East: -// tabBarRect = tabBarRect.adjusted(tabBarRect.width() / 2, 2, tabBarRect.width() / 2, -2); -// } - -// const QRegion clipPath = QRegion(option->rect) - tabBarRect; -// QVarLengthArray cgRects; -// for (const QRect &qtRect : clipPath) -// cgRects.push_back(qtRect.toCGRect()); -// if (cgRects.size()) -// CGContextClipToRects(ctx, &cgRects[0], size_t(cgRects.size())); - } -} - -static const QColor titlebarSeparatorLineActive(111, 111, 111); -static const QColor titlebarSeparatorLineInactive(131, 131, 131); -static const QColor darkModeSeparatorLine(88, 88, 88); - -// Gradient colors used for the dock widget title bar and -// non-unifed tool bar background. -static const QColor lightMainWindowGradientBegin(240, 240, 240); -static const QColor lightMainWindowGradientEnd(200, 200, 200); -static const QColor darkMainWindowGradientBegin(47, 47, 47); -static const QColor darkMainWindowGradientEnd(47, 47, 47); - -static const int DisclosureOffset = 4; - -static const qreal titleBarIconTitleSpacing = 5; -static const qreal titleBarTitleRightMargin = 12; -static const qreal titleBarButtonSpacing = 8; - -// Tab bar colors -// active: window is active -// selected: tab is selected -// hovered: tab is hovered -bool isDarkMode() { return qt_mac_applicationIsInDarkMode(); } - -static const QColor lightTabBarTabBackgroundActive(190, 190, 190); -static const QColor darkTabBarTabBackgroundActive(38, 38, 38); -static const QColor tabBarTabBackgroundActive() { return isDarkMode() ? darkTabBarTabBackgroundActive : lightTabBarTabBackgroundActive; } - -static const QColor lightTabBarTabBackgroundActiveHovered(178, 178, 178); -static const QColor darkTabBarTabBackgroundActiveHovered(32, 32, 32); -static const QColor tabBarTabBackgroundActiveHovered() { return isDarkMode() ? darkTabBarTabBackgroundActiveHovered : lightTabBarTabBackgroundActiveHovered; } - -static const QColor lightTabBarTabBackgroundActiveSelected(211, 211, 211); -static const QColor darkTabBarTabBackgroundActiveSelected(52, 52, 52); -static const QColor tabBarTabBackgroundActiveSelected() { return isDarkMode() ? darkTabBarTabBackgroundActiveSelected : lightTabBarTabBackgroundActiveSelected; } - -static const QColor lightTabBarTabBackground(227, 227, 227); -static const QColor darkTabBarTabBackground(38, 38, 38); -static const QColor tabBarTabBackground() { return isDarkMode() ? darkTabBarTabBackground : lightTabBarTabBackground; } - -static const QColor lightTabBarTabBackgroundSelected(246, 246, 246); -static const QColor darkTabBarTabBackgroundSelected(52, 52, 52); -static const QColor tabBarTabBackgroundSelected() { return isDarkMode() ? darkTabBarTabBackgroundSelected : lightTabBarTabBackgroundSelected; } - -static const QColor lightTabBarTabLineActive(160, 160, 160); -static const QColor darkTabBarTabLineActive(90, 90, 90); -static const QColor tabBarTabLineActive() { return isDarkMode() ? darkTabBarTabLineActive : lightTabBarTabLineActive; } - -static const QColor lightTabBarTabLineActiveHovered(150, 150, 150); -static const QColor darkTabBarTabLineActiveHovered(90, 90, 90); -static const QColor tabBarTabLineActiveHovered() { return isDarkMode() ? darkTabBarTabLineActiveHovered : lightTabBarTabLineActiveHovered; } - -static const QColor lightTabBarTabLine(210, 210, 210); -static const QColor darkTabBarTabLine(90, 90, 90); -static const QColor tabBarTabLine() { return isDarkMode() ? darkTabBarTabLine : lightTabBarTabLine; } - -static const QColor lightTabBarTabLineSelected(189, 189, 189); -static const QColor darkTabBarTabLineSelected(90, 90, 90); -static const QColor tabBarTabLineSelected() { return isDarkMode() ? darkTabBarTabLineSelected : lightTabBarTabLineSelected; } - -static const QColor tabBarCloseButtonBackgroundHovered(162, 162, 162); -static const QColor tabBarCloseButtonBackgroundPressed(153, 153, 153); -static const QColor tabBarCloseButtonBackgroundSelectedHovered(192, 192, 192); -static const QColor tabBarCloseButtonBackgroundSelectedPressed(181, 181, 181); -static const QColor tabBarCloseButtonCross(100, 100, 100); -static const QColor tabBarCloseButtonCrossSelected(115, 115, 115); - -static const int closeButtonSize = 14; -static const qreal closeButtonCornerRadius = 2.0; - -#ifndef QT_NO_ACCESSIBILITY // This ifdef to avoid "unused function" warning. -QBrush brushForToolButton(bool isOnKeyWindow) -{ - // When a toolbutton in a toolbar is in the 'ON' state, we draw a - // partially transparent background. The colors must be different - // for 'Aqua' and 'DarkAqua' appearances though. - if (isDarkMode()) - return isOnKeyWindow ? QColor(73, 73, 73, 100) : QColor(56, 56, 56, 100); - - return isOnKeyWindow ? QColor(0, 0, 0, 28) : QColor(0, 0, 0, 21); -} -#endif // QT_NO_ACCESSIBILITY - -static const int headerSectionArrowHeight = 6; -static const int headerSectionSeparatorInset = 2; - -// One for each of QStyleHelper::WidgetSizePolicy -static const QMarginsF comboBoxFocusRingMargins[3] = { - { 0.5, 2, 3.5, 4 }, - { 0.5, 1, 2.5, 4 }, - { 0.5, 1.5, 2.5, 3.5 } -}; - -static const QMarginsF pullDownButtonShadowMargins[3] = { - { 0.5, -1, 0.5, 2 }, - { 0.5, -1.5, 0.5, 2.5 }, - { 0.5, 0, 0.5, 1 } -}; - -static const QMarginsF pushButtonShadowMargins[3] = { - { 1.5, -1.5, 1.5, 4.5 }, - { 1.5, -1, 1.5, 4 }, - { 1.5, 0.5, 1.5, 2.5 } -}; - -// These are frame heights as reported by Xcode 9's Interface Builder. -// Alignemnet rectangle's heights match for push and popup buttons -// with respective values 21, 18 and 15. - -static const qreal comboBoxDefaultHeight[3] = { - 26, 22, 19 -}; - -static const qreal pushButtonDefaultHeight[3] = { - 32, 28, 16 -}; - -static const qreal popupButtonDefaultHeight[3] = { - 26, 22, 15 -}; - -static const int toolButtonArrowSize = 7; -static const int toolButtonArrowMargin = 2; - -static const qreal focusRingWidth = 3.5; - -// An application can force 'Aqua' theme while the system theme is one of -// the 'Dark' variants. Since in Qt we sometimes use NSControls and even -// NSCells directly without attaching them to any view hierarchy, we have -// to set NSAppearance.currentAppearance to 'Aqua' manually, to make sure -// the correct rendering path is triggered. Apple recommends us to un-set -// the current appearance back after we finished with drawing. This is what -// AppearanceSync is for. - -class AppearanceSync { -public: - AppearanceSync() - { -#if QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_14) - if (QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSMojave - && !qt_mac_applicationIsInDarkMode()) { - auto requiredAppearanceName = NSApplication.sharedApplication.effectiveAppearance.name; - if (![NSAppearance.currentAppearance.name isEqualToString:requiredAppearanceName]) { - previous = NSAppearance.currentAppearance; - NSAppearance.currentAppearance = [NSAppearance appearanceNamed:requiredAppearanceName]; - } - } -#endif // QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_14) - } - - ~AppearanceSync() - { - if (previous) - NSAppearance.currentAppearance = previous; - } - -private: - NSAppearance *previous = nil; - - Q_DISABLE_COPY(AppearanceSync) -}; - -static bool setupScroller(NSScroller *scroller, const QStyleOptionSlider *sb) -{ - const qreal length = sb->maximum - sb->minimum + sb->pageStep; - if (qFuzzyIsNull(length)) - return false; - const qreal proportion = sb->pageStep / length; - const qreal range = qreal(sb->maximum - sb->minimum); - qreal value = range ? qreal(sb->sliderValue - sb->minimum) / range : 0; - if (sb->orientation == Qt::Horizontal && sb->direction == Qt::RightToLeft) - value = 1.0 - value; - - scroller.frame = sb->rect.toCGRect(); - scroller.floatValue = value; - scroller.knobProportion = proportion; - return true; -} - -static bool setupSlider(NSSlider *slider, const QStyleOptionSlider *sl) -{ - if (sl->minimum >= sl->maximum) - return false; - - slider.frame = sl->rect.toCGRect(); - slider.minValue = sl->minimum; - slider.maxValue = sl->maximum; - slider.intValue = sl->sliderPosition; - slider.enabled = sl->state & QStyle::State_Enabled; - if (sl->tickPosition != QStyleOptionSlider::NoTicks) { - // Set numberOfTickMarks, but TicksBothSides will be treated differently - int interval = sl->tickInterval; - if (interval == 0) { - interval = sl->pageStep; - if (interval == 0) - interval = sl->singleStep; - if (interval == 0) - interval = 1; // return false? - } - slider.numberOfTickMarks = 1 + ((sl->maximum - sl->minimum) / interval); - - const bool ticksAbove = sl->tickPosition == QStyleOptionSlider::TicksAbove; - if (sl->orientation == Qt::Horizontal) - slider.tickMarkPosition = ticksAbove ? NSTickMarkPositionAbove : NSTickMarkPositionBelow; - else - slider.tickMarkPosition = ticksAbove ? NSTickMarkPositionLeading : NSTickMarkPositionTrailing; - } else { - slider.numberOfTickMarks = 0; - } - - // Ensure the values set above are reflected when asking - // the cell for its metrics and to draw itself. - [slider layoutSubtreeIfNeeded]; - - return true; -} - -static bool isInMacUnifiedToolbarArea(QWindow *window, int windowY) -{ - QPlatformNativeInterface *nativeInterface = QGuiApplication::platformNativeInterface(); - QPlatformNativeInterface::NativeResourceForIntegrationFunction function = - nativeInterface->nativeResourceFunctionForIntegration("testContentBorderPosition"); - if (!function) - return false; // Not Cocoa platform plugin. - - typedef bool (*TestContentBorderPositionFunction)(QWindow *, int); - return (reinterpret_cast(function))(window, windowY); -} - - -static void drawTabCloseButton(QPainter *p, bool hover, bool selected, bool pressed, bool documentMode) -{ - p->setRenderHints(QPainter::Antialiasing); - QRect rect(0, 0, closeButtonSize, closeButtonSize); - const int width = rect.width(); - const int height = rect.height(); - - if (hover) { - // draw background circle - QColor background; - if (selected) { - if (documentMode) - background = pressed ? tabBarCloseButtonBackgroundSelectedPressed : tabBarCloseButtonBackgroundSelectedHovered; - else - background = QColor(255, 255, 255, pressed ? 150 : 100); // Translucent white - } else { - background = pressed ? tabBarCloseButtonBackgroundPressed : tabBarCloseButtonBackgroundHovered; - if (!documentMode) - background = background.lighter(pressed ? 135 : 140); // Lighter tab background, lighter color - } - - p->setPen(Qt::transparent); - p->setBrush(background); - p->drawRoundedRect(rect, closeButtonCornerRadius, closeButtonCornerRadius); - } - - // draw cross - const int margin = 3; - QPen crossPen; - crossPen.setColor(selected ? (documentMode ? tabBarCloseButtonCrossSelected : Qt::white) : tabBarCloseButtonCross); - crossPen.setWidthF(1.1); - crossPen.setCapStyle(Qt::FlatCap); - p->setPen(crossPen); - p->drawLine(margin, margin, width - margin, height - margin); - p->drawLine(margin, height - margin, width - margin, margin); -} - -QRect rotateTabPainter(QPainter *p, QStyleOptionTab::Shape shape, QRect tabRect) -{ - const auto tabDirection = QMacStylePrivate::tabDirection(shape); - if (QMacStylePrivate::verticalTabs(tabDirection)) { - int newX, newY, newRot; - if (tabDirection == QMacStylePrivate::East) { - newX = tabRect.width(); - newY = tabRect.y(); - newRot = 90; - } else { - newX = 0; - newY = tabRect.y() + tabRect.height(); - newRot = -90; - } - tabRect.setRect(0, 0, tabRect.height(), tabRect.width()); - QTransform transform; - transform.translate(newX, newY); - transform.rotate(newRot); - p->setTransform(transform, true); - } - return tabRect; -} - -void drawTabShape(QPainter *p, const QStyleOptionTab *tabOpt, bool isUnified, int tabOverlap) -{ - QRect rect = tabOpt->rect; - if (QMacStylePrivate::verticalTabs(QMacStylePrivate::tabDirection(tabOpt->shape))) - rect = rect.adjusted(-tabOverlap, 0, 0, 0); - else - rect = rect.adjusted(0, -tabOverlap, 0, 0); - - p->translate(rect.x(), rect.y()); - rect.moveLeft(0); - rect.moveTop(0); - const QRect tabRect = rotateTabPainter(p, tabOpt->shape, rect); - - const int width = tabRect.width(); - const int height = tabRect.height(); - const bool active = (tabOpt->state & QStyle::State_Active); - const bool selected = (tabOpt->state & QStyle::State_Selected); - - const QRect bodyRect(1, 2, width - 2, height - 3); - const QRect topLineRect(1, 0, width - 2, 1); - const QRect bottomLineRect(1, height - 1, width - 2, 1); - if (selected) { - // fill body - if (tabOpt->documentMode && isUnified) { - p->save(); - p->setCompositionMode(QPainter::CompositionMode_Source); - p->fillRect(tabRect, QColor(Qt::transparent)); - p->restore(); - } else if (active) { - p->fillRect(bodyRect, tabBarTabBackgroundActiveSelected()); - // top line - p->fillRect(topLineRect, tabBarTabLineSelected()); - } else { - p->fillRect(bodyRect, tabBarTabBackgroundSelected()); - } - } else { - // when the mouse is over non selected tabs they get a new color - const bool hover = (tabOpt->state & QStyle::State_MouseOver); - if (hover) { - // fill body - p->fillRect(bodyRect, tabBarTabBackgroundActiveHovered()); - // bottom line - p->fillRect(bottomLineRect, isDarkMode() ? QColor(Qt::black) : tabBarTabLineActiveHovered()); - } - } - - // separator lines between tabs - const QRect leftLineRect(0, 1, 1, height - 2); - const QRect rightLineRect(width - 1, 1, 1, height - 2); - const QColor separatorLineColor = active ? tabBarTabLineActive() : tabBarTabLine(); - p->fillRect(leftLineRect, separatorLineColor); - p->fillRect(rightLineRect, separatorLineColor); -} - -void drawTabBase(QPainter *p, const QStyleOptionTabBarBase *tbb) -{ - QRect r = tbb->rect; -// if (QMacStylePrivate::verticalTabs(QMacStylePrivate::tabDirection(tbb->shape))) -// r.setWidth(w->width()); -// else -// r.setHeight(w->height()); - - const QRect tabRect = rotateTabPainter(p, tbb->shape, r); - const int width = tabRect.width(); - const int height = tabRect.height(); - const bool active = (tbb->state & QStyle::State_Active); - - // fill body - const QRect bodyRect(0, 1, width, height - 1); - const QColor bodyColor = active ? tabBarTabBackgroundActive() : tabBarTabBackground(); - p->fillRect(bodyRect, bodyColor); - - // top line - const QRect topLineRect(0, 0, width, 1); - const QColor topLineColor = active ? tabBarTabLineActive() : tabBarTabLine(); - p->fillRect(topLineRect, topLineColor); - - // bottom line - const QRect bottomLineRect(0, height - 1, width, 1); - bool isDocument = false; -// if (const QTabBar *tabBar = qobject_cast(w)) -// isDocument = tabBar->documentMode(); - const QColor bottomLineColor = isDocument && isDarkMode() ? QColor(Qt::black) : active ? tabBarTabLineActive() : tabBarTabLine(); - p->fillRect(bottomLineRect, bottomLineColor); -} - -static QStyleHelper::WidgetSizePolicy getControlSize(const QStyleOption *option) -{ - const auto wsp = QStyleHelper::widgetSizePolicy(option); - if (wsp == QStyleHelper::SizeDefault) - return QStyleHelper::SizeLarge; - - return wsp; -} - -static QString qt_mac_removeMnemonics(const QString &original) -{ - QString returnText(original.size(), QChar()); - int finalDest = 0; - int currPos = 0; - int l = original.length(); - while (l) { - if (original.at(currPos) == QLatin1Char('&')) { - ++currPos; - --l; - if (l == 0) - break; - } else if (original.at(currPos) == QLatin1Char('(') && l >= 4 && - original.at(currPos + 1) == QLatin1Char('&') && - original.at(currPos + 2) != QLatin1Char('&') && - original.at(currPos + 3) == QLatin1Char(')')) { - /* remove mnemonics its format is "\s*(&X)" */ - int n = 0; - while (finalDest > n && returnText.at(finalDest - n - 1).isSpace()) - ++n; - finalDest -= n; - currPos += 4; - l -= 4; - continue; - } - returnText[finalDest] = original.at(currPos); - ++currPos; - ++finalDest; - --l; - } - returnText.truncate(finalDest); - return returnText; -} - -static bool qt_macWindowMainWindow(const QWindow *window) -{ - if (window->handle()) { - if (NSWindow *nswindow = static_cast( - QGuiApplication::platformNativeInterface()-> - nativeResourceForWindow(QByteArrayLiteral("nswindow"), - const_cast(window)))) { - return [nswindow isMainWindow]; - } - } - return false; -} - -#define LargeSmallMini(option, large, small, mini) \ - (option->state & QStyle::State_Small) ? small : ((option->state & QStyle::State_Mini) ? mini : large) - -/***************************************************************************** - QMacCGStyle globals - *****************************************************************************/ -const int macItemFrame = 2; // menu item frame width -const int macItemHMargin = 3; // menu item hor text margin -const int macRightBorder = 12; // right border on mac - -/***************************************************************************** - QMacCGStyle utility functions - *****************************************************************************/ - -enum QAquaMetric { - // Prepend kThemeMetric to get the HIToolBox constant. - // Represents the values already used in QMacStyle. - CheckBoxHeight = 0, - CheckBoxWidth, - EditTextFrameOutset, - FocusRectOutset, - HSliderHeight, - HSliderTickHeight, - LargeProgressBarThickness, - ListHeaderHeight, - MenuSeparatorHeight, // GetThemeMenuSeparatorHeight - MiniCheckBoxHeight, - MiniCheckBoxWidth, - MiniHSliderHeight, - MiniHSliderTickHeight, - MiniPopupButtonHeight, - MiniPushButtonHeight, - MiniRadioButtonHeight, - MiniRadioButtonWidth, - MiniVSliderTickWidth, - MiniVSliderWidth, - NormalProgressBarThickness, - PopupButtonHeight, - ProgressBarShadowOutset, - PushButtonHeight, - RadioButtonHeight, - RadioButtonWidth, - SeparatorSize, - SmallCheckBoxHeight, - SmallCheckBoxWidth, - SmallHSliderHeight, - SmallHSliderTickHeight, - SmallPopupButtonHeight, - SmallProgressBarShadowOutset, - SmallPushButtonHeight, - SmallRadioButtonHeight, - SmallRadioButtonWidth, - SmallVSliderTickWidth, - SmallVSliderWidth, - VSliderTickWidth, - VSliderWidth -}; - -static const int qt_mac_aqua_metrics[] = { - // Values as of macOS 10.12.4 and Xcode 8.3.1 - 18 /* CheckBoxHeight */, - 18 /* CheckBoxWidth */, - 1 /* EditTextFrameOutset */, - 4 /* FocusRectOutset */, - 22 /* HSliderHeight */, - 5 /* HSliderTickHeight */, - 16 /* LargeProgressBarThickness */, - 17 /* ListHeaderHeight */, - 12 /* MenuSeparatorHeight, aka GetThemeMenuSeparatorHeight */, - 11 /* MiniCheckBoxHeight */, - 11 /* MiniCheckBoxWidth */, - 12 /* MiniHSliderHeight */, - 4 /* MiniHSliderTickHeight */, - 15 /* MiniPopupButtonHeight */, - 16 /* MiniPushButtonHeight */, - 11 /* MiniRadioButtonHeight */, - 11 /* MiniRadioButtonWidth */, - 4 /* MiniVSliderTickWidth */, - 12 /* MiniVSliderWidth */, - 12 /* NormalProgressBarThickness */, - 20 /* PopupButtonHeight */, - 4 /* ProgressBarShadowOutset */, - 20 /* PushButtonHeight */, - 18 /* RadioButtonHeight */, - 18 /* RadioButtonWidth */, - 1 /* SeparatorSize */, - 16 /* SmallCheckBoxHeight */, - 14 /* SmallCheckBoxWidth */, - 15 /* SmallHSliderHeight */, - 4 /* SmallHSliderTickHeight */, - 17 /* SmallPopupButtonHeight */, - 2 /* SmallProgressBarShadowOutset */, - 17 /* SmallPushButtonHeight */, - 15 /* SmallRadioButtonHeight */, - 15 /* SmallRadioButtonWidth */, - 4 /* SmallVSliderTickWidth */, - 15 /* SmallVSliderWidth */, - 5 /* VSliderTickWidth */, - 22 /* VSliderWidth */ -}; - -static inline int qt_mac_aqua_get_metric(QAquaMetric m) -{ - return qt_mac_aqua_metrics[m]; -} - -static QSize qt_aqua_get_known_size(QStyle::ContentsType ct, const QStyleOption *opt, - QSize szHint, QStyleHelper::WidgetSizePolicy sz) -{ - QSize ret(-1, -1); - if (sz != QStyleHelper::SizeSmall && sz != QStyleHelper::SizeLarge && sz != QStyleHelper::SizeMini) { - qDebug("Not sure how to return this..."); - return ret; - } -// if ((widget && widget->testAttribute(Qt::WA_SetFont)) || !QApplication::desktopSettingsAware()) { -// // If you're using a custom font and it's bigger than the default font, -// // then no constraints for you. If you are smaller, we can try to help you out -// QFont font = qt_app_fonts_hash()->value(widget->metaObject()->className(), QFont()); -// if (widget->font().pointSize() > font.pointSize()) -// return ret; -// } - - // TODO: investigate how this function is used. 'ct' can/should be - // filled out correctly in the styleoption already from the styleitem? - Q_ASSERT(ct != QStyle::CT_CustomBase); -// if (ct == QStyle::CT_CustomBase && widget) { -//#if QT_CONFIG(pushbutton) -// if (qobject_cast(widg)) -// ct = QStyle::CT_PushButton; -//#endif -// else if (qobject_cast(widget)) -// ct = QStyle::CT_RadioButton; -//#if QT_CONFIG(checkbox) -// else if (qobject_cast(widg)) -// ct = QStyle::CT_CheckBox; -//#endif -//#if QT_CONFIG(combobox) -// else if (qobject_cast(widg)) -// ct = QStyle::CT_ComboBox; -//#endif -//#if QT_CONFIG(toolbutton) -// else if (qobject_cast(widg)) -// ct = QStyle::CT_ToolButton; -//#endif -// else if (qobject_cast(widget)) -// ct = QStyle::CT_Slider; -//#if QT_CONFIG(progressbar) -// else if (qobject_cast(widg)) -// ct = QStyle::CT_ProgressBar; -//#endif -//#if QT_CONFIG(lineedit) -// else if (qobject_cast(widg)) -// ct = QStyle::CT_LineEdit; -//#endif -//#if QT_CONFIG(itemviews) -// else if (qobject_cast(widg)) -// ct = QStyle::CT_HeaderSection; -//#endif -//#if QT_CONFIG(menubar) -// else if (qobject_cast(widg)) -// ct = QStyle::CT_MenuBar; -//#endif -//#if QT_CONFIG(sizegrip) -// else if (qobject_cast(widg)) -// ct = QStyle::CT_SizeGrip; -//#endif -// else -// return ret; -// } - - switch (ct) { - case QStyle::CT_PushButton: { - const QStyleOptionButton *btn = qstyleoption_cast(opt); - if (btn) { - QString buttonText = qt_mac_removeMnemonics(btn->text); - if (buttonText.contains(QLatin1Char('\n'))) - ret = QSize(-1, -1); - else if (sz == QStyleHelper::SizeLarge) - ret = QSize(-1, qt_mac_aqua_get_metric(PushButtonHeight)); - else if (sz == QStyleHelper::SizeSmall) - ret = QSize(-1, qt_mac_aqua_get_metric(SmallPushButtonHeight)); - else if (sz == QStyleHelper::SizeMini) - ret = QSize(-1, qt_mac_aqua_get_metric(MiniPushButtonHeight)); - - if (!btn->icon.isNull()){ - // If the button got an icon, and the icon is larger than the - // button, we can't decide on a default size - ret.setWidth(-1); - if (ret.height() < btn->iconSize.height()) - ret.setHeight(-1); - } - else if (buttonText == QLatin1String("OK") || buttonText == QLatin1String("Cancel")){ - // Aqua Style guidelines restrict the size of OK and Cancel buttons to 68 pixels. - // However, this doesn't work for German, therefore only do it for English, - // I suppose it would be better to do some sort of lookups for languages - // that like to have really long words. - // FIXME This is not exactly true. Out of context, OK buttons have their - // implicit size calculated the same way as any other button. Inside a - // QDialogButtonBox, their size should be calculated such that the action - // or accept button (i.e., rightmost) and cancel button have the same width. - ret.setWidth(69); - } - } else { - // The only sensible thing to do is to return whatever the style suggests... - if (sz == QStyleHelper::SizeLarge) - ret = QSize(-1, qt_mac_aqua_get_metric(PushButtonHeight)); - else if (sz == QStyleHelper::SizeSmall) - ret = QSize(-1, qt_mac_aqua_get_metric(SmallPushButtonHeight)); - else if (sz == QStyleHelper::SizeMini) - ret = QSize(-1, qt_mac_aqua_get_metric(MiniPushButtonHeight)); - else - // Since there's no default size we return the large size... - ret = QSize(-1, qt_mac_aqua_get_metric(PushButtonHeight)); - } - break; } - case QStyle::CT_SizeGrip: - // Not HIG kosher: mimic what we were doing earlier until we support 4-edge resizing in MDI subwindows - if (sz == QStyleHelper::SizeLarge || sz == QStyleHelper::SizeSmall) { - int s = sz == QStyleHelper::SizeSmall ? 16 : 22; // large: pixel measured from HITheme, small: from my hat - int width = 0; -//#if QT_CONFIG(mdiarea) -// if (widg && qobject_cast(widg->parentWidget())) -// width = s; -//#endif - ret = QSize(width, s); - } - break; - case QStyle::CT_ComboBox: - switch (sz) { - case QStyleHelper::SizeLarge: - ret = QSize(-1, qt_mac_aqua_get_metric(PopupButtonHeight)); - break; - case QStyleHelper::SizeSmall: - ret = QSize(-1, qt_mac_aqua_get_metric(SmallPopupButtonHeight)); - break; - case QStyleHelper::SizeMini: - ret = QSize(-1, qt_mac_aqua_get_metric(MiniPopupButtonHeight)); - break; - default: - break; - } - break; - case QStyle::CT_ToolButton: - if (sz == QStyleHelper::SizeSmall) { - int width = 0, height = 0; - if (szHint == QSize(-1, -1)) { //just 'guess'.. -//#if QT_CONFIG(toolbutton) -// const QStyleOptionToolButton *bt = qstyleoption_cast(opt); -// // If this conversion fails then the widget was not what it claimed to be. -// if(bt) { -// if (!bt->icon.isNull()) { -// QSize iconSize = bt->iconSize; -// QSize pmSize = bt->icon.actualSize(QSize(32, 32), QIcon::Normal); -// width = qMax(width, qMax(iconSize.width(), pmSize.width())); -// height = qMax(height, qMax(iconSize.height(), pmSize.height())); -// } -// if (!bt->text.isNull() && bt->toolButtonStyle != Qt::ToolButtonIconOnly) { -// int text_width = bt->fontMetrics.horizontalAdvance(bt->text), -// text_height = bt->fontMetrics.height(); -// if (bt->toolButtonStyle == Qt::ToolButtonTextUnderIcon) { -// width = qMax(width, text_width); -// height += text_height; -// } else { -// width += text_width; -// width = qMax(height, text_height); -// } -// } -// } else -//#endif - { - // Let's return the size hint... - width = szHint.width(); - height = szHint.height(); - } - } else { - width = szHint.width(); - height = szHint.height(); - } - width = qMax(20, width + 5); //border - height = qMax(20, height + 5); //border - ret = QSize(width, height); - } - break; - case QStyle::CT_Slider: { - int w = -1; - const QStyleOptionSlider *sld = qstyleoption_cast(opt); - // If this conversion fails then the widget was not what it claimed to be. - if(sld) { - if (sz == QStyleHelper::SizeLarge) { - if (sld->orientation == Qt::Horizontal) { - w = qt_mac_aqua_get_metric(HSliderHeight); - if (sld->tickPosition != QStyleOptionSlider::NoTicks) - w += qt_mac_aqua_get_metric(HSliderTickHeight); - } else { - w = qt_mac_aqua_get_metric(VSliderWidth); - if (sld->tickPosition != QStyleOptionSlider::NoTicks) - w += qt_mac_aqua_get_metric(VSliderTickWidth); - } - } else if (sz == QStyleHelper::SizeSmall) { - if (sld->orientation == Qt::Horizontal) { - w = qt_mac_aqua_get_metric(SmallHSliderHeight); - if (sld->tickPosition != QStyleOptionSlider::NoTicks) - w += qt_mac_aqua_get_metric(SmallHSliderTickHeight); - } else { - w = qt_mac_aqua_get_metric(SmallVSliderWidth); - if (sld->tickPosition != QStyleOptionSlider::NoTicks) - w += qt_mac_aqua_get_metric(SmallVSliderTickWidth); - } - } else if (sz == QStyleHelper::SizeMini) { - if (sld->orientation == Qt::Horizontal) { - w = qt_mac_aqua_get_metric(MiniHSliderHeight); - if (sld->tickPosition != QStyleOptionSlider::NoTicks) - w += qt_mac_aqua_get_metric(MiniHSliderTickHeight); - } else { - w = qt_mac_aqua_get_metric(MiniVSliderWidth); - if (sld->tickPosition != QStyleOptionSlider::NoTicks) - w += qt_mac_aqua_get_metric(MiniVSliderTickWidth); - } - } - } else { - // This is tricky, we were requested to find a size for a slider which is not - // a slider. We don't know if this is vertical or horizontal or if we need to - // have tick marks or not. - // For this case we will return an horizontal slider without tick marks. - w = qt_mac_aqua_get_metric(HSliderHeight); - w += qt_mac_aqua_get_metric(HSliderTickHeight); - } - if (sld->orientation == Qt::Horizontal) - ret.setHeight(w); - else - ret.setWidth(w); - break; - } -//#if QT_CONFIG(progressbar) -// case QStyle::CT_ProgressBar: { -// int finalValue = -1; -// Qt::Orientation orient = Qt::Horizontal; -// if (const QProgressBar *pb = qobject_cast(widg)) -// orient = pb->orientation(); - -// if (sz == QStyleHelper::SizeLarge) -// finalValue = qt_mac_aqua_get_metric(LargeProgressBarThickness) -// + qt_mac_aqua_get_metric(ProgressBarShadowOutset); -// else -// finalValue = qt_mac_aqua_get_metric(NormalProgressBarThickness) -// + qt_mac_aqua_get_metric(SmallProgressBarShadowOutset); -// if (orient == Qt::Horizontal) -// ret.setHeight(finalValue); -// else -// ret.setWidth(finalValue); -// break; -// } -//#endif -//#if QT_CONFIG(combobox) -// case QStyle::CT_LineEdit: -// if (!widg || !qobject_cast(widg->parentWidget())) { -// //should I take into account the font dimentions of the lineedit? -Sam -// if (sz == QStyleHelper::SizeLarge) -// ret = QSize(-1, 21); -// else -// ret = QSize(-1, 19); -// } -// break; -//#endif - case QStyle::CT_HeaderSection: -//#if QT_CONFIG(treeview) -// if (isTreeView(widg)) -// ret = QSize(-1, qt_mac_aqua_get_metric(ListHeaderHeight)); -//#endif - break; - case QStyle::CT_MenuBar: - if (sz == QStyleHelper::SizeLarge) { - ret = QSize(-1, [[NSApp mainMenu] menuBarHeight]); - // In the qt_mac_set_native_menubar(false) case, - // we come it here with a zero-height main menu, - // preventing the in-window menu from displaying. - // Use 22 pixels for the height, by observation. - if (ret.height() <= 0) - ret.setHeight(22); - } - break; - default: - break; - } - return ret; -} - -#if defined(QMAC_QAQUASTYLE_SIZE_CONSTRAIN) || defined(DEBUG_SIZE_CONSTRAINT) -static QStyleHelper::WidgetSizePolicy qt_aqua_guess_size( - const QSize &large, - const QSize &small, - const QSize &mini) -{ - if (large == QSize(-1, -1)) { - if (small != QSize(-1, -1)) - return QStyleHelper::SizeSmall; - if (mini != QSize(-1, -1)) - return QStyleHelper::SizeMini; - return QStyleHelper::SizeDefault; - } else if (small == QSize(-1, -1)) { - if (mini != QSize(-1, -1)) - return QStyleHelper::SizeMini; - return QStyleHelper::SizeLarge; - } else if (mini == QSize(-1, -1)) { - return QStyleHelper::SizeLarge; - } - - if (qEnvironmentVariableIsSet("QWIDGET_ALL_SMALL")) - return QStyleHelper::SizeSmall; - else if (qEnvironmentVariableIsSet("QWIDGET_ALL_MINI")) - return QStyleHelper::SizeMini; - - return QStyleHelper::SizeLarge; -} -#endif - -QPainterPath QMacStylePrivate::windowPanelPath(const QRectF &r) const -{ - static const qreal CornerPointOffset = 5.5; - static const qreal CornerControlOffset = 2.1; - - QPainterPath path; - // Top-left corner - path.moveTo(r.left(), r.top() + CornerPointOffset); - path.cubicTo(r.left(), r.top() + CornerControlOffset, - r.left() + CornerControlOffset, r.top(), - r.left() + CornerPointOffset, r.top()); - // Top-right corner - path.lineTo(r.right() - CornerPointOffset, r.top()); - path.cubicTo(r.right() - CornerControlOffset, r.top(), - r.right(), r.top() + CornerControlOffset, - r.right(), r.top() + CornerPointOffset); - // Bottom-right corner - path.lineTo(r.right(), r.bottom() - CornerPointOffset); - path.cubicTo(r.right(), r.bottom() - CornerControlOffset, - r.right() - CornerControlOffset, r.bottom(), - r.right() - CornerPointOffset, r.bottom()); - // Bottom-right corner - path.lineTo(r.left() + CornerPointOffset, r.bottom()); - path.cubicTo(r.left() + CornerControlOffset, r.bottom(), - r.left(), r.bottom() - CornerControlOffset, - r.left(), r.bottom() - CornerPointOffset); - path.lineTo(r.left(), r.top() + CornerPointOffset); - - return path; -} - -QMacStylePrivate::CocoaControlType QMacStylePrivate::windowButtonCocoaControl(QStyle::SubControl sc) const -{ - struct WindowButtons { - QStyle::SubControl sc; - QMacStylePrivate::CocoaControlType ct; - }; - - static const WindowButtons buttons[] = { - { QStyle::SC_TitleBarCloseButton, QMacStylePrivate::Button_WindowClose }, - { QStyle::SC_TitleBarMinButton, QMacStylePrivate::Button_WindowMiniaturize }, - { QStyle::SC_TitleBarMaxButton, QMacStylePrivate::Button_WindowZoom } - }; - - for (const auto &wb : buttons) - if (wb.sc == sc) - return wb.ct; - - return NoControl; -} - - -void QMacStylePrivate::tabLayout(const QStyleOptionTab *opt, QRect *textRect, QRect *iconRect) const -{ - Q_ASSERT(textRect); - Q_ASSERT(iconRect); - QRect tr = opt->rect; - const bool verticalTabs = opt->shape == QStyleOptionTab::RoundedEast - || opt->shape == QStyleOptionTab::RoundedWest - || opt->shape == QStyleOptionTab::TriangularEast - || opt->shape == QStyleOptionTab::TriangularWest; - if (verticalTabs) - tr.setRect(0, 0, tr.height(), tr.width()); // 0, 0 as we will have a translate transform - - int verticalShift = proxyStyle->pixelMetric(QStyle::PM_TabBarTabShiftVertical, opt); - int horizontalShift = proxyStyle->pixelMetric(QStyle::PM_TabBarTabShiftHorizontal, opt); - const int hpadding = 4; - const int vpadding = proxyStyle->pixelMetric(QStyle::PM_TabBarTabVSpace, opt) / 2; - if (opt->shape == QStyleOptionTab::RoundedSouth || opt->shape == QStyleOptionTab::TriangularSouth) - verticalShift = -verticalShift; - tr.adjust(hpadding, verticalShift - vpadding, horizontalShift - hpadding, vpadding); - - // left widget - if (!opt->leftButtonSize.isEmpty()) { - const int buttonSize = verticalTabs ? opt->leftButtonSize.height() : opt->leftButtonSize.width(); - tr.setLeft(tr.left() + 4 + buttonSize); - // make text aligned to center - if (opt->rightButtonSize.isEmpty()) - tr.setRight(tr.right() - 4 - buttonSize); - } - // right widget - if (!opt->rightButtonSize.isEmpty()) { - const int buttonSize = verticalTabs ? opt->rightButtonSize.height() : opt->rightButtonSize.width(); - tr.setRight(tr.right() - 4 - buttonSize); - // make text aligned to center - if (opt->leftButtonSize.isEmpty()) - tr.setLeft(tr.left() + 4 + buttonSize); - } - - // icon - if (!opt->icon.isNull()) { - QSize iconSize = opt->iconSize; - if (!iconSize.isValid()) { - int iconExtent = proxyStyle->pixelMetric(QStyle::PM_SmallIconSize); - iconSize = QSize(iconExtent, iconExtent); - } - QSize tabIconSize = opt->icon.actualSize(iconSize, - (opt->state & QStyle::State_Enabled) ? QIcon::Normal : QIcon::Disabled, - (opt->state & QStyle::State_Selected) ? QIcon::On : QIcon::Off); - // High-dpi icons do not need adjustment; make sure tabIconSize is not larger than iconSize - tabIconSize = QSize(qMin(tabIconSize.width(), iconSize.width()), qMin(tabIconSize.height(), iconSize.height())); - - const int stylePadding = proxyStyle->pixelMetric(QStyle::PM_TabBarTabHSpace, opt) / 2 - hpadding; - - if (opt->documentMode) { - // documents show the icon as part of the the text - const int textWidth = - opt->fontMetrics.boundingRect(tr, Qt::AlignCenter | Qt::TextShowMnemonic, opt->text).width(); - *iconRect = QRect(tr.center().x() - textWidth / 2 - stylePadding - tabIconSize.width(), - tr.center().y() - tabIconSize.height() / 2, - tabIconSize.width(), tabIconSize.height()); - } else { - *iconRect = QRect(tr.left() + stylePadding, tr.center().y() - tabIconSize.height() / 2, - tabIconSize.width(), tabIconSize.height()); - } - if (!verticalTabs) - *iconRect = proxyStyle->visualRect(opt->direction, opt->rect, *iconRect); - - tr.setLeft(tr.left() + stylePadding + tabIconSize.width() + 4); - tr.setRight(tr.right() - stylePadding - tabIconSize.width() - 4); - } - - if (!verticalTabs) - tr = proxyStyle->visualRect(opt->direction, opt->rect, tr); - - *textRect = tr; -} - -QMacStylePrivate::Direction QMacStylePrivate::tabDirection(QStyleOptionTab::Shape shape) -{ - switch (shape) { - case QStyleOptionTab::RoundedSouth: - case QStyleOptionTab::TriangularSouth: - return South; - case QStyleOptionTab::RoundedNorth: - case QStyleOptionTab::TriangularNorth: - return North; - case QStyleOptionTab::RoundedWest: - case QStyleOptionTab::TriangularWest: - return West; - case QStyleOptionTab::RoundedEast: - case QStyleOptionTab::TriangularEast: - return East; - } -} - -bool QMacStylePrivate::verticalTabs(QMacStylePrivate::Direction direction) -{ - return (direction == QMacStylePrivate::East - || direction == QMacStylePrivate::West); -} - -QStyleHelper::WidgetSizePolicy QMacStylePrivate::effectiveAquaSizeConstrain(const QStyleOption *option, - QStyle::ContentsType ct, - QSize szHint, QSize *insz) const -{ - QStyleHelper::WidgetSizePolicy sz = aquaSizeConstrain(option, ct, szHint, insz); - if (sz == QStyleHelper::SizeDefault) - return QStyleHelper::SizeLarge; - return sz; -} - -QStyleHelper::WidgetSizePolicy QMacStylePrivate::aquaSizeConstrain(const QStyleOption *option, - QStyle::ContentsType ct, QSize szHint, QSize *insz) const -{ - if (!option) - return QStyleHelper::SizeLarge; - - if (option->state & QStyle::State_Small) - return QStyleHelper::SizeSmall; - if (option->state & QStyle::State_Mini) - return QStyleHelper::SizeMini; - - return QStyleHelper::SizeLarge; - -} - -uint qHash(const QMacStylePrivate::CocoaControl &cw, uint seed = 0) -{ - return ((cw.type << 2) | cw.size) ^ seed; -} - -QMacStylePrivate::CocoaControl::CocoaControl() - : type(NoControl), size(QStyleHelper::SizeDefault) -{ -} - -QMacStylePrivate::CocoaControl::CocoaControl(CocoaControlType t, QStyleHelper::WidgetSizePolicy s) - : type(t), size(s) -{ -} - -bool QMacStylePrivate::CocoaControl::operator==(const CocoaControl &other) const -{ - return other.type == type && other.size == size; -} - -QSizeF QMacStylePrivate::CocoaControl::defaultFrameSize() const -{ - // We need this because things like NSView.alignmentRectInsets - // or -[NSCell titleRectForBounds:] won't work unless the control - // has a reasonable frame set. IOW, it's a chicken and egg problem. - // These values are as observed in Xcode 9's Interface Builder. - - if (type == Button_PushButton) - return QSizeF(-1, pushButtonDefaultHeight[size]); - - if (type == Button_PopupButton - || type == Button_PullDown) - return QSizeF(-1, popupButtonDefaultHeight[size]); - - if (type == ComboBox) - return QSizeF(-1, comboBoxDefaultHeight[size]); - - return QSizeF(); -} - -QRectF QMacStylePrivate::CocoaControl::adjustedControlFrame(const QRectF &rect) const -{ - QRectF frameRect; - const auto frameSize = defaultFrameSize(); - if (type == QMacStylePrivate::Button_SquareButton) { - frameRect = rect.adjusted(3, 1, -3, -1) - .adjusted(focusRingWidth, focusRingWidth, -focusRingWidth, -focusRingWidth); - } else if (type == QMacStylePrivate::Button_PushButton) { - // Start from the style option's top-left corner. - frameRect = QRectF(rect.topLeft(), - QSizeF(rect.width(), frameSize.height())); - if (size == QStyleHelper::SizeSmall) - frameRect = frameRect.translated(0, 1.5); - else if (size == QStyleHelper::SizeMini) - frameRect = frameRect.adjusted(0, 0, -8, 0).translated(4, 4); - } else { - // Center in the style option's rect. - frameRect = QRectF(QPointF(0, (rect.height() - frameSize.height()) / 2.0), - QSizeF(rect.width(), frameSize.height())); - frameRect = frameRect.translated(rect.topLeft()); - if (type == QMacStylePrivate::Button_PullDown || type == QMacStylePrivate::Button_PopupButton) { - if (size == QStyleHelper::SizeLarge) - frameRect = frameRect.adjusted(0, 0, -6, 0).translated(3, 0); - else if (size == QStyleHelper::SizeSmall) - frameRect = frameRect.adjusted(0, 0, -4, 0).translated(2, 1); - else if (size == QStyleHelper::SizeMini) - frameRect = frameRect.adjusted(0, 0, -9, 0).translated(5, 0); - } else if (type == QMacStylePrivate::ComboBox) { - frameRect = frameRect.adjusted(0, 0, -6, 0).translated(4, 0); - } - } - - return frameRect; -} - -QMarginsF QMacStylePrivate::CocoaControl::titleMargins() const -{ - if (type == QMacStylePrivate::Button_PushButton) { - if (size == QStyleHelper::SizeLarge) - return QMarginsF(12, 5, 12, 9); - if (size == QStyleHelper::SizeSmall) - return QMarginsF(12, 4, 12, 9); - if (size == QStyleHelper::SizeMini) - return QMarginsF(10, 1, 10, 2); - } - - if (type == QMacStylePrivate::Button_PullDown) { - if (size == QStyleHelper::SizeLarge) - return QMarginsF(7.5, 2.5, 22.5, 5.5); - if (size == QStyleHelper::SizeSmall) - return QMarginsF(7.5, 2, 20.5, 4); - if (size == QStyleHelper::SizeMini) - return QMarginsF(4.5, 0, 16.5, 2); - } - - if (type == QMacStylePrivate::Button_SquareButton) - return QMarginsF(6, 1, 6, 2); - - return QMarginsF(); -} - -bool QMacStylePrivate::CocoaControl::getCocoaButtonTypeAndBezelStyle(NSButtonType *buttonType, NSBezelStyle *bezelStyle) const -{ - switch (type) { - case Button_CheckBox: - *buttonType = NSSwitchButton; - *bezelStyle = NSRegularSquareBezelStyle; - break; - case Button_Disclosure: - *buttonType = NSOnOffButton; - *bezelStyle = NSDisclosureBezelStyle; - break; - case Button_RadioButton: - *buttonType = NSRadioButton; - *bezelStyle = NSRegularSquareBezelStyle; - break; - case Button_SquareButton: - *buttonType = NSPushOnPushOffButton; - *bezelStyle = NSShadowlessSquareBezelStyle; - break; - case Button_PushButton: - *buttonType = NSPushOnPushOffButton; - *bezelStyle = NSRoundedBezelStyle; - break; - default: - return false; - } - - return true; -} - -QMacStylePrivate::CocoaControlType cocoaControlType(const QStyleOption *opt) -{ - if (const auto *btn = qstyleoption_cast(opt)) { - const bool hasMenu = btn->features & QStyleOptionButton::HasMenu; - // When the contents won't fit in a large sized button, - // and WA_MacNormalSize is not set, make the button square. - // Threshold used to be at 34, not 32. - const auto maxNonSquareHeight = pushButtonDefaultHeight[QStyleHelper::SizeLarge]; - const bool isSquare = (btn->features & QStyleOptionButton::Flat) - || (btn->rect.height() > maxNonSquareHeight); -// && !(w && w->testAttribute(Qt::WA_MacNormalSize))); - return (isSquare? QMacStylePrivate::Button_SquareButton : - hasMenu ? QMacStylePrivate::Button_PullDown : - QMacStylePrivate::Button_PushButton); - } - - if (const auto *combo = qstyleoption_cast(opt)) { - if (combo->editable) - return QMacStylePrivate::ComboBox; - // TODO Me may support square, non-editable combo boxes, but not more than that - return QMacStylePrivate::Button_PopupButton; - } - - return QMacStylePrivate::NoControl; -} - -/** - Carbon draws comboboxes (and other views) outside the rect given as argument. Use this function to obtain - the corresponding inner rect for drawing the same combobox so that it stays inside the given outerBounds. -*/ -CGRect QMacStylePrivate::comboboxInnerBounds(const CGRect &outerBounds, const CocoaControl &cocoaWidget) -{ - CGRect innerBounds = outerBounds; - // Carbon draw parts of the view outside the rect. - // So make the rect a bit smaller to compensate - // (I wish HIThemeGetButtonBackgroundBounds worked) - if (cocoaWidget.type == Button_PopupButton) { - switch (cocoaWidget.size) { - case QStyleHelper::SizeSmall: - innerBounds.origin.x += 3; - innerBounds.origin.y += 3; - innerBounds.size.width -= 6; - innerBounds.size.height -= 7; - break; - case QStyleHelper::SizeMini: - innerBounds.origin.x += 2; - innerBounds.origin.y += 2; - innerBounds.size.width -= 5; - innerBounds.size.height -= 6; - break; - case QStyleHelper::SizeLarge: - case QStyleHelper::SizeDefault: - innerBounds.origin.x += 2; - innerBounds.origin.y += 2; - innerBounds.size.width -= 5; - innerBounds.size.height -= 6; - } - } else if (cocoaWidget.type == ComboBox) { - switch (cocoaWidget.size) { - case QStyleHelper::SizeSmall: - innerBounds.origin.x += 3; - innerBounds.origin.y += 3; - innerBounds.size.width -= 7; - innerBounds.size.height -= 8; - break; - case QStyleHelper::SizeMini: - innerBounds.origin.x += 3; - innerBounds.origin.y += 3; - innerBounds.size.width -= 4; - innerBounds.size.height -= 8; - break; - case QStyleHelper::SizeLarge: - case QStyleHelper::SizeDefault: - innerBounds.origin.x += 3; - innerBounds.origin.y += 2; - innerBounds.size.width -= 6; - innerBounds.size.height -= 8; - } - } - - return innerBounds; -} - -/** - Inside a combobox Qt places a line edit widget. The size of this widget should depend on the kind - of combobox we choose to draw. This function calculates and returns this size. -*/ -QRectF QMacStylePrivate::comboboxEditBounds(const QRectF &outerBounds, const CocoaControl &cw) -{ - QRectF ret = outerBounds; - if (cw.type == ComboBox) { - switch (cw.size) { - case QStyleHelper::SizeLarge: - ret = ret.adjusted(0, 0, -25, 0).translated(2, 4.5); - ret.setHeight(16); - break; - case QStyleHelper::SizeSmall: - ret = ret.adjusted(0, 0, -22, 0).translated(2, 3); - ret.setHeight(14); - break; - case QStyleHelper::SizeMini: - ret = ret.adjusted(0, 0, -19, 0).translated(2, 2.5); - ret.setHeight(10.5); - break; - default: - break; - } - } else if (cw.type == Button_PopupButton) { - switch (cw.size) { - case QStyleHelper::SizeLarge: - ret.adjust(10, 1, -23, -4); - break; - case QStyleHelper::SizeSmall: - ret.adjust(10, 4, -20, -3); - break; - case QStyleHelper::SizeMini: - ret.adjust(9, 0, -19, 0); - ret.setHeight(13); - break; - default: - break; - } - } - return ret; -} - -QMacStylePrivate::QMacStylePrivate() - : backingStoreNSView(nil) -{ - if (auto *ssf = QGuiApplicationPrivate::platformTheme()->font(QPlatformTheme::SmallFont)) - smallSystemFont = *ssf; - if (auto *msf = QGuiApplicationPrivate::platformTheme()->font(QPlatformTheme::MiniFont)) - miniSystemFont = *msf; -} - -QMacStylePrivate::~QMacStylePrivate() -{ - QMacAutoReleasePool pool; - for (NSView *b : cocoaControls) - [b release]; - for (NSCell *cell : cocoaCells) - [cell release]; -} - -NSView *QMacStylePrivate::cocoaControl(CocoaControl cocoaControl) const -{ - if (cocoaControl.type == QMacStylePrivate::NoControl - || cocoaControl.size == QStyleHelper::SizeDefault) - return nil; - - if (cocoaControl.type == Box) { - if (__builtin_available(macOS 10.14, *)) { - if (qt_mac_applicationIsInDarkMode()) { - // See render code in drawPrimitive(PE_FrameTabWidget) - cocoaControl.type = Box_Dark; - } - } - } - - NSView *bv = cocoaControls.value(cocoaControl, nil); - if (!bv) { - switch (cocoaControl.type) { - case Box: { - NSBox *box = [[NSBox alloc] init]; - bv = box; - box.title = @""; - box.titlePosition = NSNoTitle; - break; - } - case Box_Dark: - bv = [[QDarkNSBox alloc] init]; - break; - case Button_CheckBox: - case Button_Disclosure: - case Button_PushButton: - case Button_RadioButton: - case Button_SquareButton: { - NSButton *bc = [[NSButton alloc] init]; - bc.title = @""; - // See below for style and bezel setting. - bv = bc; - break; - } - case Button_PopupButton: - case Button_PullDown: { - NSPopUpButton *bc = [[NSPopUpButton alloc] init]; - bc.title = @""; - if (cocoaControl.type == Button_PullDown) - bc.pullsDown = YES; - bv = bc; - break; - } - case Button_WindowClose: - case Button_WindowMiniaturize: - case Button_WindowZoom: { - const NSWindowButton button = [=] { - switch (cocoaControl.type) { - case Button_WindowClose: - return NSWindowCloseButton; - case Button_WindowMiniaturize: - return NSWindowMiniaturizeButton; - case Button_WindowZoom: - return NSWindowZoomButton; - default: - break; - } - Q_UNREACHABLE(); - } (); - const auto styleMask = NSWindowStyleMaskTitled - | NSWindowStyleMaskClosable - | NSWindowStyleMaskMiniaturizable - | NSWindowStyleMaskResizable; - bv = [NSWindow standardWindowButton:button forStyleMask:styleMask]; - [bv retain]; - break; - } - case ComboBox: - bv = [[NSComboBox alloc] init]; - break; - case ProgressIndicator_Determinate: - bv = [[NSProgressIndicator alloc] init]; - break; - case ProgressIndicator_Indeterminate: - bv = [[QIndeterminateProgressIndicator alloc] init]; - break; - case Scroller_Horizontal: - bv = [[NSScroller alloc] initWithFrame:NSMakeRect(0, 0, 200, 20)]; - break; - case Scroller_Vertical: - // Cocoa sets the orientation from the view's frame - // at construction time, and it cannot be changed later. - bv = [[NSScroller alloc] initWithFrame:NSMakeRect(0, 0, 20, 200)]; - break; - case Slider_Horizontal: - bv = [[NSSlider alloc] initWithFrame:NSMakeRect(0, 0, 200, 20)]; - break; - case Slider_Vertical: - // Cocoa sets the orientation from the view's frame - // at construction time, and it cannot be changed later. - bv = [[NSSlider alloc] initWithFrame:NSMakeRect(0, 0, 20, 200)]; - break; - case SplitView_Horizontal: - bv = [[NSSplitView alloc] init]; - break; - case SplitView_Vertical: - bv = [[QVerticalSplitView alloc] init]; - break; - case TextField: - bv = [[NSTextField alloc] init]; - break; - default: - break; - } - - if ([bv isKindOfClass:[NSControl class]]) { - auto *ctrl = static_cast(bv); - switch (cocoaControl.size) { - case QStyleHelper::SizeSmall: - ctrl.controlSize = NSControlSizeSmall; - break; - case QStyleHelper::SizeMini: - ctrl.controlSize = NSControlSizeMini; - break; - default: - break; - } - } else if (cocoaControl.type == ProgressIndicator_Determinate || - cocoaControl.type == ProgressIndicator_Indeterminate) { - auto *pi = static_cast(bv); - pi.indeterminate = (cocoaControl.type == ProgressIndicator_Indeterminate); - switch (cocoaControl.size) { - case QStyleHelper::SizeSmall: - pi.controlSize = NSControlSizeSmall; - break; - case QStyleHelper::SizeMini: - pi.controlSize = NSControlSizeMini; - break; - default: - break; - } - } - - cocoaControls.insert(cocoaControl, bv); - } - - NSButtonType buttonType; - NSBezelStyle bezelStyle; - if (cocoaControl.getCocoaButtonTypeAndBezelStyle(&buttonType, &bezelStyle)) { - // FIXME We need to reset the button's type and - // bezel style properties, even when cached. - auto *button = static_cast(bv); - button.buttonType = buttonType; - button.bezelStyle = bezelStyle; - if (cocoaControl.type == Button_CheckBox) - button.allowsMixedState = YES; - } - - return bv; -} - -NSCell *QMacStylePrivate::cocoaCell(CocoaControl cocoaControl) const -{ - NSCell *cell = cocoaCells[cocoaControl]; - if (!cell) { - switch (cocoaControl.type) { - case Stepper: - cell = [[NSStepperCell alloc] init]; - break; - case Button_Disclosure: { - NSButtonCell *bc = [[NSButtonCell alloc] init]; - bc.buttonType = NSOnOffButton; - bc.bezelStyle = NSDisclosureBezelStyle; - cell = bc; - break; - } - default: - break; - } - - switch (cocoaControl.size) { - case QStyleHelper::SizeSmall: - cell.controlSize = NSControlSizeSmall; - break; - case QStyleHelper::SizeMini: - cell.controlSize = NSControlSizeMini; - break; - default: - break; - } - - cocoaCells.insert(cocoaControl, cell); - } - - return cell; -} - -void QMacStylePrivate::drawNSViewInRect(NSView *view, const QRectF &rect, QPainter *p, DrawRectBlock drawRectBlock) const -{ - QMacAutoReleasePool pool; - QMacCGContext ctx(p); - setupNSGraphicsContext(ctx, YES); - - // FIXME: The rect that we get in is relative to the widget that we're drawing - // style on behalf of, and doesn't take into account the offset of that widget - // to the widget that owns the backingstore, which we are placing the native - // view into below. This means most of the views are placed in the upper left - // corner of backingStoreNSView, which does not map to where the actual widget - // is, and which may cause problems such as triggering a setNeedsDisplay of the - // backingStoreNSView for the wrong rect. We work around this by making the view - // layer-backed, which prevents triggering display of the backingStoreNSView, but - // but there may be other issues lurking here due to the wrong position. QTBUG-68023 - view.wantsLayer = YES; - - // FIXME: We are also setting the frame of the incoming view a lot at the call - // sites of this function, making it unclear who's actually responsible for - // maintaining the size and position of the view. In theory the call sites - // should ensure the _size_ of the view is correct, and then let this code - // take care of _positioning_ the view at the right place inside backingStoreNSView. - // For now we pass on the rect as is, to prevent any regressions until this - // can be investigated properly. - view.frame = rect.toCGRect(); - - [backingStoreNSView addSubview:view]; - - // FIXME: Based on the code below, this method isn't drawing an NSView into - // a rect, it's drawing _part of the NSView_, defined by the incoming clip - // or dirty rect, into the current graphics context. We're doing some manual - // translations at the call sites that would indicate that this relationship - // is a bit fuzzy. - const CGRect dirtyRect = rect.toCGRect(); - - if (drawRectBlock) - drawRectBlock(ctx, dirtyRect); - else - [view drawRect:dirtyRect]; - - [view removeFromSuperviewWithoutNeedingDisplay]; - - restoreNSGraphicsContext(ctx); -} - -void QMacStylePrivate::resolveCurrentNSView(QWindow *window) const -{ - backingStoreNSView = window ? (NSView *)window->winId() : nil; -} - -QMacStyle::QMacStyle() - : QCommonStyle(*new QMacStylePrivate) -{ - QMacAutoReleasePool pool; - - static QMacNotificationObserver scrollbarStyleObserver(nil, - NSPreferredScrollerStyleDidChangeNotification, []() { - // Purge destroyed scroll bars - QMacStylePrivate::scrollBars.removeAll(QPointer()); - - QEvent event(QEvent::StyleChange); - for (const auto &o : QMacStylePrivate::scrollBars) - QCoreApplication::sendEvent(o, &event); - }); - -#if QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_14) - Q_D(QMacStyle); - // FIXME: Tie this logic into theme change, or even polish/unpolish - if (QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSMojave) { - d->appearanceObserver = QMacKeyValueObserver(NSApp, @"effectiveAppearance", [this] { - Q_D(QMacStyle); - for (NSView *b : d->cocoaControls) - [b release]; - d->cocoaControls.clear(); - }); - } -#endif -} - -QMacStyle::~QMacStyle() -{ -} - -int QMacStyle::pixelMetric(PixelMetric metric, const QStyleOption *opt) const -{ - Q_D(const QMacStyle); - const int controlSize = getControlSize(opt); - int ret = 0; - - switch (metric) { - case PM_TabCloseIndicatorWidth: - case PM_TabCloseIndicatorHeight: - ret = closeButtonSize; - break; - case PM_ToolBarIconSize: - ret = proxy()->pixelMetric(PM_LargeIconSize); - break; - case PM_FocusFrameVMargin: - case PM_FocusFrameHMargin: - ret = qt_mac_aqua_get_metric(FocusRectOutset); - break; - case PM_DialogButtonsSeparator: - ret = -5; - break; - case PM_DialogButtonsButtonHeight: { - QSize sz; - ret = d->aquaSizeConstrain(opt, QStyle::CT_PushButton, QSize(-1, -1), &sz); - if (sz == QSize(-1, -1)) - ret = 32; - else - ret = sz.height(); - break; } - case PM_DialogButtonsButtonWidth: { - QSize sz; - ret = d->aquaSizeConstrain(opt, QStyle::CT_PushButton, QSize(-1, -1), &sz); - if (sz == QSize(-1, -1)) - ret = 70; - else - ret = sz.width(); - break; } - - case PM_MenuBarHMargin: - ret = 8; - break; - - case PM_MenuBarVMargin: - ret = 0; - break; - - case PM_MenuBarPanelWidth: - ret = 0; - break; - - case PM_MenuButtonIndicator: - ret = toolButtonArrowSize; - break; - - case QStyle::PM_MenuDesktopFrameWidth: - ret = 5; - break; - - case PM_CheckBoxLabelSpacing: - case PM_RadioButtonLabelSpacing: - ret = [=] { - if (opt) { - if (opt->state & State_Mini) - return 4; - if (opt->state & State_Small) - return 3; - } - return 2; - } (); - break; - case PM_MenuScrollerHeight: - ret = 15; // I hate having magic numbers in here... - break; - case PM_DefaultFrameWidth: -//#if QT_CONFIG(mainwindow) -// if (widget && (widget->isWindow() || !widget->parentWidget() -// || (qobject_cast(widget->parentWidget()) -// && static_cast(widget->parentWidget())->centralWidget() == widget)) -// && qobject_cast(widget)) -// ret = 0; -// else -//#endif - // The combo box popup has no frame. - if (qstyleoption_cast(opt) != 0) - ret = 0; - else - ret = 1; - break; - case PM_MaximumDragDistance: - ret = -1; - break; - case PM_ScrollBarSliderMin: - ret = 24; - break; - case PM_SpinBoxFrameWidth: - ret = qt_mac_aqua_get_metric(EditTextFrameOutset); - break; - case PM_ButtonShiftHorizontal: - case PM_ButtonShiftVertical: - ret = 0; - break; - case PM_SliderLength: - ret = 17; - break; - // Returns the number of pixels to use for the business part of the - // slider (i.e., the non-tickmark portion). The remaining space is shared - // equally between the tickmark regions. - case PM_SliderControlThickness: - if (const QStyleOptionSlider *sl = qstyleoption_cast(opt)) { - int space = (sl->orientation == Qt::Horizontal) ? sl->rect.height() : sl->rect.width(); - int ticks = sl->tickPosition; - int n = 0; - if (ticks & QStyleOptionSlider::TicksAbove) - ++n; - if (ticks & QStyleOptionSlider::TicksBelow) - ++n; - if (!n) { - ret = space; - break; - } - - int thick = 6; // Magic constant to get 5 + 16 + 5 - if (ticks != QStyleOptionSlider::TicksBothSides && ticks != QStyleOptionSlider::NoTicks) - thick += proxy()->pixelMetric(PM_SliderLength, sl) / 4; - - space -= thick; - if (space > 0) - thick += (space * 2) / (n + 2); - ret = thick; - } else { - ret = 0; - } - break; - case PM_SmallIconSize: - ret = int(QStyleHelper::dpiScaled(16., opt)); - break; - - case PM_LargeIconSize: - ret = int(QStyleHelper::dpiScaled(32., opt)); - break; - - case PM_IconViewIconSize: - ret = proxy()->pixelMetric(PM_LargeIconSize, opt); - break; - - case PM_ButtonDefaultIndicator: - ret = 0; - break; - case PM_TitleBarHeight: { - NSUInteger style = NSWindowStyleMaskTitled; -// if (widget && ((widget->windowFlags() & Qt::Tool) == Qt::Tool)) -// style |= NSWindowStyleMaskUtilityWindow; - ret = int([NSWindow frameRectForContentRect:NSZeroRect - styleMask:style].size.height); - break; } - case QStyle::PM_TabBarTabHSpace: - switch (d->aquaSizeConstrain(opt)) { - case QStyleHelper::SizeLarge: - ret = QCommonStyle::pixelMetric(metric, opt); - break; - case QStyleHelper::SizeSmall: - ret = 20; - break; - case QStyleHelper::SizeMini: - ret = 16; - break; - case QStyleHelper::SizeDefault: - const QStyleOptionTab *tb = qstyleoption_cast(opt); - if (tb && tb->documentMode) - ret = 30; - else - ret = QCommonStyle::pixelMetric(metric, opt); - break; - } - break; - case PM_TabBarTabVSpace: - ret = 4; - break; - case PM_TabBarTabShiftHorizontal: - case PM_TabBarTabShiftVertical: - ret = 0; - break; - case PM_TabBarBaseHeight: - ret = 0; - break; - case PM_TabBarTabOverlap: - ret = 1; - break; - case PM_TabBarBaseOverlap: - switch (d->aquaSizeConstrain(opt)) { - case QStyleHelper::SizeDefault: - case QStyleHelper::SizeLarge: - ret = 11; - break; - case QStyleHelper::SizeSmall: - ret = 8; - break; - case QStyleHelper::SizeMini: - ret = 7; - break; - } - break; - case PM_ScrollBarExtent: { - const QStyleHelper::WidgetSizePolicy size = d->effectiveAquaSizeConstrain(opt); - ret = static_cast([NSScroller - scrollerWidthForControlSize:static_cast(size) - scrollerStyle:[NSScroller preferredScrollerStyle]]); - break; } - case PM_IndicatorHeight: { - switch (d->aquaSizeConstrain(opt)) { - case QStyleHelper::SizeDefault: - case QStyleHelper::SizeLarge: - ret = qt_mac_aqua_get_metric(CheckBoxHeight); - break; - case QStyleHelper::SizeMini: - ret = qt_mac_aqua_get_metric(MiniCheckBoxHeight); - break; - case QStyleHelper::SizeSmall: - ret = qt_mac_aqua_get_metric(SmallCheckBoxHeight); - break; - } - break; } - case PM_IndicatorWidth: { - switch (d->aquaSizeConstrain(opt)) { - case QStyleHelper::SizeDefault: - case QStyleHelper::SizeLarge: - ret = qt_mac_aqua_get_metric(CheckBoxWidth); - break; - case QStyleHelper::SizeMini: - ret = qt_mac_aqua_get_metric(MiniCheckBoxWidth); - break; - case QStyleHelper::SizeSmall: - ret = qt_mac_aqua_get_metric(SmallCheckBoxWidth); - break; - } - ++ret; - break; } - case PM_ExclusiveIndicatorHeight: { - switch (d->aquaSizeConstrain(opt)) { - case QStyleHelper::SizeDefault: - case QStyleHelper::SizeLarge: - ret = qt_mac_aqua_get_metric(RadioButtonHeight); - break; - case QStyleHelper::SizeMini: - ret = qt_mac_aqua_get_metric(MiniRadioButtonHeight); - break; - case QStyleHelper::SizeSmall: - ret = qt_mac_aqua_get_metric(SmallRadioButtonHeight); - break; - } - break; } - case PM_ExclusiveIndicatorWidth: { - switch (d->aquaSizeConstrain(opt)) { - case QStyleHelper::SizeDefault: - case QStyleHelper::SizeLarge: - ret = qt_mac_aqua_get_metric(RadioButtonWidth); - break; - case QStyleHelper::SizeMini: - ret = qt_mac_aqua_get_metric(MiniRadioButtonWidth); - break; - case QStyleHelper::SizeSmall: - ret = qt_mac_aqua_get_metric(SmallRadioButtonWidth); - break; - } - ++ret; - break; } - case PM_MenuVMargin: - ret = 4; - break; - case PM_MenuPanelWidth: - ret = 0; - break; - case PM_ToolTipLabelFrameWidth: - ret = 0; - break; - case PM_SizeGripSize: { - QStyleHelper::WidgetSizePolicy aSize; -// if (widget && widget->window()->windowType() == Qt::Tool) -// aSize = QStyleHelper::SizeSmall; -// else - aSize = QStyleHelper::SizeLarge; - const QSize size = qt_aqua_get_known_size(CT_SizeGrip, opt, QSize(), aSize); - ret = size.width(); - break; } - case PM_MdiSubWindowFrameWidth: - ret = 1; - break; - case PM_DockWidgetFrameWidth: - ret = 0; - break; - case PM_DockWidgetTitleMargin: - ret = 0; - break; - case PM_DockWidgetSeparatorExtent: - ret = 1; - break; - case PM_ToolBarHandleExtent: - ret = 11; - break; - case PM_ToolBarItemMargin: - ret = 0; - break; - case PM_ToolBarItemSpacing: - ret = 4; - break; - case PM_SplitterWidth: - ret = 7; - break; - case PM_LayoutLeftMargin: - case PM_LayoutTopMargin: - case PM_LayoutRightMargin: - case PM_LayoutBottomMargin: - { - if (opt->state & State_Window) { - /* - AHIG would have (20, 8, 10) here but that makes - no sense. It would also have 14 for the top margin - but this contradicts both Builder and most - applications. - */ - return_SIZE(20, 10, 10); // AHIG - } else { - // hack to detect QTabWidget -// if (widget && widget->parentWidget() -// && widget->parentWidget()->sizePolicy().controlType() == QSizePolicy::TabWidget) { -// if (metric == PM_LayoutTopMargin) { -// /* -// Builder would have 14 (= 20 - 6) instead of 12, -// but that makes the tab look disproportionate. -// */ -// return_SIZE(12, 6, 6); // guess -// } else { -// return_SIZE(20 /* Builder */, 8 /* guess */, 8 /* guess */); -// } -// } else { - /* - Child margins are highly inconsistent in AHIG and Builder. - */ - return_SIZE(12, 8, 6); // guess -// } - } - } - case PM_LayoutHorizontalSpacing: - case PM_LayoutVerticalSpacing: - return -1; - case PM_MenuHMargin: - ret = 0; - break; - case PM_ToolBarExtensionExtent: - ret = 21; - break; - case PM_ToolBarFrameWidth: - ret = 1; - break; - case PM_ScrollView_ScrollBarOverlap: - ret = [NSScroller preferredScrollerStyle] == NSScrollerStyleOverlay ? - pixelMetric(PM_ScrollBarExtent, opt) : 0; - break; - case PM_PushButtonFocusFrameRadius: - ret = LargeSmallMini(opt, 8, 7, 5); - break; - case PM_CheckBoxFocusFrameRadius: - ret = LargeSmallMini(opt, 6, 5, 4); - break; - case PM_ComboBoxFocusFrameRadius: - ret = LargeSmallMini(opt, 8, 7, 4); - break; - case PM_RadioButtonFocusFrameRadius: - ret = 10; - break; - case PM_SliderFocusFrameRadius: - // QTBUG-93423: We currently need to skip drawing a focus ring around the handle, since - // the handle drawn by the UIKit is not centered inside the rect we get from calling - // [cell knobRectFlipped:slider.isFlipped]. So we choose to draw the focus as - // a rect instead until we have a better solution available. - ret = 0; - break; - case PM_DialFocusFrameRadius: - case PM_SpinBoxFocusFrameRadius: - case PM_TextAreaFocusFrameRadius: - case PM_TextFieldFocusFrameRadius: - ret = 3; - break; - default: - ret = QCommonStyle::pixelMetric(metric, opt); - break; - } - return ret; -} - -//QPalette QMacStyle::standardPalette() const -//{ -// auto platformTheme = QGuiApplicationPrivate::platformTheme(); -// auto styleNames = platformTheme->themeHint(QPlatformTheme::StyleNames); -// if (styleNames.toStringList().contains("macintosh")) -// return QPalette(); // Inherit everything from theme -// else -// return QStyle::standardPalette(); -//} - -int QMacStyle::styleHint(StyleHint sh, const QStyleOption *opt, QStyleHintReturn *hret) const -{ - QMacAutoReleasePool pool; - - int ret = 0; - switch (sh) { - case SH_Slider_SnapToValue: - case SH_PrintDialog_RightAlignButtons: - case SH_FontDialog_SelectAssociatedText: - case SH_MenuBar_MouseTracking: - case SH_Menu_MouseTracking: - case SH_ComboBox_ListMouseTracking: - case SH_MainWindow_SpaceBelowMenuBar: - case SH_ItemView_ChangeHighlightOnFocus: - ret = 1; - break; - case SH_ToolBox_SelectedPageTitleBold: - ret = 0; - break; - case SH_DialogButtonBox_ButtonsHaveIcons: - ret = 0; - break; - case SH_Menu_SelectionWrap: - ret = false; - break; - case SH_Menu_KeyboardSearch: - ret = true; - break; - case SH_Menu_SpaceActivatesItem: - ret = true; - break; - case SH_Slider_AbsoluteSetButtons: - ret = Qt::LeftButton|Qt::MiddleButton; - break; - case SH_Slider_PageSetButtons: - ret = 0; - break; - case SH_ScrollBar_ContextMenu: - ret = false; - break; - case SH_TitleBar_AutoRaise: - ret = true; - break; - case SH_Menu_AllowActiveAndDisabled: - ret = false; - break; - case SH_Menu_SubMenuPopupDelay: - ret = 100; - break; - case SH_Menu_SubMenuUniDirection: - ret = true; - break; - case SH_Menu_SubMenuSloppySelectOtherActions: - ret = false; - break; - case SH_Menu_SubMenuResetWhenReenteringParent: - ret = true; - break; - case SH_Menu_SubMenuDontStartSloppyOnLeave: - ret = true; - break; - - case SH_ScrollBar_LeftClickAbsolutePosition: { - NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; - bool result = [defaults boolForKey:@"AppleScrollerPagingBehavior"]; -// if(QApplication::keyboardModifiers() & Qt::AltModifier) -// ret = !result; -// else - ret = result; - break; } - case SH_TabBar_PreferNoArrows: - ret = true; - break; - /* - case SH_DialogButtons_DefaultButton: - ret = QDialogButtons::Reject; - break; - */ - case SH_GroupBox_TextLabelVerticalAlignment: - ret = Qt::AlignTop; - break; - case SH_ScrollView_FrameOnlyAroundContents: - ret = QCommonStyle::styleHint(sh, opt, hret); - break; - case SH_Menu_FillScreenWithScroll: - ret = false; - break; - case SH_Menu_Scrollable: - ret = true; - break; - case SH_RichText_FullWidthSelection: - ret = true; - break; - case SH_BlinkCursorWhenTextSelected: - ret = false; - break; - case SH_Slider_StopMouseOverSlider: - ret = true; - break; - case SH_ListViewExpand_SelectMouseType: - ret = QEvent::MouseButtonRelease; - break; - case SH_TabBar_SelectMouseType: - if (const QStyleOptionTabBarBase *opt2 = qstyleoption_cast(opt)) { - ret = opt2->documentMode ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; - } else { - ret = QEvent::MouseButtonRelease; - } - break; - case SH_ComboBox_Popup: - if (const QStyleOptionComboBox *cmb = qstyleoption_cast(opt)) - ret = !cmb->editable; - else - ret = 0; - break; - case SH_Workspace_FillSpaceOnMaximize: - ret = true; - break; - case SH_Widget_ShareActivation: - ret = true; - break; - case SH_Header_ArrowAlignment: - ret = Qt::AlignRight; - break; - case SH_TabBar_Alignment: { -//#if QT_CONFIG(tabwidget) -// if (const QTabWidget *tab = qobject_cast(w)) { -// if (tab->documentMode()) { -// ret = Qt::AlignLeft; -// break; -// } -// } -//#endif -//#if QT_CONFIG(tabbar) -// if (const QTabBar *tab = qobject_cast(w)) { -// if (tab->documentMode()) { -// ret = Qt::AlignLeft; -// break; -// } -// } -//#endif - ret = Qt::AlignCenter; - } break; - case SH_UnderlineShortcut: - ret = false; - break; - case SH_ToolTipLabel_Opacity: - ret = 242; // About 95% - break; - case SH_Button_FocusPolicy: - ret = Qt::TabFocus; - break; - case SH_EtchDisabledText: - ret = false; - break; - case SH_FocusFrame_Mask: { - ret = true; - if(QStyleHintReturnMask *mask = qstyleoption_cast(hret)) { - const uchar fillR = 192, fillG = 191, fillB = 190; - QImage img; - - QSize pixmapSize = opt->rect.size(); - if (!pixmapSize.isEmpty()) { - QPixmap pix(pixmapSize); - pix.fill(QColor(fillR, fillG, fillB)); - QPainter pix_paint(&pix); - proxy()->drawControl(CE_FocusFrame, opt, &pix_paint); - pix_paint.end(); - img = pix.toImage(); - } - - const QRgb *sptr = (QRgb*)img.bits(), *srow; - const qsizetype sbpl = img.bytesPerLine(); - const int w = sbpl/4, h = img.height(); - - QImage img_mask(img.width(), img.height(), QImage::Format_ARGB32); - QRgb *dptr = (QRgb*)img_mask.bits(), *drow; - const qsizetype dbpl = img_mask.bytesPerLine(); - - for (int y = 0; y < h; ++y) { - srow = sptr+((y*sbpl)/4); - drow = dptr+((y*dbpl)/4); - for (int x = 0; x < w; ++x) { - const int redDiff = qRed(*srow) - fillR; - const int greenDiff = qGreen(*srow) - fillG; - const int blueDiff = qBlue(*srow) - fillB; - const int diff = (redDiff * redDiff) + (greenDiff * greenDiff) + (blueDiff * blueDiff); - (*drow++) = (diff < 10) ? 0xffffffff : 0xff000000; - ++srow; - } - } - QBitmap qmask = QBitmap::fromImage(img_mask); - mask->region = QRegion(qmask); - } - break; } - case SH_TitleBar_NoBorder: - ret = 1; - break; - case SH_RubberBand_Mask: - ret = 0; - break; - case SH_ComboBox_LayoutDirection: - ret = Qt::LeftToRight; - break; - case SH_ItemView_EllipsisLocation: - ret = Qt::AlignHCenter; - break; - case SH_ItemView_ShowDecorationSelected: - ret = true; - break; - case SH_TitleBar_ModifyNotification: - ret = false; - break; - case SH_ScrollBar_RollBetweenButtons: - ret = true; - break; - case SH_WindowFrame_Mask: - ret = false; - break; - case SH_TabBar_ElideMode: - ret = Qt::ElideRight; - break; -// case SH_DialogButtonLayout: -// ret = QDialogButtonBox::MacLayout; -// break; -// case SH_FormLayoutWrapPolicy: -// ret = QFormLayout::DontWrapRows; -// break; -// case SH_FormLayoutFieldGrowthPolicy: -// ret = QFormLayout::FieldsStayAtSizeHint; -// break; - case SH_FormLayoutFormAlignment: - ret = Qt::AlignHCenter | Qt::AlignTop; - break; - case SH_FormLayoutLabelAlignment: - ret = Qt::AlignRight; - break; -// case SH_ComboBox_PopupFrameStyle: -// ret = QFrame::NoFrame; -// break; - case SH_MessageBox_TextInteractionFlags: - ret = Qt::TextSelectableByMouse | Qt::LinksAccessibleByMouse | Qt::TextSelectableByKeyboard; - break; - case SH_SpellCheckUnderlineStyle: - ret = QTextCharFormat::DashUnderline; - break; - case SH_MessageBox_CenterButtons: - ret = false; - break; - case SH_MenuBar_AltKeyNavigation: - ret = false; - break; - case SH_ItemView_MovementWithoutUpdatingSelection: - ret = false; - break; - case SH_FocusFrame_AboveWidget: - ret = true; - break; -// case SH_WizardStyle: -// ret = QWizard::MacStyle; -// break; - case SH_ItemView_ArrowKeysNavigateIntoChildren: - ret = false; - break; - case SH_Menu_FlashTriggeredItem: - ret = true; - break; - case SH_Menu_FadeOutOnHide: - ret = true; - break; - case SH_ItemView_PaintAlternatingRowColorsForEmptyArea: - ret = true; - break; - case SH_TabBar_CloseButtonPosition: - ret = QStyleOptionTabBarBase::LeftSide; - break; - case SH_DockWidget_ButtonsHaveFrame: - ret = false; - break; - case SH_ScrollBar_Transient: - // For the initial version in QQC2, we don't support transient scrollbars. When the - // time comes, consider doing all such animations from QML. - // ret = [NSScroller preferredScrollerStyle] == NSScrollerStyleOverlay; - ret = false; - break; - case SH_TitleBar_ShowToolTipsOnButtons: - // min/max/close buttons on windows don't show tool tips - ret = false; - break; - case SH_ComboBox_AllowWheelScrolling: - ret = false; - break; - case SH_SpinBox_ButtonsInsideFrame: - ret = false; - break; - case SH_Table_GridLineColor: - ret = int(qt_mac_toQColor(NSColor.gridColor).rgba()); - break; - default: - ret = QCommonStyle::styleHint(sh, opt, hret); - break; - } - return ret; -} - -QPixmap QMacStyle::generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, - const QStyleOption *opt) const -{ - switch (iconMode) { - case QIcon::Disabled: { - QImage img = pixmap.toImage().convertToFormat(QImage::Format_ARGB32); - int imgh = img.height(); - int imgw = img.width(); - QRgb pixel; - for (int y = 0; y < imgh; ++y) { - for (int x = 0; x < imgw; ++x) { - pixel = img.pixel(x, y); - img.setPixel(x, y, qRgba(qRed(pixel), qGreen(pixel), qBlue(pixel), - qAlpha(pixel) / 2)); - } - } - return QPixmap::fromImage(img); - } - default: - ; - } - return QCommonStyle::generatedIconPixmap(iconMode, pixmap, opt); -} - - -QPixmap QMacStyle::standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt) const -{ - // The default implementation of QStyle::standardIconImplementation() is to call standardPixmap() - // I don't want infinite recursion so if we do get in that situation, just return the Window's - // standard pixmap instead (since there is no mac-specific icon then). This should be fine until - // someone changes how Windows standard - // pixmap works. - static bool recursionGuard = false; - - if (recursionGuard) - return QCommonStyle::standardPixmap(standardPixmap, opt); - - recursionGuard = true; - QIcon icon = proxy()->standardIcon(standardPixmap, opt); - recursionGuard = false; - int size; - switch (standardPixmap) { - default: - size = 32; - break; - case SP_MessageBoxCritical: - case SP_MessageBoxQuestion: - case SP_MessageBoxInformation: - case SP_MessageBoxWarning: - size = 64; - break; - } - return icon.pixmap(opt->window, QSize(size, size)); -} - -void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p) const -{ - Q_D(const QMacStyle); - - const AppearanceSync appSync; - QMacCGContext cg(p); - d->resolveCurrentNSView(opt->window); - - switch (pe) { - case PE_IndicatorArrowUp: - case PE_IndicatorArrowDown: - case PE_IndicatorArrowRight: - case PE_IndicatorArrowLeft: { - p->save(); - p->setRenderHint(QPainter::Antialiasing); - const int xOffset = 1; // FIXME: opt->direction == Qt::LeftToRight ? 2 : -1; - qreal halfSize = 0.5 * qMin(opt->rect.width(), opt->rect.height()); - const qreal penWidth = qMax(halfSize / 3.0, 1.25); -//#if QT_CONFIG(toolbutton) -// if (const QToolButton *tb = qobject_cast(w)) { -// // When stroking the arrow, make sure it fits in the tool button -// if (tb->arrowType() != Qt::NoArrow -// || tb->popupMode() == QToolButton::MenuButtonPopup) -// halfSize -= penWidth; -// } -//#endif - - QTransform transform; - transform.translate(opt->rect.center().x() + xOffset, opt->rect.center().y() + 2); - QPainterPath path; - switch(pe) { - default: - case PE_IndicatorArrowDown: - break; - case PE_IndicatorArrowUp: - transform.rotate(180); - break; - case PE_IndicatorArrowLeft: - transform.rotate(90); - break; - case PE_IndicatorArrowRight: - transform.rotate(-90); - break; - } - p->setTransform(transform); - - path.moveTo(-halfSize, -halfSize * 0.5); - path.lineTo(0.0, halfSize * 0.5); - path.lineTo(halfSize, -halfSize * 0.5); - - const QPen arrowPen(opt->palette.text(), penWidth, - Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin); - p->strokePath(path, arrowPen); - p->restore(); - break; } - case PE_FrameTabBarBase: - if (const QStyleOptionTabBarBase *tbb - = qstyleoption_cast(opt)) { - if (tbb->documentMode) { - p->save(); - drawTabBase(p, tbb); - p->restore(); - return; - } - QRegion region(tbb->rect); - region -= tbb->tabBarRect; - p->save(); - p->setClipRegion(region); - QStyleOptionTabWidgetFrame twf; - twf.QStyleOption::operator=(*tbb); - twf.shape = tbb->shape; - switch (QMacStylePrivate::tabDirection(twf.shape)) { - case QMacStylePrivate::North: - twf.rect = twf.rect.adjusted(0, 0, 0, 10); - break; - case QMacStylePrivate::South: - twf.rect = twf.rect.adjusted(0, -10, 0, 0); - break; - case QMacStylePrivate::West: - twf.rect = twf.rect.adjusted(0, 0, 10, 0); - break; - case QMacStylePrivate::East: - twf.rect = twf.rect.adjusted(0, -10, 0, 0); - break; - } - proxy()->drawPrimitive(PE_FrameTabWidget, &twf, p); - p->restore(); - } - break; - case PE_PanelTipLabel: - p->fillRect(opt->rect, opt->palette.brush(QPalette::ToolTipBase)); - break; - case PE_FrameGroupBox: - if (const auto *groupBox = qstyleoption_cast(opt)) - if (groupBox->features & QStyleOptionFrame::Flat) { - QCommonStyle::drawPrimitive(pe, groupBox, p); - break; - } - Q_FALLTHROUGH(); - case PE_FrameTabWidget: - { - const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::Box, QStyleHelper::SizeLarge); - auto *box = static_cast(d->cocoaControl(cw)); - // FIXME Since macOS 10.14, simply calling drawRect: won't display anything anymore. - // The AppKit team is aware of this and has proposed a couple of solutions. - // The first solution was to call displayRectIgnoringOpacity:inContext: instead. - // However, it doesn't seem to work on 10.13. More importantly, dark mode on 10.14 - // is extremely slow. Light mode works fine. - // The second solution is to subclass NSBox and reimplement a trivial drawRect: which - // would only call super. This works without any issue on 10.13, but a double border - // shows on 10.14 in both light and dark modes. - // The code below picks what works on each version and mode. On 10.13 and earlier, we - // simply call drawRect: on a regular NSBox. On 10.14, we call displayRectIgnoringOpacity: - // inContext:, but only in light mode. In dark mode, we use a custom NSBox subclass, - // QDarkNSBox, of type NSBoxCustom. Its appearance is close enough to the real thing so - // we can use this for now. - auto adjustedRect = opt->rect; - bool needTranslation = false; - if (QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSMojave - && !qt_mac_applicationIsInDarkMode()) { - // In Aqua theme we have to use the 'default' NSBox (as opposite - // to the 'custom' QDarkNSBox we use in dark theme). Since -drawRect: - // does nothing in default NSBox, we call -displayRectIgnoringOpaticty:. - // Unfortunately, the resulting box is smaller then the actual rect we - // wanted. This can be seen, e.g. because tabs (buttons) are misaligned - // vertically and even worse, if QTabWidget has autoFillBackground - // set, this background overpaints NSBox making it to disappear. - // We trick our NSBox to render in a larger rectangle, so that - // the actuall result (which is again smaller than requested), - // more or less is what we really want. We'll have to adjust CTM - // and translate accordingly. - adjustedRect.adjust(0, 0, 6, 6); - needTranslation = true; - } - d->drawNSViewInRect(box, adjustedRect, p, ^(CGContextRef ctx, const CGRect &rect) { -//#if QT_CONFIG(tabwidget) -// if (QTabWidget *tabWidget = qobject_cast(opt->styleObject)) -// clipTabBarFrame(opt, this, ctx); -//#endif - QMacAutoReleasePool pool; - CGContextTranslateCTM(ctx, 0, rect.origin.y + rect.size.height); - CGContextScaleCTM(ctx, 1, -1); - if (QOperatingSystemVersion::current() < QOperatingSystemVersion::MacOSMojave - || [box isMemberOfClass:QDarkNSBox.class]) { - [box drawRect:rect]; - } else { - if (needTranslation) - CGContextTranslateCTM(ctx, -3.0, 5.0); - [box displayRectIgnoringOpacity:box.bounds inContext:NSGraphicsContext.currentContext]; - } - }); - break; - } - case PE_IndicatorToolBarSeparator: { - QPainterPath path; - if (opt->state & State_Horizontal) { - int xpoint = opt->rect.center().x(); - path.moveTo(xpoint + 0.5, opt->rect.top() + 1); - path.lineTo(xpoint + 0.5, opt->rect.bottom()); - } else { - int ypoint = opt->rect.center().y(); - path.moveTo(opt->rect.left() + 2 , ypoint + 0.5); - path.lineTo(opt->rect.right() + 1, ypoint + 0.5); - } - QPainterPathStroker theStroker; - theStroker.setCapStyle(Qt::FlatCap); - theStroker.setDashPattern(QVector() << 1 << 2); - path = theStroker.createStroke(path); - const auto dark = qt_mac_applicationIsInDarkMode() ? opt->palette.dark().color().darker() - : QColor(0, 0, 0, 119); - p->fillPath(path, dark); - } - break; - case PE_FrameWindow: - if (const QStyleOptionFrame *frame = qstyleoption_cast(opt)) { -// if (w && w->inherits("QMdiSubWindow")) { -// p->save(); -// p->setPen(QPen(frame->palette.dark().color(), frame->lineWidth)); -// p->setBrush(frame->palette.window()); -// p->drawRect(frame->rect); -// p->restore(); -// } - } - break; - case PE_IndicatorDockWidgetResizeHandle: { - // The docwidget resize handle is drawn as a one-pixel wide line. - p->save(); - if (opt->state & State_Horizontal) { - p->setPen(QColor(160, 160, 160)); - p->drawLine(opt->rect.topLeft(), opt->rect.topRight()); - } else { - p->setPen(QColor(145, 145, 145)); - p->drawLine(opt->rect.topRight(), opt->rect.bottomRight()); - } - p->restore(); - } break; - case PE_IndicatorToolBarHandle: { - p->save(); - QPainterPath path; - int x = opt->rect.x() + 6; - int y = opt->rect.y() + 7; - static const int RectHeight = 2; - if (opt->state & State_Horizontal) { - while (y < opt->rect.height() - RectHeight - 5) { - path.moveTo(x, y); - path.addEllipse(x, y, RectHeight, RectHeight); - y += 6; - } - } else { - while (x < opt->rect.width() - RectHeight - 5) { - path.moveTo(x, y); - path.addEllipse(x, y, RectHeight, RectHeight); - x += 6; - } - } - p->setPen(Qt::NoPen); - QColor dark = opt->palette.dark().color().darker(); - dark.setAlphaF(0.50); - p->fillPath(path, dark); - p->restore(); - - break; - } - case PE_IndicatorHeaderArrow: - if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { - // In HITheme, up is down, down is up and hamburgers eat people. - if (header->sortIndicator != QStyleOptionHeader::None) - proxy()->drawPrimitive( - (header->sortIndicator == QStyleOptionHeader::SortDown) ? - PE_IndicatorArrowUp : PE_IndicatorArrowDown, header, p); - } - break; - case PE_IndicatorMenuCheckMark: { - QColor pc; - if (opt->state & State_On) - pc = opt->palette.highlightedText().color(); - else - pc = opt->palette.text().color(); - - QCFType checkmarkColor = CGColorCreateGenericRGB(static_cast(pc.redF()), - static_cast(pc.greenF()), - static_cast(pc.blueF()), - static_cast(pc.alphaF())); - // kCTFontUIFontSystem and others give the same result - // as kCTFontUIFontMenuItemMark. However, the latter is - // more reminiscent to HITheme's kThemeMenuItemMarkFont. - // See also the font for small- and mini-sized widgets, - // where we end up using the generic system font type. - const CTFontUIFontType fontType = (opt->state & State_Mini) ? kCTFontUIFontMiniSystem : - (opt->state & State_Small) ? kCTFontUIFontSmallSystem : - kCTFontUIFontMenuItemMark; - // Similarly for the font size, where there is a small difference - // between regular combobox and item view items, and and menu items. - // However, we ignore any difference for small- and mini-sized widgets. - const CGFloat fontSize = fontType == kCTFontUIFontMenuItemMark ? opt->fontMetrics.height() : 0.0; - QCFType checkmarkFont = CTFontCreateUIFontForLanguage(fontType, fontSize, NULL); - - CGContextSaveGState(cg); - CGContextSetShouldSmoothFonts(cg, NO); // Same as HITheme and Cocoa menu checkmarks - - // Baseline alignment tweaks for QComboBox and QMenu - const CGFloat vOffset = (opt->state & State_Mini) ? 0.0 : - (opt->state & State_Small) ? 1.0 : - 0.75; - - CGContextTranslateCTM(cg, 0, opt->rect.bottom()); - CGContextScaleCTM(cg, 1, -1); - // Translate back to the original position and add rect origin and offset - CGContextTranslateCTM(cg, opt->rect.x(), vOffset); - - // CTFont has severe difficulties finding the checkmark character among its - // glyphs. Fortunately, CTLine knows its ways inside the Cocoa labyrinth. - static const CFStringRef keys[] = { kCTFontAttributeName, kCTForegroundColorAttributeName }; - static const int numValues = sizeof(keys) / sizeof(keys[0]); - const CFTypeRef values[] = { (CFTypeRef)checkmarkFont, (CFTypeRef)checkmarkColor }; - Q_STATIC_ASSERT((sizeof(values) / sizeof(values[0])) == numValues); - QCFType attributes = CFDictionaryCreate(kCFAllocatorDefault, (const void **)keys, (const void **)values, - numValues, NULL, NULL); - // U+2713: CHECK MARK - QCFType checkmarkString = CFAttributedStringCreate(kCFAllocatorDefault, (CFStringRef)@"\u2713", attributes); - QCFType line = CTLineCreateWithAttributedString(checkmarkString); - - CTLineDraw((CTLineRef)line, cg); - CGContextFlush(cg); // CTLineDraw's documentation says it doesn't flush - - CGContextRestoreGState(cg); - break; } - case PE_IndicatorItemViewItemCheck: - case PE_IndicatorRadioButton: - case PE_IndicatorCheckBox: { - const bool isEnabled = opt->state & State_Enabled; - const bool isPressed = opt->state & State_Sunken; - const bool isRadioButton = (pe == PE_IndicatorRadioButton); - const auto ct = isRadioButton ? QMacStylePrivate::Button_RadioButton : QMacStylePrivate::Button_CheckBox; - const auto cs = d->effectiveAquaSizeConstrain(opt); - const auto cw = QMacStylePrivate::CocoaControl(ct, cs); - auto *tb = static_cast(d->cocoaControl(cw)); - tb.enabled = isEnabled; - tb.state = (opt->state & State_NoChange) ? NSMixedState : - (opt->state & State_On) ? NSOnState : NSOffState; - [tb highlight:isPressed]; - const auto vOffset = [=] { - // As measured - if (cs == QStyleHelper::SizeMini) - return ct == QMacStylePrivate::Button_CheckBox ? -0.5 : 0.5; - - return cs == QStyleHelper::SizeSmall ? 0.5 : 0.0; - } (); - d->drawNSViewInRect(tb, opt->rect, p, ^(CGContextRef ctx, const CGRect &rect) { - QMacAutoReleasePool pool; - CGContextTranslateCTM(ctx, 0, vOffset); - [tb.cell drawInteriorWithFrame:rect inView:tb]; - }); - break; } - case PE_FrameFocusRect: - // Use the our own focus widget stuff. - break; - case PE_IndicatorBranch: { - if (!(opt->state & State_Children)) - break; - const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::Button_Disclosure, QStyleHelper::SizeLarge); - NSButtonCell *triangleCell = static_cast(d->cocoaCell(cw)); - [triangleCell setState:(opt->state & State_Open) ? NSOnState : NSOffState]; -// bool viewHasFocus = (w && w->hasFocus()) || (opt->state & State_HasFocus); - bool viewHasFocus = false; - [triangleCell setBackgroundStyle:((opt->state & State_Selected) && viewHasFocus) ? NSBackgroundStyleDark : NSBackgroundStyleLight]; - - d->setupNSGraphicsContext(cg, NO); - - QRect qtRect = opt->rect.adjusted(DisclosureOffset, 0, -DisclosureOffset, 0); - CGRect rect = CGRectMake(qtRect.x() + 1, qtRect.y(), qtRect.width(), qtRect.height()); - CGContextTranslateCTM(cg, rect.origin.x, rect.origin.y + rect.size.height); - CGContextScaleCTM(cg, 1, -1); - CGContextTranslateCTM(cg, -rect.origin.x, -rect.origin.y); - - [triangleCell drawBezelWithFrame:NSRectFromCGRect(rect) inView:[triangleCell controlView]]; - - d->restoreNSGraphicsContext(cg); - break; } - - case PE_Frame: { - const QPen oldPen = p->pen(); - QPen penCpy = p->pen(); - penCpy.setWidth(2); - penCpy.setColor(opt->palette.dark().color()); - p->setPen(penCpy); - p->drawRect(opt->rect); - p->setPen(oldPen); - break; } - case PE_PanelLineEdit: - case PE_FrameLineEdit: - if (const QStyleOptionFrame *frame = qstyleoption_cast(opt)) { - if (frame->state & State_Sunken) { - const bool isEnabled = opt->state & State_Enabled; - const bool isReadOnly = opt->state & State_ReadOnly; - const bool isRounded = frame->features & QStyleOptionFrame::Rounded; - const auto cs = d->effectiveAquaSizeConstrain(opt, CT_LineEdit); - const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::TextField, cs); - auto *tf = static_cast(d->cocoaControl(cw)); - tf.enabled = isEnabled; - tf.editable = !isReadOnly; - tf.bezeled = YES; - static_cast(tf.cell).bezelStyle = isRounded ? NSTextFieldRoundedBezel : NSTextFieldSquareBezel; - tf.frame = opt->rect.toCGRect(); - d->drawNSViewInRect(tf, opt->rect, p, ^(CGContextRef, const CGRect &rect) { - QMacAutoReleasePool pool; - if (!qt_mac_applicationIsInDarkMode()) { - // In 'Dark' mode controls are transparent, so we do not - // over-paint the (potentially custom) color in the background. - // In 'Light' mode we have to care about the correct - // background color. See the comments below for PE_PanelLineEdit. - CGContextRef cgContext = NSGraphicsContext.currentContext.CGContext; - // See QMacCGContext, here we expect bitmap context created with - // color space 'kCGColorSpaceSRGB', if it's something else - we - // give up. - if (cgContext ? bool(CGBitmapContextGetColorSpace(cgContext)) : false) { - tf.drawsBackground = YES; - const QColor bgColor = frame->palette.brush(QPalette::Base).color(); - tf.backgroundColor = [NSColor colorWithSRGBRed:bgColor.redF() - green:bgColor.greenF() - blue:bgColor.blueF() - alpha:bgColor.alphaF()]; - if (bgColor.alpha() != 255) { - // No way we can have it bezeled and transparent ... - tf.bordered = YES; - } - } - } - - [tf.cell drawWithFrame:rect inView:tf]; - }); - } else { - QCommonStyle::drawPrimitive(pe, opt, p); - } - } - break; - case PE_PanelScrollAreaCorner: { - const QBrush brush(opt->palette.brush(QPalette::Base)); - p->fillRect(opt->rect, brush); - p->setPen(QPen(QColor(217, 217, 217))); - p->drawLine(opt->rect.topLeft(), opt->rect.topRight()); - p->drawLine(opt->rect.topLeft(), opt->rect.bottomLeft()); - } break; - case PE_FrameStatusBarItem: - break; -//#if QT_CONFIG(tabbar) -// case PE_IndicatorTabClose: { -// // Make close button visible only on the hovered tab. -// QTabBar *tabBar = qobject_cast(w->parentWidget()); -// const QWidget *closeBtn = w; -// if (!tabBar) { -// // QStyleSheetStyle instead of CloseButton (which has -// // a QTabBar as a parent widget) uses the QTabBar itself: -// tabBar = qobject_cast(const_cast(w)); -// closeBtn = decltype(closeBtn)(property("_q_styleSheetRealCloseButton").value()); -// } -// if (tabBar) { -// const bool documentMode = tabBar->documentMode(); -// const QTabBarPrivate *tabBarPrivate = static_cast(QObjectPrivate::get(tabBar)); -// const int hoveredTabIndex = tabBarPrivate->hoveredTabIndex(); -// if (!documentMode || -// (hoveredTabIndex != -1 && ((closeBtn == tabBar->tabButton(hoveredTabIndex, QTabBar::LeftSide)) || -// (closeBtn == tabBar->tabButton(hoveredTabIndex, QTabBar::RightSide))))) { -// const bool hover = (opt->state & State_MouseOver); -// const bool selected = (opt->state & State_Selected); -// const bool pressed = (opt->state & State_Sunken); -// drawTabCloseButton(p, hover, selected, pressed, documentMode); -// } -// } -// } break; -//#endif // QT_CONFIG(tabbar) - case PE_PanelStatusBar: { - // Fill the status bar with the titlebar gradient. - QLinearGradient linearGrad; - const bool isMainWindow = qt_macWindowMainWindow(opt->window); - if (isMainWindow) - linearGrad = titlebarGradientActive(); - else - linearGrad = titlebarGradientInactive(); - - linearGrad.setStart(0, opt->rect.top()); - linearGrad.setFinalStop(0, opt->rect.bottom()); - p->fillRect(opt->rect, linearGrad); - - // Draw the black separator line at the top of the status bar. - if (isMainWindow) - p->setPen(titlebarSeparatorLineActive); - else - p->setPen(titlebarSeparatorLineInactive); - p->drawLine(opt->rect.left(), opt->rect.top(), opt->rect.right(), opt->rect.top()); - - break; - } - case PE_PanelMenu: { - p->save(); - p->fillRect(opt->rect, Qt::transparent); - p->setPen(Qt::transparent); - p->setBrush(opt->palette.window()); - p->setRenderHint(QPainter::Antialiasing, true); - const QPainterPath path = d->windowPanelPath(opt->rect); - p->drawPath(path); - p->restore(); - } break; - - default: - QCommonStyle::drawPrimitive(pe, opt, p); - break; - } -} - -static QPixmap darkenPixmap(const QPixmap &pixmap) -{ - QImage img = pixmap.toImage().convertToFormat(QImage::Format_ARGB32); - int imgh = img.height(); - int imgw = img.width(); - int h, s, v, a; - QRgb pixel; - for (int y = 0; y < imgh; ++y) { - for (int x = 0; x < imgw; ++x) { - pixel = img.pixel(x, y); - a = qAlpha(pixel); - QColor hsvColor(pixel); - hsvColor.getHsv(&h, &s, &v); - s = qMin(100, s * 2); - v = v / 2; - hsvColor.setHsv(h, s, v); - pixel = hsvColor.rgb(); - img.setPixel(x, y, qRgba(qRed(pixel), qGreen(pixel), qBlue(pixel), a)); - } - } - return QPixmap::fromImage(img); -} - -void QMacStylePrivate::setupVerticalInvertedXform(CGContextRef cg, bool reverse, bool vertical, const CGRect &rect) const -{ - if (vertical) { - CGContextTranslateCTM(cg, rect.size.height, 0); - CGContextRotateCTM(cg, M_PI_2); - } - if (vertical != reverse) { - CGContextTranslateCTM(cg, rect.size.width, 0); - CGContextScaleCTM(cg, -1, 1); - } -} - -void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter *p) const -{ - Q_D(const QMacStyle); - - const AppearanceSync sync; - const QMacAutoReleasePool pool; - - QMacCGContext cg(p); - d->resolveCurrentNSView(opt->window); - - switch (ce) { - case CE_HeaderSection: - if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { - State flags = header->state; - QRect ir = header->rect; - const bool pressed = (flags & State_Sunken) && !(flags & State_On); - p->fillRect(ir, pressed ? header->palette.dark() : header->palette.button()); - p->setPen(QPen(header->palette.dark(), 1.0)); - if (header->orientation == Qt::Horizontal) - p->drawLine(QLineF(ir.right() + 0.5, ir.top() + headerSectionSeparatorInset, - ir.right() + 0.5, ir.bottom() - headerSectionSeparatorInset)); - else - p->drawLine(QLineF(ir.left() + headerSectionSeparatorInset, ir.bottom(), - ir.right() - headerSectionSeparatorInset, ir.bottom())); - } - - break; - case CE_HeaderLabel: - if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { - p->save(); - QRect textr = header->rect; - if (!header->icon.isNull()) { - QIcon::Mode mode = QIcon::Disabled; - if (opt->state & State_Enabled) - mode = QIcon::Normal; - int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); - QPixmap pixmap = header->icon.pixmap(opt->window, QSize(iconExtent, iconExtent), mode); - - QRect pixr = header->rect; - pixr.setY(header->rect.center().y() - (pixmap.height() / pixmap.devicePixelRatio() - 1) / 2); - proxy()->drawItemPixmap(p, pixr, Qt::AlignVCenter, pixmap); - textr.translate(pixmap.width() / pixmap.devicePixelRatio() + 2, 0); - } - - proxy()->drawItemText(p, textr, header->textAlignment | Qt::AlignVCenter, header->palette, - header->state & State_Enabled, header->text, QPalette::ButtonText); - p->restore(); - } - break; - case CE_ToolButtonLabel: - if (const QStyleOptionToolButton *tb = qstyleoption_cast(opt)) { - QStyleOptionToolButton myTb = *tb; - myTb.state &= ~State_AutoRaise; -#ifndef QT_NO_ACCESSIBILITY - if (QStyleHelper::hasAncestor(opt->styleObject, QAccessible::ToolBar)) { - QRect cr = tb->rect; - int shiftX = 0; - int shiftY = 0; - bool needText = false; - int alignment = 0; - bool down = tb->state & (State_Sunken | State_On); - if (down) { - shiftX = proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb); - shiftY = proxy()->pixelMetric(PM_ButtonShiftVertical, tb); - } - // The down state is special for QToolButtons in a toolbar on the Mac - // The text is a bit bolder and gets a drop shadow and the icons are also darkened. - // This doesn't really fit into any particular case in QIcon, so we - // do the majority of the work ourselves. - if (!(tb->features & QStyleOptionToolButton::Arrow)) { - Qt::ToolButtonStyle tbstyle = tb->toolButtonStyle; - if (tb->icon.isNull() && !tb->text.isEmpty()) - tbstyle = Qt::ToolButtonTextOnly; - - switch (tbstyle) { - case Qt::ToolButtonTextOnly: { - needText = true; - alignment = Qt::AlignCenter; - break; } - case Qt::ToolButtonIconOnly: - case Qt::ToolButtonTextBesideIcon: - case Qt::ToolButtonTextUnderIcon: { - QRect pr = cr; - QIcon::Mode iconMode = (tb->state & State_Enabled) ? QIcon::Normal - : QIcon::Disabled; - QIcon::State iconState = (tb->state & State_On) ? QIcon::On - : QIcon::Off; - QPixmap pixmap = tb->icon.pixmap(opt->window, - tb->rect.size().boundedTo(tb->iconSize), - iconMode, iconState); - - // Draw the text if it's needed. - if (tb->toolButtonStyle != Qt::ToolButtonIconOnly) { - needText = true; - if (tb->toolButtonStyle == Qt::ToolButtonTextUnderIcon) { - pr.setHeight(pixmap.size().height() / pixmap.devicePixelRatio() + 6); - cr.adjust(0, pr.bottom(), 0, -3); - alignment |= Qt::AlignCenter; - } else { - pr.setWidth(pixmap.width() / pixmap.devicePixelRatio() + 8); - cr.adjust(pr.right(), 0, 0, 0); - alignment |= Qt::AlignLeft | Qt::AlignVCenter; - } - } - if (opt->state & State_Sunken) { - pr.translate(shiftX, shiftY); - pixmap = darkenPixmap(pixmap); - } - proxy()->drawItemPixmap(p, pr, Qt::AlignCenter, pixmap); - break; } - default: - Q_ASSERT(false); - break; - } - - if (needText) { - QPalette pal = tb->palette; - QPalette::ColorRole role = QPalette::NoRole; - if (!proxy()->styleHint(SH_UnderlineShortcut, tb)) - alignment |= Qt::TextHideMnemonic; - if (down) - cr.translate(shiftX, shiftY); - if (tbstyle == Qt::ToolButtonTextOnly - || (tbstyle != Qt::ToolButtonTextOnly && !down)) { - QPen pen = p->pen(); - QColor light = down || isDarkMode() ? Qt::black : Qt::white; - light.setAlphaF(0.375f); - p->setPen(light); - p->drawText(cr.adjusted(0, 1, 0, 1), alignment, tb->text); - p->setPen(pen); - if (down && tbstyle == Qt::ToolButtonTextOnly) { -// pal = QApplication::palette("QMenu"); - pal.setCurrentColorGroup(tb->palette.currentColorGroup()); - role = QPalette::HighlightedText; - } - } - proxy()->drawItemText(p, cr, alignment, pal, - tb->state & State_Enabled, tb->text, role); - } - } else { - QCommonStyle::drawControl(ce, &myTb, p); - } - } else -#endif // QT_NO_ACCESSIBILITY - { - QCommonStyle::drawControl(ce, &myTb, p); - } - } - break; - case CE_ToolBoxTabShape: - QCommonStyle::drawControl(ce, opt, p); - break; - case CE_PushButtonBevel: - if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { - if (!(btn->state & (State_Raised | State_Sunken | State_On))) - break; - - if (btn->features & QStyleOptionButton::CommandLinkButton) { - QCommonStyle::drawControl(ce, opt, p); - break; - } - - const bool hasFocus = btn->state & State_HasFocus; - const bool isActive = btn->state & State_Active; - - // a focused auto-default button within an active window - // takes precedence over a normal default button - if ((btn->features & QStyleOptionButton::AutoDefaultButton) - && isActive && hasFocus) - d->autoDefaultButton = btn->styleObject; - else if (d->autoDefaultButton == btn->styleObject) - d->autoDefaultButton = nullptr; - - const bool isEnabled = btn->state & State_Enabled; - const bool isPressed = btn->state & State_Sunken; - const bool isHighlighted = isActive && - ((btn->state & State_On) - || (btn->features & QStyleOptionButton::DefaultButton) - || (btn->features & QStyleOptionButton::AutoDefaultButton - && d->autoDefaultButton == btn->styleObject)); - const bool hasMenu = btn->features & QStyleOptionButton::HasMenu; - const auto ct = cocoaControlType(btn); - const auto cs = d->effectiveAquaSizeConstrain(btn); - const auto cw = QMacStylePrivate::CocoaControl(ct, cs); - auto *pb = static_cast(d->cocoaControl(cw)); - // Ensure same size and location as we used to have with HITheme. - // This is more convoluted than we initialy thought. See for example - // differences between plain and menu button frames. - const QRectF frameRect = cw.adjustedControlFrame(btn->rect); - pb.frame = frameRect.toCGRect(); - - pb.enabled = isEnabled; - [pb highlight:isPressed]; - pb.state = isHighlighted && !isPressed ? NSOnState : NSOffState; - d->drawNSViewInRect(pb, frameRect, p, ^(CGContextRef, const CGRect &r) { - QMacAutoReleasePool pool; - [pb.cell drawBezelWithFrame:r inView:pb.superview]; - }); - [pb highlight:NO]; - - if (hasMenu && cw.type == QMacStylePrivate::Button_SquareButton) { - // Using -[NSPopuButtonCell drawWithFrame:inView:] above won't do - // it right because we don't set the text in the native button. - const int mbi = proxy()->pixelMetric(QStyle::PM_MenuButtonIndicator, btn); - const auto ir = frameRect.toRect(); - int arrowYOffset = 0; - const auto ar = visualRect(btn->direction, ir, QRect(ir.right() - mbi - 6, ir.height() / 2 - arrowYOffset, mbi, mbi)); - - QStyleOption arrowOpt = *opt; - arrowOpt.rect = ar; - proxy()->drawPrimitive(PE_IndicatorArrowDown, &arrowOpt, p); - } - } - break; - case CE_PushButtonLabel: - if (const QStyleOptionButton *b = qstyleoption_cast(opt)) { - QStyleOptionButton btn(*b); - // We really don't want the label to be drawn the same as on - // windows style if it has an icon and text, then it should be more like a - // tab. So, cheat a little here. However, if it *is* only an icon - // the windows style works great, so just use that implementation. - const bool isEnabled = btn.state & State_Enabled; - const bool hasMenu = btn.features & QStyleOptionButton::HasMenu; - const bool hasIcon = !btn.icon.isNull(); - const bool hasText = !btn.text.isEmpty(); - const bool isActive = btn.state & State_Active; - const bool isPressed = btn.state & State_Sunken; - - const auto ct = cocoaControlType(&btn); - - if (!hasMenu && ct != QMacStylePrivate::Button_SquareButton) { - if (isPressed - || (isActive && isEnabled - && ((btn.state & State_On) - || ((btn.features & QStyleOptionButton::DefaultButton) && !d->autoDefaultButton) - || d->autoDefaultButton == btn.styleObject))) - btn.palette.setColor(QPalette::ButtonText, Qt::white); - } - - if ((!hasIcon && !hasMenu) || (hasIcon && !hasText)) { - QCommonStyle::drawControl(ce, &btn, p); - } else { - QRect freeContentRect = btn.rect; - QRect textRect = itemTextRect( - btn.fontMetrics, freeContentRect, Qt::AlignCenter, isEnabled, btn.text); - if (hasMenu) { - textRect.moveTo(11, textRect.top()); - } - // Draw the icon: - if (hasIcon) { - int contentW = textRect.width(); - if (hasMenu) - contentW += proxy()->pixelMetric(PM_MenuButtonIndicator) + 4; - QIcon::Mode mode = isEnabled ? QIcon::Normal : QIcon::Disabled; - if (mode == QIcon::Normal && btn.state & State_HasFocus) - mode = QIcon::Active; - // Decide if the icon is should be on or off: - QIcon::State state = QIcon::Off; - if (btn.state & State_On) - state = QIcon::On; - QPixmap pixmap = btn.icon.pixmap(opt->window, btn.iconSize, mode, state); - int pixmapWidth = pixmap.width() / pixmap.devicePixelRatio(); - int pixmapHeight = pixmap.height() / pixmap.devicePixelRatio(); - contentW += pixmapWidth + QMacStylePrivate::PushButtonContentPadding; - int iconLeftOffset = freeContentRect.x() + (freeContentRect.width() - contentW) / 2; - int iconTopOffset = freeContentRect.y() + (freeContentRect.height() - pixmapHeight) / 2; - QRect iconDestRect(iconLeftOffset, iconTopOffset, pixmapWidth, pixmapHeight); - QRect visualIconDestRect = visualRect(btn.direction, freeContentRect, iconDestRect); - proxy()->drawItemPixmap(p, visualIconDestRect, Qt::AlignLeft | Qt::AlignVCenter, pixmap); - int newOffset = iconDestRect.x() + iconDestRect.width() - + QMacStylePrivate::PushButtonContentPadding - textRect.x(); - textRect.adjust(newOffset, 0, newOffset, 0); - } - // Draw the text: - if (hasText) { - textRect = visualRect(btn.direction, freeContentRect, textRect); - proxy()->drawItemText(p, textRect, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic, btn.palette, - isEnabled, btn.text, QPalette::ButtonText); - } - } - } - break; - case CE_ComboBoxLabel: - if (const auto *cb = qstyleoption_cast(opt)) { - auto comboCopy = *cb; - comboCopy.direction = Qt::LeftToRight; - // The rectangle will be adjusted to SC_ComboBoxEditField with comboboxEditBounds() - QCommonStyle::drawControl(CE_ComboBoxLabel, &comboCopy, p); - } - break; - case CE_TabBarTabShape: - if (const auto *tabOpt = qstyleoption_cast(opt)) { - if (tabOpt->documentMode) { - p->save(); - bool isUnified = false; -// if (w) { -// QRect tabRect = tabOpt->rect; -// QPoint windowTabStart = w->mapTo(w->window(), tabRect.topLeft()); -// isUnified = isInMacUnifiedToolbarArea(w->window()->windowHandle(), windowTabStart.y()); -// } - - const int tabOverlap = proxy()->pixelMetric(PM_TabBarTabOverlap, opt); - drawTabShape(p, tabOpt, isUnified, tabOverlap); - - p->restore(); - return; - } - - const bool isActive = tabOpt->state & State_Active; - const bool isEnabled = tabOpt->state & State_Enabled; - const bool isPressed = tabOpt->state & State_Sunken; - const bool isSelected = tabOpt->state & State_Selected; - const auto tabDirection = QMacStylePrivate::tabDirection(tabOpt->shape); - const bool verticalTabs = tabDirection == QMacStylePrivate::East - || tabDirection == QMacStylePrivate::West; - - QStyleOptionTab::TabPosition tp = tabOpt->position; - QStyleOptionTab::SelectedPosition sp = tabOpt->selectedPosition; - if (tabOpt->direction == Qt::RightToLeft && !verticalTabs) { - if (tp == QStyleOptionTab::Beginning) - tp = QStyleOptionTab::End; - else if (tp == QStyleOptionTab::End) - tp = QStyleOptionTab::Beginning; - - if (sp == QStyleOptionTab::NextIsSelected) - sp = QStyleOptionTab::PreviousIsSelected; - else if (sp == QStyleOptionTab::PreviousIsSelected) - sp = QStyleOptionTab::NextIsSelected; - } - - // Alas, NSSegmentedControl and NSSegmentedCell are letting us down. - // We're not able to draw it at will, either calling -[drawSegment: - // inFrame:withView:], -[drawRect:] or anything in between. Besides, - // there's no public API do draw the pressed state, AFAICS. We'll use - // a push NSButton instead and clip the CGContext. - // NOTE/TODO: this is not true. On 10.13 NSSegmentedControl works with - // some (black?) magic/magic dances, on 10.14 it simply works (was - // it fixed in AppKit?). But, indeed, we cannot make a tab 'pressed' - // with NSSegmentedControl (only selected), so we stay with buttons - // (mixing buttons and NSSegmentedControl for such a simple thing - // is too much work). - - const auto cs = d->effectiveAquaSizeConstrain(opt); - // Extra hacks to get the proper pressed appreance when not selected or selected and inactive - const bool needsInactiveHack = (!isActive && isSelected); - const auto ct = !needsInactiveHack && (isSelected || tp == QStyleOptionTab::OnlyOneTab) ? - QMacStylePrivate::Button_PushButton : - QMacStylePrivate::Button_PopupButton; - const bool isPopupButton = ct == QMacStylePrivate::Button_PopupButton; - const auto cw = QMacStylePrivate::CocoaControl(ct, cs); - auto *pb = static_cast(d->cocoaControl(cw)); - - auto vOffset = isPopupButton ? 1 : 2; - if (tabDirection == QMacStylePrivate::East) - vOffset -= 1; - const auto outerAdjust = isPopupButton ? 1 : 4; - const auto innerAdjust = isPopupButton ? 20 : 10; - QRectF frameRect = tabOpt->rect; - if (verticalTabs) - frameRect = QRectF(frameRect.y(), frameRect.x(), frameRect.height(), frameRect.width()); - // Adjust before clipping - frameRect = frameRect.translated(0, vOffset); - switch (tp) { - case QStyleOptionTab::Beginning: - // Pressed state hack: tweak adjustments in preparation for flip below - if (!isSelected && tabDirection == QMacStylePrivate::West) - frameRect = frameRect.adjusted(-innerAdjust, 0, outerAdjust, 0); - else - frameRect = frameRect.adjusted(-outerAdjust, 0, innerAdjust, 0); - break; - case QStyleOptionTab::Middle: - frameRect = frameRect.adjusted(-innerAdjust, 0, innerAdjust, 0); - break; - case QStyleOptionTab::End: - // Pressed state hack: tweak adjustments in preparation for flip below - if (isSelected || tabDirection == QMacStylePrivate::West) - frameRect = frameRect.adjusted(-innerAdjust, 0, outerAdjust, 0); - else - frameRect = frameRect.adjusted(-outerAdjust, 0, innerAdjust, 0); - break; - case QStyleOptionTab::OnlyOneTab: - frameRect = frameRect.adjusted(-outerAdjust, 0, outerAdjust, 0); - break; - } - pb.frame = frameRect.toCGRect(); - - pb.enabled = isEnabled; - [pb highlight:isPressed]; - // Set off state when inactive. See needsInactiveHack for when it's selected - pb.state = (isActive && isSelected && !isPressed) ? NSOnState : NSOffState; - - const auto drawBezelBlock = ^(CGContextRef ctx, const CGRect &r) { - QMacAutoReleasePool pool; - CGContextClipToRect(ctx, opt->rect.toCGRect()); - if (!isSelected || needsInactiveHack) { - // Final stage of the pressed state hack: flip NSPopupButton rendering - if (!verticalTabs && tp == QStyleOptionTab::End) { - CGContextTranslateCTM(ctx, opt->rect.right(), 0); - CGContextScaleCTM(ctx, -1, 1); - CGContextTranslateCTM(ctx, -frameRect.left(), 0); - } else if (tabDirection == QMacStylePrivate::West && tp == QStyleOptionTab::Beginning) { - CGContextTranslateCTM(ctx, 0, opt->rect.top()); - CGContextScaleCTM(ctx, 1, -1); - CGContextTranslateCTM(ctx, 0, -frameRect.right()); - } else if (tabDirection == QMacStylePrivate::East && tp == QStyleOptionTab::End) { - CGContextTranslateCTM(ctx, 0, opt->rect.bottom()); - CGContextScaleCTM(ctx, 1, -1); - CGContextTranslateCTM(ctx, 0, -frameRect.left()); - } - } - - // Rotate and translate CTM when vertical - // On macOS: positive angle is CW, negative is CCW - if (tabDirection == QMacStylePrivate::West) { - CGContextTranslateCTM(ctx, 0, frameRect.right()); - CGContextRotateCTM(ctx, -M_PI_2); - CGContextTranslateCTM(ctx, -frameRect.left(), 0); - } else if (tabDirection == QMacStylePrivate::East) { - CGContextTranslateCTM(ctx, opt->rect.right(), 0); - CGContextRotateCTM(ctx, M_PI_2); - } - - // Now, if it's a trick with a popup button, it has an arrow - // which makes no sense on tabs. - NSPopUpArrowPosition oldPosition = NSPopUpArrowAtCenter; - NSPopUpButtonCell *pbCell = nil; - if (isPopupButton) { - pbCell = static_cast(pb.cell); - oldPosition = pbCell.arrowPosition; - pbCell.arrowPosition = NSPopUpNoArrow; - } - - [pb.cell drawBezelWithFrame:r inView:pb.superview]; - - if (pbCell) // Restore, we may reuse it for a ComboBox. - pbCell.arrowPosition = oldPosition; - }; - - if (needsInactiveHack) { - // First, render tab as non-selected tab on a pixamp - const qreal pixelRatio = p->device()->devicePixelRatioF(); - QImage tabPixmap(opt->rect.size() * pixelRatio, QImage::Format_ARGB32_Premultiplied); - tabPixmap.setDevicePixelRatio(pixelRatio); - tabPixmap.fill(Qt::transparent); - QPainter tabPainter(&tabPixmap); - d->drawNSViewInRect(pb, frameRect, &tabPainter, ^(CGContextRef ctx, const CGRect &r) { - QMacAutoReleasePool pool; - CGContextTranslateCTM(ctx, -opt->rect.left(), -opt->rect.top()); - drawBezelBlock(ctx, r); - }); - tabPainter.end(); - - // Then, darken it with the proper shade of gray - const qreal inactiveGray = 0.898; // As measured - const int inactiveGray8 = qRound(inactiveGray * 255.0); - const QRgb inactiveGrayRGB = qRgb(inactiveGray8, inactiveGray8, inactiveGray8); - for (int l = 0; l < tabPixmap.height(); ++l) { - auto *line = reinterpret_cast(tabPixmap.scanLine(l)); - for (int i = 0; i < tabPixmap.width(); ++i) { - if (qAlpha(line[i]) == 255) { - line[i] = inactiveGrayRGB; - } else if (qAlpha(line[i]) > 128) { - const int g = qRound(inactiveGray * qRed(line[i])); - line[i] = qRgba(g, g, g, qAlpha(line[i])); - } - } - } - - // Finally, draw the tab pixmap on the current painter - p->drawImage(opt->rect, tabPixmap); - } else { - d->drawNSViewInRect(pb, frameRect, p, drawBezelBlock); - } - - if (!isSelected && sp != QStyleOptionTab::NextIsSelected - && tp != QStyleOptionTab::End - && tp != QStyleOptionTab::OnlyOneTab) { - static const QPen separatorPen(Qt::black, 1.0); - p->save(); - p->setOpacity(isEnabled ? 0.105 : 0.06); // As measured - p->setPen(separatorPen); - if (tabDirection == QMacStylePrivate::West) { - p->drawLine(QLineF(opt->rect.left() + 1.5, opt->rect.bottom(), - opt->rect.right() - 0.5, opt->rect.bottom())); - } else if (tabDirection == QMacStylePrivate::East) { - p->drawLine(QLineF(opt->rect.left(), opt->rect.bottom(), - opt->rect.right() - 0.5, opt->rect.bottom())); - } else { - p->drawLine(QLineF(opt->rect.right(), opt->rect.top() + 1.0, - opt->rect.right(), opt->rect.bottom() - 0.5)); - } - p->restore(); - } - - // TODO Needs size adjustment to fit the focus ring - if (tabOpt->state & State_HasFocus) { - QMacStylePrivate::CocoaControlType focusRingType; - switch (tp) { - case QStyleOptionTab::Beginning: - focusRingType = verticalTabs ? QMacStylePrivate::SegmentedControl_Last - : QMacStylePrivate::SegmentedControl_First; - break; - case QStyleOptionTab::Middle: - focusRingType = QMacStylePrivate::SegmentedControl_Middle; - break; - case QStyleOptionTab::End: - focusRingType = verticalTabs ? QMacStylePrivate::SegmentedControl_First - : QMacStylePrivate::SegmentedControl_Last; - break; - case QStyleOptionTab::OnlyOneTab: - focusRingType = QMacStylePrivate::SegmentedControl_Single; - break; - } - } - } - break; - case CE_TabBarTabLabel: - if (const auto *tab = qstyleoption_cast(opt)) { - QStyleOptionTab myTab = *tab; - const auto tabDirection = QMacStylePrivate::tabDirection(tab->shape); - const bool verticalTabs = tabDirection == QMacStylePrivate::East - || tabDirection == QMacStylePrivate::West; - - // Check to see if we use have the same as the system font - // (QComboMenuItem is internal and should never be seen by the - // outside world, unless they read the source, in which case, it's - // their own fault). -// const bool nonDefaultFont = p->font() != qt_app_fonts_hash()->value("QComboMenuItem"); - const bool nonDefaultFont = false; - -// if (!myTab.documentMode && (myTab.state & State_Selected) && (myTab.state & State_Active)) -// if (const auto *tabBar = qobject_cast(w)) -// if (!tabBar->tabTextColor(tabBar->currentIndex()).isValid()) -// myTab.palette.setColor(QPalette::WindowText, Qt::white); - - if (myTab.documentMode && isDarkMode()) { - bool active = (myTab.state & State_Selected) && (myTab.state & State_Active); - myTab.palette.setColor(QPalette::WindowText, active ? Qt::white : Qt::gray); - } - - int heightOffset = 0; - if (verticalTabs) { - heightOffset = -1; - } else if (nonDefaultFont) { - if (p->fontMetrics().height() == myTab.rect.height()) - heightOffset = 2; - } - myTab.rect.setHeight(myTab.rect.height() + heightOffset); - - QCommonStyle::drawControl(ce, &myTab, p); - } - break; - case CE_DockWidgetTitle: - if (const auto *dwOpt = qstyleoption_cast(opt)) { - const bool isVertical = dwOpt->verticalTitleBar; - const auto effectiveRect = isVertical ? opt->rect.transposed() : opt->rect; - p->save(); - if (isVertical) { - p->translate(effectiveRect.left(), effectiveRect.top() + effectiveRect.width()); - p->rotate(-90); - p->translate(-effectiveRect.left(), -effectiveRect.top()); - } - - // fill title bar background - QLinearGradient linearGrad; - linearGrad.setStart(QPointF(0, 0)); - linearGrad.setFinalStop(QPointF(0, 2 * effectiveRect.height())); - linearGrad.setColorAt(0, opt->palette.button().color()); - linearGrad.setColorAt(1, opt->palette.dark().color()); - p->fillRect(effectiveRect, linearGrad); - - // draw horizontal line at bottom - p->setPen(opt->palette.dark().color()); - p->drawLine(effectiveRect.bottomLeft(), effectiveRect.bottomRight()); - - if (!dwOpt->title.isEmpty()) { - auto titleRect = proxy()->subElementRect(SE_DockWidgetTitleBarText, opt); - if (isVertical) - titleRect = QRect(effectiveRect.left() + opt->rect.bottom() - titleRect.bottom(), - effectiveRect.top() + titleRect.left() - opt->rect.left(), - titleRect.height(), - titleRect.width()); - - const auto text = p->fontMetrics().elidedText(dwOpt->title, Qt::ElideRight, titleRect.width()); - proxy()->drawItemText(p, titleRect, Qt::AlignCenter, dwOpt->palette, - dwOpt->state & State_Enabled, text, QPalette::WindowText); - } - p->restore(); - } - break; - case CE_FocusFrame: { -// const auto *ff = qobject_cast(w); -// const auto *ffw = ff ? ff->widget() : nullptr; -// const auto ct = [=] { -// if (ffw) { -// if (ffw->inherits("QCheckBox")) -// return QMacStylePrivate::Button_CheckBox; -// if (ffw->inherits("QRadioButton")) -// return QMacStylePrivate::Button_RadioButton; -// if (ffw->inherits("QLineEdit") || ffw->inherits("QTextEdit")) -// return QMacStylePrivate::TextField; -// } -// -// return QMacStylePrivate::Box; // Not really, just make it the default -// } (); -// const auto cs = ffw ? (ffw->testAttribute(Qt::WA_MacMiniSize) ? QStyleHelper::SizeMini : -// ffw->testAttribute(Qt::WA_MacSmallSize) ? QStyleHelper::SizeSmall : -// QStyleHelper::SizeLarge) : -// QStyleHelper::SizeLarge; -// const int hMargin = proxy()->pixelMetric(QStyle::PM_FocusFrameHMargin, opt); -// const int vMargin = proxy()->pixelMetric(QStyle::PM_FocusFrameVMargin, opt); -// d->drawFocusRing(p, opt->rect, hMargin, vMargin, QMacStylePrivate::CocoaControl(ct, cs)); - break; } - case CE_MenuEmptyArea: - // Skip: PE_PanelMenu fills in everything - break; - case CE_MenuItem: - case CE_MenuHMargin: - case CE_MenuVMargin: - case CE_MenuTearoff: - case CE_MenuScroller: - if (const QStyleOptionMenuItem *mi = qstyleoption_cast(opt)) { - const bool active = mi->state & State_Selected; - if (active) - p->fillRect(mi->rect, mi->palette.highlight()); - - const QStyleHelper::WidgetSizePolicy widgetSize = d->aquaSizeConstrain(opt); - - if (ce == CE_MenuTearoff) { - p->setPen(QPen(mi->palette.dark().color(), 1, Qt::DashLine)); - p->drawLine(mi->rect.x() + 2, mi->rect.y() + mi->rect.height() / 2 - 1, - mi->rect.x() + mi->rect.width() - 4, - mi->rect.y() + mi->rect.height() / 2 - 1); - p->setPen(QPen(mi->palette.light().color(), 1, Qt::DashLine)); - p->drawLine(mi->rect.x() + 2, mi->rect.y() + mi->rect.height() / 2, - mi->rect.x() + mi->rect.width() - 4, - mi->rect.y() + mi->rect.height() / 2); - } else if (ce == CE_MenuScroller) { - const QSize scrollerSize = QSize(10, 8); - const int scrollerVOffset = 5; - const int left = mi->rect.x() + (mi->rect.width() - scrollerSize.width()) / 2; - const int right = left + scrollerSize.width(); - int top; - int bottom; - if (opt->state & State_DownArrow) { - bottom = mi->rect.y() + scrollerVOffset; - top = bottom + scrollerSize.height(); - } else { - bottom = mi->rect.bottom() - scrollerVOffset; - top = bottom - scrollerSize.height(); - } - p->save(); - p->setRenderHint(QPainter::Antialiasing); - QPainterPath path; - path.moveTo(left, bottom); - path.lineTo(right, bottom); - path.lineTo((left + right) / 2, top); - p->fillPath(path, opt->palette.buttonText()); - p->restore(); - } else if (ce != CE_MenuItem) { - break; - } - - if (mi->menuItemType == QStyleOptionMenuItem::Separator) { - CGColorRef separatorColor = [NSColor quaternaryLabelColor].CGColor; - const QRect separatorRect = QRect(mi->rect.left(), mi->rect.center().y(), mi->rect.width(), 2); - p->fillRect(separatorRect, qt_mac_toQColor(separatorColor)); - break; - } - - const int maxpmw = mi->maxIconWidth; - const bool enabled = mi->state & State_Enabled; - - int xpos = mi->rect.x() + 18; - int checkcol = maxpmw; - if (!enabled) - p->setPen(mi->palette.text().color()); - else if (active) - p->setPen(mi->palette.highlightedText().color()); - else - p->setPen(mi->palette.buttonText().color()); - - if (mi->checked) { - QStyleOption checkmarkOpt; -// checkmarkOpt.initFrom(w); - - const int mw = checkcol + macItemFrame; - const int mh = mi->rect.height() + macItemFrame; - const int xp = mi->rect.x() + macItemFrame; - checkmarkOpt.rect = QRect(xp, mi->rect.y() - checkmarkOpt.fontMetrics.descent(), mw, mh); - - checkmarkOpt.state.setFlag(State_On, active); - checkmarkOpt.state.setFlag(State_Enabled, enabled); - if (widgetSize == QStyleHelper::SizeMini) - checkmarkOpt.state |= State_Mini; - else if (widgetSize == QStyleHelper::SizeSmall) - checkmarkOpt.state |= State_Small; - - // We let drawPrimitive(PE_IndicatorMenuCheckMark) pick the right color - checkmarkOpt.palette.setColor(QPalette::HighlightedText, p->pen().color()); - checkmarkOpt.palette.setColor(QPalette::Text, p->pen().color()); - - proxy()->drawPrimitive(PE_IndicatorMenuCheckMark, &checkmarkOpt, p); - } - if (!mi->icon.isNull()) { - QIcon::Mode mode = (mi->state & State_Enabled) ? QIcon::Normal - : QIcon::Disabled; - // Always be normal or disabled to follow the Mac style. - int smallIconSize = proxy()->pixelMetric(PM_SmallIconSize); - QSize iconSize(smallIconSize, smallIconSize); -//#if QT_CONFIG(combobox) -// if (const QComboBox *comboBox = qobject_cast(w)) { -// iconSize = comboBox->iconSize(); -// } -//#endif - QPixmap pixmap = mi->icon.pixmap(opt->window, iconSize, mode); - int pixw = pixmap.width() / pixmap.devicePixelRatio(); - int pixh = pixmap.height() / pixmap.devicePixelRatio(); - QRect cr(xpos, mi->rect.y(), checkcol, mi->rect.height()); - QRect pmr(0, 0, pixw, pixh); - pmr.moveCenter(cr.center()); - p->drawPixmap(pmr.topLeft(), pixmap); - xpos += pixw + 6; - } - - QString s = mi->text; - const auto text_flags = Qt::AlignVCenter | Qt::TextHideMnemonic - | Qt::TextSingleLine | Qt::AlignAbsolute; - int yPos = mi->rect.y(); - if (widgetSize == QStyleHelper::SizeMini) - yPos += 1; - - const bool isSubMenu = mi->menuItemType == QStyleOptionMenuItem::SubMenu; - const int tabwidth = isSubMenu ? 9 : mi->tabWidth; - - QString rightMarginText; - if (isSubMenu) - rightMarginText = QStringLiteral("\u25b6\ufe0e"); // U+25B6 U+FE0E: BLACK RIGHT-POINTING TRIANGLE - - // If present, save and remove embedded shorcut from text - const int tabIndex = s.indexOf(QLatin1Char('\t')); - if (tabIndex >= 0) { - if (!isSubMenu) // ... but ignore it if it's a submenu. - rightMarginText = s.mid(tabIndex + 1); - s = s.left(tabIndex); - } - - p->save(); - if (!rightMarginText.isEmpty()) { -// p->setFont(qt_app_fonts_hash()->value("QMenuItem", p->font())); - int xp = mi->rect.right() - tabwidth - macRightBorder + 2; - if (!isSubMenu) - xp -= macItemHMargin + macItemFrame + 3; // Adjust for shortcut - p->drawText(xp, yPos, tabwidth, mi->rect.height(), text_flags | Qt::AlignRight, rightMarginText); - } - - if (!s.isEmpty()) { - const int xm = macItemFrame + maxpmw + macItemHMargin; - QFont myFont = mi->font; - // myFont may not have any "hard" flags set. We override - // the point size so that when it is resolved against the device, this font will win. - // This is mainly to handle cases where someone sets the font on the window - // and then the combo inherits it and passes it onward. At that point the resolve mask - // is very, very weak. This makes it stonger. - myFont.setPointSizeF(QFontInfo(mi->font).pointSizeF()); - - // QTBUG-65653: Our own text rendering doesn't look good enough, especially on non-retina - // displays. Worked around here while waiting for a proper fix in QCoreTextFontEngine. - // Only if we're not using QCoreTextFontEngine we do fallback to our own text rendering. - const auto *fontEngine = QFontPrivate::get(myFont)->engineForScript(QChar::Script_Common); - Q_ASSERT(fontEngine); - if (fontEngine->type() == QFontEngine::Multi) { - fontEngine = static_cast(fontEngine)->engine(0); - Q_ASSERT(fontEngine); - } - if (fontEngine->type() == QFontEngine::Mac) { - NSFont *f = (NSFont *)(CTFontRef)fontEngine->handle(); - - // Respect the menu item palette as set in the style option. - const auto pc = p->pen().color(); - NSColor *c = [NSColor colorWithSRGBRed:pc.redF() - green:pc.greenF() - blue:pc.blueF() - alpha:pc.alphaF()]; - - s = qt_mac_removeMnemonics(s); - - QMacCGContext cgCtx(p); - d->setupNSGraphicsContext(cgCtx, YES); - - // Draw at point instead of in rect, as the rect we've computed for the menu item - // is based on the font metrics we got from HarfBuzz, so we may risk having CoreText - // line-break the string if it doesn't fit the given rect. It's better to draw outside - // the rect and possibly overlap something than to have part of the text disappear. - [s.toNSString() drawAtPoint:CGPointMake(xpos, yPos) - withAttributes:@{ NSFontAttributeName:f, NSForegroundColorAttributeName:c, - NSObliquenessAttributeName: [NSNumber numberWithDouble: myFont.italic() ? 0.3 : 0.0]}]; - - d->restoreNSGraphicsContext(cgCtx); - } else { - p->setFont(myFont); - p->drawText(xpos, yPos, mi->rect.width() - xm - tabwidth + 1, - mi->rect.height(), text_flags, s); - } - } - p->restore(); - } - break; - case CE_MenuBarItem: - case CE_MenuBarEmptyArea: - if (const QStyleOptionMenuItem *mi = qstyleoption_cast(opt)) { - const bool selected = (opt->state & State_Selected) && (opt->state & State_Enabled) && (opt->state & State_Sunken); - const QBrush bg = selected ? mi->palette.highlight() : mi->palette.window(); - p->fillRect(mi->rect, bg); - - if (ce != CE_MenuBarItem) - break; - - if (!mi->icon.isNull()) { - int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); - drawItemPixmap(p, mi->rect, - Qt::AlignCenter | Qt::TextHideMnemonic | Qt::TextDontClip - | Qt::TextSingleLine, - mi->icon.pixmap(opt->window, QSize(iconExtent, iconExtent), - (mi->state & State_Enabled) ? QIcon::Normal : QIcon::Disabled)); - } else { - drawItemText(p, mi->rect, - Qt::AlignCenter | Qt::TextHideMnemonic | Qt::TextDontClip - | Qt::TextSingleLine, - mi->palette, mi->state & State_Enabled, - mi->text, selected ? QPalette::HighlightedText : QPalette::ButtonText); - } - } - break; - case CE_ProgressBarLabel: - case CE_ProgressBarContents: - break; - case CE_ProgressBarGroove: - if (const QStyleOptionProgressBar *pb = qstyleoption_cast(opt)) { - const bool isIndeterminate = (pb->minimum == 0 && pb->maximum == 0); - const bool inverted = pb->invertedAppearance; - bool reverse = pb->direction == Qt::RightToLeft; - if (inverted) - reverse = !reverse; - - QRect rect = pb->rect; - const CGRect cgRect = rect.toCGRect(); - - const auto aquaSize = d->aquaSizeConstrain(opt); - -// const QProgressStyleAnimation *animation = qobject_cast(d->animation(opt->styleObject)); - QIndeterminateProgressIndicator *ipi = nil; -// if (isIndeterminate || animation) - ipi = static_cast(d->cocoaControl({ QMacStylePrivate::ProgressIndicator_Indeterminate, aquaSize })); - if (isIndeterminate) { - // QIndeterminateProgressIndicator derives from NSProgressIndicator. We use a single - // instance that we start animating as soon as one of the progress bars is indeterminate. - // Since they will be in sync (as it's the case in Cocoa), we just need to draw it with - // the right geometry when the animation triggers an update. However, we can't hide it - // entirely between frames since that would stop the animation, so we just set its alpha - // value to 0. Same if we remove it from its superview. See QIndeterminateProgressIndicator - // implementation for details. - // - // Quick: consider implementing this animation by using Quick/QML instead. - // -// if (!animation && opt->styleObject) { -// auto *animation = new QProgressStyleAnimation(d->animateSpeed(QMacStylePrivate::AquaProgressBar), opt->styleObject); -// // NSProgressIndicator is heavier to draw than the HITheme API, so we reduce the frame rate a couple notches. -// animation->setFrameRate(QStyleAnimation::FifteenFps); -// d->startAnimation(animation); -// [ipi startAnimation]; -// } - - d->setupNSGraphicsContext(cg, NO); - d->setupVerticalInvertedXform(cg, reverse, false, cgRect); - [ipi drawWithFrame:cgRect inView:d->backingStoreNSView]; - d->restoreNSGraphicsContext(cg); - } else { -// if (animation) { -// d->stopAnimation(opt->styleObject); -// [ipi stopAnimation]; -// } - - const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::ProgressIndicator_Determinate, aquaSize); - auto *pi = static_cast(d->cocoaControl(cw)); - d->drawNSViewInRect(pi, rect, p, ^(CGContextRef ctx, const CGRect &rect) { - QMacAutoReleasePool pool; - d->setupVerticalInvertedXform(ctx, reverse, false, rect); - pi.minValue = pb->minimum; - pi.maxValue = pb->maximum; - pi.doubleValue = pb->progress; - [pi drawRect:rect]; - }); - } - } - break; - case CE_SizeGrip: { - // This is not HIG kosher: Fall back to the old stuff until we decide what to do. -//#ifndef QT_NO_MDIAREA -// if (!w || !qobject_cast(w->parentWidget())) -//#endif -// break; - -// if (w->testAttribute(Qt::WA_MacOpaqueSizeGrip)) -// p->fillRect(opt->rect, opt->palette.window()); - -// QPen lineColor = QColor(82, 82, 82, 192); -// lineColor.setWidth(1); -// p->save(); -// p->setRenderHint(QPainter::Antialiasing); -// p->setPen(lineColor); -// const Qt::LayoutDirection layoutDirection = w ? w->layoutDirection() : qApp->layoutDirection(); -// const int NumLines = 3; -// for (int l = 0; l < NumLines; ++l) { -// const int offset = (l * 4 + 3); -// QPoint start, end; -// if (layoutDirection == Qt::LeftToRight) { -// start = QPoint(opt->rect.width() - offset, opt->rect.height() - 1); -// end = QPoint(opt->rect.width() - 1, opt->rect.height() - offset); -// } else { -// start = QPoint(offset, opt->rect.height() - 1); -// end = QPoint(1, opt->rect.height() - offset); -// } -// p->drawLine(start, end); -// } -// p->restore(); - break; - } - case CE_Splitter: - if (opt->rect.width() > 1 && opt->rect.height() > 1) { - const bool isVertical = !(opt->state & QStyle::State_Horizontal); - // Qt refers to the layout orientation, while Cocoa refers to the divider's. - const auto ct = isVertical ? QMacStylePrivate::SplitView_Horizontal : QMacStylePrivate::SplitView_Vertical; - const auto cw = QMacStylePrivate::CocoaControl(ct, QStyleHelper::SizeLarge); - auto *sv = static_cast(d->cocoaControl(cw)); - sv.frame = opt->rect.toCGRect(); - d->drawNSViewInRect(sv, opt->rect, p, ^(CGContextRef, const CGRect &rect) { - QMacAutoReleasePool pool; - [sv drawDividerInRect:rect]; - }); - } else { - QPen oldPen = p->pen(); - p->setPen(opt->palette.dark().color()); - if (opt->state & QStyle::State_Horizontal) - p->drawLine(opt->rect.topLeft(), opt->rect.bottomLeft()); - else - p->drawLine(opt->rect.topLeft(), opt->rect.topRight()); - p->setPen(oldPen); - } - break; - case CE_RubberBand: - if (const QStyleOptionRubberBand *rubber = qstyleoption_cast(opt)) { - QColor fillColor(opt->palette.color(QPalette::Disabled, QPalette::Highlight)); - if (!rubber->opaque) { - QColor strokeColor; - // I retrieved these colors from the Carbon-Dev mailing list - strokeColor.setHsvF(0, 0, 0.86, 1.0); - fillColor.setHsvF(0, 0, 0.53, 0.25); - if (opt->rect.width() * opt->rect.height() <= 3) { - p->fillRect(opt->rect, strokeColor); - } else { - QPen oldPen = p->pen(); - QBrush oldBrush = p->brush(); - QPen pen(strokeColor); - p->setPen(pen); - p->setBrush(fillColor); - QRect adjusted = opt->rect.adjusted(1, 1, -1, -1); - if (adjusted.isValid()) - p->drawRect(adjusted); - p->setPen(oldPen); - p->setBrush(oldBrush); - } - } else { - p->fillRect(opt->rect, fillColor); - } - } - break; - case CE_ToolBar: { - const QStyleOptionToolBar *toolBar = qstyleoption_cast(opt); - const bool isDarkMode = qt_mac_applicationIsInDarkMode(); - - // Unified title and toolbar drawing. In this mode the cocoa platform plugin will - // fill the top toolbar area part with a background gradient that "unifies" with - // the title bar. The following code fills the toolBar area with transparent pixels - // to make that gradient visible. -// if (w) { -//#if QT_CONFIG(mainwindow) -// if (QMainWindow * mainWindow = qobject_cast(w->window())) { -// if (toolBar && toolBar->toolBarArea == Qt::TopToolBarArea && mainWindow->unifiedTitleAndToolBarOnMac()) { -// // fill with transparent pixels. -// p->save(); -// p->setCompositionMode(QPainter::CompositionMode_Source); -// p->fillRect(opt->rect, Qt::transparent); -// p->restore(); - -// // Draw a horizontal separator line at the toolBar bottom if the "unified" area ends here. -// // There might be additional toolbars or other widgets such as tab bars in document -// // mode below. Determine this by making a unified toolbar area test for the row below -// // this toolbar. -// const QPoint windowToolbarEnd = w->mapTo(w->window(), opt->rect.bottomLeft()); -// const bool isEndOfUnifiedArea = !isInMacUnifiedToolbarArea(w->window()->windowHandle(), windowToolbarEnd.y() + 1); -// if (isEndOfUnifiedArea) { -// const int margin = qt_mac_aqua_get_metric(SeparatorSize); -// const auto separatorRect = QRect(opt->rect.left(), opt->rect.bottom(), opt->rect.width(), margin); -// p->fillRect(separatorRect, isDarkMode ? darkModeSeparatorLine : opt->palette.dark().color()); -// } -// break; -// } -// } -//#endif -// } - - // draw background gradient - QLinearGradient linearGrad; - if (opt->state & State_Horizontal) - linearGrad = QLinearGradient(0, opt->rect.top(), 0, opt->rect.bottom()); - else - linearGrad = QLinearGradient(opt->rect.left(), 0, opt->rect.right(), 0); - - QColor mainWindowGradientBegin = isDarkMode ? darkMainWindowGradientBegin : lightMainWindowGradientBegin; - QColor mainWindowGradientEnd = isDarkMode ? darkMainWindowGradientEnd : lightMainWindowGradientEnd; - - linearGrad.setColorAt(0, mainWindowGradientBegin); - linearGrad.setColorAt(1, mainWindowGradientEnd); - p->fillRect(opt->rect, linearGrad); - - p->save(); - QRect toolbarRect = isDarkMode ? opt->rect.adjusted(0, 0, 0, 1) : opt->rect; - if (opt->state & State_Horizontal) { - p->setPen(isDarkMode ? darkModeSeparatorLine : mainWindowGradientBegin.lighter(114)); - p->drawLine(toolbarRect.topLeft(), toolbarRect.topRight()); - p->setPen(isDarkMode ? darkModeSeparatorLine :mainWindowGradientEnd.darker(114)); - p->drawLine(toolbarRect.bottomLeft(), toolbarRect.bottomRight()); - } else { - p->setPen(isDarkMode ? darkModeSeparatorLine : mainWindowGradientBegin.lighter(114)); - p->drawLine(toolbarRect.topLeft(), toolbarRect.bottomLeft()); - p->setPen(isDarkMode ? darkModeSeparatorLine : mainWindowGradientEnd.darker(114)); - p->drawLine(toolbarRect.topRight(), toolbarRect.bottomRight()); - } - p->restore(); - - break; } - default: - QCommonStyle::drawControl(ce, opt, p); - break; - } -} - -static void setLayoutItemMargins(int left, int top, int right, int bottom, QRect *rect, Qt::LayoutDirection dir) -{ - if (dir == Qt::RightToLeft) { - rect->adjust(-right, top, -left, bottom); - } else { - rect->adjust(left, top, right, bottom); - } -} - -QRect QMacStyle::subElementRect(SubElement sr, const QStyleOption *opt) const -{ - Q_D(const QMacStyle); - QRect rect; - const int controlSize = getControlSize(opt); - - switch (sr) { - case SE_ItemViewItemText: - if (const QStyleOptionViewItem *vopt = qstyleoption_cast(opt)) { - int fw = proxy()->pixelMetric(PM_FocusFrameHMargin, opt); - // We add the focusframeargin between icon and text in commonstyle - rect = QCommonStyle::subElementRect(sr, opt); - if (vopt->features & QStyleOptionViewItem::HasDecoration) - rect.adjust(-fw, 0, 0, 0); - } - break; - case SE_ToolBoxTabContents: - rect = QCommonStyle::subElementRect(sr, opt); - break; - case SE_PushButtonContents: - if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { - // Comment from the old HITheme days: - // "Unlike Carbon, we want the button to always be drawn inside its bounds. - // Therefore, the button is a bit smaller, so that even if it got focus, - // the focus 'shadow' will be inside. Adjust the content rect likewise." - // In the future, we should consider using -[NSCell titleRectForBounds:]. - // Since it requires configuring the NSButton fully, i.e. frame, image, - // title and font, we keep things more manual until we are more familiar - // with side effects when changing NSButton state. - const auto ct = cocoaControlType(btn); - const auto cs = d->effectiveAquaSizeConstrain(btn); - const auto cw = QMacStylePrivate::CocoaControl(ct, cs); - auto frameRect = cw.adjustedControlFrame(btn->rect); - frameRect -= cw.titleMargins(); - rect = frameRect.toRect(); - } - break; - case SE_HeaderLabel: { - int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, opt); - rect.setRect(opt->rect.x() + margin, opt->rect.y(), - opt->rect.width() - margin * 2, opt->rect.height() - 2); - if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { - // Subtract width needed for arrow, if there is one - if (header->sortIndicator != QStyleOptionHeader::None) { - if (opt->state & State_Horizontal) - rect.setWidth(rect.width() - (headerSectionArrowHeight) - (margin * 2)); - else - rect.setHeight(rect.height() - (headerSectionArrowHeight) - (margin * 2)); - } - } - rect = visualRect(opt->direction, opt->rect, rect); - break; - } - case SE_HeaderArrow: { - int h = opt->rect.height(); - int w = opt->rect.width(); - int x = opt->rect.x(); - int y = opt->rect.y(); - int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, opt); - - if (opt->state & State_Horizontal) { - rect.setRect(x + w - margin * 2 - headerSectionArrowHeight, y + 5, - headerSectionArrowHeight, h - margin * 2 - 5); - } else { - rect.setRect(x + 5, y + h - margin * 2 - headerSectionArrowHeight, - w - margin * 2 - 5, headerSectionArrowHeight); - } - rect = visualRect(opt->direction, opt->rect, rect); - break; - } - case SE_ProgressBarGroove: - // Wrong in the secondary dimension, but accurate enough in the main dimension. - rect = opt->rect; - break; - case SE_ProgressBarLabel: - break; - case SE_ProgressBarContents: - rect = opt->rect; - break; - case SE_TreeViewDisclosureItem: { - rect = opt->rect; - // As previously returned by HIThemeGetButtonContentBounds - rect.setLeft(rect.left() + 2 + DisclosureOffset); - break; - } - case SE_TabWidgetLeftCorner: - if (const QStyleOptionTabWidgetFrame *twf - = qstyleoption_cast(opt)) { - switch (twf->shape) { - case QStyleOptionTab::RoundedNorth: - case QStyleOptionTab::TriangularNorth: - rect = QRect(QPoint(0, 0), twf->leftCornerWidgetSize); - break; - case QStyleOptionTab::RoundedSouth: - case QStyleOptionTab::TriangularSouth: - rect = QRect(QPoint(0, twf->rect.height() - twf->leftCornerWidgetSize.height()), - twf->leftCornerWidgetSize); - break; - default: - break; - } - rect = visualRect(twf->direction, twf->rect, rect); - } - break; - case SE_TabWidgetRightCorner: - if (const QStyleOptionTabWidgetFrame *twf - = qstyleoption_cast(opt)) { - switch (twf->shape) { - case QStyleOptionTab::RoundedNorth: - case QStyleOptionTab::TriangularNorth: - rect = QRect(QPoint(twf->rect.width() - twf->rightCornerWidgetSize.width(), 0), - twf->rightCornerWidgetSize); - break; - case QStyleOptionTab::RoundedSouth: - case QStyleOptionTab::TriangularSouth: - rect = QRect(QPoint(twf->rect.width() - twf->rightCornerWidgetSize.width(), - twf->rect.height() - twf->rightCornerWidgetSize.height()), - twf->rightCornerWidgetSize); - break; - default: - break; - } - rect = visualRect(twf->direction, twf->rect, rect); - } - break; - case SE_TabWidgetTabContents: - rect = QCommonStyle::subElementRect(sr, opt); - if (const auto *twf = qstyleoption_cast(opt)) { - if (twf->lineWidth != 0) { - switch (QMacStylePrivate::tabDirection(twf->shape)) { - case QMacStylePrivate::North: - rect.adjust(+1, +14, -1, -1); - break; - case QMacStylePrivate::South: - rect.adjust(+1, +1, -1, -14); - break; - case QMacStylePrivate::West: - rect.adjust(+14, +1, -1, -1); - break; - case QMacStylePrivate::East: - rect.adjust(+1, +1, -14, -1); - } - } - } - break; - case SE_TabBarTabText: - if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { - QRect dummyIconRect; - d->tabLayout(tab, &rect, &dummyIconRect); - } - break; - case SE_TabBarTabLeftButton: - case SE_TabBarTabRightButton: - if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { - bool selected = tab->state & State_Selected; - int verticalShift = proxy()->pixelMetric(QStyle::PM_TabBarTabShiftVertical, tab); - int horizontalShift = proxy()->pixelMetric(QStyle::PM_TabBarTabShiftHorizontal, tab); - int hpadding = 5; - - bool verticalTabs = tab->shape == QStyleOptionTab::RoundedEast - || tab->shape == QStyleOptionTab::RoundedWest - || tab->shape == QStyleOptionTab::TriangularEast - || tab->shape == QStyleOptionTab::TriangularWest; - - QRect tr = tab->rect; - if (tab->shape == QStyleOptionTab::RoundedSouth || tab->shape == QStyleOptionTab::TriangularSouth) - verticalShift = -verticalShift; - if (verticalTabs) { - qSwap(horizontalShift, verticalShift); - horizontalShift *= -1; - verticalShift *= -1; - } - if (tab->shape == QStyleOptionTab::RoundedWest || tab->shape == QStyleOptionTab::TriangularWest) - horizontalShift = -horizontalShift; - - tr.adjust(0, 0, horizontalShift, verticalShift); - if (selected) - { - tr.setBottom(tr.bottom() - verticalShift); - tr.setRight(tr.right() - horizontalShift); - } - - QSize size = (sr == SE_TabBarTabLeftButton) ? tab->leftButtonSize : tab->rightButtonSize; - int w = size.width(); - int h = size.height(); - int midHeight = static_cast(qCeil(float(tr.height() - h) / 2)); - int midWidth = ((tr.width() - w) / 2); - - bool atTheTop = true; - switch (tab->shape) { - case QStyleOptionTab::RoundedWest: - case QStyleOptionTab::TriangularWest: - atTheTop = (sr == SE_TabBarTabLeftButton); - break; - case QStyleOptionTab::RoundedEast: - case QStyleOptionTab::TriangularEast: - atTheTop = (sr == SE_TabBarTabRightButton); - break; - default: - if (sr == SE_TabBarTabLeftButton) - rect = QRect(tab->rect.x() + hpadding, midHeight, w, h); - else - rect = QRect(tab->rect.right() - w - hpadding, midHeight, w, h); - rect = visualRect(tab->direction, tab->rect, rect); - } - if (verticalTabs) { - if (atTheTop) - rect = QRect(midWidth, tr.y() + tab->rect.height() - hpadding - h, w, h); - else - rect = QRect(midWidth, tr.y() + hpadding, w, h); - } - } - break; - case SE_LineEditContents: { - // From using pixelTool with XCode/NSTextTextField - int leftPadding = 4; - int rightPadding = 4; - int topPadding = 4; - int bottomPadding = 0; - - if (opt->state & QStyle::State_Small) { - topPadding = 3; - } else if (opt->state & QStyle::State_Mini) { - topPadding = 2; - } - - rect = QRect(leftPadding, topPadding, opt->rect.width() - leftPadding - rightPadding, - opt->rect.height() - topPadding - bottomPadding); - break; } - case SE_CheckBoxLayoutItem: - rect = opt->rect; - if (controlSize == QStyleHelper::SizeLarge) { - setLayoutItemMargins(+2, +2, -3, -2, &rect, opt->direction); - } else if (controlSize == QStyleHelper::SizeSmall) { - setLayoutItemMargins(+1, +2, -2, -1, &rect, opt->direction); - } else { - setLayoutItemMargins(-0, +0, -1, -0, &rect, opt->direction); - } - break; - case SE_ComboBoxLayoutItem: - if (const auto *combo = qstyleoption_cast(opt)) { - //#ifndef QT_NO_TOOLBAR - // if (widget && qobject_cast(widget->parentWidget())) { - // // Do nothing, because QToolbar needs the entire widget rect. - // // Otherwise it will be clipped. Equivalent to - // // widget->setAttribute(Qt::WA_LayoutUsesWidgetRect), but without - // // all the hassle. - // } else - //#endif - if (combo->editable) - rect = LargeSmallMini(opt, - opt->rect.adjusted(5, 6, -6, -7), - opt->rect.adjusted(4, 4, -5, -7), - opt->rect.adjusted(5, 4, -4, -6)); - else - rect = LargeSmallMini(opt, - opt->rect.adjusted(6, 4, -7, -7), - opt->rect.adjusted(6, 7, -6, -5), - opt->rect.adjusted(9, 5, -5, -7)); - } - break; - case SE_LabelLayoutItem: - rect = opt->rect; - setLayoutItemMargins(+1, 0 /* SHOULD be -1, done for alignment */, 0, 0 /* SHOULD be -1, done for alignment */, &rect, opt->direction); - break; - case SE_ProgressBarLayoutItem: - if (const QStyleOptionProgressBar *pb = qstyleoption_cast(opt)) { - const bool isIndeterminate = (pb->minimum == 0 && pb->maximum == 0); - rect = opt->rect; - - if (isIndeterminate) { - rect.adjust(1, 2, -1, -2); - } else { - rect.adjust(1, 1, -1, -2); - } - } - break; - case SE_PushButtonLayoutItem: - rect = opt->rect; - if (const QStyleOptionButton *buttonOpt = qstyleoption_cast(opt)) { - if ((buttonOpt->features & QStyleOptionButton::Flat)) - break; - } - rect = LargeSmallMini(opt, - opt->rect.adjusted(7, 5, -7, -7), - opt->rect.adjusted(6, 6, -6, -6), - opt->rect.adjusted(6, 5, -6, -6)); - break; - case SE_SpinBoxLayoutItem: - rect = LargeSmallMini(opt, - opt->rect.adjusted(2, 3, -2, -2), - opt->rect.adjusted(2, 3, -2, -2), - opt->rect.adjusted(2, 3, -2, -2)); - break; - case SE_RadioButtonLayoutItem: - rect = LargeSmallMini(opt, - opt->rect.adjusted(2, 2, -3, -2), - opt->rect.adjusted(2, 2, -3, -2), - opt->rect.adjusted(1, 2, -3, -2)); - break; - case SE_SliderLayoutItem: - if (const QStyleOptionSlider *sliderOpt - = qstyleoption_cast(opt)) { - rect = opt->rect; - if (sliderOpt->subControls & QStyle::SC_SliderHandle) { - if (sliderOpt->tickPosition == QStyleOptionSlider::NoTicks) - rect.adjust(3, 3, -3, -3); - } else { - rect.adjust(3, 0, -3, 0); - } - } - break; - case SE_ScrollBarLayoutItem: - if (const QStyleOptionSlider *sliderOpt = qstyleoption_cast(opt)) { - rect = opt->rect; - } - case SE_FrameLayoutItem: - // hack because QStyleOptionFrame doesn't have a frameStyle member -// if (const QFrame *frame = qobject_cast(widget)) { -// rect = opt->rect; -// switch (frame->frameStyle() & QFrame::Shape_Mask) { -// case QFrame::HLine: -// rect.adjust(0, +1, 0, -1); -// break; -// case QFrame::VLine: -// rect.adjust(+1, 0, -1, 0); -// break; -// default: -// ; -// } -// } - break; - case SE_GroupBoxLayoutItem: - rect = opt->rect; - if (const QStyleOptionGroupBox *groupBoxOpt = - qstyleoption_cast(opt)) { - /* - AHIG is very inconsistent when it comes to group boxes. - Basically, we make sure that (non-checkable) group boxes - and tab widgets look good when laid out side by side. - */ - if (groupBoxOpt->subControls & (QStyle::SC_GroupBoxCheckBox - | QStyle::SC_GroupBoxLabel)) { - int delta; - if (groupBoxOpt->subControls & QStyle::SC_GroupBoxCheckBox) { - delta = SIZE(8, 4, 4); // guess - } else { - delta = SIZE(15, 12, 12); // guess - } - rect.setTop(rect.top() + delta); - } - } - rect.setBottom(rect.bottom() - 1); - break; - case SE_TabWidgetLayoutItem: - if (const QStyleOptionTabWidgetFrame *tabWidgetOpt = - qstyleoption_cast(opt)) { - /* - AHIG specifies "12 or 14" as the distance from the window - edge. We choose 14 and since the default top margin is 20, - the overlap is 6. - */ - rect = tabWidgetOpt->rect; - if (tabWidgetOpt->shape == QStyleOptionTab::RoundedNorth) - rect.setTop(rect.top() + SIZE(6 /* AHIG */, 3 /* guess */, 2 /* AHIG */)); - } - break; - case SE_DockWidgetCloseButton: - case SE_DockWidgetFloatButton: - case SE_DockWidgetTitleBarText: - case SE_DockWidgetIcon: { - int iconSize = proxy()->pixelMetric(PM_SmallIconSize, opt); - int buttonMargin = proxy()->pixelMetric(PM_DockWidgetTitleBarButtonMargin, opt); - QRect srect = opt->rect; - - const QStyleOptionDockWidget *dwOpt - = qstyleoption_cast(opt); - bool canClose = dwOpt == 0 ? true : dwOpt->closable; - bool canFloat = dwOpt == 0 ? false : dwOpt->floatable; - - const bool verticalTitleBar = dwOpt->verticalTitleBar; - - // If this is a vertical titlebar, we transpose and work as if it was - // horizontal, then transpose again. - if (verticalTitleBar) - srect = srect.transposed(); - - do { - int right = srect.right(); - int left = srect.left(); - - QRect closeRect; - if (canClose) { - QSize sz = proxy()->standardIcon(QStyle::SP_TitleBarCloseButton, - opt).actualSize(QSize(iconSize, iconSize)); - sz += QSize(buttonMargin, buttonMargin); - if (verticalTitleBar) - sz = sz.transposed(); - closeRect = QRect(left, - srect.center().y() - sz.height()/2, - sz.width(), sz.height()); - left = closeRect.right() + 1; - } - if (sr == SE_DockWidgetCloseButton) { - rect = closeRect; - break; - } - - QRect floatRect; - if (canFloat) { - QSize sz = proxy()->standardIcon(QStyle::SP_TitleBarNormalButton, - opt).actualSize(QSize(iconSize, iconSize)); - sz += QSize(buttonMargin, buttonMargin); - if (verticalTitleBar) - sz = sz.transposed(); - floatRect = QRect(left, - srect.center().y() - sz.height()/2, - sz.width(), sz.height()); - left = floatRect.right() + 1; - } - if (sr == SE_DockWidgetFloatButton) { - rect = floatRect; - break; - } - - QRect iconRect; -// if (const QDockWidget *dw = qobject_cast(widget)) { -// QIcon icon; -// if (dw->isFloating()) -// icon = dw->windowIcon(); -// if (!icon.isNull() -// && icon.cacheKey() != QApplication::windowIcon().cacheKey()) { -// QSize sz = icon.actualSize(QSize(rect.height(), rect.height())); -// if (verticalTitleBar) -// sz = sz.transposed(); -// iconRect = QRect(right - sz.width(), srect.center().y() - sz.height()/2, -// sz.width(), sz.height()); -// right = iconRect.left() - 1; -// } -// } - if (sr == SE_DockWidgetIcon) { - rect = iconRect; - break; - } - - QRect textRect = QRect(left, srect.top(), - right - left, srect.height()); - if (sr == SE_DockWidgetTitleBarText) { - rect = textRect; - break; - } - } while (false); - - if (verticalTitleBar) { - rect = QRect(srect.left() + rect.top() - srect.top(), - srect.top() + srect.right() - rect.right(), - rect.height(), rect.width()); - } else { - rect = visualRect(opt->direction, srect, rect); - } - break; - } - default: - rect = QCommonStyle::subElementRect(sr, opt); - break; - } - return rect; -} - -void QMacStylePrivate::drawToolbarButtonArrow(const QStyleOption *opt, QPainter *p) const -{ - Q_Q(const QMacStyle); - QStyleOption arrowOpt = *opt; - arrowOpt.rect = QRect(opt->rect.right() - (toolButtonArrowSize + toolButtonArrowMargin), - opt->rect.bottom() - (toolButtonArrowSize + toolButtonArrowMargin), - toolButtonArrowSize, - toolButtonArrowSize); - q->proxy()->drawPrimitive(QStyle::PE_IndicatorArrowDown, &arrowOpt, p); -} - -void QMacStylePrivate::setupNSGraphicsContext(CGContextRef cg, bool flipped) const -{ - CGContextSaveGState(cg); - [NSGraphicsContext saveGraphicsState]; - - [NSGraphicsContext setCurrentContext: - [NSGraphicsContext graphicsContextWithCGContext:cg flipped:flipped]]; -} - -void QMacStylePrivate::restoreNSGraphicsContext(CGContextRef cg) const -{ - [NSGraphicsContext restoreGraphicsState]; - CGContextRestoreGState(cg); -} - -void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p) const -{ - Q_D(const QMacStyle); - const AppearanceSync sync; - - QMacCGContext cg(p); - d->resolveCurrentNSView(opt->window); - - switch (cc) { - case CC_ScrollBar: - if (const QStyleOptionSlider *sb = qstyleoption_cast(opt)) { - - const bool drawTrack = sb->subControls & SC_ScrollBarGroove; - const bool drawKnob = sb->subControls & SC_ScrollBarSlider; - if (!drawTrack && !drawKnob) - break; - - const bool isHorizontal = sb->orientation == Qt::Horizontal; - - if (opt && opt->styleObject && !QMacStylePrivate::scrollBars.contains(opt->styleObject)) - QMacStylePrivate::scrollBars.append(QPointer(opt->styleObject)); - - static const CGFloat knobWidths[] = { 7.0, 5.0, 5.0 }; - static const CGFloat expandedKnobWidths[] = { 11.0, 9.0, 9.0 }; - const auto cocoaSize = d->effectiveAquaSizeConstrain(opt); - const CGFloat maxExpandScale = expandedKnobWidths[cocoaSize] / knobWidths[cocoaSize]; - - const bool isTransient = proxy()->styleHint(SH_ScrollBar_Transient, opt); -// if (!isTransient) -// d->stopAnimation(opt->styleObject); - bool wasActive = false; - CGFloat opacity = 0.0; - CGFloat expandScale = 1.0; - CGFloat expandOffset = 0.0; - bool shouldExpand = false; - - if (QObject *styleObject = opt->styleObject) { - const int oldPos = styleObject->property("_q_stylepos").toInt(); - const int oldMin = styleObject->property("_q_stylemin").toInt(); - const int oldMax = styleObject->property("_q_stylemax").toInt(); - const QRect oldRect = styleObject->property("_q_stylerect").toRect(); - const QStyle::State oldState = static_cast(styleObject->property("_q_stylestate").value()); - const uint oldActiveControls = styleObject->property("_q_stylecontrols").toUInt(); - - // a scrollbar is transient when the scrollbar itself and - // its sibling are both inactive (ie. not pressed/hovered/moved) - const bool transient = isTransient && !opt->activeSubControls && !(sb->state & State_On); - - if (!transient || - oldPos != sb->sliderPosition || - oldMin != sb->minimum || - oldMax != sb->maximum || - oldRect != sb->rect || - oldState != sb->state || - oldActiveControls != sb->activeSubControls) { - - // if the scrollbar is transient or its attributes, geometry or - // state has changed, the opacity is reset back to 100% opaque - opacity = 1.0; - - styleObject->setProperty("_q_stylepos", sb->sliderPosition); - styleObject->setProperty("_q_stylemin", sb->minimum); - styleObject->setProperty("_q_stylemax", sb->maximum); - styleObject->setProperty("_q_stylerect", sb->rect); - styleObject->setProperty("_q_stylestate", static_cast(sb->state)); - styleObject->setProperty("_q_stylecontrols", static_cast(sb->activeSubControls)); - -// QScrollbarStyleAnimation *anim = qobject_cast(d->animation(styleObject)); -// if (transient) { -// if (!anim) { -// anim = new QScrollbarStyleAnimation(QScrollbarStyleAnimation::Deactivating, styleObject); -// d->startAnimation(anim); -// } else if (anim->mode() == QScrollbarStyleAnimation::Deactivating) { -// // the scrollbar was already fading out while the -// // state changed -> restart the fade out animation -// anim->setCurrentTime(0); -// } -// } else if (anim && anim->mode() == QScrollbarStyleAnimation::Deactivating) { -// d->stopAnimation(styleObject); -// } - } - -// QScrollbarStyleAnimation *anim = qobject_cast(d->animation(styleObject)); -// if (anim && anim->mode() == QScrollbarStyleAnimation::Deactivating) { -// // once a scrollbar was active (hovered/pressed), it retains -// // the active look even if it's no longer active while fading out -// if (oldActiveControls) -// anim->setActive(true); - -// wasActive = anim->wasActive(); -// opacity = anim->currentValue(); -// } - - shouldExpand = isTransient && (opt->activeSubControls || wasActive); - if (shouldExpand) { -// if (!anim && !oldActiveControls) { -// // Start expand animation only once and when entering -// anim = new QScrollbarStyleAnimation(QScrollbarStyleAnimation::Activating, styleObject); -// d->startAnimation(anim); -// } -// if (anim && anim->mode() == QScrollbarStyleAnimation::Activating) { -// expandScale = 1.0 + (maxExpandScale - 1.0) * anim->currentValue(); -// expandOffset = 5.5 * (1.0 - anim->currentValue()); -// } else { -// // Keep expanded state after the animation ends, and when fading out -// expandScale = maxExpandScale; -// expandOffset = 0.0; -// } - } - } - - d->setupNSGraphicsContext(cg, NO /* flipped */); - - const auto controlType = isHorizontal ? QMacStylePrivate::Scroller_Horizontal : QMacStylePrivate::Scroller_Vertical; - const auto cw = QMacStylePrivate::CocoaControl(controlType, cocoaSize); - NSScroller *scroller = static_cast(d->cocoaControl(cw)); - - const QColor bgColor = QStyleHelper::backgroundColor(opt->palette); - const bool hasDarkBg = bgColor.red() < 128 && bgColor.green() < 128 && bgColor.blue() < 128; - if (isTransient) { - // macOS behavior: as soon as one color channel is >= 128, - // the background is considered bright, scroller is dark. - scroller.knobStyle = hasDarkBg? NSScrollerKnobStyleLight : NSScrollerKnobStyleDark; - } else { - scroller.knobStyle = NSScrollerKnobStyleDefault; - } - - scroller.scrollerStyle = isTransient ? NSScrollerStyleOverlay : NSScrollerStyleLegacy; - - if (!setupScroller(scroller, sb)) - break; - - if (isTransient) { - CGContextBeginTransparencyLayerWithRect(cg, scroller.frame, nullptr); - CGContextSetAlpha(cg, opacity); - } - - if (drawTrack) { - // Draw the track when hovering. Expand by shifting the track rect. - if (!isTransient || opt->activeSubControls || wasActive) { - CGRect trackRect = scroller.bounds; - if (isHorizontal) - trackRect.origin.y += expandOffset; - else - trackRect.origin.x += expandOffset; - [scroller drawKnobSlotInRect:trackRect highlight:NO]; - } - } - - if (drawKnob) { - if (shouldExpand) { - // -[NSScroller drawKnob] is not useful here because any scaling applied - // will only be used to draw the hi-DPI artwork. And even if did scale, - // the stretched knob would look wrong, actually. So we need to draw the - // scroller manually when it's being hovered. - const CGFloat scrollerWidth = [NSScroller scrollerWidthForControlSize:scroller.controlSize scrollerStyle:scroller.scrollerStyle]; - const CGFloat knobWidth = knobWidths[cocoaSize] * expandScale; - // Cocoa can help get the exact knob length in the current orientation - const CGRect scrollerKnobRect = CGRectInset([scroller rectForPart:NSScrollerKnob], 1, 1); - const CGFloat knobLength = isHorizontal ? scrollerKnobRect.size.width : scrollerKnobRect.size.height; - const CGFloat knobPos = isHorizontal ? scrollerKnobRect.origin.x : scrollerKnobRect.origin.y; - const CGFloat knobOffset = qRound((scrollerWidth + expandOffset - knobWidth) / 2.0); - const CGFloat knobRadius = knobWidth / 2.0; - CGRect knobRect; - if (isHorizontal) - knobRect = CGRectMake(knobPos, knobOffset, knobLength, knobWidth); - else - knobRect = CGRectMake(knobOffset, knobPos, knobWidth, knobLength); - QCFType knobPath = CGPathCreateWithRoundedRect(knobRect, knobRadius, knobRadius, nullptr); - CGContextAddPath(cg, knobPath); - CGContextSetAlpha(cg, 0.5); - CGColorRef knobColor = hasDarkBg ? NSColor.whiteColor.CGColor : NSColor.blackColor.CGColor; - CGContextSetFillColorWithColor(cg, knobColor); - CGContextFillPath(cg); - } else { - [scroller drawKnob]; - - if (!isTransient && opt->state & State_Sunken) { - // The knob should appear darker (going from 0.76 down to 0.49). - // But no blending mode can help darken enough in a single pass, - // so we resort to drawing the knob twice with a small help from - // blending. This brings the gray level to a close enough 0.53. - CGContextSetBlendMode(cg, kCGBlendModePlusDarker); - [scroller drawKnob]; - } - } - } - - if (isTransient) - CGContextEndTransparencyLayer(cg); - - d->restoreNSGraphicsContext(cg); - } - break; - case CC_Slider: - if (const QStyleOptionSlider *sl = qstyleoption_cast(opt)) { - const bool isHorizontal = sl->orientation == Qt::Horizontal; - const auto ct = isHorizontal ? QMacStylePrivate::Slider_Horizontal : QMacStylePrivate::Slider_Vertical; - const auto cs = d->effectiveAquaSizeConstrain(opt); - const auto cw = QMacStylePrivate::CocoaControl(ct, cs); - auto *slider = static_cast(d->cocoaControl(cw)); - if (!setupSlider(slider, sl)) - break; - - const bool hasTicks = sl->tickPosition != QStyleOptionSlider::NoTicks; - const bool hasDoubleTicks = sl->tickPosition == QStyleOptionSlider::TicksBothSides; - const bool drawKnob = sl->subControls & SC_SliderHandle; - const bool drawBar = sl->subControls & SC_SliderGroove; - const bool drawTicks = sl->subControls & SC_SliderTickmarks; - const bool isPressed = sl->state & State_Sunken; - - CGPoint pressPoint; - if (isPressed && drawKnob) { - const CGRect knobRect = [slider.cell knobRectFlipped:slider.isFlipped]; - pressPoint.x = CGRectGetMidX(knobRect); - pressPoint.y = CGRectGetMidY(knobRect); - [slider.cell startTrackingAt:pressPoint inView:slider]; - } - - d->drawNSViewInRect(slider, opt->rect, p, ^(CGContextRef, const CGRect &) { - // Note that we don't support drawing the slider upside down. When this - // is needed, simply set scale = -1 on the QML control / style item instead. - NSSliderCell *cell = slider.cell; - - if (drawBar) { - const CGRect barRect = [cell barRectFlipped:slider.isFlipped]; - // "flipped" will only make a difference when NSSliderCell is vertical. And then - // flipped means fill the groove from bottom-to-top instead of top-to-bottom. - // Bottom-to-top is QSlider's normal mode, which means that we always need to flip - // in vertical mode. (In case NSSlider can also be flipped horizontally in the future, - // we stay on the safe side, and only flip when in vertical mode). - [cell drawBarInside:barRect flipped:!isHorizontal]; - } - - if (drawBar && hasTicks && drawTicks) { - if (!hasDoubleTicks) { - [cell drawTickMarks]; - } else { - if (sl->orientation == Qt::Horizontal) { - slider.tickMarkPosition = NSTickMarkPositionAbove; - [slider layoutSubtreeIfNeeded]; - [cell drawTickMarks]; - slider.tickMarkPosition = NSTickMarkPositionBelow; - [slider layoutSubtreeIfNeeded]; - [cell drawTickMarks]; - } else { - slider.tickMarkPosition = NSTickMarkPositionLeading; - [slider layoutSubtreeIfNeeded]; - [cell drawTickMarks]; - slider.tickMarkPosition = NSTickMarkPositionTrailing; - [slider layoutSubtreeIfNeeded]; - [cell drawTickMarks]; - } - } - } - - if (drawKnob) - [cell drawKnob]; - }); - - if (isPressed && drawKnob) - [slider.cell stopTracking:pressPoint at:pressPoint inView:slider mouseIsUp:NO]; - } - break; - case CC_SpinBox: - if (const QStyleOptionSpinBox *sb = qstyleoption_cast(opt)) { - if (sb->frame && (sb->subControls & SC_SpinBoxFrame)) { - const auto lineEditRect = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxEditField); - QStyleOptionFrame frame; - static_cast(frame) = *opt; - frame.rect = lineEditRect; - frame.state |= State_Sunken; - frame.lineWidth = 1; - frame.midLineWidth = 0; - frame.features = QStyleOptionFrame::None; - frame.frameShape = QStyleOptionFrame::Box; - drawPrimitive(PE_FrameLineEdit, &frame, p); - } - if (sb->subControls & (SC_SpinBoxUp | SC_SpinBoxDown)) { - const QRect updown = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxUp) - | proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxDown); - - d->setupNSGraphicsContext(cg, NO); - - const auto aquaSize = d->effectiveAquaSizeConstrain(opt); - const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::Stepper, aquaSize); - NSStepperCell *cell = static_cast(d->cocoaCell(cw)); - cell.enabled = (sb->state & State_Enabled); - - const CGRect newRect = [cell drawingRectForBounds:updown.toCGRect()]; - - const bool upPressed = sb->activeSubControls == SC_SpinBoxUp && (sb->state & State_Sunken); - const bool downPressed = sb->activeSubControls == SC_SpinBoxDown && (sb->state & State_Sunken); - const CGFloat x = CGRectGetMidX(newRect); - const CGFloat y = upPressed ? -3 : 3; // Weird coordinate shift going on. Verified with Hopper - const CGPoint pressPoint = CGPointMake(x, y); - // Pretend we're pressing the mouse on the right button. Unfortunately, NSStepperCell has no - // API to highlight a specific button. The highlighted property works only on the down button. - if (upPressed || downPressed) - [cell startTrackingAt:pressPoint inView:d->backingStoreNSView]; - - [cell drawWithFrame:newRect inView:d->backingStoreNSView]; - - if (upPressed || downPressed) - [cell stopTracking:pressPoint at:pressPoint inView:d->backingStoreNSView mouseIsUp:NO]; - - d->restoreNSGraphicsContext(cg); - } - } - break; - case CC_ComboBox: - if (const auto *combo = qstyleoption_cast(opt)) { - const bool isEnabled = combo->state & State_Enabled; - const bool isPressed = combo->state & State_Sunken; - - const auto ct = cocoaControlType(combo); - const auto cs = d->effectiveAquaSizeConstrain(combo); - const auto cw = QMacStylePrivate::CocoaControl(ct, cs); - auto *cc = static_cast(d->cocoaControl(cw)); - cc.enabled = isEnabled; - QRectF frameRect = cw.adjustedControlFrame(combo->rect);; - if (cw.type == QMacStylePrivate::Button_PopupButton) { - // Non-editable QComboBox - auto *pb = static_cast(cc); - // FIXME Old offsets. Try to move to adjustedControlFrame() - if (cw.size == QStyleHelper::SizeSmall) { - frameRect = frameRect.translated(0, 1); - } else if (cw.size == QStyleHelper::SizeMini) { - // Same 0.5 pt misalignment as AppKit and fit the focus ring - frameRect = frameRect.translated(2, -0.5); - } - pb.frame = frameRect.toCGRect(); - [pb highlight:isPressed]; - d->drawNSViewInRect(pb, frameRect, p, ^(CGContextRef, const CGRect &r) { - QMacAutoReleasePool pool; - [pb.cell drawBezelWithFrame:r inView:pb.superview]; - }); - } else if (cw.type == QMacStylePrivate::ComboBox) { - // Editable QComboBox - auto *cb = static_cast(cc); - const auto frameRect = cw.adjustedControlFrame(combo->rect); - cb.frame = frameRect.toCGRect(); - - // This API was requested to Apple in rdar #36197888. We know it's safe to use up to macOS 10.13.3 - if (NSButtonCell *cell = static_cast([cc.cell qt_valueForPrivateKey:@"_buttonCell"])) { - cell.highlighted = isPressed; - } else { - // TODO Render to pixmap and darken the button manually - } - - d->drawNSViewInRect(cb, frameRect, p, ^(CGContextRef, const CGRect &r) { - // FIXME This is usually drawn in the control's superview, but we wouldn't get inactive look in this case - QMacAutoReleasePool pool; - [cb.cell drawWithFrame:r inView:cb]; - }); - } - } - break; - case CC_TitleBar: - if (const auto *titlebar = qstyleoption_cast(opt)) { - const bool isActive = (titlebar->state & State_Active) - && (titlebar->titleBarState & State_Active); - - p->fillRect(opt->rect, Qt::transparent); - p->setRenderHint(QPainter::Antialiasing); - p->setClipRect(opt->rect, Qt::IntersectClip); - - // FIXME A single drawPath() with 0-sized pen - // doesn't look as good as this double fillPath(). - const auto outerFrameRect = QRectF(opt->rect.adjusted(0, 0, 0, opt->rect.height())); - QPainterPath outerFramePath = d->windowPanelPath(outerFrameRect); - p->fillPath(outerFramePath, opt->palette.dark()); - - const auto frameAdjust = 1.0 / p->device()->devicePixelRatioF(); - const auto innerFrameRect = outerFrameRect.adjusted(frameAdjust, frameAdjust, -frameAdjust, 0); - QPainterPath innerFramePath = d->windowPanelPath(innerFrameRect); - if (isActive) { - QLinearGradient g; - g.setStart(QPointF(0, 0)); - g.setFinalStop(QPointF(0, 2 * opt->rect.height())); - g.setColorAt(0, opt->palette.button().color()); - g.setColorAt(1, opt->palette.dark().color()); - p->fillPath(innerFramePath, g); - } else { - p->fillPath(innerFramePath, opt->palette.button()); - } - - if (titlebar->subControls & (SC_TitleBarCloseButton - | SC_TitleBarMaxButton - | SC_TitleBarMinButton - | SC_TitleBarNormalButton)) { - const bool isHovered = (titlebar->state & State_MouseOver); - static const SubControl buttons[] = { - SC_TitleBarCloseButton, SC_TitleBarMinButton, SC_TitleBarMaxButton - }; - for (const auto sc : buttons) { - const auto ct = d->windowButtonCocoaControl(sc); - const auto cw = QMacStylePrivate::CocoaControl(ct, QStyleHelper::SizeLarge); - auto *wb = static_cast(d->cocoaControl(cw)); - wb.enabled = (sc & titlebar->subControls) && isActive; - [wb highlight:(titlebar->state & State_Sunken) && (sc & titlebar->activeSubControls)]; - Q_UNUSED(isHovered); // FIXME No public API for this - - const auto buttonRect = proxy()->subControlRect(CC_TitleBar, titlebar, sc); - d->drawNSViewInRect(wb, buttonRect, p, ^(CGContextRef, const CGRect &rect) { - QMacAutoReleasePool pool; - auto *wbCell = static_cast(wb.cell); - [wbCell drawWithFrame:rect inView:wb]; - }); - } - } - - if (titlebar->subControls & SC_TitleBarLabel) { - const auto tr = proxy()->subControlRect(CC_TitleBar, titlebar, SC_TitleBarLabel); - if (!titlebar->icon.isNull()) { - const auto iconExtent = proxy()->pixelMetric(PM_SmallIconSize); - const auto iconSize = QSize(iconExtent, iconExtent); - const auto iconPos = tr.x() - titlebar->icon.actualSize(iconSize).width() - qRound(titleBarIconTitleSpacing); - // Only render the icon if it'll be fully visible - if (iconPos < tr.right() - titleBarIconTitleSpacing) - p->drawPixmap(iconPos, tr.y(), titlebar->icon.pixmap(opt->window, iconSize, QIcon::Normal)); - } - - if (!titlebar->text.isEmpty()) - drawItemText(p, tr, Qt::AlignCenter, opt->palette, isActive, titlebar->text, QPalette::Text); - } - } - break; - case CC_GroupBox: - if (const QStyleOptionGroupBox *gb - = qstyleoption_cast(opt)) { - - QStyleOptionGroupBox groupBox(*gb); - const bool flat = groupBox.features & QStyleOptionFrame::Flat; - if (!flat) - groupBox.state |= QStyle::State_Mini; // Force mini-sized checkbox to go with small-sized label - else - groupBox.subControls = groupBox.subControls & ~SC_GroupBoxFrame; // We don't like frames and ugly lines - -// const bool didSetFont = widget && widget->testAttribute(Qt::WA_SetFont); -// const bool didModifySubControls = !didSetFont && QApplication::desktopSettingsAware(); -// if (didModifySubControls) -// groupBox.subControls = groupBox.subControls & ~SC_GroupBoxLabel; - QCommonStyle::drawComplexControl(cc, &groupBox, p); -// if (didModifySubControls) { -// const QRect rect = proxy()->subControlRect(CC_GroupBox, &groupBox, SC_GroupBoxLabel); -// const bool rtl = groupBox.direction == Qt::RightToLeft; -// const int alignment = Qt::TextHideMnemonic | (rtl ? Qt::AlignRight : Qt::AlignLeft); -// const QFont savedFont = p->font(); -// if (!flat) -// p->setFont(d->smallSystemFont); -// proxy()->drawItemText(p, rect, alignment, groupBox.palette, groupBox.state & State_Enabled, groupBox.text, QPalette::WindowText); -// if (!flat) -// p->setFont(savedFont); -// } - } - break; - case CC_ToolButton: - if (const QStyleOptionToolButton *tb - = qstyleoption_cast(opt)) { -#ifndef QT_NO_ACCESSIBILITY - if (QStyleHelper::hasAncestor(opt->styleObject, QAccessible::ToolBar)) { - if (tb->subControls & SC_ToolButtonMenu) { - QStyleOption arrowOpt = *tb; - arrowOpt.rect = proxy()->subControlRect(cc, tb, SC_ToolButtonMenu); - arrowOpt.rect.setY(arrowOpt.rect.y() + arrowOpt.rect.height() / 2); - arrowOpt.rect.setHeight(arrowOpt.rect.height() / 2); - proxy()->drawPrimitive(PE_IndicatorArrowDown, &arrowOpt, p); - } else if ((tb->features & QStyleOptionToolButton::HasMenu) - && (tb->toolButtonStyle != Qt::ToolButtonTextOnly && !tb->icon.isNull())) { - d->drawToolbarButtonArrow(tb, p); - } - if (tb->state & State_On) { - NSView *view = reinterpret_cast(opt->window->winId()); - bool isKey = false; - if (view) - isKey = [view.window isKeyWindow]; - - QBrush brush(brushForToolButton(isKey)); - QPainterPath path; - path.addRoundedRect(QRectF(tb->rect.x(), tb->rect.y(), tb->rect.width(), tb->rect.height() + 4), 4, 4); - p->setRenderHint(QPainter::Antialiasing); - p->fillPath(path, brush); - } - proxy()->drawControl(CE_ToolButtonLabel, opt, p); - } else -#endif // QT_NO_ACCESSIBILITY - { - auto bflags = tb->state; - if (tb->subControls & SC_ToolButton) - bflags |= State_Sunken; - auto mflags = tb->state; - if (tb->subControls & SC_ToolButtonMenu) - mflags |= State_Sunken; - - if (tb->subControls & SC_ToolButton) { - if (bflags & (State_Sunken | State_On | State_Raised)) { - const bool isEnabled = tb->state & State_Enabled; - const bool isPressed = tb->state & State_Sunken; - const bool isHighlighted = (tb->state & State_Active) && (tb->state & State_On); - const auto ct = QMacStylePrivate::Button_PushButton; - const auto cs = d->effectiveAquaSizeConstrain(opt); - const auto cw = QMacStylePrivate::CocoaControl(ct, cs); - auto *pb = static_cast(d->cocoaControl(cw)); - pb.bezelStyle = NSShadowlessSquareBezelStyle; // TODO Use NSTexturedRoundedBezelStyle in the future. - pb.frame = opt->rect.toCGRect(); - pb.buttonType = NSPushOnPushOffButton; - pb.enabled = isEnabled; - [pb highlight:isPressed]; - pb.state = isHighlighted && !isPressed ? NSOnState : NSOffState; - const auto buttonRect = proxy()->subControlRect(cc, tb, SC_ToolButton); - d->drawNSViewInRect(pb, buttonRect, p, ^(CGContextRef, const CGRect &rect) { - QMacAutoReleasePool pool; - [pb.cell drawBezelWithFrame:rect inView:pb]; - }); - } - } - - if (tb->subControls & SC_ToolButtonMenu) { - const auto menuRect = proxy()->subControlRect(cc, tb, SC_ToolButtonMenu); - QStyleOption arrowOpt = *tb; - arrowOpt.rect = QRect(menuRect.x() + ((menuRect.width() - toolButtonArrowSize) / 2), - menuRect.height() - (toolButtonArrowSize + toolButtonArrowMargin), - toolButtonArrowSize, - toolButtonArrowSize); - proxy()->drawPrimitive(PE_IndicatorArrowDown, &arrowOpt, p); - } else if (tb->features & QStyleOptionToolButton::HasMenu) { - d->drawToolbarButtonArrow(tb, p); - } - QRect buttonRect = proxy()->subControlRect(CC_ToolButton, tb, SC_ToolButton); - int fw = proxy()->pixelMetric(PM_DefaultFrameWidth, opt); - QStyleOptionToolButton label = *tb; - label.rect = buttonRect.adjusted(fw, fw, -fw, -fw); - proxy()->drawControl(CE_ToolButtonLabel, &label, p); - } - } - break; - case CC_Dial: - if (const QStyleOptionSlider *dial = qstyleoption_cast(opt)) - QStyleHelper::drawDial(dial, p); - break; - default: - QCommonStyle::drawComplexControl(cc, opt, p); - break; - } -} - -QStyle::SubControl QMacStyle::hitTestComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, const QPoint &pt) const -{ - Q_D(const QMacStyle); - - SubControl sc = QStyle::SC_None; - - switch (cc) { - case CC_ComboBox: - if (const QStyleOptionComboBox *cmb = qstyleoption_cast(opt)) { - sc = QCommonStyle::hitTestComplexControl(cc, cmb, pt); - if (!cmb->editable && sc != QStyle::SC_None) - sc = SC_ComboBoxArrow; // A bit of a lie, but what we want - } - break; - case CC_Slider: - if (const QStyleOptionSlider *sl = qstyleoption_cast(opt)) { - if (!sl->rect.contains(pt)) - break; - - const bool hasTicks = sl->tickPosition != QStyleOptionSlider::NoTicks; - const bool isHorizontal = sl->orientation == Qt::Horizontal; - const auto ct = isHorizontal ? QMacStylePrivate::Slider_Horizontal : QMacStylePrivate::Slider_Vertical; - const auto cs = d->effectiveAquaSizeConstrain(opt); - const auto cw = QMacStylePrivate::CocoaControl(ct, cs); - auto *slider = static_cast(d->cocoaControl(cw)); - if (!setupSlider(slider, sl)) - break; - - NSSliderCell *cell = slider.cell; - const auto barRect = QRectF::fromCGRect([cell barRectFlipped:slider.isFlipped]); - const auto knobRect = QRectF::fromCGRect([cell knobRectFlipped:slider.isFlipped]); - if (knobRect.contains(pt)) { - sc = SC_SliderHandle; - } else if (barRect.contains(pt)) { - sc = SC_SliderGroove; - } else if (hasTicks) { - sc = SC_SliderTickmarks; - } - } - break; - case CC_ScrollBar: - if (const QStyleOptionSlider *sb = qstyleoption_cast(opt)) { - if (!sb->rect.contains(pt)) { - sc = SC_None; - break; - } - - const bool isHorizontal = sb->orientation == Qt::Horizontal; - const auto ct = isHorizontal ? QMacStylePrivate::Scroller_Horizontal : QMacStylePrivate::Scroller_Vertical; - const auto cs = d->effectiveAquaSizeConstrain(opt); - const auto cw = QMacStylePrivate::CocoaControl(ct, cs); - auto *scroller = static_cast(d->cocoaControl(cw)); - if (!setupScroller(scroller, sb)) { - sc = SC_None; - break; - } - - // Since -[NSScroller testPart:] doesn't want to cooperate, we do it the - // straightforward way. In any case, macOS doesn't return line-sized changes - // with NSScroller since 10.7, according to the aforementioned method's doc. - const auto knobRect = QRectF::fromCGRect([scroller rectForPart:NSScrollerKnob]); - if (isHorizontal) { - const bool isReverse = sb->direction == Qt::RightToLeft; - if (pt.x() < knobRect.left()) - sc = isReverse ? SC_ScrollBarAddPage : SC_ScrollBarSubPage; - else if (pt.x() > knobRect.right()) - sc = isReverse ? SC_ScrollBarSubPage : SC_ScrollBarAddPage; - else - sc = SC_ScrollBarSlider; - } else { - if (pt.y() < knobRect.top()) - sc = SC_ScrollBarSubPage; - else if (pt.y() > knobRect.bottom()) - sc = SC_ScrollBarAddPage; - else - sc = SC_ScrollBarSlider; - } - } - break; - default: - sc = QCommonStyle::hitTestComplexControl(cc, opt, pt); - break; - } - return sc; -} - -QRect QMacStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc) const -{ - Q_D(const QMacStyle); - - QRect ret; - - switch (cc) { - case CC_ScrollBar: - if (const QStyleOptionSlider *sb = qstyleoption_cast(opt)) { - const bool isHorizontal = sb->orientation == Qt::Horizontal; - const bool isReverseHorizontal = isHorizontal && (sb->direction == Qt::RightToLeft); - - NSScrollerPart part = NSScrollerNoPart; - if (sc == SC_ScrollBarSlider) { - part = NSScrollerKnob; - } else if (sc == SC_ScrollBarGroove) { - part = NSScrollerKnobSlot; - } else if (sc == SC_ScrollBarSubPage || sc == SC_ScrollBarAddPage) { - if ((!isReverseHorizontal && sc == SC_ScrollBarSubPage) - || (isReverseHorizontal && sc == SC_ScrollBarAddPage)) - part = NSScrollerDecrementPage; - else - part = NSScrollerIncrementPage; - } - // And nothing else since 10.7 - - if (part != NSScrollerNoPart) { - const auto ct = isHorizontal ? QMacStylePrivate::Scroller_Horizontal : QMacStylePrivate::Scroller_Vertical; - const auto cs = d->effectiveAquaSizeConstrain(opt); - const auto cw = QMacStylePrivate::CocoaControl(ct, cs); - auto *scroller = static_cast(d->cocoaControl(cw)); - if (setupScroller(scroller, sb)) - ret = QRectF::fromCGRect([scroller rectForPart:part]).toRect(); - } - } - break; - case CC_Slider: - if (const QStyleOptionSlider *sl = qstyleoption_cast(opt)) { - const bool hasTicks = sl->tickPosition != QStyleOptionSlider::NoTicks; - const bool isHorizontal = sl->orientation == Qt::Horizontal; - const auto ct = isHorizontal ? QMacStylePrivate::Slider_Horizontal : QMacStylePrivate::Slider_Vertical; - const auto cs = d->effectiveAquaSizeConstrain(opt); - const auto cw = QMacStylePrivate::CocoaControl(ct, cs); - auto *slider = static_cast(d->cocoaControl(cw)); - if (!setupSlider(slider, sl)) - break; - - NSSliderCell *cell = slider.cell; - if (sc == SC_SliderHandle) { - ret = QRectF::fromCGRect([cell knobRectFlipped:slider.isFlipped]).toRect(); - } else if (sc == SC_SliderGroove) { - ret = QRectF::fromCGRect([cell barRectFlipped:slider.isFlipped]).toRect(); - } else if (hasTicks && sc == SC_SliderTickmarks) { - const auto tickMarkRect = QRectF::fromCGRect([cell rectOfTickMarkAtIndex:0]); - if (isHorizontal) - ret = QRect(sl->rect.left(), tickMarkRect.top(), sl->rect.width(), tickMarkRect.height()); - else - ret = QRect(tickMarkRect.left(), sl->rect.top(), tickMarkRect.width(), sl->rect.height()); - } - -// if (sl->upsideDown) { -// if isHorizontal) { -// } else { -// } -// } - } - break; - case CC_TitleBar: - if (const auto *titlebar = qstyleoption_cast(opt)) { - // The title bar layout is as follows: close, min, zoom, icon, title - // [ x _ + @ Window Title ] - // Center the icon and title until it starts to overlap with the buttons. - // The icon doesn't count towards SC_TitleBarLabel, but it's still rendered - // next to the title text. See drawComplexControl(). - if (sc == SC_TitleBarLabel) { - qreal labelWidth = titlebar->fontMetrics.horizontalAdvance(titlebar->text) + 1; // FIXME Rounding error? - qreal labelHeight = titlebar->fontMetrics.height(); - - const auto lastButtonRect = proxy()->subControlRect(CC_TitleBar, titlebar, SC_TitleBarMaxButton); - qreal controlsSpacing = lastButtonRect.right() + titleBarButtonSpacing; - if (!titlebar->icon.isNull()) { - const auto iconSize = proxy()->pixelMetric(PM_SmallIconSize); - const auto actualIconSize = titlebar->icon.actualSize(QSize(iconSize, iconSize)).width();; - controlsSpacing += actualIconSize + titleBarIconTitleSpacing; - } - - const qreal labelPos = qMax(controlsSpacing, (opt->rect.width() - labelWidth) / 2.0); - labelWidth = qMin(labelWidth, opt->rect.width() - (labelPos + titleBarTitleRightMargin)); - ret = QRect(labelPos, (opt->rect.height() - labelHeight) / 2, - labelWidth, labelHeight); - } else { - const auto currentButton = d->windowButtonCocoaControl(sc); - if (currentButton == QMacStylePrivate::NoControl) - break; - - QPointF buttonPos = titlebar->rect.topLeft() + QPointF(titleBarButtonSpacing, 0); - QSizeF buttonSize; - for (int ct = QMacStylePrivate::Button_WindowClose; ct <= currentButton; ct++) { - const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::CocoaControlType(ct), - QStyleHelper::SizeLarge); - auto *wb = static_cast(d->cocoaControl(cw)); - if (ct == currentButton) - buttonSize = QSizeF::fromCGSize(wb.frame.size); - else - buttonPos.rx() += wb.frame.size.width + titleBarButtonSpacing; - } - - const auto vOffset = (opt->rect.height() - buttonSize.height()) / 2.0; - ret = QRectF(buttonPos, buttonSize).translated(0, vOffset).toRect(); - } - } - break; - case CC_ComboBox: - if (const QStyleOptionComboBox *combo = qstyleoption_cast(opt)) { - const auto ct = cocoaControlType(combo); - const auto cs = d->effectiveAquaSizeConstrain(combo); - const auto cw = QMacStylePrivate::CocoaControl(ct, cs); - - // Old widget path. Current not understood why it's needed: - //const auto editRect = QMacStylePrivate::comboboxEditBounds(cw.adjustedControlFrame(combo->rect), cw); - - // New path: - QRectF editRect; - switch (cs) { - case QStyleHelper::SizeLarge: - editRect = combo->rect.adjusted(15, 7, -25, -9); - break; - case QStyleHelper::SizeSmall: - if (combo->editable) - editRect = combo->rect.adjusted(15, 6, -22, -9); - else - editRect = combo->rect.adjusted(15, 8, -22, -6); - break; - default: - if (combo->editable) - editRect = combo->rect.adjusted(15, 6, -20, -7); - else - editRect = combo->rect.adjusted(15, 5, -22, -6); - break; - } - - switch (sc) { - case SC_ComboBoxEditField:{ - ret = editRect.toAlignedRect(); - break; } - case SC_ComboBoxArrow:{ - ret = editRect.toAlignedRect(); - ret.setX(ret.x() + ret.width()); - ret.setWidth(combo->rect.right() - ret.right()); - break; } - case SC_ComboBoxListBoxPopup:{ - if (combo->editable) { - const CGRect inner = QMacStylePrivate::comboboxInnerBounds(combo->rect.toCGRect(), cw); - const int comboTop = combo->rect.top(); - ret = QRect(qRound(inner.origin.x), - comboTop, - qRound(inner.origin.x - combo->rect.left() + inner.size.width), - editRect.bottom() - comboTop + 2); - } else { - ret = QRect(combo->rect.x() + 4 - 11, - combo->rect.y() + 1, - editRect.width() + 10 + 11, - 1); - } - break; } - default: - break; - } - } - break; - case CC_GroupBox: - if (const QStyleOptionGroupBox *groupBox = qstyleoption_cast(opt)) { - bool checkable = groupBox->subControls & SC_GroupBoxCheckBox; - const bool flat = groupBox->features & QStyleOptionFrame::Flat; - bool hasNoText = !checkable && groupBox->text.isEmpty(); - switch (sc) { - case SC_GroupBoxLabel: - case SC_GroupBoxCheckBox: { - // Cheat and use the smaller font if we need to - const bool checkable = groupBox->subControls & SC_GroupBoxCheckBox; - const bool fontIsSet = false; -// const bool fontIsSet = (widget && widget->testAttribute(Qt::WA_SetFont)) -// || !QApplication::desktopSettingsAware(); - const int margin = flat || hasNoText ? 0 : 9; - ret = groupBox->rect.adjusted(margin, 0, -margin, 0); - - const QFontMetricsF fm = flat || fontIsSet ? QFontMetricsF(groupBox->fontMetrics) : QFontMetricsF(d->smallSystemFont); - const QSizeF s = fm.size(Qt::AlignHCenter | Qt::AlignVCenter, qt_mac_removeMnemonics(groupBox->text), 0, nullptr); - const int tw = qCeil(s.width()); - const int h = qCeil(fm.height()); - ret.setHeight(h); - - QRect labelRect = alignedRect(groupBox->direction, groupBox->textAlignment, - QSize(tw, h), ret); - if (flat && checkable) - labelRect.moveLeft(labelRect.left() + 4); - int indicatorWidth = proxy()->pixelMetric(PM_IndicatorWidth, opt); - bool rtl = groupBox->direction == Qt::RightToLeft; - if (sc == SC_GroupBoxLabel) { - if (checkable) { - int newSum = indicatorWidth + 1; - int newLeft = labelRect.left() + (rtl ? -newSum : newSum); - labelRect.moveLeft(newLeft); - if (flat) - labelRect.moveTop(labelRect.top() + 3); - else - labelRect.moveTop(labelRect.top() + 4); - } else if (flat) { - int newLeft = labelRect.left() - (rtl ? 3 : -3); - labelRect.moveLeft(newLeft); - labelRect.moveTop(labelRect.top() + 3); - } else { - int newLeft = labelRect.left() - (rtl ? 3 : 2); - labelRect.moveLeft(newLeft); - labelRect.moveTop(labelRect.top() + 4); - } - ret = labelRect; - } - - if (sc == SC_GroupBoxCheckBox) { - int left = rtl ? labelRect.right() - indicatorWidth : labelRect.left() - 1; - int top = flat ? ret.top() + 1 : ret.top() + 5; - ret.setRect(left, top, - indicatorWidth, proxy()->pixelMetric(PM_IndicatorHeight, opt)); - } - break; - } - case SC_GroupBoxContents: - case SC_GroupBoxFrame: { - QFontMetrics fm = groupBox->fontMetrics; - int yOffset = 3; - if (!flat) - yOffset = 5; - - if (hasNoText) - yOffset = -qCeil(QFontMetricsF(fm).height()); - ret = opt->rect.adjusted(0, qCeil(QFontMetricsF(fm).height()) + yOffset, 0, 0); - if (sc == SC_GroupBoxContents) { - if (flat) - ret.adjust(3, -5, -3, -4); // guess too - else - ret.adjust(3, 3, -3, -4); // guess - } - } - break; - default: - ret = QCommonStyle::subControlRect(cc, groupBox, sc); - break; - } - } - break; - case CC_SpinBox: - if (const QStyleOptionSpinBox *spin = qstyleoption_cast(opt)) { - QStyleHelper::WidgetSizePolicy aquaSize = d->effectiveAquaSizeConstrain(spin); - const auto fw = proxy()->pixelMetric(PM_SpinBoxFrameWidth, spin); - int spinner_w; - int spinner_h; - int adjust_y; - int spinBoxSep; - switch (aquaSize) { - case QStyleHelper::SizeLarge: - spinner_w = 14; - spinner_h = 24; - adjust_y = -1; - spinBoxSep = 2; - break; - case QStyleHelper::SizeSmall: - spinner_w = 12; - spinner_h = 20; - adjust_y = -1; - spinBoxSep = 2; - break; - case QStyleHelper::SizeMini: - spinner_w = 10; - spinner_h = 16; - adjust_y = -1; - spinBoxSep = 1; - break; - default: - Q_UNREACHABLE(); - } - - switch (sc) { - case SC_SpinBoxUp: - case SC_SpinBoxDown: { - if (spin->buttonSymbols == QStyleOptionSpinBox::NoButtons) - break; - - const int y = fw; - const int x = spin->rect.width() - spinner_w; - ret.setRect(x + spin->rect.x(), y + spin->rect.y(), spinner_w, spinner_h); - - const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::Stepper, aquaSize); - NSStepperCell *cell = static_cast(d->cocoaCell(cw)); - const CGRect outRect = [cell drawingRectForBounds:ret.toCGRect()]; - ret = QRectF::fromCGRect(outRect).toRect(); - - switch (sc) { - case SC_SpinBoxUp: - ret.setHeight(ret.height() / 2); - break; - case SC_SpinBoxDown: - ret.setY(ret.y() + ret.height() / 2); - break; - default: - Q_ASSERT(0); - break; - } - // The buttons are drawn with a top-margin (for some reason) into - // the rect. So undo that margin here: - ret.translate(0, adjust_y); - ret = visualRect(spin->direction, spin->rect, ret); - break; - } - case SC_SpinBoxEditField: - ret = spin->rect.adjusted(fw, fw, -fw, -fw); - if (spin->subControls & SC_SpinBoxUp || spin->subControls & SC_SpinBoxDown) { - ret.setWidth(spin->rect.width() - spinBoxSep - spinner_w); - ret = visualRect(spin->direction, spin->rect, ret); - } - break; - default: - ret = QCommonStyle::subControlRect(cc, spin, sc); - break; - } - } - break; - case CC_ToolButton: - ret = QCommonStyle::subControlRect(cc, opt, sc); - if (sc == SC_ToolButtonMenu) { -#ifndef QT_NO_ACCESSIBILITY - if (QStyleHelper::hasAncestor(opt->styleObject, QAccessible::ToolBar)) - ret.adjust(-toolButtonArrowMargin, 0, 0, 0); -#endif - ret.adjust(-1, 0, 0, 0); - } - break; - default: - ret = QCommonStyle::subControlRect(cc, opt, sc); - break; - } - return ret; -} - -QSize QMacStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, const QSize &csz) const -{ - Q_D(const QMacStyle); - - QSize sz(csz); - bool useAquaGuideline = true; - - switch (ct) { - case CT_SpinBox: - if (const QStyleOptionSpinBox *vopt = qstyleoption_cast(opt)) { - if (vopt->subControls == SC_SpinBoxFrame) { - const QSize minimumSize(20, 24); - if (sz.width() < minimumSize.width()) - sz.setWidth(minimumSize.width()); - if (sz.height() < minimumSize.height()) - sz.setHeight(minimumSize.height()); - } else { - const QSize buttonSize = proxy()->subControlRect(CC_SpinBox, vopt, SC_SpinBoxUp).size(); - const int upAndDownTogetherHeight = buttonSize.height() * 2; - sz += QSize(buttonSize.width(), upAndDownTogetherHeight); - } - } - break; - case QStyle::CT_TabWidget: - // the size between the pane and the "contentsRect" (+4,+4) - // (the "contentsRect" is on the inside of the pane) - sz = QCommonStyle::sizeFromContents(ct, opt, csz); - /** - This is supposed to show the relationship between the tabBar and - the stack widget of a QTabWidget. - Unfortunately ascii is not a good way of representing graphics..... - PS: The '=' line is the painted frame. - - top ---+ - | - | - | - | vvv just outside the painted frame is the "pane" - - -|- - - - - - - - - - <-+ - TAB BAR +=====^============ | +2 pixels - - - -|- - -|- - - - - - - <-+ - | | ^ ^^^ just inside the painted frame is the "contentsRect" - | | | - | overlap | - | | | - bottom ------+ <-+ +14 pixels - | - v - ------------------------------ <- top of stack widget - - - To summarize: - * 2 is the distance between the pane and the contentsRect - * The 14 and the 1's are the distance from the contentsRect to the stack widget. - (same value as used in SE_TabWidgetTabContents) - * overlap is how much the pane should overlap the tab bar - */ - // then add the size between the stackwidget and the "contentsRect" - if (const QStyleOptionTabWidgetFrame *twf - = qstyleoption_cast(opt)) { - QSize extra(0,0); - const int overlap = pixelMetric(PM_TabBarBaseOverlap, opt); - const int gapBetweenTabbarAndStackWidget = 2 + 14 - overlap; - - const auto tabDirection = QMacStylePrivate::tabDirection(twf->shape); - if (tabDirection == QMacStylePrivate::North - || tabDirection == QMacStylePrivate::South) { - extra = QSize(2, gapBetweenTabbarAndStackWidget + 1); - } else { - extra = QSize(gapBetweenTabbarAndStackWidget + 1, 2); - } - sz+= extra; - } - break; - case QStyle::CT_TabBarTab: - if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { -// const bool differentFont = (widget && widget->testAttribute(Qt::WA_SetFont)) -// || !QApplication::desktopSettingsAware(); - const bool differentFont = false; - const auto tabDirection = QMacStylePrivate::tabDirection(tab->shape); - const bool verticalTabs = tabDirection == QMacStylePrivate::East - || tabDirection == QMacStylePrivate::West; - if (verticalTabs) - sz = sz.transposed(); - - int defaultTabHeight; - const auto cs = d->effectiveAquaSizeConstrain(opt); - switch (cs) { - case QStyleHelper::SizeLarge: - if (tab->documentMode) - defaultTabHeight = 24; - else - defaultTabHeight = 21; - break; - case QStyleHelper::SizeSmall: - defaultTabHeight = 18; - break; - case QStyleHelper::SizeMini: - defaultTabHeight = 16; - break; - default: - break; - } - - const bool widthSet = !differentFont && tab->icon.isNull(); - if (widthSet) { - const auto textSize = opt->fontMetrics.size(Qt::TextShowMnemonic, tab->text); - sz.rwidth() = textSize.width(); - sz.rheight() = qMax(defaultTabHeight, textSize.height()); - } else { - sz.rheight() = qMax(defaultTabHeight, sz.height()); - } - sz.rwidth() += proxy()->pixelMetric(PM_TabBarTabHSpace, tab); - - if (verticalTabs) - sz = sz.transposed(); - - int maxWidgetHeight = qMax(tab->leftButtonSize.height(), tab->rightButtonSize.height()); - int maxWidgetWidth = qMax(tab->leftButtonSize.width(), tab->rightButtonSize.width()); - - int widgetWidth = 0; - int widgetHeight = 0; - int padding = 0; - if (tab->leftButtonSize.isValid()) { - padding += 8; - widgetWidth += tab->leftButtonSize.width(); - widgetHeight += tab->leftButtonSize.height(); - } - if (tab->rightButtonSize.isValid()) { - padding += 8; - widgetWidth += tab->rightButtonSize.width(); - widgetHeight += tab->rightButtonSize.height(); - } - - if (verticalTabs) { - sz.setWidth(qMax(sz.width(), maxWidgetWidth)); - sz.setHeight(sz.height() + widgetHeight + padding); - } else { - if (widthSet) - sz.setWidth(sz.width() + widgetWidth + padding); - sz.setHeight(qMax(sz.height(), maxWidgetHeight)); - } - } - break; - case CT_LineEdit: - if (const QStyleOptionFrame *f = qstyleoption_cast(opt)) { - if (sz.isEmpty()) { - // Minimum size (with padding: 18x24) - sz.rwidth() = 10; - sz.rheight() = 20; - } - // From using pixelTool with XCode/NSTextTextField - int leftPadding = 4; - int rightPadding = 4; - int topPadding = 4; - int bottomPadding = 0; - - if (opt->state & QStyle::State_Small) { - topPadding = 3; - } else if (opt->state & QStyle::State_Mini) { - topPadding = 2; - } - - sz.rwidth() += leftPadding + rightPadding; - sz.rheight() += topPadding + bottomPadding; - } - break; - case QStyle::CT_PushButton: { - if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) - if (btn->features & QStyleOptionButton::CommandLinkButton) - return QCommonStyle::sizeFromContents(ct, opt, sz); - - // By default, we fit the contents inside a normal rounded push button. - // Do this by add enough space around the contents so that rounded - // borders (including highlighting when active) will show. - // TODO Use QFocusFrame and get rid of these horrors. - QSize macsz; - const auto controlSize = d->effectiveAquaSizeConstrain(opt, CT_PushButton, sz, &macsz); - // FIXME See comment in CT_PushButton case in qt_aqua_get_known_size(). - if (macsz.width() != -1) - sz.setWidth(macsz.width()); - else - sz.rwidth() += QMacStylePrivate::PushButtonLeftOffset + QMacStylePrivate::PushButtonRightOffset + 12; - // All values as measured from HIThemeGetButtonBackgroundBounds() - if (controlSize != QStyleHelper::SizeMini) - sz.rwidth() += 12; // We like 12 over here. - if (controlSize == QStyleHelper::SizeLarge && sz.height() > 16) - sz.rheight() += pushButtonDefaultHeight[QStyleHelper::SizeLarge] - 16; - else if (controlSize == QStyleHelper::SizeMini) - sz.setHeight(24); // FIXME Our previous HITheme-based logic returned this. - else - sz.setHeight(pushButtonDefaultHeight[controlSize]); - break; - } - case QStyle::CT_MenuItem: - if (const QStyleOptionMenuItem *mi = qstyleoption_cast(opt)) { - int maxpmw = mi->maxIconWidth; - int w = sz.width(); - int h = sz.height(); - -//#if QT_CONFIG(combobox) -// const QComboBox *comboBox = qobject_cast(widget); -//#endif - - if (mi->menuItemType == QStyleOptionMenuItem::Separator) { - w = 10; - h = qt_mac_aqua_get_metric(MenuSeparatorHeight); - } else { - h = mi->fontMetrics.height() + 2; - if (!mi->icon.isNull()) { -//#if QT_CONFIG(combobox) -// if (comboBox) { -// const QSize &iconSize = comboBox->iconSize(); -// h = qMax(h, iconSize.height() + 4); -// maxpmw = qMax(maxpmw, iconSize.width()); -// } else -//#endif - { - int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); - h = qMax(h, mi->icon.actualSize(QSize(iconExtent, iconExtent)).height() + 4); - } - } - } - if (mi->text.contains(QLatin1Char('\t'))) - w += 12; - else if (mi->menuItemType == QStyleOptionMenuItem::SubMenu) - w += 35; // Not quite exactly as it seems to depend on other factors - if (maxpmw) - w += maxpmw + 6; - // add space for a check. All items have place for a check too. - w += 20; -// if (comboBox && comboBox->isVisible()) { -// QStyleOptionComboBox cmb; -// cmb.initFrom(comboBox); -// cmb.editable = false; -// cmb.subControls = QStyle::SC_ComboBoxEditField; -// cmb.activeSubControls = QStyle::SC_None; -// w = qMax(w, subControlRect(QStyle::CC_ComboBox, &cmb, -// QStyle::SC_ComboBoxEditField, -// comboBox).width()); -// } else { -// w += 12; - sz = QSize(w, h); - } break; - case CT_MenuBarItem: - if (!sz.isEmpty()) - sz += QSize(12, 4); // Constants from QWindowsStyle - break; - case CT_ToolButton: - sz.rwidth() += 10; - sz.rheight() += 10; - if (const auto *tb = qstyleoption_cast(opt)) - if (tb->features & QStyleOptionToolButton::Menu) - sz.rwidth() += toolButtonArrowMargin; - return sz; - case CT_ComboBox: - if (const auto *cb = qstyleoption_cast(opt)) { - const int controlSize = getControlSize(opt); - - if (!cb->editable) { - if (sz.width() < 10) { - // minimumSize (to ensure a nice nine patch image) - sz.rwidth() += 10; - } - // Same as CT_PushButton, because we have to fit the focus - // ring and a non-editable combo box is a NSPopUpButton. - sz.rwidth() += QMacStylePrivate::PushButtonLeftOffset + QMacStylePrivate::PushButtonRightOffset; - - if (controlSize == QStyleHelper::SizeLarge) { - sz.rwidth() += 30; - } else if (controlSize == QStyleHelper::SizeSmall) { - sz.rwidth() += 26; - } else { - sz.rwidth() += 21; - } - } else { - sz.rwidth() += 50; // FIXME Double check this - } - - // This should be enough to fit the focus ring - if (controlSize == QStyleHelper::SizeMini) - sz.setHeight(24); // FIXME Our previous HITheme-based logic returned this for CT_PushButton. - else - sz.setHeight(pushButtonDefaultHeight[controlSize]); - - return sz; - } - break; - case CT_Menu: { - if (proxy() == this) { - sz = csz; - } else { - QStyleHintReturnMask menuMask; - QStyleOption myOption = *opt; - myOption.rect.setSize(sz); - if (proxy()->styleHint(SH_Menu_Mask, &myOption, &menuMask)) - sz = menuMask.region.boundingRect().size(); - } - break; } - case CT_HeaderSection:{ - const QStyleOptionHeader *header = qstyleoption_cast(opt); - sz = QCommonStyle::sizeFromContents(ct, opt, csz); - if (header->text.contains(QLatin1Char('\n'))) - useAquaGuideline = false; - break; } - case CT_ScrollBar : - // Make sure that the scroll bar is large enough to display the thumb indicator. - if (const QStyleOptionSlider *slider = qstyleoption_cast(opt)) { - const int minimumWidth = 24; - const int absoluteHeight = 14; - if (slider->orientation == Qt::Horizontal) { - sz = sz.expandedTo(QSize(minimumWidth, sz.height())); - sz.setHeight(absoluteHeight); - } else { - sz = sz.expandedTo(QSize(sz.width(), minimumWidth)); - sz.setWidth(absoluteHeight); - } - } - break; - case CT_ItemViewItem: - if (const QStyleOptionViewItem *vopt = qstyleoption_cast(opt)) { - sz = QCommonStyle::sizeFromContents(ct, vopt, csz); - sz.setHeight(sz.height() + 2); - } - break; - default: - sz = QCommonStyle::sizeFromContents(ct, opt, csz); - } - - if (useAquaGuideline && ct != CT_PushButton) { - // TODO Probably going away at some point - QSize macsz; - if (d->aquaSizeConstrain(opt, ct, sz, &macsz) != QStyleHelper::SizeDefault) { - if (macsz.width() != -1) - sz.setWidth(macsz.width()); - if (macsz.height() != -1) - sz.setHeight(macsz.height()); - } - } - - // The sizes that Carbon and the guidelines gives us excludes the focus frame. - // We compensate for this by adding some extra space here to make room for the frame when drawing: - if (const QStyleOptionComboBox *combo = qstyleoption_cast(opt)){ - if (combo->editable) { - const auto widgetSize = d->aquaSizeConstrain(opt); - QMacStylePrivate::CocoaControl cw; - cw.type = combo->editable ? QMacStylePrivate::ComboBox : QMacStylePrivate::Button_PopupButton; - cw.size = widgetSize; - const CGRect diffRect = QMacStylePrivate::comboboxInnerBounds(CGRectZero, cw); - sz.rwidth() -= qRound(diffRect.size.width); - sz.rheight() -= qRound(diffRect.size.height); - } - } - return sz; -} - -QFont QMacStyle::font(QStyle::ControlElement element, const QStyle::State state) const -{ - QFont font = QCommonStyle::font(element, state); - - if (state & QStyle::State_Small) { - font.setPixelSize(11); - } else if (state & QStyle::State_Mini) { - font.setPixelSize(9); - } - - return font; -} - -QMargins QMacStyle::ninePatchMargins(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, const QSize &imageSize) const -{ - QMargins margins; - - switch (cc) { - case CC_ComboBox: { - const QRect arrow = subControlRect(CC_ComboBox, opt, SC_ComboBoxArrow); - margins = QMargins(10, 0, arrow.width() + 1, -1); - break; } - default: - margins = QCommonStyle::ninePatchMargins(cc, opt, imageSize); - break; - } - - return margins; -} - -void QMacStyle::drawItemText(QPainter *p, const QRect &r, int flags, const QPalette &pal, - bool enabled, const QString &text, QPalette::ColorRole textRole) const -{ - if(flags & Qt::TextShowMnemonic) - flags |= Qt::TextHideMnemonic; - QCommonStyle::drawItemText(p, r, flags, pal, enabled, text, textRole); -} - -QIcon QMacStyle::standardIcon(StandardPixmap standardIcon, const QStyleOption *opt) const -{ - switch (standardIcon) { - default: - return QCommonStyle::standardIcon(standardIcon, opt); - case SP_ToolBarHorizontalExtensionButton: - case SP_ToolBarVerticalExtensionButton: { - QPixmap pixmap(QLatin1String(":/qt-project.org/styles/macstyle/images/toolbar-ext.png")); - if (standardIcon == SP_ToolBarVerticalExtensionButton) { - QPixmap pix2(pixmap.height(), pixmap.width()); - pix2.setDevicePixelRatio(pixmap.devicePixelRatio()); - pix2.fill(Qt::transparent); - QPainter p(&pix2); - p.translate(pix2.width(), 0); - p.rotate(90); - p.drawPixmap(0, 0, pixmap); - return pix2; - } - return pixmap; - } - } -} - -} // QQC2_NAMESPACE - -QT_END_NAMESPACE diff --git a/src/imports/nativestyle/qstyle/mac/qquickmacstyle_mac_p.h b/src/imports/nativestyle/qstyle/mac/qquickmacstyle_mac_p.h deleted file mode 100644 index b9e1c5f3..00000000 --- a/src/imports/nativestyle/qstyle/mac/qquickmacstyle_mac_p.h +++ /dev/null @@ -1,104 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QMACSTYLE_MAC_P_H -#define QMACSTYLE_MAC_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 "qquickcommonstyle.h" - -#define QQC2_NAMESPACE QQC2 - -QT_BEGIN_NAMESPACE - -class QPalette; - -namespace QQC2_NAMESPACE { - -class QStyleOptionButton; -class QMacStylePrivate; - -class QMacStyle : public QCommonStyle -{ - Q_OBJECT -public: - QMacStyle(); - ~QMacStyle(); - - void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p) const override; - void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p) const override; - void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p) const override; - - QRect subElementRect(SubElement r, const QStyleOption *opt) const override; - QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc) const override; - SubControl hitTestComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, const QPoint &pt) const override; - - QSize sizeFromContents(ContentsType ct, const QStyleOption *opt, const QSize &contentsSize) const override; - QFont font(ControlElement element, const QStyle::State state) const override; - QMargins ninePatchMargins(ComplexControl cc, const QStyleOptionComplex *opt, const QSize &imageSize) const override; - - int pixelMetric(PixelMetric pm, const QStyleOption *opt = 0) const override; - int styleHint(StyleHint sh, const QStyleOption *opt = 0, QStyleHintReturn *shret = 0) const override; - - QPixmap standardPixmap(StandardPixmap sp, const QStyleOption *opt) const override; - QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const override; - - void drawItemText(QPainter *p, const QRect &r, int flags, const QPalette &pal, - bool enabled, const QString &text, - QPalette::ColorRole textRole = QPalette::NoRole) const override; - - QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *opt = 0) const override; - -private: - Q_DISABLE_COPY_MOVE(QMacStyle) - Q_DECLARE_PRIVATE(QMacStyle) -}; - -} // QQC2_NAMESPACE - -QT_END_NAMESPACE - -#endif // QMACSTYLE_MAC_P_H diff --git a/src/imports/nativestyle/qstyle/mac/qquickmacstyle_mac_p_p.h b/src/imports/nativestyle/qstyle/mac/qquickmacstyle_mac_p_p.h deleted file mode 100644 index a0c67bfb..00000000 --- a/src/imports/nativestyle/qstyle/mac/qquickmacstyle_mac_p_p.h +++ /dev/null @@ -1,230 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - -#ifndef QMACSTYLE_MAC_P_P_H -#define QMACSTYLE_MAC_P_P_H - -#include "qquickmacstyle_mac_p.h" -#include "qquickcommonstyle_p.h" -#include "qquickstylehelper_p.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include - -#include -#include - -// -// 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. -// - -Q_FORWARD_DECLARE_MUTABLE_CG_TYPE(CGContext); - -Q_FORWARD_DECLARE_OBJC_CLASS(NSView); -Q_FORWARD_DECLARE_OBJC_CLASS(NSCell); - -QT_BEGIN_NAMESPACE - -namespace QQC2 { - -/* - AHIG: - macOS Human Interface Guidelines - https://developer.apple.com/macos/human-interface-guidelines/overview/themes/ - - Builder: - Interface Builder in Xcode 8 or later -*/ - -// this works as long as we have at most 16 different control types -#define CT1(c) CT2(c, c) -#define CT2(c1, c2) ((uint(c1) << 16) | uint(c2)) - -#define SIZE(large, small, mini) \ - (controlSize == QStyleHelper::SizeLarge ? (large) : controlSize == QStyleHelper::SizeSmall ? (small) : (mini)) - -// same as return SIZE(...) but optimized -#define return_SIZE(large, small, mini) \ - do { \ - static const int sizes[] = { (large), (small), (mini) }; \ - return sizes[controlSize]; \ - } while (false) - -class QMacStylePrivate : public QCommonStylePrivate -{ - Q_DECLARE_PUBLIC(QMacStyle) - -public: - enum Direction { - North, South, East, West - }; - - enum CocoaControlType { - NoControl, // For when there's no such a control in Cocoa - Box, // QGroupBox - Box_Dark, // FIXME See render code in drawPrimitive(PE_FrameTabWidget) - Button_CheckBox, - Button_Disclosure, // Disclosure triangle, like in QTreeView - Button_PopupButton, // Non-editable QComboBox - Button_PullDown, // QPushButton with menu - Button_PushButton, // Plain QPushButton and QTabBar buttons - Button_RadioButton, - Button_SquareButton, // Oversized QPushButton - Button_WindowClose, - Button_WindowMiniaturize, - Button_WindowZoom, - ComboBox, // Editable QComboBox - ProgressIndicator_Determinate, - ProgressIndicator_Indeterminate, - Scroller_Horizontal, - Scroller_Vertical, - SegmentedControl_First, // QTabBar buttons focus ring - SegmentedControl_Middle, - SegmentedControl_Last, - SegmentedControl_Single, - Slider_Horizontal, - Slider_Vertical, - SplitView_Horizontal, - SplitView_Vertical, - Stepper, // QSpinBox buttons - TextField - }; - - struct CocoaControl { - CocoaControl(); - CocoaControl(CocoaControlType t, QStyleHelper::WidgetSizePolicy s); - - CocoaControlType type; - QStyleHelper::WidgetSizePolicy size; - - bool operator==(const CocoaControl &other) const; - - QSizeF defaultFrameSize() const; - QRectF adjustedControlFrame(const QRectF &rect) const; - QMarginsF titleMargins() const; - - bool getCocoaButtonTypeAndBezelStyle(NSButtonType *buttonType, NSBezelStyle *bezelStyle) const; - }; - - typedef void (^DrawRectBlock)(CGContextRef, const CGRect &); - - QMacStylePrivate(); - ~QMacStylePrivate(); - - // Ideally these wouldn't exist, but since they already exist we need some accessors. - static const int PushButtonLeftOffset; - static const int PushButtonRightOffset; - static const int PushButtonContentPadding; - - enum Animates { AquaPushButton, AquaProgressBar, AquaListViewItemOpen, AquaScrollBar }; - QStyleHelper::WidgetSizePolicy aquaSizeConstrain(const QStyleOption *option, - QStyle::ContentsType ct = QStyle::CT_CustomBase, - QSize szHint=QSize(-1, -1), QSize *insz = 0) const; - QStyleHelper::WidgetSizePolicy effectiveAquaSizeConstrain(const QStyleOption *option, - QStyle::ContentsType ct = QStyle::CT_CustomBase, - QSize szHint=QSize(-1, -1), QSize *insz = 0) const; - inline int animateSpeed(Animates) const { return 33; } - - // Utility functions - static CGRect comboboxInnerBounds(const CGRect &outterBounds, const CocoaControl &cocoaWidget); - - static QRectF comboboxEditBounds(const QRectF &outterBounds, const CocoaControl &cw); - - void setAutoDefaultButton(QObject *button) const; - - NSView *cocoaControl(CocoaControl cocoaControl) const; - NSCell *cocoaCell(CocoaControl cocoaControl) const; - - void setupNSGraphicsContext(CGContextRef cg, bool flipped) const; - void restoreNSGraphicsContext(CGContextRef cg) const; - - void setupVerticalInvertedXform(CGContextRef cg, bool reverse, bool vertical, const CGRect &rect) const; - - void drawNSViewInRect(NSView *view, const QRectF &rect, QPainter *p, DrawRectBlock drawRectBlock = nil) const; - void resolveCurrentNSView(QWindow *window) const; - - void drawToolbarButtonArrow(const QStyleOption *opt, QPainter *p) const; - - QPainterPath windowPanelPath(const QRectF &r) const; - - CocoaControlType windowButtonCocoaControl(QStyle::SubControl sc) const; - - void tabLayout(const QStyleOptionTab *opt, QRect *textRect, QRect *iconRect) const override; - static Direction tabDirection(QStyleOptionTab::Shape shape); - static bool verticalTabs(QMacStylePrivate::Direction tabDirection); - -public: - mutable QPointer autoDefaultButton; - static QVector > scrollBars; - - mutable QPointer focusWidget; // TODO: rename to focusItem - mutable NSView *backingStoreNSView; - mutable QHash cocoaControls; - mutable QHash cocoaCells; - - QFont smallSystemFont; - QFont miniSystemFont; - - QMacKeyValueObserver appearanceObserver; -}; - -} // namespace QQC2 - -QT_END_NAMESPACE - -#endif // QMACSTYLE_MAC_P_P_H diff --git a/src/imports/nativestyle/qstyle/qquickcommonstyle.cpp b/src/imports/nativestyle/qstyle/qquickcommonstyle.cpp deleted file mode 100644 index 4a23039a..00000000 --- a/src/imports/nativestyle/qstyle/qquickcommonstyle.cpp +++ /dev/null @@ -1,6082 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickcommonstyle.h" -#include "qquickcommonstyle_p.h" -#include "qquickcommonstylepixmaps_p.h" - -#include "qquickstyleoption.h" -#include "qquickdrawutil.h" -#include "qquickstylehelper_p.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include - -QT_BEGIN_NAMESPACE - -static inline qreal dpr(const QWindow *w) -{ - return w != nullptr ? w->devicePixelRatio() : qApp->devicePixelRatio(); -} - -/*! - \class QCommonStyle - \brief The QCommonStyle class encapsulates the common Look and Feel of a GUI. - - \ingroup appearance - \inmodule QtWidgets - - This abstract class implements some of the widget's look and feel - that is common to all GUI styles provided and shipped as part of - Qt. - - Since QCommonStyle inherits QStyle, all of its functions are fully documented - in the QStyle documentation. - \omit - , although the - extra functions that QCommonStyle provides, e.g. - drawComplexControl(), drawControl(), drawPrimitive(), - hitTestComplexControl(), subControlRect(), sizeFromContents(), and - subElementRect() are documented here. - \endomit - - \sa QStyle, QProxyStyle -*/ - -namespace QQC2 { - -QCommonStyle::QCommonStyle() - : QStyle(*new QCommonStylePrivate) -{ } - -QCommonStyle::QCommonStyle(QCommonStylePrivate &dd) - : QStyle(dd) -{ } - -QCommonStyle::~QCommonStyle() -{ } - -void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p) const -{ - Q_D(const QCommonStyle); - switch (pe) { - case PE_FrameButtonBevel: - case PE_FrameButtonTool: - qDrawShadeRect(p, opt->rect, opt->palette, - opt->state & (State_Sunken | State_On), 1, 0); - break; - case PE_PanelButtonCommand: - case PE_PanelButtonBevel: - case PE_PanelButtonTool: - case PE_IndicatorButtonDropDown: - qDrawShadePanel(p, opt->rect, opt->palette, - opt->state & (State_Sunken | State_On), 1, - &opt->palette.brush(QPalette::Button)); - break; - case PE_IndicatorItemViewItemCheck: - proxy()->drawPrimitive(PE_IndicatorCheckBox, opt, p); - break; - case PE_IndicatorCheckBox: - if (opt->state & State_NoChange) { - p->setPen(opt->palette.windowText().color()); - p->fillRect(opt->rect, opt->palette.brush(QPalette::Button)); - p->drawRect(opt->rect); - p->drawLine(opt->rect.topLeft(), opt->rect.bottomRight()); - } else { - qDrawShadePanel(p, opt->rect.x(), opt->rect.y(), opt->rect.width(), opt->rect.height(), - opt->palette, opt->state & (State_Sunken | State_On), 1, - &opt->palette.brush(QPalette::Button)); - } - break; - case PE_IndicatorRadioButton: { - QRect ir = opt->rect; - p->setPen(opt->palette.dark().color()); - p->drawArc(opt->rect, 0, 5760); - if (opt->state & (State_Sunken | State_On)) { - ir.adjust(2, 2, -2, -2); - p->setBrush(opt->palette.windowText()); - p->drawEllipse(ir); - } - break; } - case PE_FrameFocusRect: - if (const QStyleOptionFocusRect *fropt = qstyleoption_cast(opt)) { - QColor bg = fropt->backgroundColor; - QPen oldPen = p->pen(); - if (bg.isValid()) { - int h, s, v; - bg.getHsv(&h, &s, &v); - if (v >= 128) - p->setPen(Qt::black); - else - p->setPen(Qt::white); - } else { - p->setPen(opt->palette.windowText().color()); - } - QRect focusRect = opt->rect.adjusted(1, 1, -1, -1); - p->drawRect(focusRect.adjusted(0, 0, -1, -1)); //draw pen inclusive - p->setPen(oldPen); - } - break; - case PE_IndicatorMenuCheckMark: { - const int markW = opt->rect.width() > 7 ? 7 : opt->rect.width(); - const int markH = markW; - int posX = opt->rect.x() + (opt->rect.width() - markW)/2 + 1; - int posY = opt->rect.y() + (opt->rect.height() - markH)/2; - - QVector a; - a.reserve(markH); - - int i, xx, yy; - xx = posX; - yy = 3 + posY; - for (i = 0; i < markW/2; ++i) { - a << QLineF(xx, yy, xx, yy + 2); - ++xx; - ++yy; - } - yy -= 2; - for (; i < markH; ++i) { - a << QLineF(xx, yy, xx, yy + 2); - ++xx; - --yy; - } - if (!(opt->state & State_Enabled) && !(opt->state & State_On)) { - p->save(); - p->translate(1, 1); - p->setPen(opt->palette.light().color()); - p->drawLines(a); - p->restore(); - } - p->setPen((opt->state & State_On) ? opt->palette.highlightedText().color() : opt->palette.text().color()); - p->drawLines(a); - break; } - case PE_Frame: - case PE_FrameMenu: - if (const QStyleOptionFrame *frame = qstyleoption_cast(opt)) { - if (pe == PE_FrameMenu || (frame->state & State_Sunken) || (frame->state & State_Raised)) { - qDrawShadePanel(p, frame->rect, frame->palette, frame->state & State_Sunken, - frame->lineWidth); - } else { - qDrawPlainRect(p, frame->rect, frame->palette.windowText().color(), frame->lineWidth); - } - } - break; - case PE_PanelMenuBar: - if (const QStyleOptionFrame *frame = qstyleoption_cast(opt)){ - qDrawShadePanel(p, frame->rect, frame->palette, false, frame->lineWidth, - &frame->palette.brush(QPalette::Button)); - - } - else if (const QStyleOptionToolBar *frame = qstyleoption_cast(opt)){ - qDrawShadePanel(p, frame->rect, frame->palette, false, frame->lineWidth, - &frame->palette.brush(QPalette::Button)); - } - - break; - case PE_PanelMenu: - break; - case PE_PanelToolBar: - break; - case PE_IndicatorProgressChunk: - { - p->fillRect(opt->rect.x(), opt->rect.y() + 3, opt->rect.width() -2, opt->rect.height() - 6, - opt->palette.brush(QPalette::Highlight)); - } - break; - case PE_IndicatorBranch: { - static const int decoration_size = 9; - int mid_h = opt->rect.x() + opt->rect.width() / 2; - int mid_v = opt->rect.y() + opt->rect.height() / 2; - int bef_h = mid_h; - int bef_v = mid_v; - int aft_h = mid_h; - int aft_v = mid_v; - if (opt->state & State_Children) { - int delta = decoration_size / 2; - bef_h -= delta; - bef_v -= delta; - aft_h += delta; - aft_v += delta; - p->drawLine(bef_h + 2, bef_v + 4, bef_h + 6, bef_v + 4); - if (!(opt->state & State_Open)) - p->drawLine(bef_h + 4, bef_v + 2, bef_h + 4, bef_v + 6); - QPen oldPen = p->pen(); - p->setPen(opt->palette.dark().color()); - p->drawRect(bef_h, bef_v, decoration_size - 1, decoration_size - 1); - p->setPen(oldPen); - } - QBrush brush(opt->palette.dark().color(), Qt::Dense4Pattern); - if (opt->state & State_Item) { - if (opt->direction == Qt::RightToLeft) - p->fillRect(opt->rect.left(), mid_v, bef_h - opt->rect.left(), 1, brush); - else - p->fillRect(aft_h, mid_v, opt->rect.right() - aft_h + 1, 1, brush); - } - if (opt->state & State_Sibling) - p->fillRect(mid_h, aft_v, 1, opt->rect.bottom() - aft_v + 1, brush); - if (opt->state & (State_Open | State_Children | State_Item | State_Sibling)) - p->fillRect(mid_h, opt->rect.y(), 1, bef_v - opt->rect.y(), brush); - break; } - case PE_FrameStatusBarItem: - qDrawShadeRect(p, opt->rect, opt->palette, true, 1, 0, nullptr); - break; - case PE_IndicatorHeaderArrow: - if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { - QPen oldPen = p->pen(); - if (header->sortIndicator & QStyleOptionHeader::SortUp) { - p->setPen(QPen(opt->palette.light(), 0)); - p->drawLine(opt->rect.x() + opt->rect.width(), opt->rect.y(), - opt->rect.x() + opt->rect.width() / 2, opt->rect.y() + opt->rect.height()); - p->setPen(QPen(opt->palette.dark(), 0)); - const QPoint points[] = { - QPoint(opt->rect.x() + opt->rect.width() / 2, opt->rect.y() + opt->rect.height()), - QPoint(opt->rect.x(), opt->rect.y()), - QPoint(opt->rect.x() + opt->rect.width(), opt->rect.y()), - }; - p->drawPolyline(points, sizeof points / sizeof *points); - } else if (header->sortIndicator & QStyleOptionHeader::SortDown) { - p->setPen(QPen(opt->palette.light(), 0)); - const QPoint points[] = { - QPoint(opt->rect.x(), opt->rect.y() + opt->rect.height()), - QPoint(opt->rect.x() + opt->rect.width(), opt->rect.y() + opt->rect.height()), - QPoint(opt->rect.x() + opt->rect.width() / 2, opt->rect.y()), - }; - p->drawPolyline(points, sizeof points / sizeof *points); - p->setPen(QPen(opt->palette.dark(), 0)); - p->drawLine(opt->rect.x(), opt->rect.y() + opt->rect.height(), - opt->rect.x() + opt->rect.width() / 2, opt->rect.y()); - } - p->setPen(oldPen); - } - break; - case PE_FrameTabBarBase: - if (const QStyleOptionTabBarBase *tbb - = qstyleoption_cast(opt)) { - p->save(); - switch (tbb->shape) { - case QStyleOptionTab::RoundedNorth: - case QStyleOptionTab::TriangularNorth: - p->setPen(QPen(tbb->palette.light(), 0)); - p->drawLine(tbb->rect.topLeft(), tbb->rect.topRight()); - break; - case QStyleOptionTab::RoundedWest: - case QStyleOptionTab::TriangularWest: - p->setPen(QPen(tbb->palette.light(), 0)); - p->drawLine(tbb->rect.topLeft(), tbb->rect.bottomLeft()); - break; - case QStyleOptionTab::RoundedSouth: - case QStyleOptionTab::TriangularSouth: - p->setPen(QPen(tbb->palette.shadow(), 0)); - p->drawLine(tbb->rect.left(), tbb->rect.bottom(), - tbb->rect.right(), tbb->rect.bottom()); - p->setPen(QPen(tbb->palette.dark(), 0)); - p->drawLine(tbb->rect.left(), tbb->rect.bottom() - 1, - tbb->rect.right() - 1, tbb->rect.bottom() - 1); - break; - case QStyleOptionTab::RoundedEast: - case QStyleOptionTab::TriangularEast: - p->setPen(QPen(tbb->palette.dark(), 0)); - p->drawLine(tbb->rect.topRight(), tbb->rect.bottomRight()); - break; - } - p->restore(); - } - break; - case PE_IndicatorTabClose: { - if (d->tabBarcloseButtonIcon.isNull()) { - d->tabBarcloseButtonIcon.addPixmap(QPixmap( - QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-closetab-16.png")), - QIcon::Normal, QIcon::Off); - d->tabBarcloseButtonIcon.addPixmap(QPixmap( - QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-closetab-down-16.png")), - QIcon::Normal, QIcon::On); - d->tabBarcloseButtonIcon.addPixmap(QPixmap( - QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-closetab-hover-16.png")), - QIcon::Active, QIcon::Off); - } - - int size = proxy()->pixelMetric(QStyle::PM_SmallIconSize); - QIcon::Mode mode = opt->state & State_Enabled ? - (opt->state & State_Raised ? QIcon::Active : QIcon::Normal) - : QIcon::Disabled; - if (!(opt->state & State_Raised) - && !(opt->state & State_Sunken) - && !(opt->state & QStyle::State_Selected)) - mode = QIcon::Disabled; - - QIcon::State state = opt->state & State_Sunken ? QIcon::On : QIcon::Off; - QPixmap pixmap = d->tabBarcloseButtonIcon.pixmap(QSize(size, size), dpr(opt->window), mode, state); - proxy()->drawItemPixmap(p, opt->rect, Qt::AlignCenter, pixmap); - break; - } - case PE_FrameTabWidget: - case PE_FrameWindow: - qDrawWinPanel(p, opt->rect, opt->palette, false, nullptr); - break; - case PE_FrameLineEdit: - proxy()->drawPrimitive(PE_Frame, opt, p); - break; - case PE_FrameGroupBox: - if (const QStyleOptionFrame *frame = qstyleoption_cast(opt)) { - if (frame->features & QStyleOptionFrame::Flat) { - QRect fr = frame->rect; - QPoint p1(fr.x(), fr.y() + 1); - QPoint p2(fr.x() + fr.width(), p1.y()); - qDrawShadeLine(p, p1, p2, frame->palette, true, - frame->lineWidth, frame->midLineWidth); - } else { - qDrawShadeRect(p, frame->rect.x(), frame->rect.y(), frame->rect.width(), - frame->rect.height(), frame->palette, true, - frame->lineWidth, frame->midLineWidth); - } - } - break; - case PE_FrameDockWidget: - if (const QStyleOptionFrame *frame = qstyleoption_cast(opt)) { - int lw = frame->lineWidth; - if (lw <= 0) - lw = proxy()->pixelMetric(PM_DockWidgetFrameWidth); - - qDrawShadePanel(p, frame->rect, frame->palette, false, lw); - } - break; - case PE_IndicatorToolBarHandle: - p->save(); - p->translate(opt->rect.x(), opt->rect.y()); - if (opt->state & State_Horizontal) { - int x = opt->rect.width() / 3; - if (opt->direction == Qt::RightToLeft) - x -= 2; - if (opt->rect.height() > 4) { - qDrawShadePanel(p, x, 2, 3, opt->rect.height() - 4, - opt->palette, false, 1, nullptr); - qDrawShadePanel(p, x+3, 2, 3, opt->rect.height() - 4, - opt->palette, false, 1, nullptr); - } - } else { - if (opt->rect.width() > 4) { - int y = opt->rect.height() / 3; - qDrawShadePanel(p, 2, y, opt->rect.width() - 4, 3, - opt->palette, false, 1, nullptr); - qDrawShadePanel(p, 2, y+3, opt->rect.width() - 4, 3, - opt->palette, false, 1, nullptr); - } - } - p->restore(); - break; - case PE_IndicatorToolBarSeparator: - { - QPoint p1, p2; - if (opt->state & State_Horizontal) { - p1 = QPoint(opt->rect.width()/2, 0); - p2 = QPoint(p1.x(), opt->rect.height()); - } else { - p1 = QPoint(0, opt->rect.height()/2); - p2 = QPoint(opt->rect.width(), p1.y()); - } - qDrawShadeLine(p, p1, p2, opt->palette, 1, 1, 0); - break; - } - case PE_IndicatorSpinPlus: - case PE_IndicatorSpinMinus: { - QRect r = opt->rect; - int fw = proxy()->pixelMetric(PM_DefaultFrameWidth, opt); - QRect br = r.adjusted(fw, fw, -fw, -fw); - - int offset = (opt->state & State_Sunken) ? 1 : 0; - int step = (br.width() + 4) / 5; - p->fillRect(br.x() + offset, br.y() + offset +br.height() / 2 - step / 2, - br.width(), step, - opt->palette.buttonText()); - if (pe == PE_IndicatorSpinPlus) - p->fillRect(br.x() + br.width() / 2 - step / 2 + offset, br.y() + offset, - step, br.height(), - opt->palette.buttonText()); - - break; } - case PE_IndicatorSpinUp: - case PE_IndicatorSpinDown: { - QRect r = opt->rect; - int fw = proxy()->pixelMetric(PM_DefaultFrameWidth, opt); - // QRect br = r.adjusted(fw, fw, -fw, -fw); - int x = r.x(), y = r.y(), w = r.width(), h = r.height(); - int sw = w-4; - if (sw < 3) - break; - else if (!(sw & 1)) - sw--; - sw -= (sw / 7) * 2; // Empty border - int sh = sw/2 + 2; // Must have empty row at foot of arrow - - int sx = x + w / 2 - sw / 2; - int sy = y + h / 2 - sh / 2; - - if (pe == PE_IndicatorSpinUp && fw) - --sy; - - int bsx = 0; - int bsy = 0; - if (opt->state & State_Sunken) { - bsx = proxy()->pixelMetric(PM_ButtonShiftHorizontal); - bsy = proxy()->pixelMetric(PM_ButtonShiftVertical); - } - p->save(); - p->translate(sx + bsx, sy + bsy); - p->setPen(opt->palette.buttonText().color()); - p->setBrush(opt->palette.buttonText()); - if (pe == PE_IndicatorSpinDown) { - const QPoint points[] = { QPoint(0, 1), QPoint(sw-1, 1), QPoint(sh-2, sh-1) }; - p->drawPolygon(points, sizeof points / sizeof *points); - } else { - const QPoint points[] = { QPoint(0, sh-1), QPoint(sw-1, sh-1), QPoint(sh-2, 1) }; - p->drawPolygon(points, sizeof points / sizeof *points); - } - p->restore(); - break; } - case PE_PanelTipLabel: { - const QBrush brush(opt->palette.toolTipBase()); - qDrawPlainRect(p, opt->rect, opt->palette.toolTipText().color(), 1, &brush); - break; - } - case PE_IndicatorTabTear: - if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { - bool rtl = tab->direction == Qt::RightToLeft; - const bool horizontal = tab->rect.height() > tab->rect.width(); - const int margin = 4; - QPainterPath path; - - if (horizontal) { - QRect rect = tab->rect.adjusted(rtl ? margin : 0, 0, rtl ? 1 : -margin, 0); - rect.setTop(rect.top() + ((tab->state & State_Selected) ? 1 : 3)); - rect.setBottom(rect.bottom() - ((tab->state & State_Selected) ? 0 : 2)); - - path.moveTo(QPoint(rtl ? rect.right() : rect.left(), rect.top())); - int count = 4; - for (int jags = 1; jags <= count; ++jags, rtl = !rtl) - path.lineTo(QPoint(rtl ? rect.left() : rect.right(), rect.top() + jags * rect.height()/count)); - } else { - QRect rect = tab->rect.adjusted(0, 0, 0, -margin); - rect.setLeft(rect.left() + ((tab->state & State_Selected) ? 1 : 3)); - rect.setRight(rect.right() - ((tab->state & State_Selected) ? 0 : 2)); - - path.moveTo(QPoint(rect.left(), rect.top())); - int count = 4; - for (int jags = 1; jags <= count; ++jags, rtl = !rtl) - path.lineTo(QPoint(rect.left() + jags * rect.width()/count, rtl ? rect.top() : rect.bottom())); - } - - p->setPen(QPen(tab->palette.dark(), qreal(.8))); - p->setBrush(tab->palette.window()); - p->setRenderHint(QPainter::Antialiasing); - p->drawPath(path); - } - break; - case PE_PanelLineEdit: - if (const QStyleOptionFrame *panel = qstyleoption_cast(opt)) { - p->fillRect(panel->rect.adjusted(panel->lineWidth, panel->lineWidth, -panel->lineWidth, -panel->lineWidth), - panel->palette.brush(QPalette::Base)); - - if (panel->lineWidth > 0) - proxy()->drawPrimitive(PE_FrameLineEdit, panel, p); - } - break; - case PE_IndicatorColumnViewArrow: { - if (const QStyleOptionViewItem *viewOpt = qstyleoption_cast(opt)) { - bool reverse = (viewOpt->direction == Qt::RightToLeft); - p->save(); - QPainterPath path; - int x = viewOpt->rect.x() + 1; - int offset = (viewOpt->rect.height() / 3); - int height = (viewOpt->rect.height()) - offset * 2; - if (height % 2 == 1) - --height; - int x2 = x + height - 1; - if (reverse) { - x = viewOpt->rect.x() + viewOpt->rect.width() - 1; - x2 = x - height + 1; - } - path.moveTo(x, viewOpt->rect.y() + offset); - path.lineTo(x, viewOpt->rect.y() + offset + height); - path.lineTo(x2, viewOpt->rect.y() + offset+height/2); - path.closeSubpath(); - if (viewOpt->state & QStyle::State_Selected ) { - if (viewOpt->showDecorationSelected) { - QColor color = viewOpt->palette.color(QPalette::Active, QPalette::HighlightedText); - p->setPen(color); - p->setBrush(color); - } else { - QColor color = viewOpt->palette.color(QPalette::Active, QPalette::WindowText); - p->setPen(color); - p->setBrush(color); - } - - } else { - QColor color = viewOpt->palette.color(QPalette::Active, QPalette::Mid); - p->setPen(color); - p->setBrush(color); - } - p->drawPath(path); - - // draw the vertical and top triangle line - if (!(viewOpt->state & QStyle::State_Selected)) { - QPainterPath lines; - lines.moveTo(x, viewOpt->rect.y() + offset); - lines.lineTo(x, viewOpt->rect.y() + offset + height); - lines.moveTo(x, viewOpt->rect.y() + offset); - lines.lineTo(x2, viewOpt->rect.y() + offset+height/2); - QColor color = viewOpt->palette.color(QPalette::Active, QPalette::Dark); - p->setPen(color); - p->drawPath(lines); - } - p->restore(); - } - break; } - case PE_IndicatorItemViewItemDrop: { - QRect rect = opt->rect; - if (opt->rect.height() == 0) - p->drawLine(rect.topLeft(), rect.topRight()); - else - p->drawRect(rect); - break; } - case PE_PanelItemViewRow: - if (const QStyleOptionViewItem *vopt = qstyleoption_cast(opt)) { - QPalette::ColorGroup cg = vopt->state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled; - if (cg == QPalette::Normal && !(vopt->state & QStyle::State_Active)) - cg = QPalette::Inactive; - - if ((vopt->state & QStyle::State_Selected) && proxy()->styleHint(QStyle::SH_ItemView_ShowDecorationSelected, opt)) - p->fillRect(vopt->rect, vopt->palette.brush(cg, QPalette::Highlight)); - else if (vopt->features & QStyleOptionViewItem::Alternate) - p->fillRect(vopt->rect, vopt->palette.brush(cg, QPalette::AlternateBase)); - } - break; - case PE_PanelItemViewItem: - if (const QStyleOptionViewItem *vopt = qstyleoption_cast(opt)) { - QPalette::ColorGroup cg = vopt->state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled; - if (cg == QPalette::Normal && !(vopt->state & QStyle::State_Active)) - cg = QPalette::Inactive; - - if (vopt->showDecorationSelected && (vopt->state & QStyle::State_Selected)) { - p->fillRect(vopt->rect, vopt->palette.brush(cg, QPalette::Highlight)); - } else { - if (vopt->backgroundBrush.style() != Qt::NoBrush) { - QPointF oldBO = p->brushOrigin(); - p->setBrushOrigin(vopt->rect.topLeft()); - p->fillRect(vopt->rect, vopt->backgroundBrush); - p->setBrushOrigin(oldBO); - } - - if (vopt->state & QStyle::State_Selected) { - QRect textRect = subElementRect(QStyle::SE_ItemViewItemText, opt); - p->fillRect(textRect, vopt->palette.brush(cg, QPalette::Highlight)); - } - } - } - break; - case PE_PanelScrollAreaCorner: { - const QBrush brush(opt->palette.brush(QPalette::Window)); - p->fillRect(opt->rect, brush); - } break; - case PE_IndicatorArrowUp: - case PE_IndicatorArrowDown: - case PE_IndicatorArrowRight: - case PE_IndicatorArrowLeft: - { - if (opt->rect.width() <= 1 || opt->rect.height() <= 1) - break; - QRect r = opt->rect; - int size = qMin(r.height(), r.width()); - QPixmap pixmap; - QString pixmapName = QStyleHelper::uniqueName(QLatin1String("$qt_ia-") - % QLatin1String(metaObject()->className()), opt, QSize(size, size)) - % HexString(pe); - if (!QPixmapCache::find(pixmapName, &pixmap)) { - qreal pixelRatio = p->device()->devicePixelRatioF(); - int border = qRound(pixelRatio*(size/5)); - int sqsize = qRound(pixelRatio*(2*(size/2))); - QImage image(sqsize, sqsize, QImage::Format_ARGB32_Premultiplied); - image.fill(0); - QPainter imagePainter(&image); - - QPolygon a; - switch (pe) { - case PE_IndicatorArrowUp: - a.setPoints(3, border, sqsize/2, sqsize/2, border, sqsize - border, sqsize/2); - break; - case PE_IndicatorArrowDown: - a.setPoints(3, border, sqsize/2, sqsize/2, sqsize - border, sqsize - border, sqsize/2); - break; - case PE_IndicatorArrowRight: - a.setPoints(3, sqsize - border, sqsize/2, sqsize/2, border, sqsize/2, sqsize - border); - break; - case PE_IndicatorArrowLeft: - a.setPoints(3, border, sqsize/2, sqsize/2, border, sqsize/2, sqsize - border); - break; - default: - break; - } - - int bsx = 0; - int bsy = 0; - - if (opt->state & State_Sunken) { - bsx = proxy()->pixelMetric(PM_ButtonShiftHorizontal, opt); - bsy = proxy()->pixelMetric(PM_ButtonShiftVertical, opt); - } - - QRect bounds = a.boundingRect(); - int sx = sqsize / 2 - bounds.center().x() - 1; - int sy = sqsize / 2 - bounds.center().y() - 1; - imagePainter.translate(sx + bsx, sy + bsy); - imagePainter.setPen(opt->palette.buttonText().color()); - imagePainter.setBrush(opt->palette.buttonText()); - - if (!(opt->state & State_Enabled)) { - imagePainter.translate(1, 1); - imagePainter.setBrush(opt->palette.light().color()); - imagePainter.setPen(opt->palette.light().color()); - imagePainter.drawPolygon(a); - imagePainter.translate(-1, -1); - imagePainter.setBrush(opt->palette.mid().color()); - imagePainter.setPen(opt->palette.mid().color()); - } - - imagePainter.drawPolygon(a); - imagePainter.end(); - pixmap = QPixmap::fromImage(image); - pixmap.setDevicePixelRatio(pixelRatio); - QPixmapCache::insert(pixmapName, pixmap); - } - int xOffset = r.x() + (r.width() - size)/2; - int yOffset = r.y() + (r.height() - size)/2; - p->drawPixmap(xOffset, yOffset, pixmap); - } - break; - default: - break; - } -} - -static void drawArrow(const QStyle *style, const QStyleOptionToolButton *toolbutton, - const QRect &rect, QPainter *painter) -{ - QStyle::PrimitiveElement pe; - switch (toolbutton->arrowType) { - case Qt::LeftArrow: - pe = QStyle::PE_IndicatorArrowLeft; - break; - case Qt::RightArrow: - pe = QStyle::PE_IndicatorArrowRight; - break; - case Qt::UpArrow: - pe = QStyle::PE_IndicatorArrowUp; - break; - case Qt::DownArrow: - pe = QStyle::PE_IndicatorArrowDown; - break; - default: - return; - } - QStyleOption arrowOpt = *toolbutton; - arrowOpt.rect = rect; - style->drawPrimitive(pe, &arrowOpt, painter); -} - -static QSizeF viewItemTextLayout(QTextLayout &textLayout, int lineWidth, int maxHeight = -1, int *lastVisibleLine = nullptr) -{ - if (lastVisibleLine) - *lastVisibleLine = -1; - qreal height = 0; - qreal widthUsed = 0; - textLayout.beginLayout(); - int i = 0; - while (true) { - QTextLine line = textLayout.createLine(); - if (!line.isValid()) - break; - line.setLineWidth(lineWidth); - line.setPosition(QPointF(0, height)); - height += line.height(); - widthUsed = qMax(widthUsed, line.naturalTextWidth()); - // we assume that the height of the next line is the same as the current one - if (maxHeight > 0 && lastVisibleLine && height + line.height() > maxHeight) { - const QTextLine nextLine = textLayout.createLine(); - *lastVisibleLine = nextLine.isValid() ? i : -1; - break; - } - ++i; - } - textLayout.endLayout(); - return QSizeF(widthUsed, height); -} - -QString QCommonStylePrivate::calculateElidedText(const QString &text, const QTextOption &textOption, - const QFont &font, const QRect &textRect, const Qt::Alignment valign, - Qt::TextElideMode textElideMode, int flags, - bool lastVisibleLineShouldBeElided, QPointF *paintStartPosition) const -{ - QTextLayout textLayout(text, font); - textLayout.setTextOption(textOption); - - // In AlignVCenter mode when more than one line is displayed and the height only allows - // some of the lines it makes no sense to display those. From a users perspective it makes - // more sense to see the start of the text instead something inbetween. - const bool vAlignmentOptimization = paintStartPosition && valign.testFlag(Qt::AlignVCenter); - - int lastVisibleLine = -1; - viewItemTextLayout(textLayout, textRect.width(), vAlignmentOptimization ? textRect.height() : -1, &lastVisibleLine); - - const QRectF boundingRect = textLayout.boundingRect(); - // don't care about LTR/RTL here, only need the height - const QRect layoutRect = QStyle::alignedRect(Qt::LayoutDirectionAuto, valign, - boundingRect.size().toSize(), textRect); - - if (paintStartPosition) - *paintStartPosition = QPointF(textRect.x(), layoutRect.top()); - - QString ret; - qreal height = 0; - const int lineCount = textLayout.lineCount(); - for (int i = 0; i < lineCount; ++i) { - const QTextLine line = textLayout.lineAt(i); - height += line.height(); - - // above visible rect - if (height + layoutRect.top() <= textRect.top()) { - if (paintStartPosition) - paintStartPosition->ry() += line.height(); - continue; - } - - const int start = line.textStart(); - const int length = line.textLength(); - const bool drawElided = line.naturalTextWidth() > textRect.width(); - bool elideLastVisibleLine = lastVisibleLine == i; - if (!drawElided && i + 1 < lineCount && lastVisibleLineShouldBeElided) { - const QTextLine nextLine = textLayout.lineAt(i + 1); - const int nextHeight = height + nextLine.height() / 2; - // elide when less than the next half line is visible - if (nextHeight + layoutRect.top() > textRect.height() + textRect.top()) - elideLastVisibleLine = true; - } - - QString text = textLayout.text().mid(start, length); - if (drawElided || elideLastVisibleLine) { - if (elideLastVisibleLine) { - if (text.endsWith(QChar::LineSeparator)) - text.chop(1); - text += QChar(0x2026); - } - const QStackTextEngine engine(text, font); - ret += engine.elidedText(textElideMode, textRect.width(), flags); - - // no newline for the last line (last visible or real) - // sometimes drawElided is true but no eliding is done so the text ends - // with QChar::LineSeparator - don't add another one. This happened with - // arabic text in the testcase for QTBUG-72805 - if (i < lineCount - 1 && - !ret.endsWith(QChar::LineSeparator)) - ret += QChar::LineSeparator; - } else { - ret += text; - } - - // below visible text, can stop - if ((height + layoutRect.top() >= textRect.bottom()) || - (lastVisibleLine >= 0 && lastVisibleLine == i)) - break; - } - return ret; -} - -QSize QCommonStylePrivate::viewItemSize(const QStyleOptionViewItem *option, int role) const -{ - switch (role) { - case Qt::CheckStateRole: - if (option->features & QStyleOptionViewItem::HasCheckIndicator) - return QSize(proxyStyle->pixelMetric(QStyle::PM_IndicatorWidth, option), - proxyStyle->pixelMetric(QStyle::PM_IndicatorHeight, option)); - break; - case Qt::DisplayRole: - if (option->features & QStyleOptionViewItem::HasDisplay) { - QTextOption textOption; - textOption.setWrapMode(QTextOption::WordWrap); - QTextLayout textLayout(option->text, option->font); - textLayout.setTextOption(textOption); - const bool wrapText = option->features & QStyleOptionViewItem::WrapText; - const int textMargin = proxyStyle->pixelMetric(QStyle::PM_FocusFrameHMargin, option) + 1; - QRect bounds = option->rect; - switch (option->decorationPosition) { - case QStyleOptionViewItem::Left: - case QStyleOptionViewItem::Right: { - if (wrapText && bounds.isValid()) { - int width = bounds.width() - 2 * textMargin; - if (option->features & QStyleOptionViewItem::HasDecoration) - width -= option->decorationSize.width() + 2 * textMargin; - bounds.setWidth(width); - } else - bounds.setWidth(QFIXED_MAX); - break; - } - case QStyleOptionViewItem::Top: - case QStyleOptionViewItem::Bottom: - if (wrapText) - bounds.setWidth(bounds.isValid() ? bounds.width() - 2 * textMargin : option->decorationSize.width()); - else - bounds.setWidth(QFIXED_MAX); - break; - default: - break; - } - - if (wrapText && option->features & QStyleOptionViewItem::HasCheckIndicator) - bounds.setWidth(bounds.width() - proxyStyle->pixelMetric(QStyle::PM_IndicatorWidth) - 2 * textMargin); - - const int lineWidth = bounds.width(); - const QSizeF size = viewItemTextLayout(textLayout, lineWidth); - return QSize(qCeil(size.width()) + 2 * textMargin, qCeil(size.height())); - } - break; - case Qt::DecorationRole: - if (option->features & QStyleOptionViewItem::HasDecoration) { - return option->decorationSize; - } - break; - default: - break; - } - - return QSize(0, 0); -} - -void QCommonStylePrivate::viewItemDrawText(QPainter *p, const QStyleOptionViewItem *option, const QRect &rect) const -{ - const int textMargin = proxyStyle->pixelMetric(QStyle::PM_FocusFrameHMargin, nullptr) + 1; - - QRect textRect = rect.adjusted(textMargin, 0, -textMargin, 0); // remove width padding - const bool wrapText = option->features & QStyleOptionViewItem::WrapText; - QTextOption textOption; - textOption.setWrapMode(wrapText ? QTextOption::WordWrap : QTextOption::ManualWrap); - textOption.setTextDirection(option->direction); - textOption.setAlignment(QStyle::visualAlignment(option->direction, option->displayAlignment)); - - QPointF paintPosition; - const QString newText = calculateElidedText(option->text, textOption, - option->font, textRect, option->displayAlignment, - option->textElideMode, 0, - true, &paintPosition); - - QTextLayout textLayout(newText, option->font); - textLayout.setTextOption(textOption); - viewItemTextLayout(textLayout, textRect.width()); - textLayout.draw(p, paintPosition); -} - -/*! \internal - compute the position for the different component of an item (pixmap, text, checkbox) - - Set sizehint to false to layout the elements inside opt->rect. Set sizehint to true to ignore - opt->rect and return rectangles in infinite space - - Code duplicated in QItemDelegate::doLayout -*/ -void QCommonStylePrivate::viewItemLayout(const QStyleOptionViewItem *opt, QRect *checkRect, - QRect *pixmapRect, QRect *textRect, bool sizehint) const -{ - Q_ASSERT(checkRect && pixmapRect && textRect); - *pixmapRect = QRect(QPoint(0, 0), viewItemSize(opt, Qt::DecorationRole)); - *textRect = QRect(QPoint(0, 0), viewItemSize(opt, Qt::DisplayRole)); - *checkRect = QRect(QPoint(0, 0), viewItemSize(opt, Qt::CheckStateRole)); - - const bool hasCheck = checkRect->isValid(); - const bool hasPixmap = pixmapRect->isValid(); - const bool hasText = textRect->isValid(); - const bool hasMargin = (hasText | hasPixmap | hasCheck); - const int frameHMargin = hasMargin ? - proxyStyle->pixelMetric(QStyle::PM_FocusFrameHMargin, opt) + 1 : 0; - const int textMargin = hasText ? frameHMargin : 0; - const int pixmapMargin = hasPixmap ? frameHMargin : 0; - const int checkMargin = hasCheck ? frameHMargin : 0; - const int x = opt->rect.left(); - const int y = opt->rect.top(); - int w, h; - - if (textRect->height() == 0 && (!hasPixmap || !sizehint)) { - //if there is no text, we still want to have a decent height for the item sizeHint and the editor size - textRect->setHeight(opt->fontMetrics.height()); - } - - QSize pm(0, 0); - if (hasPixmap) { - pm = pixmapRect->size(); - pm.rwidth() += 2 * pixmapMargin; - } - if (sizehint) { - h = qMax(checkRect->height(), qMax(textRect->height(), pm.height())); - if (opt->decorationPosition == QStyleOptionViewItem::Left - || opt->decorationPosition == QStyleOptionViewItem::Right) { - w = textRect->width() + pm.width(); - } else { - w = qMax(textRect->width(), pm.width()); - } - } else { - w = opt->rect.width(); - h = opt->rect.height(); - } - - int cw = 0; - QRect check; - if (hasCheck) { - cw = checkRect->width() + 2 * checkMargin; - if (sizehint) w += cw; - if (opt->direction == Qt::RightToLeft) { - check.setRect(x + w - cw, y, cw, h); - } else { - check.setRect(x, y, cw, h); - } - } - - QRect display; - QRect decoration; - switch (opt->decorationPosition) { - case QStyleOptionViewItem::Top: { - if (hasPixmap) - pm.setHeight(pm.height() + pixmapMargin); // add space - h = sizehint ? textRect->height() : h - pm.height(); - - if (opt->direction == Qt::RightToLeft) { - decoration.setRect(x, y, w - cw, pm.height()); - display.setRect(x, y + pm.height(), w - cw, h); - } else { - decoration.setRect(x + cw, y, w - cw, pm.height()); - display.setRect(x + cw, y + pm.height(), w - cw, h); - } - break; } - case QStyleOptionViewItem::Bottom: { - if (hasText) - textRect->setHeight(textRect->height() + textMargin); // add space - h = sizehint ? textRect->height() + pm.height() : h; - - if (opt->direction == Qt::RightToLeft) { - display.setRect(x, y, w - cw, textRect->height()); - decoration.setRect(x, y + textRect->height(), w - cw, h - textRect->height()); - } else { - display.setRect(x + cw, y, w - cw, textRect->height()); - decoration.setRect(x + cw, y + textRect->height(), w - cw, h - textRect->height()); - } - break; } - case QStyleOptionViewItem::Left: { - if (opt->direction == Qt::LeftToRight) { - decoration.setRect(x + cw, y, pm.width(), h); - display.setRect(decoration.right() + 1, y, w - pm.width() - cw, h); - } else { - display.setRect(x, y, w - pm.width() - cw, h); - decoration.setRect(display.right() + 1, y, pm.width(), h); - } - break; } - case QStyleOptionViewItem::Right: { - if (opt->direction == Qt::LeftToRight) { - display.setRect(x + cw, y, w - pm.width() - cw, h); - decoration.setRect(display.right() + 1, y, pm.width(), h); - } else { - decoration.setRect(x, y, pm.width(), h); - display.setRect(decoration.right() + 1, y, w - pm.width() - cw, h); - } - break; } - default: - qWarning("doLayout: decoration position is invalid"); - decoration = *pixmapRect; - break; - } - - if (!sizehint) { // we only need to do the internal layout if we are going to paint - *checkRect = QStyle::alignedRect(opt->direction, Qt::AlignCenter, - checkRect->size(), check); - *pixmapRect = QStyle::alignedRect(opt->direction, opt->decorationAlignment, - pixmapRect->size(), decoration); - // the text takes up all available space, unless the decoration is not shown as selected - if (opt->showDecorationSelected) - *textRect = display; - else - *textRect = QStyle::alignedRect(opt->direction, opt->displayAlignment, - textRect->size().boundedTo(display.size()), display); - } else { - *checkRect = check; - *pixmapRect = decoration; - *textRect = display; - } -} - -QString QCommonStylePrivate::toolButtonElideText(const QStyleOptionToolButton *option, - const QRect &textRect, int flags) const -{ - if (option->fontMetrics.horizontalAdvance(option->text) <= textRect.width()) - return option->text; - - QString text = option->text; - text.replace(QLatin1Char('\n'), QChar::LineSeparator); - QTextOption textOption; - textOption.setWrapMode(QTextOption::ManualWrap); - textOption.setTextDirection(option->direction); - - return calculateElidedText(text, textOption, - option->font, textRect, Qt::AlignTop, - Qt::ElideMiddle, flags, - false, nullptr); -} - -/*! \internal - Compute the textRect and the pixmapRect from the opt rect - - Uses the same computation than in QTabBar::tabSizeHint - */ -void QCommonStylePrivate::tabLayout(const QStyleOptionTab *opt, QRect *textRect, QRect *iconRect) const -{ - Q_ASSERT(textRect); - Q_ASSERT(iconRect); - QRect tr = opt->rect; - bool verticalTabs = opt->shape == QStyleOptionTab::RoundedEast - || opt->shape == QStyleOptionTab::RoundedWest - || opt->shape == QStyleOptionTab::TriangularEast - || opt->shape == QStyleOptionTab::TriangularWest; - if (verticalTabs) - tr.setRect(0, 0, tr.height(), tr.width()); // 0, 0 as we will have a translate transform - - int verticalShift = proxyStyle->pixelMetric(QStyle::PM_TabBarTabShiftVertical, opt); - int horizontalShift = proxyStyle->pixelMetric(QStyle::PM_TabBarTabShiftHorizontal, opt); - int hpadding = proxyStyle->pixelMetric(QStyle::PM_TabBarTabHSpace, opt) / 2; - int vpadding = proxyStyle->pixelMetric(QStyle::PM_TabBarTabVSpace, opt) / 2; - if (opt->shape == QStyleOptionTab::RoundedSouth || opt->shape == QStyleOptionTab::TriangularSouth) - verticalShift = -verticalShift; - tr.adjust(hpadding, verticalShift - vpadding, horizontalShift - hpadding, vpadding); - bool selected = opt->state & QStyle::State_Selected; - if (selected) { - tr.setTop(tr.top() - verticalShift); - tr.setRight(tr.right() - horizontalShift); - } - - // left widget - if (!opt->leftButtonSize.isEmpty()) { - tr.setLeft(tr.left() + 4 + - (verticalTabs ? opt->leftButtonSize.height() : opt->leftButtonSize.width())); - } - // right widget - if (!opt->rightButtonSize.isEmpty()) { - tr.setRight(tr.right() - 4 - - (verticalTabs ? opt->rightButtonSize.height() : opt->rightButtonSize.width())); - } - - // icon - if (!opt->icon.isNull()) { - QSize iconSize = opt->iconSize; - if (!iconSize.isValid()) { - int iconExtent = proxyStyle->pixelMetric(QStyle::PM_SmallIconSize); - iconSize = QSize(iconExtent, iconExtent); - } - QSize tabIconSize = opt->icon.actualSize(iconSize, - (opt->state & QStyle::State_Enabled) ? QIcon::Normal : QIcon::Disabled, - (opt->state & QStyle::State_Selected) ? QIcon::On : QIcon::Off); - // High-dpi icons do not need adjustment; make sure tabIconSize is not larger than iconSize - tabIconSize = QSize(qMin(tabIconSize.width(), iconSize.width()), qMin(tabIconSize.height(), iconSize.height())); - - const int offsetX = (iconSize.width() - tabIconSize.width()) / 2; - *iconRect = QRect(tr.left() + offsetX, tr.center().y() - tabIconSize.height() / 2, - tabIconSize.width(), tabIconSize.height()); - if (!verticalTabs) - *iconRect = QStyle::visualRect(opt->direction, opt->rect, *iconRect); - tr.setLeft(tr.left() + tabIconSize.width() + 4); - } - - if (!verticalTabs) - tr = QStyle::visualRect(opt->direction, opt->rect, tr); - - *textRect = tr; -} - -/*! - \reimp -*/ -void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, QPainter *p) const -{ - Q_D(const QCommonStyle); - - // TODO: Set opt->window manually for now before calling any of the drawing functions. opt->window is - // pulled of the widget is QStyle. But now that we have no widget, we need some other - // solution. - Q_ASSERT(opt->window); - - switch (element) { - - case CE_PushButton: - if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { - proxy()->drawControl(CE_PushButtonBevel, btn, p); - QStyleOptionButton subopt = *btn; - subopt.rect = subElementRect(SE_PushButtonContents, btn); - proxy()->drawControl(CE_PushButtonLabel, &subopt, p); - } - break; - case CE_PushButtonBevel: - if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { - QRect br = btn->rect; - int dbi = proxy()->pixelMetric(PM_ButtonDefaultIndicator, btn); - if (btn->features & QStyleOptionButton::DefaultButton) - proxy()->drawPrimitive(PE_FrameDefaultButton, opt, p); - if (btn->features & QStyleOptionButton::AutoDefaultButton) - br.setCoords(br.left() + dbi, br.top() + dbi, br.right() - dbi, br.bottom() - dbi); - if (!(btn->features & (QStyleOptionButton::Flat | QStyleOptionButton::CommandLinkButton)) - || btn->state & (State_Sunken | State_On) - || (btn->features & QStyleOptionButton::CommandLinkButton && btn->state & State_MouseOver)) { - QStyleOptionButton tmpBtn = *btn; - tmpBtn.rect = br; - proxy()->drawPrimitive(PE_PanelButtonCommand, &tmpBtn, p); - } - if (btn->features & QStyleOptionButton::HasMenu) { - int mbi = proxy()->pixelMetric(PM_MenuButtonIndicator, btn); - QRect ir = btn->rect; - QStyleOptionButton newBtn = *btn; - newBtn.rect = QRect(ir.right() - mbi + 2, ir.height()/2 - mbi/2 + 3, mbi - 6, mbi - 6); - proxy()->drawPrimitive(PE_IndicatorArrowDown, &newBtn, p); - } - if (btn->state & State_HasFocus) { - QStyleOptionFocusRect fropt; - fropt.QStyleOption::operator=(*btn); - fropt.rect = subElementRect(SE_PushButtonFocusRect, btn); - proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, p); - } - } - break; - case CE_PushButtonLabel: - if (const QStyleOptionButton *button = qstyleoption_cast(opt)) { - QRect textRect = button->rect; - uint tf = Qt::AlignVCenter | Qt::TextShowMnemonic; - if (!proxy()->styleHint(SH_UnderlineShortcut, button)) - tf |= Qt::TextHideMnemonic; - - if (!button->icon.isNull()) { - //Center both icon and text - QIcon::Mode mode = button->state & State_Enabled ? QIcon::Normal : QIcon::Disabled; - if (mode == QIcon::Normal && button->state & State_HasFocus) - mode = QIcon::Active; - QIcon::State state = QIcon::Off; - if (button->state & State_On) - state = QIcon::On; - - QPixmap pixmap = button->icon.pixmap(button->iconSize, dpr(opt->window), mode, state); - int pixmapWidth = pixmap.width() / pixmap.devicePixelRatio(); - int pixmapHeight = pixmap.height() / pixmap.devicePixelRatio(); - int labelWidth = pixmapWidth; - int labelHeight = pixmapHeight; - int iconSpacing = 4;//### 4 is currently hardcoded in QPushButton::sizeHint() - if (!button->text.isEmpty()) { - int textWidth = button->fontMetrics.boundingRect(opt->rect, tf, button->text).width(); - labelWidth += (textWidth + iconSpacing); - } - - QRect iconRect = QRect(textRect.x() + (textRect.width() - labelWidth) / 2, - textRect.y() + (textRect.height() - labelHeight) / 2, - pixmapWidth, pixmapHeight); - - iconRect = visualRect(button->direction, textRect, iconRect); - - if (button->direction == Qt::RightToLeft) { - tf |= Qt::AlignRight; - textRect.setRight(iconRect.left() - iconSpacing); - } else { - tf |= Qt::AlignLeft; //left align, we adjust the text-rect instead - textRect.setLeft(iconRect.left() + iconRect.width() + iconSpacing); - } - - if (button->state & (State_On | State_Sunken)) - iconRect.translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, opt), - proxy()->pixelMetric(PM_ButtonShiftVertical, opt)); - p->drawPixmap(iconRect, pixmap); - } else { - tf |= Qt::AlignHCenter; - } - if (button->state & (State_On | State_Sunken)) - textRect.translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, opt), - proxy()->pixelMetric(PM_ButtonShiftVertical, opt)); - - if (button->features & QStyleOptionButton::HasMenu) { - int indicatorSize = proxy()->pixelMetric(PM_MenuButtonIndicator, button); - if (button->direction == Qt::LeftToRight) - textRect = textRect.adjusted(0, 0, -indicatorSize, 0); - else - textRect = textRect.adjusted(indicatorSize, 0, 0, 0); - } - proxy()->drawItemText(p, textRect, tf, button->palette, (button->state & State_Enabled), - button->text, QPalette::ButtonText); - } - break; - case CE_RadioButton: - case CE_CheckBox: - if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { - bool isRadio = (element == CE_RadioButton); - QStyleOptionButton subopt = *btn; - subopt.rect = subElementRect(isRadio ? SE_RadioButtonIndicator - : SE_CheckBoxIndicator, btn); - proxy()->drawPrimitive(isRadio ? PE_IndicatorRadioButton : PE_IndicatorCheckBox, - &subopt, p); - subopt.rect = subElementRect(isRadio ? SE_RadioButtonContents - : SE_CheckBoxContents, btn); - proxy()->drawControl(isRadio ? CE_RadioButtonLabel : CE_CheckBoxLabel, &subopt, p); - if (btn->state & State_HasFocus) { - QStyleOptionFocusRect fropt; - fropt.QStyleOption::operator=(*btn); - fropt.rect = subElementRect(isRadio ? SE_RadioButtonFocusRect - : SE_CheckBoxFocusRect, btn); - proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, p); - } - } - break; - case CE_RadioButtonLabel: - case CE_CheckBoxLabel: - if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { - uint alignment = visualAlignment(btn->direction, Qt::AlignLeft | Qt::AlignVCenter); - - if (!proxy()->styleHint(SH_UnderlineShortcut, btn)) - alignment |= Qt::TextHideMnemonic; - QPixmap pix; - QRect textRect = btn->rect; - if (!btn->icon.isNull()) { - pix = btn->icon.pixmap(btn->iconSize, dpr(opt->window), btn->state & State_Enabled ? QIcon::Normal : QIcon::Disabled); - proxy()->drawItemPixmap(p, btn->rect, alignment, pix); - if (btn->direction == Qt::RightToLeft) - textRect.setRight(textRect.right() - btn->iconSize.width() - 4); - else - textRect.setLeft(textRect.left() + btn->iconSize.width() + 4); - } - if (!btn->text.isEmpty()){ - proxy()->drawItemText(p, textRect, alignment | Qt::TextShowMnemonic, - btn->palette, btn->state & State_Enabled, btn->text, QPalette::WindowText); - } - } - break; - case CE_MenuScroller: { - QStyleOption arrowOpt = *opt; - arrowOpt.state |= State_Enabled; - proxy()->drawPrimitive(((opt->state & State_DownArrow) ? PE_IndicatorArrowDown : PE_IndicatorArrowUp), &arrowOpt, p); - break; } - case CE_MenuTearoff: - if (opt->state & State_Selected) - p->fillRect(opt->rect, opt->palette.brush(QPalette::Highlight)); - else - p->fillRect(opt->rect, opt->palette.brush(QPalette::Button)); - p->setPen(QPen(opt->palette.dark().color(), 1, Qt::DashLine)); - p->drawLine(opt->rect.x() + 2, opt->rect.y() + opt->rect.height() / 2 - 1, - opt->rect.x() + opt->rect.width() - 4, - opt->rect.y() + opt->rect.height() / 2 - 1); - p->setPen(QPen(opt->palette.light().color(), 1, Qt::DashLine)); - p->drawLine(opt->rect.x() + 2, opt->rect.y() + opt->rect.height() / 2, - opt->rect.x() + opt->rect.width() - 4, opt->rect.y() + opt->rect.height() / 2); - break; - case CE_MenuBarItem: - if (const QStyleOptionMenuItem *mbi = qstyleoption_cast(opt)) { - uint alignment = Qt::AlignCenter | Qt::TextShowMnemonic | Qt::TextDontClip - | Qt::TextSingleLine; - if (!proxy()->styleHint(SH_UnderlineShortcut, mbi)) - alignment |= Qt::TextHideMnemonic; - int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); - QPixmap pix = mbi->icon.pixmap(QSize(iconExtent, iconExtent), dpr(opt->window), - mbi->state.testFlag(State_Enabled) ? QIcon::Normal : QIcon::Disabled); - if (!pix.isNull()) - proxy()->drawItemPixmap(p,mbi->rect, alignment, pix); - else - proxy()->drawItemText(p, mbi->rect, alignment, mbi->palette, mbi->state & State_Enabled, - mbi->text, QPalette::ButtonText); - } - break; - case CE_MenuBarEmptyArea: - break; - case CE_ProgressBar: - if (const QStyleOptionProgressBar *pb - = qstyleoption_cast(opt)) { - QStyleOptionProgressBar subopt = *pb; - subopt.rect = subElementRect(SE_ProgressBarGroove, pb); - proxy()->drawControl(CE_ProgressBarGroove, &subopt, p); - subopt.rect = subElementRect(SE_ProgressBarContents, pb); - proxy()->drawControl(CE_ProgressBarContents, &subopt, p); - if (pb->textVisible) { - subopt.rect = subElementRect(SE_ProgressBarLabel, pb); - proxy()->drawControl(CE_ProgressBarLabel, &subopt, p); - } - } - break; - case CE_ProgressBarGroove: - if (opt->rect.isValid()) - qDrawShadePanel(p, opt->rect, opt->palette, true, 1, - &opt->palette.brush(QPalette::Window)); - break; - case CE_ProgressBarLabel: - if (const QStyleOptionProgressBar *pb = qstyleoption_cast(opt)) { - QPalette::ColorRole textRole = QPalette::NoRole; - if ((pb->textAlignment & Qt::AlignCenter) && pb->textVisible - && ((qint64(pb->progress) - qint64(pb->minimum)) * 2 >= (qint64(pb->maximum) - qint64(pb->minimum)))) { - textRole = QPalette::HighlightedText; - //Draw text shadow, This will increase readability when the background of same color - QRect shadowRect(pb->rect); - shadowRect.translate(1,1); - QColor shadowColor = (pb->palette.color(textRole).value() <= 128) - ? QColor(255,255,255,160) : QColor(0,0,0,160); - QPalette shadowPalette = pb->palette; - shadowPalette.setColor(textRole, shadowColor); - proxy()->drawItemText(p, shadowRect, Qt::AlignCenter | Qt::TextSingleLine, shadowPalette, - pb->state & State_Enabled, pb->text, textRole); - } - proxy()->drawItemText(p, pb->rect, Qt::AlignCenter | Qt::TextSingleLine, pb->palette, - pb->state & State_Enabled, pb->text, textRole); - } - break; - case CE_ProgressBarContents: - if (const QStyleOptionProgressBar *pb = qstyleoption_cast(opt)) { - - QRect rect = pb->rect; - const bool inverted = pb->invertedAppearance; - qint64 minimum = qint64(pb->minimum); - qint64 maximum = qint64(pb->maximum); - qint64 progress = qint64(pb->progress); - - QPalette pal2 = pb->palette; - // Correct the highlight color if it is the same as the background - if (pal2.highlight() == pal2.window()) - pal2.setColor(QPalette::Highlight, pb->palette.color(QPalette::Active, - QPalette::Highlight)); - bool reverse = pb->direction == Qt::RightToLeft; - if (inverted) - reverse = !reverse; - int w = rect.width(); - if (pb->minimum == 0 && pb->maximum == 0) { - // draw busy indicator - int x = (progress - minimum) % (w * 2); - if (x > w) - x = 2 * w - x; - x = reverse ? rect.right() - x : x + rect.x(); - p->setPen(QPen(pal2.highlight().color(), 4)); - p->drawLine(x, rect.y(), x, rect.height()); - } else { - const int unit_width = proxy()->pixelMetric(PM_ProgressBarChunkWidth, pb); - if (!unit_width) - return; - - int u; - if (unit_width > 1) - u = ((rect.width() + unit_width) / unit_width); - else - u = w / unit_width; - qint64 p_v = progress - minimum; - qint64 t_s = (maximum - minimum) ? (maximum - minimum) : qint64(1); - - if (u > 0 && p_v >= INT_MAX / u && t_s >= u) { - // scale down to something usable. - p_v /= u; - t_s /= u; - } - - // nu < tnu, if last chunk is only a partial chunk - int tnu, nu; - tnu = nu = p_v * u / t_s; - - if (nu * unit_width > w) - --nu; - - // Draw nu units out of a possible u of unit_width - // width, each a rectangle bordered by background - // color, all in a sunken panel with a percentage text - // display at the end. - int x = 0; - int x0 = reverse ? rect.right() - ((unit_width > 1) ? unit_width : 0) - : rect.x(); - - QStyleOptionProgressBar pbBits = *pb; - pbBits.rect = rect; - pbBits.palette = pal2; - int myY = pbBits.rect.y(); - int myHeight = pbBits.rect.height(); - pbBits.state = State_Horizontal; - for (int i = 0; i < nu; ++i) { - pbBits.rect.setRect(x0 + x, myY, unit_width, myHeight); - proxy()->drawPrimitive(PE_IndicatorProgressChunk, &pbBits, p); - x += reverse ? -unit_width : unit_width; - } - - // Draw the last partial chunk to fill up the - // progress bar entirely - if (nu < tnu) { - int pixels_left = w - (nu * unit_width); - int offset = reverse ? x0 + x + unit_width-pixels_left : x0 + x; - pbBits.rect.setRect(offset, myY, pixels_left, myHeight); - proxy()->drawPrimitive(PE_IndicatorProgressChunk, &pbBits, p); - } - } - } - break; - case CE_HeaderLabel: - if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { - QRect rect = header->rect; - if (!header->icon.isNull()) { - int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); - QPixmap pixmap - = header->icon.pixmap(QSize(iconExtent, iconExtent), dpr(opt->window), - header->state.testFlag(State_Enabled) ? QIcon::Normal : QIcon::Disabled); - int pixw = pixmap.width() / pixmap.devicePixelRatio(); - - QRect aligned = alignedRect(header->direction, QFlag(header->iconAlignment), pixmap.size() / pixmap.devicePixelRatio(), rect); - QRect inter = aligned.intersected(rect); - p->drawPixmap(inter.x(), inter.y(), pixmap, - inter.x() - aligned.x(), inter.y() - aligned.y(), - aligned.width() * pixmap.devicePixelRatio(), - pixmap.height() * pixmap.devicePixelRatio()); - - const int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, opt); - if (header->direction == Qt::LeftToRight) - rect.setLeft(rect.left() + pixw + margin); - else - rect.setRight(rect.right() - pixw - margin); - } - if (header->state & QStyle::State_On) { - QFont fnt = p->font(); - fnt.setBold(true); - p->setFont(fnt); - } - proxy()->drawItemText(p, rect, header->textAlignment, header->palette, - (header->state & State_Enabled), header->text, QPalette::ButtonText); - } - break; - case CE_ToolButtonLabel: - if (const QStyleOptionToolButton *toolbutton - = qstyleoption_cast(opt)) { - QRect rect = toolbutton->rect; - int shiftX = 0; - int shiftY = 0; - if (toolbutton->state & (State_Sunken | State_On)) { - shiftX = proxy()->pixelMetric(PM_ButtonShiftHorizontal, toolbutton); - shiftY = proxy()->pixelMetric(PM_ButtonShiftVertical, toolbutton); - } - // Arrow type always overrules and is always shown - bool hasArrow = toolbutton->features & QStyleOptionToolButton::Arrow; - if (((!hasArrow && toolbutton->icon.isNull()) && !toolbutton->text.isEmpty()) - || toolbutton->toolButtonStyle == Qt::ToolButtonTextOnly) { - int alignment = Qt::AlignCenter | Qt::TextShowMnemonic; - if (!proxy()->styleHint(SH_UnderlineShortcut, opt)) - alignment |= Qt::TextHideMnemonic; - rect.translate(shiftX, shiftY); - p->setFont(toolbutton->font); - proxy()->drawItemText(p, rect, alignment, toolbutton->palette, - opt->state & State_Enabled, toolbutton->text, - QPalette::ButtonText); - } else { - QPixmap pm; - QSize pmSize = toolbutton->iconSize; - if (!toolbutton->icon.isNull()) { - QIcon::State state = toolbutton->state & State_On ? QIcon::On : QIcon::Off; - QIcon::Mode mode; - if (!(toolbutton->state & State_Enabled)) - mode = QIcon::Disabled; - else if ((opt->state & State_MouseOver) && (opt->state & State_AutoRaise)) - mode = QIcon::Active; - else - mode = QIcon::Normal; - pm = toolbutton->icon.pixmap(toolbutton->rect.size().boundedTo(toolbutton->iconSize), - dpr(opt->window), mode, state); - pmSize = pm.size() / pm.devicePixelRatio(); - } - - if (toolbutton->toolButtonStyle != Qt::ToolButtonIconOnly) { - p->setFont(toolbutton->font); - QRect pr = rect, - tr = rect; - int alignment = Qt::TextShowMnemonic; - if (!proxy()->styleHint(SH_UnderlineShortcut, opt)) - alignment |= Qt::TextHideMnemonic; - - if (toolbutton->toolButtonStyle == Qt::ToolButtonTextUnderIcon) { - pr.setHeight(pmSize.height() + 4); //### 4 is currently hardcoded in QToolButton::sizeHint() - tr.adjust(0, pr.height() - 1, 0, -1); - pr.translate(shiftX, shiftY); - if (!hasArrow) { - proxy()->drawItemPixmap(p, pr, Qt::AlignCenter, pm); - } else { - drawArrow(proxy(), toolbutton, pr, p); - } - alignment |= Qt::AlignCenter; - } else { - pr.setWidth(pmSize.width() + 4); //### 4 is currently hardcoded in QToolButton::sizeHint() - tr.adjust(pr.width(), 0, 0, 0); - pr.translate(shiftX, shiftY); - if (!hasArrow) { - proxy()->drawItemPixmap(p, QStyle::visualRect(opt->direction, rect, pr), Qt::AlignCenter, pm); - } else { - drawArrow(proxy(), toolbutton, pr, p); - } - alignment |= Qt::AlignLeft | Qt::AlignVCenter; - } - tr.translate(shiftX, shiftY); - const QString text = d->toolButtonElideText(toolbutton, tr, alignment); - proxy()->drawItemText(p, QStyle::visualRect(opt->direction, rect, tr), alignment, toolbutton->palette, - toolbutton->state & State_Enabled, text, - QPalette::ButtonText); - } else { - rect.translate(shiftX, shiftY); - if (hasArrow) { - drawArrow(proxy(), toolbutton, rect, p); - } else { - proxy()->drawItemPixmap(p, rect, Qt::AlignCenter, pm); - } - } - } - } - break; - case CE_ToolBoxTab: - if (const QStyleOptionToolBox *tb = qstyleoption_cast(opt)) { - proxy()->drawControl(CE_ToolBoxTabShape, tb, p); - proxy()->drawControl(CE_ToolBoxTabLabel, tb, p); - } - break; - case CE_ToolBoxTabShape: - if (const QStyleOptionToolBox *tb = qstyleoption_cast(opt)) { - p->setPen(tb->palette.mid().color().darker(150)); - int d = 20 + tb->rect.height() - 3; - if (tb->direction != Qt::RightToLeft) { - const QPoint points[] = { - QPoint(-1, tb->rect.height() + 1), - QPoint(-1, 1), - QPoint(tb->rect.width() - d, 1), - QPoint(tb->rect.width() - 20, tb->rect.height() - 2), - QPoint(tb->rect.width() - 1, tb->rect.height() - 2), - QPoint(tb->rect.width() - 1, tb->rect.height() + 1), - QPoint(-1, tb->rect.height() + 1), - }; - p->drawPolygon(points, sizeof points / sizeof *points); - } else { - const QPoint points[] = { - QPoint(tb->rect.width(), tb->rect.height() + 1), - QPoint(tb->rect.width(), 1), - QPoint(d - 1, 1), - QPoint(20 - 1, tb->rect.height() - 2), - QPoint(0, tb->rect.height() - 2), - QPoint(0, tb->rect.height() + 1), - QPoint(tb->rect.width(), tb->rect.height() + 1), - }; - p->drawPolygon(points, sizeof points / sizeof *points); - } - p->setPen(tb->palette.light().color()); - if (tb->direction != Qt::RightToLeft) { - p->drawLine(0, 2, tb->rect.width() - d, 2); - p->drawLine(tb->rect.width() - d - 1, 2, tb->rect.width() - 21, tb->rect.height() - 1); - p->drawLine(tb->rect.width() - 20, tb->rect.height() - 1, - tb->rect.width(), tb->rect.height() - 1); - } else { - p->drawLine(tb->rect.width() - 1, 2, d - 1, 2); - p->drawLine(d, 2, 20, tb->rect.height() - 1); - p->drawLine(19, tb->rect.height() - 1, - -1, tb->rect.height() - 1); - } - p->setBrush(Qt::NoBrush); - } - break; - case CE_TabBarTab: - if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { - proxy()->drawControl(CE_TabBarTabShape, tab, p); - proxy()->drawControl(CE_TabBarTabLabel, tab, p); - } - break; - case CE_TabBarTabShape: - if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { - p->save(); - - QRect rect(tab->rect); - bool selected = tab->state & State_Selected; - bool onlyOne = tab->position == QStyleOptionTab::OnlyOneTab; - int tabOverlap = onlyOne ? 0 : proxy()->pixelMetric(PM_TabBarTabOverlap, opt); - - if (!selected) { - switch (tab->shape) { - case QStyleOptionTab::TriangularNorth: - rect.adjust(0, 0, 0, -tabOverlap); - if(!selected) - rect.adjust(1, 1, -1, 0); - break; - case QStyleOptionTab::TriangularSouth: - rect.adjust(0, tabOverlap, 0, 0); - if(!selected) - rect.adjust(1, 0, -1, -1); - break; - case QStyleOptionTab::TriangularEast: - rect.adjust(tabOverlap, 0, 0, 0); - if(!selected) - rect.adjust(0, 1, -1, -1); - break; - case QStyleOptionTab::TriangularWest: - rect.adjust(0, 0, -tabOverlap, 0); - if(!selected) - rect.adjust(1, 1, 0, -1); - break; - default: - break; - } - } - - p->setPen(QPen(tab->palette.windowText(), 0)); - if (selected) { - p->setBrush(tab->palette.base()); - } else { - p->setBrush(tab->palette.window()); - } - - int y; - int x; - QPolygon a(10); - switch (tab->shape) { - case QStyleOptionTab::TriangularNorth: - case QStyleOptionTab::TriangularSouth: { - a.setPoint(0, 0, -1); - a.setPoint(1, 0, 0); - y = rect.height() - 2; - x = y / 3; - a.setPoint(2, x++, y - 1); - ++x; - a.setPoint(3, x++, y++); - a.setPoint(4, x, y); - - int i; - int right = rect.width() - 1; - for (i = 0; i < 5; ++i) - a.setPoint(9 - i, right - a.point(i).x(), a.point(i).y()); - if (tab->shape == QStyleOptionTab::TriangularNorth) - for (i = 0; i < 10; ++i) - a.setPoint(i, a.point(i).x(), rect.height() - 1 - a.point(i).y()); - - a.translate(rect.left(), rect.top()); - p->setRenderHint(QPainter::Antialiasing); - p->translate(0, 0.5); - - QPainterPath path; - path.addPolygon(a); - p->drawPath(path); - break; } - case QStyleOptionTab::TriangularEast: - case QStyleOptionTab::TriangularWest: { - a.setPoint(0, -1, 0); - a.setPoint(1, 0, 0); - x = rect.width() - 2; - y = x / 3; - a.setPoint(2, x - 1, y++); - ++y; - a.setPoint(3, x++, y++); - a.setPoint(4, x, y); - int i; - int bottom = rect.height() - 1; - for (i = 0; i < 5; ++i) - a.setPoint(9 - i, a.point(i).x(), bottom - a.point(i).y()); - if (tab->shape == QStyleOptionTab::TriangularWest) - for (i = 0; i < 10; ++i) - a.setPoint(i, rect.width() - 1 - a.point(i).x(), a.point(i).y()); - a.translate(rect.left(), rect.top()); - p->setRenderHint(QPainter::Antialiasing); - p->translate(0.5, 0); - QPainterPath path; - path.addPolygon(a); - p->drawPath(path); - break; } - default: - break; - } - p->restore(); - } - break; - case CE_ToolBoxTabLabel: - if (const QStyleOptionToolBox *tb = qstyleoption_cast(opt)) { - bool enabled = tb->state & State_Enabled; - bool selected = tb->state & State_Selected; - int iconExtent = proxy()->pixelMetric(QStyle::PM_SmallIconSize, tb); - QPixmap pm = tb->icon.pixmap(QSize(iconExtent, iconExtent), dpr(opt->window), - enabled ? QIcon::Normal : QIcon::Disabled); - - QRect cr = subElementRect(QStyle::SE_ToolBoxTabContents, tb); - QRect tr, ir; - int ih = 0; - if (pm.isNull()) { - tr = cr; - tr.adjust(4, 0, -8, 0); - } else { - int iw = pm.width() / pm.devicePixelRatio() + 4; - ih = pm.height()/ pm.devicePixelRatio(); - ir = QRect(cr.left() + 4, cr.top(), iw + 2, ih); - tr = QRect(ir.right(), cr.top(), cr.width() - ir.right() - 4, cr.height()); - } - - if (selected && proxy()->styleHint(QStyle::SH_ToolBox_SelectedPageTitleBold, tb)) { - QFont f(p->font()); - f.setBold(true); - p->setFont(f); - } - - QString txt = tb->fontMetrics.elidedText(tb->text, Qt::ElideRight, tr.width()); - - if (ih) - p->drawPixmap(ir.left(), (tb->rect.height() - ih) / 2, pm); - - int alignment = Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic; - if (!proxy()->styleHint(QStyle::SH_UnderlineShortcut, tb)) - alignment |= Qt::TextHideMnemonic; - proxy()->drawItemText(p, tr, alignment, tb->palette, enabled, txt, QPalette::ButtonText); - - if (!txt.isEmpty() && opt->state & State_HasFocus) { - QStyleOptionFocusRect opt; - opt.rect = tr; - opt.palette = tb->palette; - opt.state = QStyle::State_None; - proxy()->drawPrimitive(QStyle::PE_FrameFocusRect, &opt, p); - } - } - break; - case CE_TabBarTabLabel: - if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { - QRect tr = tab->rect; - bool verticalTabs = tab->shape == QStyleOptionTab::RoundedEast - || tab->shape == QStyleOptionTab::RoundedWest - || tab->shape == QStyleOptionTab::TriangularEast - || tab->shape == QStyleOptionTab::TriangularWest; - - int alignment = Qt::AlignCenter | Qt::TextShowMnemonic; - if (!proxy()->styleHint(SH_UnderlineShortcut, opt)) - alignment |= Qt::TextHideMnemonic; - - if (verticalTabs) { - p->save(); - int newX, newY, newRot; - if (tab->shape == QStyleOptionTab::RoundedEast || tab->shape == QStyleOptionTab::TriangularEast) { - newX = tr.width() + tr.x(); - newY = tr.y(); - newRot = 90; - } else { - newX = tr.x(); - newY = tr.y() + tr.height(); - newRot = -90; - } - QTransform m = QTransform::fromTranslate(newX, newY); - m.rotate(newRot); - p->setTransform(m, true); - } - QRect iconRect; - d->tabLayout(tab, &tr, &iconRect); - tr = proxy()->subElementRect(SE_TabBarTabText, opt); //we compute tr twice because the style may override subElementRect - - if (!tab->icon.isNull()) { - QPixmap tabIcon = tab->icon.pixmap(tab->iconSize, dpr(opt->window), - (tab->state & State_Enabled) ? QIcon::Normal - : QIcon::Disabled, - (tab->state & State_Selected) ? QIcon::On - : QIcon::Off); - p->drawPixmap(iconRect.x(), iconRect.y(), tabIcon); - } - - proxy()->drawItemText(p, tr, alignment, tab->palette, tab->state & State_Enabled, tab->text, QPalette::WindowText); - if (verticalTabs) - p->restore(); - - if (tab->state & State_HasFocus) { - const int OFFSET = 1 + pixelMetric(PM_DefaultFrameWidth); - - int x1, x2; - x1 = tab->rect.left(); - x2 = tab->rect.right() - 1; - - QStyleOptionFocusRect fropt; - fropt.QStyleOption::operator=(*tab); - fropt.rect.setRect(x1 + 1 + OFFSET, tab->rect.y() + OFFSET, - x2 - x1 - 2*OFFSET, tab->rect.height() - 2*OFFSET); - drawPrimitive(PE_FrameFocusRect, &fropt, p); - } - } - break; - case CE_SizeGrip: { - p->save(); - int x, y, w, h; - opt->rect.getRect(&x, &y, &w, &h); - - int sw = qMin(h, w); - if (h > w) - p->translate(0, h - w); - else - p->translate(w - h, 0); - - int sx = x; - int sy = y; - int s = sw / 3; - - Qt::Corner corner; - if (const QStyleOptionSizeGrip *sgOpt = qstyleoption_cast(opt)) - corner = sgOpt->corner; - else if (opt->direction == Qt::RightToLeft) - corner = Qt::BottomLeftCorner; - else - corner = Qt::BottomRightCorner; - - if (corner == Qt::BottomLeftCorner) { - sx = x + sw; - for (int i = 0; i < 4; ++i) { - p->setPen(QPen(opt->palette.light().color(), 1)); - p->drawLine(x, sy - 1 , sx + 1, sw); - p->setPen(QPen(opt->palette.dark().color(), 1)); - p->drawLine(x, sy, sx, sw); - p->setPen(QPen(opt->palette.dark().color(), 1)); - p->drawLine(x, sy + 1, sx - 1, sw); - sx -= s; - sy += s; - } - } else if (corner == Qt::BottomRightCorner) { - for (int i = 0; i < 4; ++i) { - p->setPen(QPen(opt->palette.light().color(), 1)); - p->drawLine(sx - 1, sw, sw, sy - 1); - p->setPen(QPen(opt->palette.dark().color(), 1)); - p->drawLine(sx, sw, sw, sy); - p->setPen(QPen(opt->palette.dark().color(), 1)); - p->drawLine(sx + 1, sw, sw, sy + 1); - sx += s; - sy += s; - } - } else if (corner == Qt::TopRightCorner) { - sy = y + sw; - for (int i = 0; i < 4; ++i) { - p->setPen(QPen(opt->palette.light().color(), 1)); - p->drawLine(sx - 1, y, sw, sy + 1); - p->setPen(QPen(opt->palette.dark().color(), 1)); - p->drawLine(sx, y, sw, sy); - p->setPen(QPen(opt->palette.dark().color(), 1)); - p->drawLine(sx + 1, y, sw, sy - 1); - sx += s; - sy -= s; - } - } else if (corner == Qt::TopLeftCorner) { - for (int i = 0; i < 4; ++i) { - p->setPen(QPen(opt->palette.light().color(), 1)); - p->drawLine(x, sy - 1, sx - 1, y); - p->setPen(QPen(opt->palette.dark().color(), 1)); - p->drawLine(x, sy, sx, y); - p->setPen(QPen(opt->palette.dark().color(), 1)); - p->drawLine(x, sy + 1, sx + 1, y); - sx += s; - sy += s; - } - } - p->restore(); - break; } - case CE_RubberBand: { - if (const QStyleOptionRubberBand *rbOpt = qstyleoption_cast(opt)) { - QPixmap tiledPixmap(16, 16); - QPainter pixmapPainter(&tiledPixmap); - pixmapPainter.setPen(Qt::NoPen); - pixmapPainter.setBrush(Qt::Dense4Pattern); - pixmapPainter.setBackground(QBrush(opt->palette.base())); - pixmapPainter.setBackgroundMode(Qt::OpaqueMode); - pixmapPainter.drawRect(0, 0, tiledPixmap.width(), tiledPixmap.height()); - pixmapPainter.end(); - // ### workaround for borked XRENDER - tiledPixmap = QPixmap::fromImage(tiledPixmap.toImage()); - - p->save(); - QRect r = opt->rect; - QStyleHintReturnMask mask; - if (proxy()->styleHint(QStyle::SH_RubberBand_Mask, opt, &mask)) - p->setClipRegion(mask.region); - p->drawTiledPixmap(r.x(), r.y(), r.width(), r.height(), tiledPixmap); - p->setPen(opt->palette.color(QPalette::Active, QPalette::WindowText)); - p->setBrush(Qt::NoBrush); - p->drawRect(r.adjusted(0, 0, -1, -1)); - if (rbOpt->shape == QStyleOptionRubberBand::Rectangle) - p->drawRect(r.adjusted(3, 3, -4, -4)); - p->restore(); - } - break; } - case CE_DockWidgetTitle: - if (const QStyleOptionDockWidget *dwOpt = qstyleoption_cast(opt)) { - QRect r = dwOpt->rect.adjusted(0, 0, -1, -1); - if (dwOpt->movable) { - p->setPen(dwOpt->palette.color(QPalette::Dark)); - p->drawRect(r); - } - - if (!dwOpt->title.isEmpty()) { - const bool verticalTitleBar = dwOpt->verticalTitleBar; - - if (verticalTitleBar) { - r = r.transposed(); - - p->save(); - p->translate(r.left(), r.top() + r.width()); - p->rotate(-90); - p->translate(-r.left(), -r.top()); - } - - const int indent = p->fontMetrics().descent(); - proxy()->drawItemText(p, r.adjusted(indent + 1, 1, -indent - 1, -1), - Qt::AlignLeft | Qt::AlignVCenter, dwOpt->palette, - dwOpt->state & State_Enabled, dwOpt->title, - QPalette::WindowText); - - if (verticalTitleBar) - p->restore(); - } - } - break; - case CE_Header: - if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { - QRegion clipRegion = p->clipRegion(); - p->setClipRect(opt->rect); - proxy()->drawControl(CE_HeaderSection, header, p); - QStyleOptionHeader subopt = *header; - subopt.rect = subElementRect(SE_HeaderLabel, header); - if (subopt.rect.isValid()) - proxy()->drawControl(CE_HeaderLabel, &subopt, p); - if (header->sortIndicator != QStyleOptionHeader::None) { - subopt.rect = subElementRect(SE_HeaderArrow, opt); - proxy()->drawPrimitive(PE_IndicatorHeaderArrow, &subopt, p); - } - p->setClipRegion(clipRegion); - } - break; - case CE_FocusFrame: - p->fillRect(opt->rect, opt->palette.windowText()); - break; - case CE_HeaderSection: - qDrawShadePanel(p, opt->rect, opt->palette, - opt->state & State_Sunken, 1, - &opt->palette.brush(QPalette::Button)); - break; - case CE_HeaderEmptyArea: - p->fillRect(opt->rect, opt->palette.window()); - break; - case CE_ComboBoxLabel: - if (const QStyleOptionComboBox *cb = qstyleoption_cast(opt)) { - QRect editRect = proxy()->subControlRect(CC_ComboBox, cb, SC_ComboBoxEditField); - p->save(); - p->setClipRect(editRect); - if (!cb->currentIcon.isNull()) { - QIcon::Mode mode = cb->state & State_Enabled ? QIcon::Normal - : QIcon::Disabled; - QPixmap pixmap = cb->currentIcon.pixmap(cb->iconSize, dpr(opt->window), mode); - QRect iconRect(editRect); - iconRect.setWidth(cb->iconSize.width() + 4); - iconRect = alignedRect(cb->direction, - Qt::AlignLeft | Qt::AlignVCenter, - iconRect.size(), editRect); - if (cb->editable) - p->fillRect(iconRect, opt->palette.brush(QPalette::Base)); - proxy()->drawItemPixmap(p, iconRect, Qt::AlignCenter, pixmap); - - if (cb->direction == Qt::RightToLeft) - editRect.translate(-4 - cb->iconSize.width(), 0); - else - editRect.translate(cb->iconSize.width() + 4, 0); - } - if (!cb->currentText.isEmpty() && !cb->editable) { - proxy()->drawItemText(p, editRect.adjusted(1, 0, -1, 0), - visualAlignment(cb->direction, Qt::AlignLeft | Qt::AlignVCenter), - cb->palette, cb->state & State_Enabled, cb->currentText); - } - p->restore(); - } - break; - case CE_ToolBar: - if (const QStyleOptionToolBar *toolBar = qstyleoption_cast(opt)) { - // Compatibility with styles that use PE_PanelToolBar - QStyleOptionFrame frame; - frame.QStyleOption::operator=(*toolBar); - frame.lineWidth = toolBar->lineWidth; - frame.midLineWidth = toolBar->midLineWidth; - proxy()->drawPrimitive(PE_PanelToolBar, opt, p); - - qDrawShadePanel(p, toolBar->rect, toolBar->palette, false, toolBar->lineWidth, - &toolBar->palette.brush(QPalette::Button)); - } - break; - case CE_ColumnViewGrip: { - // draw background gradients - QLinearGradient g(0, 0, opt->rect.width(), 0); - g.setColorAt(0, opt->palette.color(QPalette::Active, QPalette::Mid)); - g.setColorAt(0.5, Qt::white); - p->fillRect(QRect(0, 0, opt->rect.width(), opt->rect.height()), g); - - // draw the two lines - QPen pen(p->pen()); - pen.setWidth(opt->rect.width()/20); - pen.setColor(opt->palette.color(QPalette::Active, QPalette::Dark)); - p->setPen(pen); - - int line1starting = opt->rect.width()*8 / 20; - int line2starting = opt->rect.width()*13 / 20; - int top = opt->rect.height()*20/75; - int bottom = opt->rect.height() - 1 - top; - p->drawLine(line1starting, top, line1starting, bottom); - p->drawLine(line2starting, top, line2starting, bottom); - } - break; - case CE_ItemViewItem: - if (const QStyleOptionViewItem *vopt = qstyleoption_cast(opt)) { - p->save(); - p->setClipRect(opt->rect); - - QRect checkRect = proxy()->subElementRect(SE_ItemViewItemCheckIndicator, vopt); - QRect iconRect = proxy()->subElementRect(SE_ItemViewItemDecoration, vopt); - QRect textRect = proxy()->subElementRect(SE_ItemViewItemText, vopt); - - // draw the background - proxy()->drawPrimitive(PE_PanelItemViewItem, opt, p); - - // draw the check mark - if (vopt->features & QStyleOptionViewItem::HasCheckIndicator) { - QStyleOptionViewItem option(*vopt); - option.rect = checkRect; - option.state = option.state & ~QStyle::State_HasFocus; - - switch (vopt->checkState) { - case Qt::Unchecked: - option.state |= QStyle::State_Off; - break; - case Qt::PartiallyChecked: - option.state |= QStyle::State_NoChange; - break; - case Qt::Checked: - option.state |= QStyle::State_On; - break; - } - proxy()->drawPrimitive(QStyle::PE_IndicatorItemViewItemCheck, &option, p); - } - - // draw the icon - QIcon::Mode mode = QIcon::Normal; - if (!(vopt->state & QStyle::State_Enabled)) - mode = QIcon::Disabled; - else if (vopt->state & QStyle::State_Selected) - mode = QIcon::Selected; - QIcon::State state = vopt->state & QStyle::State_Open ? QIcon::On : QIcon::Off; - vopt->icon.paint(p, iconRect, vopt->decorationAlignment, mode, state); - - // draw the text - if (!vopt->text.isEmpty()) { - QPalette::ColorGroup cg = vopt->state & QStyle::State_Enabled - ? QPalette::Normal : QPalette::Disabled; - if (cg == QPalette::Normal && !(vopt->state & QStyle::State_Active)) - cg = QPalette::Inactive; - - if (vopt->state & QStyle::State_Selected) { - p->setPen(vopt->palette.color(cg, QPalette::HighlightedText)); - } else { - p->setPen(vopt->palette.color(cg, QPalette::Text)); - } - if (vopt->state & QStyle::State_Editing) { - p->setPen(vopt->palette.color(cg, QPalette::Text)); - p->drawRect(textRect.adjusted(0, 0, -1, -1)); - } - - d->viewItemDrawText(p, vopt, textRect); - } - - // draw the focus rect - if (vopt->state & QStyle::State_HasFocus) { - QStyleOptionFocusRect o; - o.QStyleOption::operator=(*vopt); - o.rect = proxy()->subElementRect(SE_ItemViewItemFocusRect, vopt); - o.state |= QStyle::State_KeyboardFocusChange; - o.state |= QStyle::State_Item; - QPalette::ColorGroup cg = (vopt->state & QStyle::State_Enabled) - ? QPalette::Normal : QPalette::Disabled; - o.backgroundColor = vopt->palette.color(cg, (vopt->state & QStyle::State_Selected) - ? QPalette::Highlight : QPalette::Window); - proxy()->drawPrimitive(QStyle::PE_FrameFocusRect, &o, p); - } - - p->restore(); - } - break; - case CE_ShapedFrame: - if (const QStyleOptionFrame *f = qstyleoption_cast(opt)) { - int frameShape = f->frameShape; - int frameShadow = QStyleOptionFrame::Plain; - if (f->state & QStyle::State_Sunken) { - frameShadow = QStyleOptionFrame::Sunken; - } else if (f->state & QStyle::State_Raised) { - frameShadow = QStyleOptionFrame::Raised; - } - - int lw = f->lineWidth; - int mlw = f->midLineWidth; - QPalette::ColorRole foregroundRole = QPalette::WindowText; - - switch (frameShape) { - case QStyleOptionFrame::Box: - if (frameShadow == QStyleOptionFrame::Plain) { - qDrawPlainRect(p, f->rect, f->palette.color(foregroundRole), lw); - } else { - qDrawShadeRect(p, f->rect, f->palette, frameShadow == QStyleOptionFrame::Sunken, lw, mlw); - } - break; - case QStyleOptionFrame::StyledPanel: - proxy()->drawPrimitive(QStyle::PE_Frame, opt, p); - break; - case QStyleOptionFrame::Panel: - if (frameShadow == QStyleOptionFrame::Plain) { - qDrawPlainRect(p, f->rect, f->palette.color(foregroundRole), lw); - } else { - qDrawShadePanel(p, f->rect, f->palette, frameShadow == QStyleOptionFrame::Sunken, lw); - } - break; - case QStyleOptionFrame::WinPanel: - if (frameShadow == QStyleOptionFrame::Plain) { - qDrawPlainRect(p, f->rect, f->palette.color(foregroundRole), lw); - } else { - qDrawWinPanel(p, f->rect, f->palette, frameShadow == QStyleOptionFrame::Sunken); - } - break; - case QStyleOptionFrame::HLine: - case QStyleOptionFrame::VLine: { - QPoint p1, p2; - if (frameShape == QStyleOptionFrame::HLine) { - p1 = QPoint(opt->rect.x(), opt->rect.y() + opt->rect.height() / 2); - p2 = QPoint(opt->rect.x() + opt->rect.width(), p1.y()); - } else { - p1 = QPoint(opt->rect.x() + opt->rect.width() / 2, opt->rect.y()); - p2 = QPoint(p1.x(), p1.y() + opt->rect.height()); - } - if (frameShadow == QStyleOptionFrame::Plain) { - QPen oldPen = p->pen(); - p->setPen(QPen(opt->palette.brush(foregroundRole), lw)); - p->drawLine(p1, p2); - p->setPen(oldPen); - } else { - qDrawShadeLine(p, p1, p2, f->palette, frameShadow == QStyleOptionFrame::Sunken, lw, mlw); - } - break; - } - } - } - break; - default: - break; - } -} - -QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt) const -{ - Q_D(const QCommonStyle); - QRect r; - switch (sr) { - case SE_PushButtonContents: - if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { - int dx1, dx2; - dx1 = proxy()->pixelMetric(PM_DefaultFrameWidth, btn); - if (btn->features & QStyleOptionButton::AutoDefaultButton) - dx1 += proxy()->pixelMetric(PM_ButtonDefaultIndicator, btn); - dx2 = dx1 * 2; - r.setRect(opt->rect.x() + dx1, opt->rect.y() + dx1, opt->rect.width() - dx2, - opt->rect.height() - dx2); - r = visualRect(opt->direction, opt->rect, r); - } - break; - case SE_PushButtonFocusRect: - if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { - int dbw1 = 0, dbw2 = 0; - if (btn->features & QStyleOptionButton::AutoDefaultButton){ - dbw1 = proxy()->pixelMetric(PM_ButtonDefaultIndicator, btn); - dbw2 = dbw1 * 2; - } - - int dfw1 = proxy()->pixelMetric(PM_DefaultFrameWidth, btn) + 1, - dfw2 = dfw1 * 2; - - r.setRect(btn->rect.x() + dfw1 + dbw1, btn->rect.y() + dfw1 + dbw1, - btn->rect.width() - dfw2 - dbw2, btn->rect.height()- dfw2 - dbw2); - r = visualRect(opt->direction, opt->rect, r); - } - break; - case SE_CheckBoxIndicator: - { - int h = proxy()->pixelMetric(PM_IndicatorHeight, opt); - r.setRect(opt->rect.x(), opt->rect.y() + ((opt->rect.height() - h) / 2), - proxy()->pixelMetric(PM_IndicatorWidth, opt), h); - r = visualRect(opt->direction, opt->rect, r); - } - break; - - case SE_CheckBoxContents: - { - // Deal with the logical first, then convert it back to screen coords. - QRect ir = visualRect(opt->direction, opt->rect, - subElementRect(SE_CheckBoxIndicator, opt)); - int spacing = proxy()->pixelMetric(PM_CheckBoxLabelSpacing, opt); - r.setRect(ir.right() + spacing, opt->rect.y(), opt->rect.width() - ir.width() - spacing, - opt->rect.height()); - r = visualRect(opt->direction, opt->rect, r); - } - break; - - case SE_CheckBoxFocusRect: - if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { - if (btn->icon.isNull() && btn->text.isEmpty()) { - r = subElementRect(SE_CheckBoxIndicator, opt); - r.adjust(1, 1, -1, -1); - break; - } - // As above, deal with the logical first, then convert it back to screen coords. - QRect cr = visualRect(btn->direction, btn->rect, subElementRect(SE_CheckBoxContents, btn)); - - QRect iconRect, textRect; - if (!btn->text.isEmpty()) { - textRect = itemTextRect(opt->fontMetrics, cr, Qt::AlignAbsolute | Qt::AlignLeft - | Qt::AlignVCenter | Qt::TextShowMnemonic, - btn->state & State_Enabled, btn->text); - } - if (!btn->icon.isNull()) { - iconRect = itemPixmapRect(cr, Qt::AlignAbsolute | Qt::AlignLeft | Qt::AlignVCenter - | Qt::TextShowMnemonic, - btn->icon.pixmap(btn->iconSize, dpr(opt->window), QIcon::Normal)); - if (!textRect.isEmpty()) - textRect.translate(iconRect.right() + 4, 0); - } - r = iconRect | textRect; - r.adjust(-3, -2, 3, 2); - r = r.intersected(btn->rect); - r = visualRect(btn->direction, btn->rect, r); - } - break; - - case SE_RadioButtonIndicator: - { - int h = proxy()->pixelMetric(PM_ExclusiveIndicatorHeight, opt); - r.setRect(opt->rect.x(), opt->rect.y() + ((opt->rect.height() - h) / 2), - proxy()->pixelMetric(PM_ExclusiveIndicatorWidth, opt), h); - r = visualRect(opt->direction, opt->rect, r); - } - break; - - case SE_RadioButtonContents: - { - QRect ir = visualRect(opt->direction, opt->rect, - subElementRect(SE_RadioButtonIndicator, opt)); - int spacing = proxy()->pixelMetric(PM_RadioButtonLabelSpacing, opt); - r.setRect(ir.left() + ir.width() + spacing, opt->rect.y(), opt->rect.width() - ir.width() - spacing, - opt->rect.height()); - r = visualRect(opt->direction, opt->rect, r); - break; - } - - case SE_RadioButtonFocusRect: - if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { - if (btn->icon.isNull() && btn->text.isEmpty()) { - r = subElementRect(SE_RadioButtonIndicator, opt); - r.adjust(1, 1, -1, -1); - break; - } - QRect cr = visualRect(btn->direction, btn->rect, subElementRect(SE_RadioButtonContents, opt)); - - QRect iconRect, textRect; - if (!btn->text.isEmpty()){ - textRect = itemTextRect(opt->fontMetrics, cr, Qt::AlignAbsolute | Qt::AlignLeft | Qt::AlignVCenter - | Qt::TextShowMnemonic, btn->state & State_Enabled, btn->text); - } - if (!btn->icon.isNull()) { - iconRect = itemPixmapRect(cr, Qt::AlignAbsolute | Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic, - btn->icon.pixmap(btn->iconSize, dpr(opt->window), QIcon::Normal)); - if (!textRect.isEmpty()) - textRect.translate(iconRect.right() + 4, 0); - } - r = iconRect | textRect; - r.adjust(-3, -2, 3, 2); - r = r.intersected(btn->rect); - r = visualRect(btn->direction, btn->rect, r); - } - break; - case SE_SliderFocusRect: - if (const QStyleOptionSlider *slider = qstyleoption_cast(opt)) { - int tickOffset = proxy()->pixelMetric(PM_SliderTickmarkOffset, slider); - int thickness = proxy()->pixelMetric(PM_SliderControlThickness, slider); - if (slider->orientation == Qt::Horizontal) - r.setRect(0, tickOffset - 1, slider->rect.width(), thickness + 2); - else - r.setRect(tickOffset - 1, 0, thickness + 2, slider->rect.height()); - r = r.intersected(slider->rect); - r = visualRect(opt->direction, opt->rect, r); - } - break; - case SE_ProgressBarGroove: - case SE_ProgressBarContents: - case SE_ProgressBarLabel: - if (const QStyleOptionProgressBar *pb = qstyleoption_cast(opt)) { - int textw = 0; - if (pb->textVisible) - textw = qMax(pb->fontMetrics.horizontalAdvance(pb->text), pb->fontMetrics.horizontalAdvance(QLatin1String("100%"))) + 6; - - if ((pb->textAlignment & Qt::AlignCenter) == 0) { - if (sr != SE_ProgressBarLabel) - r.setCoords(pb->rect.left(), pb->rect.top(), - pb->rect.right() - textw, pb->rect.bottom()); - else - r.setCoords(pb->rect.right() - textw, pb->rect.top(), - pb->rect.right(), pb->rect.bottom()); - } else { - r = pb->rect; - } - r = visualRect(pb->direction, pb->rect, r); - } - break; - case SE_ComboBoxFocusRect: - if (const QStyleOptionComboBox *cb = qstyleoption_cast(opt)) { - int margin = cb->frame ? 3 : 0; - r.setRect(opt->rect.left() + margin, opt->rect.top() + margin, - opt->rect.width() - 2*margin - 16, opt->rect.height() - 2*margin); - r = visualRect(opt->direction, opt->rect, r); - } - break; - case SE_ToolBoxTabContents: - r = opt->rect; - r.adjust(0, 0, -30, 0); - break; - case SE_HeaderLabel: { - int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, opt); - r.setRect(opt->rect.x() + margin, opt->rect.y() + margin, - opt->rect.width() - margin * 2, opt->rect.height() - margin * 2); - - if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { - // Subtract width needed for arrow, if there is one - if (header->sortIndicator != QStyleOptionHeader::None) { - if (opt->state & State_Horizontal) - r.setWidth(r.width() - (opt->rect.height() / 2) - (margin * 2)); - else - r.setHeight(r.height() - (opt->rect.width() / 2) - (margin * 2)); - } - } - r = visualRect(opt->direction, opt->rect, r); - break; } - case SE_HeaderArrow: { - int h = opt->rect.height(); - int w = opt->rect.width(); - int x = opt->rect.x(); - int y = opt->rect.y(); - int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, opt); - - if (opt->state & State_Horizontal) { - int horiz_size = h / 2; - r.setRect(x + w - margin * 2 - horiz_size, y + 5, - horiz_size, h - margin * 2 - 5); - } else { - int vert_size = w / 2; - r.setRect(x + 5, y + h - margin * 2 - vert_size, - w - margin * 2 - 5, vert_size); - } - r = visualRect(opt->direction, opt->rect, r); - break; } - - case SE_RadioButtonClickRect: - r = subElementRect(SE_RadioButtonFocusRect, opt); - r |= subElementRect(SE_RadioButtonIndicator, opt); - break; - case SE_CheckBoxClickRect: - r = subElementRect(SE_CheckBoxFocusRect, opt); - r |= subElementRect(SE_CheckBoxIndicator, opt); - break; - case SE_TabWidgetTabBar: - if (const QStyleOptionTabWidgetFrame *twf - = qstyleoption_cast(opt)) { - r.setSize(twf->tabBarSize); - const uint alingMask = Qt::AlignLeft | Qt::AlignRight | Qt::AlignHCenter; - switch (twf->shape) { - case QStyleOptionTab::RoundedNorth: - case QStyleOptionTab::TriangularNorth: - // Constrain the size now, otherwise, center could get off the page - // This of course repeated for all the other directions - r.setWidth(qMin(r.width(), twf->rect.width() - - twf->leftCornerWidgetSize.width() - - twf->rightCornerWidgetSize.width())); - switch (proxy()->styleHint(SH_TabBar_Alignment, twf) & alingMask) { - default: - case Qt::AlignLeft: - r.moveTopLeft(QPoint(twf->leftCornerWidgetSize.width(), 0)); - break; - case Qt::AlignHCenter: - r.moveTopLeft(QPoint(twf->rect.center().x() - qRound(r.width() / 2.0f) - + (twf->leftCornerWidgetSize.width() / 2) - - (twf->rightCornerWidgetSize.width() / 2), 0)); - break; - case Qt::AlignRight: - r.moveTopLeft(QPoint(twf->rect.width() - twf->tabBarSize.width() - - twf->rightCornerWidgetSize.width(), 0)); - break; - } - r = visualRect(twf->direction, twf->rect, r); - break; - case QStyleOptionTab::RoundedSouth: - case QStyleOptionTab::TriangularSouth: - r.setWidth(qMin(r.width(), twf->rect.width() - - twf->leftCornerWidgetSize.width() - - twf->rightCornerWidgetSize.width())); - switch (proxy()->styleHint(SH_TabBar_Alignment, twf) & alingMask) { - default: - case Qt::AlignLeft: - r.moveTopLeft(QPoint(twf->leftCornerWidgetSize.width(), - twf->rect.height() - twf->tabBarSize.height())); - break; - case Qt::AlignHCenter: - r.moveTopLeft(QPoint(twf->rect.center().x() - qRound(r.width() / 2.0f) - + (twf->leftCornerWidgetSize.width() / 2) - - (twf->rightCornerWidgetSize.width() / 2), - twf->rect.height() - twf->tabBarSize.height())); - break; - case Qt::AlignRight: - r.moveTopLeft(QPoint(twf->rect.width() - twf->tabBarSize.width() - - twf->rightCornerWidgetSize.width(), - twf->rect.height() - twf->tabBarSize.height())); - break; - } - r = visualRect(twf->direction, twf->rect, r); - break; - case QStyleOptionTab::RoundedEast: - case QStyleOptionTab::TriangularEast: - r.setHeight(qMin(r.height(), twf->rect.height() - - twf->leftCornerWidgetSize.height() - - twf->rightCornerWidgetSize.height())); - switch (proxy()->styleHint(SH_TabBar_Alignment, twf) & alingMask) { - default: - case Qt::AlignLeft: - r.moveTopLeft(QPoint(twf->rect.width() - twf->tabBarSize.width(), - twf->leftCornerWidgetSize.height())); - break; - case Qt::AlignHCenter: - r.moveTopLeft(QPoint(twf->rect.width() - twf->tabBarSize.width(), - twf->rect.center().y() - r.height() / 2)); - break; - case Qt::AlignRight: - r.moveTopLeft(QPoint(twf->rect.width() - twf->tabBarSize.width(), - twf->rect.height() - twf->tabBarSize.height() - - twf->rightCornerWidgetSize.height())); - break; - } - break; - case QStyleOptionTab::RoundedWest: - case QStyleOptionTab::TriangularWest: - r.setHeight(qMin(r.height(), twf->rect.height() - - twf->leftCornerWidgetSize.height() - - twf->rightCornerWidgetSize.height())); - switch (proxy()->styleHint(SH_TabBar_Alignment, twf) & alingMask) { - default: - case Qt::AlignLeft: - r.moveTopLeft(QPoint(0, twf->leftCornerWidgetSize.height())); - break; - case Qt::AlignHCenter: - r.moveTopLeft(QPoint(0, twf->rect.center().y() - r.height() / 2)); - break; - case Qt::AlignRight: - r.moveTopLeft(QPoint(0, twf->rect.height() - twf->tabBarSize.height() - - twf->rightCornerWidgetSize.height())); - break; - } - break; - } - } - break; - case SE_TabWidgetTabPane: - case SE_TabWidgetTabContents: - if (const QStyleOptionTabWidgetFrame *twf = qstyleoption_cast(opt)) { - QStyleOptionTab tabopt; - tabopt.shape = twf->shape; - int overlap = proxy()->pixelMetric(PM_TabBarBaseOverlap, &tabopt); - if (twf->lineWidth == 0) - overlap = 0; - switch (twf->shape) { - case QStyleOptionTab::RoundedNorth: - case QStyleOptionTab::TriangularNorth: - r = QRect(QPoint(0,qMax(twf->tabBarSize.height() - overlap, 0)), - QSize(twf->rect.width(), qMin(twf->rect.height() - twf->tabBarSize.height() + overlap, twf->rect.height()))); - break; - case QStyleOptionTab::RoundedSouth: - case QStyleOptionTab::TriangularSouth: - r = QRect(QPoint(0,0), QSize(twf->rect.width(), qMin(twf->rect.height() - twf->tabBarSize.height() + overlap, twf->rect.height()))); - break; - case QStyleOptionTab::RoundedEast: - case QStyleOptionTab::TriangularEast: - r = QRect(QPoint(0, 0), QSize(qMin(twf->rect.width() - twf->tabBarSize.width() + overlap, twf->rect.width()), twf->rect.height())); - break; - case QStyleOptionTab::RoundedWest: - case QStyleOptionTab::TriangularWest: - r = QRect(QPoint(qMax(twf->tabBarSize.width() - overlap, 0), 0), - QSize(qMin(twf->rect.width() - twf->tabBarSize.width() + overlap, twf->rect.width()), twf->rect.height())); - break; - } - if (sr == SE_TabWidgetTabContents && twf->lineWidth > 0) - r.adjust(2, 2, -2, -2); - } - break; - case SE_TabWidgetLeftCorner: - if (const QStyleOptionTabWidgetFrame *twf = qstyleoption_cast(opt)) { - QRect paneRect = subElementRect(SE_TabWidgetTabPane, twf); - switch (twf->shape) { - case QStyleOptionTab::RoundedNorth: - case QStyleOptionTab::TriangularNorth: - r = QRect(QPoint(paneRect.x(), paneRect.y() - twf->leftCornerWidgetSize.height()), - twf->leftCornerWidgetSize); - break; - case QStyleOptionTab::RoundedSouth: - case QStyleOptionTab::TriangularSouth: - r = QRect(QPoint(paneRect.x(), paneRect.height()), twf->leftCornerWidgetSize); - break; - default: - break; - } - r = visualRect(twf->direction, twf->rect, r); - } - break; - case SE_TabWidgetRightCorner: - if (const QStyleOptionTabWidgetFrame *twf = qstyleoption_cast(opt)) { - QRect paneRect = subElementRect(SE_TabWidgetTabPane, twf); - switch (twf->shape) { - case QStyleOptionTab::RoundedNorth: - case QStyleOptionTab::TriangularNorth: - r = QRect(QPoint(paneRect.width() - twf->rightCornerWidgetSize.width(), - paneRect.y() - twf->rightCornerWidgetSize.height()), - twf->rightCornerWidgetSize); - break; - case QStyleOptionTab::RoundedSouth: - case QStyleOptionTab::TriangularSouth: - r = QRect(QPoint(paneRect.width() - twf->rightCornerWidgetSize.width(), - paneRect.height()), twf->rightCornerWidgetSize); - break; - default: - break; - } - r = visualRect(twf->direction, twf->rect, r); - } - break; - case SE_TabBarTabText: - if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { - QRect dummyIconRect; - d->tabLayout(tab, &r, &dummyIconRect); - } - break; - case SE_TabBarTabLeftButton: - case SE_TabBarTabRightButton: - if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { - bool selected = tab->state & State_Selected; - int verticalShift = proxy()->pixelMetric(QStyle::PM_TabBarTabShiftVertical, tab); - int horizontalShift = proxy()->pixelMetric(QStyle::PM_TabBarTabShiftHorizontal, tab); - int hpadding = proxy()->pixelMetric(QStyle::PM_TabBarTabHSpace, opt) / 2; - hpadding = qMax(hpadding, 4); //workaround KStyle returning 0 because they workaround an old bug in Qt - - bool verticalTabs = tab->shape == QStyleOptionTab::RoundedEast - || tab->shape == QStyleOptionTab::RoundedWest - || tab->shape == QStyleOptionTab::TriangularEast - || tab->shape == QStyleOptionTab::TriangularWest; - - QRect tr = tab->rect; - if (tab->shape == QStyleOptionTab::RoundedSouth || tab->shape == QStyleOptionTab::TriangularSouth) - verticalShift = -verticalShift; - if (verticalTabs) { - qSwap(horizontalShift, verticalShift); - horizontalShift *= -1; - verticalShift *= -1; - } - if (tab->shape == QStyleOptionTab::RoundedWest || tab->shape == QStyleOptionTab::TriangularWest) - horizontalShift = -horizontalShift; - - tr.adjust(0, 0, horizontalShift, verticalShift); - if (selected) - { - tr.setBottom(tr.bottom() - verticalShift); - tr.setRight(tr.right() - horizontalShift); - } - - QSize size = (sr == SE_TabBarTabLeftButton) ? tab->leftButtonSize : tab->rightButtonSize; - int w = size.width(); - int h = size.height(); - int midHeight = static_cast(qCeil(float(tr.height() - h) / 2)); - int midWidth = ((tr.width() - w) / 2); - - bool atTheTop = true; - switch (tab->shape) { - case QStyleOptionTab::RoundedWest: - case QStyleOptionTab::TriangularWest: - atTheTop = (sr == SE_TabBarTabLeftButton); - break; - case QStyleOptionTab::RoundedEast: - case QStyleOptionTab::TriangularEast: - atTheTop = (sr == SE_TabBarTabRightButton); - break; - default: - if (sr == SE_TabBarTabLeftButton) - r = QRect(tab->rect.x() + hpadding, midHeight, w, h); - else - r = QRect(tab->rect.right() - w - hpadding, midHeight, w, h); - r = visualRect(tab->direction, tab->rect, r); - } - if (verticalTabs) { - if (atTheTop) - r = QRect(midWidth, tr.y() + tab->rect.height() - hpadding - h, w, h); - else - r = QRect(midWidth, tr.y() + hpadding, w, h); - } - } - - break; - case SE_TabBarTearIndicator: - if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { - switch (tab->shape) { - case QStyleOptionTab::RoundedNorth: - case QStyleOptionTab::TriangularNorth: - case QStyleOptionTab::RoundedSouth: - case QStyleOptionTab::TriangularSouth: - r.setRect(tab->rect.left(), tab->rect.top(), 8, opt->rect.height()); - break; - case QStyleOptionTab::RoundedWest: - case QStyleOptionTab::TriangularWest: - case QStyleOptionTab::RoundedEast: - case QStyleOptionTab::TriangularEast: - r.setRect(tab->rect.left(), tab->rect.top(), opt->rect.width(), 8); - break; - default: - break; - } - r = visualRect(opt->direction, opt->rect, r); - } - break; - case SE_TabBarScrollLeftButton: { - const bool vertical = opt->rect.width() < opt->rect.height(); - const Qt::LayoutDirection ld = opt->direction; - const int buttonWidth = proxy()->pixelMetric(QStyle::PM_TabBarScrollButtonWidth, nullptr); - const int buttonOverlap = proxy()->pixelMetric(QStyle::PM_TabBar_ScrollButtonOverlap, nullptr); - - r = vertical ? QRect(0, opt->rect.height() - (buttonWidth * 2) + buttonOverlap, opt->rect.width(), buttonWidth) - : QStyle::visualRect(ld, opt->rect, QRect(opt->rect.width() - (buttonWidth * 2) + buttonOverlap, 0, buttonWidth, opt->rect.height())); - break; } - case SE_TabBarScrollRightButton: { - const bool vertical = opt->rect.width() < opt->rect.height(); - const Qt::LayoutDirection ld = opt->direction; - const int buttonWidth = proxy()->pixelMetric(QStyle::PM_TabBarScrollButtonWidth, nullptr); - - r = vertical ? QRect(0, opt->rect.height() - buttonWidth, opt->rect.width(), buttonWidth) - : QStyle::visualRect(ld, opt->rect, QRect(opt->rect.width() - buttonWidth, 0, buttonWidth, opt->rect.height())); - break; } - case SE_TreeViewDisclosureItem: - r = opt->rect; - break; - case SE_LineEditContents: - if (const QStyleOptionFrame *f = qstyleoption_cast(opt)) { - r = f->rect.adjusted(f->lineWidth, f->lineWidth, -f->lineWidth, -f->lineWidth); - r = visualRect(opt->direction, opt->rect, r); - } - break; - case SE_FrameContents: - if (const QStyleOptionFrame *f = qstyleoption_cast(opt)) { - int fw = proxy()->pixelMetric(PM_DefaultFrameWidth, f); - r = opt->rect.adjusted(fw, fw, -fw, -fw); - r = visualRect(opt->direction, opt->rect, r); - } - break; - case SE_ShapedFrameContents: - if (const QStyleOptionFrame *f = qstyleoption_cast(opt)) { - int frameShape = f->frameShape; - int frameShadow = QStyleOptionFrame::Plain; - if (f->state & QStyle::State_Sunken) { - frameShadow = QStyleOptionFrame::Sunken; - } else if (f->state & QStyle::State_Raised) { - frameShadow = QStyleOptionFrame::Raised; - } - - int frameWidth = 0; - - switch (frameShape) { - case QStyleOptionFrame::NoFrame: - frameWidth = 0; - break; - - case QStyleOptionFrame::Box: - case QStyleOptionFrame::HLine: - case QStyleOptionFrame::VLine: - switch (frameShadow) { - case QStyleOptionFrame::Plain: - frameWidth = f->lineWidth; - break; - case QStyleOptionFrame::Raised: - case QStyleOptionFrame::Sunken: - frameWidth = (short)(f->lineWidth*2 + f->midLineWidth); - break; - } - break; - - case QStyleOptionFrame::StyledPanel: - //keep the compatibility with Qt 4.4 if there is a proxy style. - //be sure to call drawPrimitive(QStyle::SE_FrameContents) on the proxy style - return subElementRect(QStyle::SE_FrameContents, opt); - - case QStyleOptionFrame::WinPanel: - frameWidth = 2; - break; - - case QStyleOptionFrame::Panel: - switch (frameShadow) { - case QStyleOptionFrame::Plain: - case QStyleOptionFrame::Raised: - case QStyleOptionFrame::Sunken: - frameWidth = f->lineWidth; - break; - } - break; - } - r = f->rect.adjusted(frameWidth, frameWidth, -frameWidth, -frameWidth); - } - break; - case SE_DockWidgetCloseButton: - case SE_DockWidgetFloatButton: - case SE_DockWidgetTitleBarText: - case SE_DockWidgetIcon: { - int iconSize = proxy()->pixelMetric(PM_SmallIconSize, opt); - int buttonMargin = proxy()->pixelMetric(PM_DockWidgetTitleBarButtonMargin, opt); - QRect rect = opt->rect; - - const QStyleOptionDockWidget *dwOpt - = qstyleoption_cast(opt); - bool canClose = dwOpt == nullptr ? true : dwOpt->closable; - bool canFloat = dwOpt == nullptr ? false : dwOpt->floatable; - - const bool verticalTitleBar = dwOpt && dwOpt->verticalTitleBar; - - // If this is a vertical titlebar, we transpose and work as if it was - // horizontal, then transpose again. - - if (verticalTitleBar) - rect = rect.transposed(); - - do { - int right = rect.right(); - int left = rect.left(); - - QRect closeRect; - if (canClose) { - QSize sz = proxy()->standardIcon(QStyle::SP_TitleBarCloseButton, - opt).actualSize(QSize(iconSize, iconSize)); - sz += QSize(buttonMargin, buttonMargin); - if (verticalTitleBar) - sz = sz.transposed(); - closeRect = QRect(right - sz.width(), - rect.center().y() - sz.height()/2, - sz.width(), sz.height()); - right = closeRect.left() - 1; - } - if (sr == SE_DockWidgetCloseButton) { - r = closeRect; - break; - } - - QRect floatRect; - if (canFloat) { - QSize sz = proxy()->standardIcon(QStyle::SP_TitleBarNormalButton, - opt).actualSize(QSize(iconSize, iconSize)); - sz += QSize(buttonMargin, buttonMargin); - if (verticalTitleBar) - sz = sz.transposed(); - floatRect = QRect(right - sz.width(), - rect.center().y() - sz.height()/2, - sz.width(), sz.height()); - right = floatRect.left() - 1; - } - if (sr == SE_DockWidgetFloatButton) { - r = floatRect; - break; - } - - QRect iconRect; - if (sr == SE_DockWidgetIcon) { - r = iconRect; - break; - } - - QRect textRect = QRect(left, rect.top(), - right - left, rect.height()); - if (sr == SE_DockWidgetTitleBarText) { - r = textRect; - break; - } - - } while (false); - - if (verticalTitleBar) { - r = QRect(rect.left() + r.top() - rect.top(), - rect.top() + rect.right() - r.right(), - r.height(), r.width()); - } else { - r = visualRect(opt->direction, rect, r); - } - break; - } - case SE_ItemViewItemCheckIndicator: - if (!qstyleoption_cast(opt)) { - r = subElementRect(SE_CheckBoxIndicator, opt); - break; - } - Q_FALLTHROUGH(); - case SE_ItemViewItemDecoration: - case SE_ItemViewItemText: - case SE_ItemViewItemFocusRect: - if (const QStyleOptionViewItem *vopt = qstyleoption_cast(opt)) { - if (!d->isViewItemCached(*vopt)) { - d->viewItemLayout(vopt, &d->checkRect, &d->decorationRect, &d->displayRect, false); - if (d->cachedOption) { - delete d->cachedOption; - d->cachedOption = nullptr; - } - d->cachedOption = new QStyleOptionViewItem(*vopt); - } - if (sr == SE_ItemViewItemCheckIndicator) - r = d->checkRect; - else if (sr == SE_ItemViewItemDecoration) - r = d->decorationRect; - else if (sr == SE_ItemViewItemText || sr == SE_ItemViewItemFocusRect) - r = d->displayRect; - } - break; - case SE_ToolBarHandle: - if (const QStyleOptionToolBar *tbopt = qstyleoption_cast(opt)) { - if (tbopt->features & QStyleOptionToolBar::Movable) { - ///we need to access the widget here because the style option doesn't - //have all the information we need (ie. the layout's margin) - const QMargins margins(2, 2, 2, 2); - const int handleExtent = proxy()->pixelMetric(QStyle::PM_ToolBarHandleExtent, opt); - if (tbopt->state & QStyle::State_Horizontal) { - r = QRect(margins.left(), margins.top(), - handleExtent, - tbopt->rect.height() - (margins.top() + margins.bottom())); - r = QStyle::visualRect(tbopt->direction, tbopt->rect, r); - } else { - r = QRect(margins.left(), margins.top(), - tbopt->rect.width() - (margins.left() + margins.right()), - handleExtent); - } - } - } - break; - default: - break; - } - return r; -} - -// in lieu of std::array, minimal API -template -struct StaticPolygonF -{ - QPointF data[N]; - - Q_DECL_CONSTEXPR int size() const { return N; } - Q_DECL_CONSTEXPR const QPointF *cbegin() const { return data; } - Q_DECL_CONSTEXPR const QPointF &operator[](int idx) const { return data[idx]; } -}; - -static StaticPolygonF<3> calcArrow(const QStyleOptionSlider *dial, qreal &a) -{ - int width = dial->rect.width(); - int height = dial->rect.height(); - int r = qMin(width, height) / 2; - int currentSliderPosition = dial->upsideDown ? dial->sliderPosition : (dial->maximum - dial->sliderPosition); - - if (dial->maximum == dial->minimum) - a = Q_PI / 2; - else if (dial->dialWrapping) - a = Q_PI * 3 / 2 - (currentSliderPosition - dial->minimum) * 2 * Q_PI - / (dial->maximum - dial->minimum); - else - a = (Q_PI * 8 - (currentSliderPosition - dial->minimum) * 10 * Q_PI - / (dial->maximum - dial->minimum)) / 6; - - int xc = width / 2; - int yc = height / 2; - - int len = r - QStyleHelper::calcBigLineSize(r) - 5; - if (len < 5) - len = 5; - int back = len / 2; - - StaticPolygonF<3> arrow = {{ - QPointF(0.5 + xc + len * qCos(a), - 0.5 + yc - len * qSin(a)), - QPointF(0.5 + xc + back * qCos(a + Q_PI * 5 / 6), - 0.5 + yc - back * qSin(a + Q_PI * 5 / 6)), - QPointF(0.5 + xc + back * qCos(a - Q_PI * 5 / 6), - 0.5 + yc - back * qSin(a - Q_PI * 5 / 6)), - }}; - return arrow; -} - -void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p) const -{ - switch (cc) { - case CC_Slider: - if (const QStyleOptionSlider *slider = qstyleoption_cast(opt)) { - if (slider->subControls == SC_SliderTickmarks) { - int tickOffset = proxy()->pixelMetric(PM_SliderTickmarkOffset, slider); - int ticks = slider->tickPosition; - int thickness = proxy()->pixelMetric(PM_SliderControlThickness, slider); - int len = proxy()->pixelMetric(PM_SliderLength, slider); - int available = proxy()->pixelMetric(PM_SliderSpaceAvailable, slider); - int interval = slider->tickInterval; - if (interval <= 0) { - interval = slider->singleStep; - if (QStyle::sliderPositionFromValue(slider->minimum, slider->maximum, interval, - available) - - QStyle::sliderPositionFromValue(slider->minimum, slider->maximum, - 0, available) < 3) - interval = slider->pageStep; - } - if (!interval) - interval = 1; - int fudge = len / 2; - int pos; - // Since there is no subrect for tickmarks do a translation here. - p->save(); - p->translate(slider->rect.x(), slider->rect.y()); - p->setPen(slider->palette.windowText().color()); - int v = slider->minimum; - while (v <= slider->maximum + 1) { - if (v == slider->maximum + 1 && interval == 1) - break; - const int v_ = qMin(v, slider->maximum); - pos = QStyle::sliderPositionFromValue(slider->minimum, slider->maximum, - v_, available) + fudge; - if (slider->orientation == Qt::Horizontal) { - if (ticks & QStyleOptionSlider::TicksAbove) - p->drawLine(pos, 0, pos, tickOffset - 2); - if (ticks & QStyleOptionSlider::TicksBelow) - p->drawLine(pos, tickOffset + thickness + 1, pos, - slider->rect.height()-1); - } else { - if (ticks & QStyleOptionSlider::TicksAbove) - p->drawLine(0, pos, tickOffset - 2, pos); - if (ticks & QStyleOptionSlider::TicksBelow) - p->drawLine(tickOffset + thickness + 1, pos, - slider->rect.width()-1, pos); - } - // in the case where maximum is max int - int nextInterval = v + interval; - if (nextInterval < v) - break; - v = nextInterval; - } - p->restore(); - } - } - break; - case CC_ScrollBar: - if (const QStyleOptionSlider *scrollbar = qstyleoption_cast(opt)) { - // Make a copy here and reset it for each primitive. - QStyleOptionSlider newScrollbar = *scrollbar; - State saveFlags = scrollbar->state; - - if (scrollbar->subControls & SC_ScrollBarSubLine) { - newScrollbar.state = saveFlags; - newScrollbar.rect = proxy()->subControlRect(cc, &newScrollbar, SC_ScrollBarSubLine); - if (newScrollbar.rect.isValid()) { - if (!(scrollbar->activeSubControls & SC_ScrollBarSubLine)) - newScrollbar.state &= ~(State_Sunken | State_MouseOver); - proxy()->drawControl(CE_ScrollBarSubLine, &newScrollbar, p); - } - } - if (scrollbar->subControls & SC_ScrollBarAddLine) { - newScrollbar.rect = scrollbar->rect; - newScrollbar.state = saveFlags; - newScrollbar.rect = proxy()->subControlRect(cc, &newScrollbar, SC_ScrollBarAddLine); - if (newScrollbar.rect.isValid()) { - if (!(scrollbar->activeSubControls & SC_ScrollBarAddLine)) - newScrollbar.state &= ~(State_Sunken | State_MouseOver); - proxy()->drawControl(CE_ScrollBarAddLine, &newScrollbar, p); - } - } - if (scrollbar->subControls & SC_ScrollBarSubPage) { - newScrollbar.rect = scrollbar->rect; - newScrollbar.state = saveFlags; - newScrollbar.rect = proxy()->subControlRect(cc, &newScrollbar, SC_ScrollBarSubPage); - if (newScrollbar.rect.isValid()) { - if (!(scrollbar->activeSubControls & SC_ScrollBarSubPage)) - newScrollbar.state &= ~(State_Sunken | State_MouseOver); - proxy()->drawControl(CE_ScrollBarSubPage, &newScrollbar, p); - } - } - if (scrollbar->subControls & SC_ScrollBarAddPage) { - newScrollbar.rect = scrollbar->rect; - newScrollbar.state = saveFlags; - newScrollbar.rect = proxy()->subControlRect(cc, &newScrollbar, SC_ScrollBarAddPage); - if (newScrollbar.rect.isValid()) { - if (!(scrollbar->activeSubControls & SC_ScrollBarAddPage)) - newScrollbar.state &= ~(State_Sunken | State_MouseOver); - proxy()->drawControl(CE_ScrollBarAddPage, &newScrollbar, p); - } - } - if (scrollbar->subControls & SC_ScrollBarFirst) { - newScrollbar.rect = scrollbar->rect; - newScrollbar.state = saveFlags; - newScrollbar.rect = proxy()->subControlRect(cc, &newScrollbar, SC_ScrollBarFirst); - if (newScrollbar.rect.isValid()) { - if (!(scrollbar->activeSubControls & SC_ScrollBarFirst)) - newScrollbar.state &= ~(State_Sunken | State_MouseOver); - proxy()->drawControl(CE_ScrollBarFirst, &newScrollbar, p); - } - } - if (scrollbar->subControls & SC_ScrollBarLast) { - newScrollbar.rect = scrollbar->rect; - newScrollbar.state = saveFlags; - newScrollbar.rect = proxy()->subControlRect(cc, &newScrollbar, SC_ScrollBarLast); - if (newScrollbar.rect.isValid()) { - if (!(scrollbar->activeSubControls & SC_ScrollBarLast)) - newScrollbar.state &= ~(State_Sunken | State_MouseOver); - proxy()->drawControl(CE_ScrollBarLast, &newScrollbar, p); - } - } - if (scrollbar->subControls & SC_ScrollBarSlider) { - newScrollbar.rect = scrollbar->rect; - newScrollbar.state = saveFlags; - newScrollbar.rect = proxy()->subControlRect(cc, &newScrollbar, SC_ScrollBarSlider); - if (newScrollbar.rect.isValid()) { - if (!(scrollbar->activeSubControls & SC_ScrollBarSlider)) - newScrollbar.state &= ~(State_Sunken | State_MouseOver); - proxy()->drawControl(CE_ScrollBarSlider, &newScrollbar, p); - - if (scrollbar->state & State_HasFocus) { - QStyleOptionFocusRect fropt; - fropt.QStyleOption::operator=(newScrollbar); - fropt.rect.setRect(newScrollbar.rect.x() + 2, newScrollbar.rect.y() + 2, - newScrollbar.rect.width() - 5, - newScrollbar.rect.height() - 5); - proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, p); - } - } - } - } - break; - case CC_SpinBox: - if (const QStyleOptionSpinBox *sb = qstyleoption_cast(opt)) { - QStyleOptionSpinBox copy = *sb; - PrimitiveElement pe; - - if (sb->frame && (sb->subControls & SC_SpinBoxFrame)) { - QRect r = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxFrame); - qDrawWinPanel(p, r, sb->palette, true); - } - - if (sb->subControls & SC_SpinBoxUp) { - copy.subControls = SC_SpinBoxUp; - QPalette pal2 = sb->palette; - if (!(sb->stepEnabled & QStyleOptionSpinBox::StepUpEnabled)) { - pal2.setCurrentColorGroup(QPalette::Disabled); - copy.state &= ~State_Enabled; - } - - copy.palette = pal2; - - if (sb->activeSubControls == SC_SpinBoxUp && (sb->state & State_Sunken)) { - copy.state |= State_On; - copy.state |= State_Sunken; - } else { - copy.state |= State_Raised; - copy.state &= ~State_Sunken; - } - pe = (sb->buttonSymbols == QStyleOptionSpinBox::PlusMinus ? PE_IndicatorSpinPlus - : PE_IndicatorSpinUp); - - copy.rect = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxUp); - proxy()->drawPrimitive(PE_PanelButtonBevel, ©, p); - copy.rect.adjust(3, 0, -4, 0); - proxy()->drawPrimitive(pe, ©, p); - } - - if (sb->subControls & SC_SpinBoxDown) { - copy.subControls = SC_SpinBoxDown; - copy.state = sb->state; - QPalette pal2 = sb->palette; - if (!(sb->stepEnabled & QStyleOptionSpinBox::StepDownEnabled)) { - pal2.setCurrentColorGroup(QPalette::Disabled); - copy.state &= ~State_Enabled; - } - copy.palette = pal2; - - if (sb->activeSubControls == SC_SpinBoxDown && (sb->state & State_Sunken)) { - copy.state |= State_On; - copy.state |= State_Sunken; - } else { - copy.state |= State_Raised; - copy.state &= ~State_Sunken; - } - pe = (sb->buttonSymbols == QStyleOptionSpinBox::PlusMinus ? PE_IndicatorSpinMinus - : PE_IndicatorSpinDown); - - copy.rect = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxDown); - proxy()->drawPrimitive(PE_PanelButtonBevel, ©, p); - copy.rect.adjust(3, 0, -4, 0); - proxy()->drawPrimitive(pe, ©, p); - } - } - break; - case CC_ToolButton: - if (const QStyleOptionToolButton *toolbutton - = qstyleoption_cast(opt)) { - QRect button, menuarea; - button = proxy()->subControlRect(cc, toolbutton, SC_ToolButton); - menuarea = proxy()->subControlRect(cc, toolbutton, SC_ToolButtonMenu); - - State bflags = toolbutton->state & ~State_Sunken; - - if (bflags & State_AutoRaise) { - if (!(bflags & State_MouseOver) || !(bflags & State_Enabled)) { - bflags &= ~State_Raised; - } - } - State mflags = bflags; - if (toolbutton->state & State_Sunken) { - if (toolbutton->activeSubControls & SC_ToolButton) - bflags |= State_Sunken; - mflags |= State_Sunken; - } - - QStyleOption tool = *toolbutton; - if (toolbutton->subControls & SC_ToolButton) { - if (bflags & (State_Sunken | State_On | State_Raised)) { - tool.rect = button; - tool.state = bflags; - proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p); - } - } - - if (toolbutton->state & State_HasFocus) { - QStyleOptionFocusRect fr; - fr.QStyleOption::operator=(*toolbutton); - fr.rect.adjust(3, 3, -3, -3); - if (toolbutton->features & QStyleOptionToolButton::MenuButtonPopup) - fr.rect.adjust(0, 0, -proxy()->pixelMetric(QStyle::PM_MenuButtonIndicator, - toolbutton), 0); - proxy()->drawPrimitive(PE_FrameFocusRect, &fr, p); - } - QStyleOptionToolButton label = *toolbutton; - label.state = bflags; - int fw = proxy()->pixelMetric(PM_DefaultFrameWidth, opt); - label.rect = button.adjusted(fw, fw, -fw, -fw); - proxy()->drawControl(CE_ToolButtonLabel, &label, p); - - if (toolbutton->subControls & SC_ToolButtonMenu) { - tool.rect = menuarea; - tool.state = mflags; - if (mflags & (State_Sunken | State_On | State_Raised)) - proxy()->drawPrimitive(PE_IndicatorButtonDropDown, &tool, p); - proxy()->drawPrimitive(PE_IndicatorArrowDown, &tool, p); - } else if (toolbutton->features & QStyleOptionToolButton::HasMenu) { - int mbi = proxy()->pixelMetric(PM_MenuButtonIndicator, toolbutton); - QRect ir = toolbutton->rect; - QStyleOptionToolButton newBtn = *toolbutton; - newBtn.rect = QRect(ir.right() + 5 - mbi, ir.y() + ir.height() - mbi + 4, mbi - 6, mbi - 6); - newBtn.rect = visualRect(toolbutton->direction, button, newBtn.rect); - proxy()->drawPrimitive(PE_IndicatorArrowDown, &newBtn, p); - } - } - break; - case CC_TitleBar: - if (const QStyleOptionTitleBar *tb = qstyleoption_cast(opt)) { - QRect ir; - if (opt->subControls & SC_TitleBarLabel) { - QColor left = tb->palette.highlight().color(); - QColor right = tb->palette.base().color(); - - QBrush fillBrush(left); - if (left != right) { - QPoint p1(tb->rect.x(), tb->rect.top() + tb->rect.height()/2); - QPoint p2(tb->rect.right(), tb->rect.top() + tb->rect.height()/2); - QLinearGradient lg(p1, p2); - lg.setColorAt(0, left); - lg.setColorAt(1, right); - fillBrush = lg; - } - - p->fillRect(opt->rect, fillBrush); - - ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarLabel); - - p->setPen(tb->palette.highlightedText().color()); - p->drawText(ir.x() + 2, ir.y(), ir.width() - 2, ir.height(), - Qt::AlignLeft | Qt::AlignVCenter | Qt::TextSingleLine, tb->text); - } - - bool down = false; - QPixmap pm; - - QStyleOption tool = *tb; - if (tb->subControls & SC_TitleBarCloseButton && tb->titleBarFlags & Qt::WindowSystemMenuHint) { - ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarCloseButton); - down = tb->activeSubControls & SC_TitleBarCloseButton && (opt->state & State_Sunken); - if ((tb->titleBarFlags & Qt::WindowType_Mask) == Qt::Tool) - pm = proxy()->standardIcon(SP_DockWidgetCloseButton, &tool).pixmap(QSize(10, 10), dpr(opt->window)); - else - pm = proxy()->standardIcon(SP_TitleBarCloseButton, &tool).pixmap(QSize(10, 10), dpr(opt->window)); - tool.rect = ir; - tool.state = down ? State_Sunken : State_Raised; - proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p); - - p->save(); - if (down) - p->translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb), - proxy()->pixelMetric(PM_ButtonShiftVertical, tb)); - proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); - p->restore(); - } - - if (tb->subControls & SC_TitleBarMaxButton - && tb->titleBarFlags & Qt::WindowMaximizeButtonHint - && !(tb->titleBarState & Qt::WindowMaximized)) { - ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarMaxButton); - - down = tb->activeSubControls & SC_TitleBarMaxButton && (opt->state & State_Sunken); - pm = proxy()->standardIcon(SP_TitleBarMaxButton, &tool).pixmap(QSize(10, 10), dpr(opt->window)); - tool.rect = ir; - tool.state = down ? State_Sunken : State_Raised; - proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p); - - p->save(); - if (down) - p->translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb), - proxy()->pixelMetric(PM_ButtonShiftVertical, tb)); - proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); - p->restore(); - } - - if (tb->subControls & SC_TitleBarMinButton - && tb->titleBarFlags & Qt::WindowMinimizeButtonHint - && !(tb->titleBarState & Qt::WindowMinimized)) { - ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarMinButton); - down = tb->activeSubControls & SC_TitleBarMinButton && (opt->state & State_Sunken); - pm = proxy()->standardIcon(SP_TitleBarMinButton, &tool).pixmap(QSize(10, 10), dpr(opt->window)); - tool.rect = ir; - tool.state = down ? State_Sunken : State_Raised; - proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p); - - p->save(); - if (down) - p->translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb), - proxy()->pixelMetric(PM_ButtonShiftVertical, tb)); - proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); - p->restore(); - } - - bool drawNormalButton = (tb->subControls & SC_TitleBarNormalButton) - && (((tb->titleBarFlags & Qt::WindowMinimizeButtonHint) - && (tb->titleBarState & Qt::WindowMinimized)) - || ((tb->titleBarFlags & Qt::WindowMaximizeButtonHint) - && (tb->titleBarState & Qt::WindowMaximized))); - - if (drawNormalButton) { - ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarNormalButton); - down = tb->activeSubControls & SC_TitleBarNormalButton && (opt->state & State_Sunken); - pm = proxy()->standardIcon(SP_TitleBarNormalButton, &tool).pixmap(QSize(10, 10), dpr(opt->window)); - tool.rect = ir; - tool.state = down ? State_Sunken : State_Raised; - proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p); - - p->save(); - if (down) - p->translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb), - proxy()->pixelMetric(PM_ButtonShiftVertical, tb)); - proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); - p->restore(); - } - - if (tb->subControls & SC_TitleBarShadeButton - && tb->titleBarFlags & Qt::WindowShadeButtonHint - && !(tb->titleBarState & Qt::WindowMinimized)) { - ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarShadeButton); - down = (tb->activeSubControls & SC_TitleBarShadeButton && (opt->state & State_Sunken)); - pm = proxy()->standardIcon(SP_TitleBarShadeButton, &tool).pixmap(QSize(10, 10), dpr(opt->window)); - tool.rect = ir; - tool.state = down ? State_Sunken : State_Raised; - proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p); - p->save(); - if (down) - p->translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb), - proxy()->pixelMetric(PM_ButtonShiftVertical, tb)); - proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); - p->restore(); - } - - if (tb->subControls & SC_TitleBarUnshadeButton - && tb->titleBarFlags & Qt::WindowShadeButtonHint - && tb->titleBarState & Qt::WindowMinimized) { - ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarUnshadeButton); - - down = tb->activeSubControls & SC_TitleBarUnshadeButton && (opt->state & State_Sunken); - pm = proxy()->standardIcon(SP_TitleBarUnshadeButton, &tool).pixmap(QSize(10, 10), dpr(opt->window)); - tool.rect = ir; - tool.state = down ? State_Sunken : State_Raised; - proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p); - p->save(); - if (down) - p->translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb), - proxy()->pixelMetric(PM_ButtonShiftVertical, tb)); - proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); - p->restore(); - } - if (tb->subControls & SC_TitleBarContextHelpButton - && tb->titleBarFlags & Qt::WindowContextHelpButtonHint) { - ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarContextHelpButton); - - down = tb->activeSubControls & SC_TitleBarContextHelpButton && (opt->state & State_Sunken); - pm = proxy()->standardIcon(SP_TitleBarContextHelpButton, &tool).pixmap(QSize(10, 10), dpr(opt->window)); - tool.rect = ir; - tool.state = down ? State_Sunken : State_Raised; - proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p); - p->save(); - if (down) - p->translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb), - proxy()->pixelMetric(PM_ButtonShiftVertical, tb)); - proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); - p->restore(); - } - if (tb->subControls & SC_TitleBarSysMenu && tb->titleBarFlags & Qt::WindowSystemMenuHint) { - ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarSysMenu); - if (!tb->icon.isNull()) { - tb->icon.paint(p, ir); - } else { - int iconSize = proxy()->pixelMetric(PM_SmallIconSize, tb); - pm = proxy()->standardIcon(SP_TitleBarMenuButton, &tool).pixmap(QSize(iconSize, iconSize), dpr(opt->window)); - tool.rect = ir; - p->save(); - proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); - p->restore(); - } - } - } - break; - case CC_Dial: - if (const QStyleOptionSlider *dial = qstyleoption_cast(opt)) { - // OK, this is more a port of things over - p->save(); - - // avoid dithering - if (p->paintEngine()->hasFeature(QPaintEngine::Antialiasing)) - p->setRenderHint(QPainter::Antialiasing); - - int width = dial->rect.width(); - int height = dial->rect.height(); - qreal r = qMin(width, height) / 2; - qreal d_ = r / 6; - qreal dx = dial->rect.x() + d_ + (width - 2 * r) / 2 + 1; - qreal dy = dial->rect.y() + d_ + (height - 2 * r) / 2 + 1; - QRect br = QRect(int(dx), int(dy), int(r * 2 - 2 * d_ - 2), int(r * 2 - 2 * d_ - 2)); - - QPalette pal = opt->palette; - // draw notches - if (dial->subControls & QStyle::SC_DialTickmarks) { - p->setPen(pal.windowText().color()); - p->drawLines(QStyleHelper::calcLines(dial)); - } - - if (dial->state & State_Enabled) { - p->setBrush(pal.brush(QPalette::ColorRole(proxy()->styleHint(SH_Dial_BackgroundRole, dial)))); - p->setPen(Qt::NoPen); - p->drawEllipse(br); - p->setBrush(Qt::NoBrush); - } - p->setPen(QPen(pal.dark().color())); - p->drawArc(br, 60 * 16, 180 * 16); - p->setPen(QPen(pal.light().color())); - p->drawArc(br, 240 * 16, 180 * 16); - - qreal a; - const StaticPolygonF<3> arrow = calcArrow(dial, a); - - p->setPen(Qt::NoPen); - p->setBrush(pal.button()); - p->drawPolygon(arrow.cbegin(), arrow.size()); - - a = QStyleHelper::angle(QPointF(width / 2, height / 2), arrow[0]); - p->setBrush(Qt::NoBrush); - - if (a <= 0 || a > 200) { - p->setPen(pal.light().color()); - p->drawLine(arrow[2], arrow[0]); - p->drawLine(arrow[1], arrow[2]); - p->setPen(pal.dark().color()); - p->drawLine(arrow[0], arrow[1]); - } else if (a > 0 && a < 45) { - p->setPen(pal.light().color()); - p->drawLine(arrow[2], arrow[0]); - p->setPen(pal.dark().color()); - p->drawLine(arrow[1], arrow[2]); - p->drawLine(arrow[0], arrow[1]); - } else if (a >= 45 && a < 135) { - p->setPen(pal.dark().color()); - p->drawLine(arrow[2], arrow[0]); - p->drawLine(arrow[1], arrow[2]); - p->setPen(pal.light().color()); - p->drawLine(arrow[0], arrow[1]); - } else if (a >= 135 && a < 200) { - p->setPen(pal.dark().color()); - p->drawLine(arrow[2], arrow[0]); - p->setPen(pal.light().color()); - p->drawLine(arrow[0], arrow[1]); - p->drawLine(arrow[1], arrow[2]); - } - - // draw focus rect around the dial - QStyleOptionFocusRect fropt; - fropt.rect = dial->rect; - fropt.state = dial->state; - fropt.palette = dial->palette; - if (fropt.state & QStyle::State_HasFocus) { - br.adjust(0, 0, 2, 2); - if (dial->subControls & SC_DialTickmarks) { - int r = qMin(width, height) / 2; - br.translate(-r / 6, - r / 6); - br.setWidth(br.width() + r / 3); - br.setHeight(br.height() + r / 3); - } - fropt.rect = br.adjusted(-2, -2, 2, 2); - proxy()->drawPrimitive(QStyle::PE_FrameFocusRect, &fropt, p); - } - p->restore(); - } - break; - case CC_GroupBox: - if (const QStyleOptionGroupBox *groupBox = qstyleoption_cast(opt)) { - // Draw frame - QRect textRect = proxy()->subControlRect(CC_GroupBox, opt, SC_GroupBoxLabel); - QRect checkBoxRect = proxy()->subControlRect(CC_GroupBox, opt, SC_GroupBoxCheckBox); - if (groupBox->subControls & QStyle::SC_GroupBoxFrame) { - QStyleOptionFrame frame; - frame.QStyleOption::operator=(*groupBox); - frame.features = groupBox->features; - frame.lineWidth = groupBox->lineWidth; - frame.midLineWidth = groupBox->midLineWidth; - frame.rect = proxy()->subControlRect(CC_GroupBox, opt, SC_GroupBoxFrame); - p->save(); - QRegion region(groupBox->rect); - if (!groupBox->text.isEmpty()) { - bool ltr = groupBox->direction == Qt::LeftToRight; - QRect finalRect; - if (groupBox->subControls & QStyle::SC_GroupBoxCheckBox) { - finalRect = checkBoxRect.united(textRect); - finalRect.adjust(ltr ? -4 : 0, 0, ltr ? 0 : 4, 0); - } else { - finalRect = textRect; - } - region -= finalRect; - } - p->setClipRegion(region); - proxy()->drawPrimitive(PE_FrameGroupBox, &frame, p); - p->restore(); - } - - // Draw title - if ((groupBox->subControls & QStyle::SC_GroupBoxLabel) && !groupBox->text.isEmpty()) { - QColor textColor = groupBox->textColor; - if (textColor.isValid()) - p->setPen(textColor); - int alignment = int(groupBox->textAlignment); - if (!proxy()->styleHint(QStyle::SH_UnderlineShortcut, opt)) - alignment |= Qt::TextHideMnemonic; - - proxy()->drawItemText(p, textRect, Qt::TextShowMnemonic | Qt::AlignHCenter | alignment, - groupBox->palette, groupBox->state & State_Enabled, groupBox->text, - textColor.isValid() ? QPalette::NoRole : QPalette::WindowText); - - if (groupBox->state & State_HasFocus) { - QStyleOptionFocusRect fropt; - fropt.QStyleOption::operator=(*groupBox); - fropt.rect = textRect; - proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, p); - } - } - - // Draw checkbox - if (groupBox->subControls & SC_GroupBoxCheckBox) { - QStyleOptionButton box; - box.QStyleOption::operator=(*groupBox); - box.rect = checkBoxRect; - proxy()->drawPrimitive(PE_IndicatorCheckBox, &box, p); - } - } - break; - case CC_MdiControls: - { - QStyleOptionButton btnOpt; - btnOpt.QStyleOption::operator=(*opt); - btnOpt.state &= ~State_MouseOver; - int bsx = 0; - int bsy = 0; - const int buttonIconMetric = proxy()->pixelMetric(PM_TitleBarButtonIconSize, &btnOpt); - const QSize buttonIconSize(buttonIconMetric, buttonIconMetric); - if (opt->subControls & QStyle::SC_MdiCloseButton) { - if (opt->activeSubControls & QStyle::SC_MdiCloseButton && (opt->state & State_Sunken)) { - btnOpt.state |= State_Sunken; - btnOpt.state &= ~State_Raised; - bsx = proxy()->pixelMetric(PM_ButtonShiftHorizontal); - bsy = proxy()->pixelMetric(PM_ButtonShiftVertical); - } else { - btnOpt.state |= State_Raised; - btnOpt.state &= ~State_Sunken; - bsx = 0; - bsy = 0; - } - btnOpt.rect = proxy()->subControlRect(CC_MdiControls, opt, SC_MdiCloseButton); - proxy()->drawPrimitive(PE_PanelButtonCommand, &btnOpt, p); - QPixmap pm = proxy()->standardIcon(SP_TitleBarCloseButton).pixmap(buttonIconSize, dpr(opt->window)); - proxy()->drawItemPixmap(p, btnOpt.rect.translated(bsx, bsy), Qt::AlignCenter, pm); - } - if (opt->subControls & QStyle::SC_MdiNormalButton) { - if (opt->activeSubControls & QStyle::SC_MdiNormalButton && (opt->state & State_Sunken)) { - btnOpt.state |= State_Sunken; - btnOpt.state &= ~State_Raised; - bsx = proxy()->pixelMetric(PM_ButtonShiftHorizontal); - bsy = proxy()->pixelMetric(PM_ButtonShiftVertical); - } else { - btnOpt.state |= State_Raised; - btnOpt.state &= ~State_Sunken; - bsx = 0; - bsy = 0; - } - btnOpt.rect = proxy()->subControlRect(CC_MdiControls, opt, SC_MdiNormalButton); - proxy()->drawPrimitive(PE_PanelButtonCommand, &btnOpt, p); - QPixmap pm = proxy()->standardIcon(SP_TitleBarNormalButton).pixmap(buttonIconSize, dpr(opt->window)); - proxy()->drawItemPixmap(p, btnOpt.rect.translated(bsx, bsy), Qt::AlignCenter, pm); - } - if (opt->subControls & QStyle::SC_MdiMinButton) { - if (opt->activeSubControls & QStyle::SC_MdiMinButton && (opt->state & State_Sunken)) { - btnOpt.state |= State_Sunken; - btnOpt.state &= ~State_Raised; - bsx = proxy()->pixelMetric(PM_ButtonShiftHorizontal); - bsy = proxy()->pixelMetric(PM_ButtonShiftVertical); - } else { - btnOpt.state |= State_Raised; - btnOpt.state &= ~State_Sunken; - bsx = 0; - bsy = 0; - } - btnOpt.rect = proxy()->subControlRect(CC_MdiControls, opt, SC_MdiMinButton); - proxy()->drawPrimitive(PE_PanelButtonCommand, &btnOpt, p); - QPixmap pm = proxy()->standardIcon(SP_TitleBarMinButton).pixmap(buttonIconSize, dpr(opt->window)); - proxy()->drawItemPixmap(p, btnOpt.rect.translated(bsx, bsy), Qt::AlignCenter, pm); - } - } - break; - default: - qWarning("QCommonStyle::drawComplexControl: Control %d not handled", cc); - } -} - -/*! - \reimp -*/ -QStyle::SubControl QCommonStyle::hitTestComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, const QPoint &pt) const -{ - SubControl sc = SC_None; - switch (cc) { - case CC_Slider: - if (const QStyleOptionSlider *slider = qstyleoption_cast(opt)) { - QRect r = proxy()->subControlRect(cc, slider, SC_SliderHandle); - if (r.isValid() && r.contains(pt)) { - sc = SC_SliderHandle; - } else { - r = proxy()->subControlRect(cc, slider, SC_SliderGroove); - if (r.isValid() && r.contains(pt)) - sc = SC_SliderGroove; - } - } - break; - case CC_ScrollBar: - if (const QStyleOptionSlider *scrollbar = qstyleoption_cast(opt)) { - QRect r; - uint ctrl = SC_ScrollBarAddLine; - while (ctrl <= SC_ScrollBarGroove) { - r = proxy()->subControlRect(cc, scrollbar, QStyle::SubControl(ctrl)); - if (r.isValid() && r.contains(pt)) { - sc = QStyle::SubControl(ctrl); - break; - } - ctrl <<= 1; - } - } - break; - case CC_ToolButton: - if (const QStyleOptionToolButton *toolbutton = qstyleoption_cast(opt)) { - QRect r; - uint ctrl = SC_ToolButton; - while (ctrl <= SC_ToolButtonMenu) { - r = proxy()->subControlRect(cc, toolbutton, QStyle::SubControl(ctrl)); - if (r.isValid() && r.contains(pt)) { - sc = QStyle::SubControl(ctrl); - break; - } - ctrl <<= 1; - } - } - break; - case CC_SpinBox: - if (const QStyleOptionSpinBox *spinbox = qstyleoption_cast(opt)) { - QRect r; - uint ctrl = SC_SpinBoxUp; - while (ctrl <= SC_SpinBoxEditField) { - r = proxy()->subControlRect(cc, spinbox, QStyle::SubControl(ctrl)); - if (r.isValid() && r.contains(pt)) { - sc = QStyle::SubControl(ctrl); - break; - } - ctrl <<= 1; - } - } - break; - case CC_TitleBar: - if (const QStyleOptionTitleBar *tb = qstyleoption_cast(opt)) { - QRect r; - uint ctrl = SC_TitleBarSysMenu; - - while (ctrl <= SC_TitleBarLabel) { - r = proxy()->subControlRect(cc, tb, QStyle::SubControl(ctrl)); - if (r.isValid() && r.contains(pt)) { - sc = QStyle::SubControl(ctrl); - break; - } - ctrl <<= 1; - } - } - break; - case CC_ComboBox: - if (const QStyleOptionComboBox *cb = qstyleoption_cast(opt)) { - QRect r; - uint ctrl = SC_ComboBoxArrow; // Start here and go down. - while (ctrl > 0) { - r = proxy()->subControlRect(cc, cb, QStyle::SubControl(ctrl)); - if (r.isValid() && r.contains(pt)) { - sc = QStyle::SubControl(ctrl); - break; - } - ctrl >>= 1; - } - } - break; - case CC_GroupBox: - if (const QStyleOptionGroupBox *groupBox = qstyleoption_cast(opt)) { - QRect r; - uint ctrl = SC_GroupBoxCheckBox; - while (ctrl <= SC_GroupBoxFrame) { - r = proxy()->subControlRect(cc, groupBox, QStyle::SubControl(ctrl)); - if (r.isValid() && r.contains(pt)) { - sc = QStyle::SubControl(ctrl); - break; - } - ctrl <<= 1; - } - } - break; - case CC_MdiControls: - { - QRect r; - uint ctrl = SC_MdiMinButton; - while (ctrl <= SC_MdiCloseButton) { - r = proxy()->subControlRect(CC_MdiControls, opt, QStyle::SubControl(ctrl)); - if (r.isValid() && r.contains(pt) && (opt->subControls & ctrl)) { - sc = QStyle::SubControl(ctrl); - return sc; - } - ctrl <<= 1; - } - } - break; - default: - qWarning("QCommonStyle::hitTestComplexControl: Case %d not handled", cc); - } - return sc; -} - -/*! - \reimp -*/ -QRect QCommonStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc) const -{ - QRect ret; - switch (cc) { - case CC_Slider: - if (const QStyleOptionSlider *slider = qstyleoption_cast(opt)) { - int tickOffset = proxy()->pixelMetric(PM_SliderTickmarkOffset, slider); - int thickness = proxy()->pixelMetric(PM_SliderControlThickness, slider); - - switch (sc) { - case SC_SliderHandle: { - int sliderPos = 0; - int len = proxy()->pixelMetric(PM_SliderLength, slider); - bool horizontal = slider->orientation == Qt::Horizontal; - sliderPos = sliderPositionFromValue(slider->minimum, slider->maximum, - slider->sliderPosition, - (horizontal ? slider->rect.width() - : slider->rect.height()) - len, - slider->upsideDown); - if (horizontal) - ret.setRect(slider->rect.x() + sliderPos, slider->rect.y() + tickOffset, len, thickness); - else - ret.setRect(slider->rect.x() + tickOffset, slider->rect.y() + sliderPos, thickness, len); - break; } - case SC_SliderGroove: - if (slider->orientation == Qt::Horizontal) - ret.setRect(slider->rect.x(), slider->rect.y() + tickOffset, - slider->rect.width(), thickness); - else - ret.setRect(slider->rect.x() + tickOffset, slider->rect.y(), - thickness, slider->rect.height()); - break; - default: - break; - } - ret = visualRect(slider->direction, slider->rect, ret); - } - break; - case CC_ScrollBar: - if (const QStyleOptionSlider *scrollbar = qstyleoption_cast(opt)) { - const QRect scrollBarRect = scrollbar->rect; - int sbextent = 0; - if (!proxy()->styleHint(SH_ScrollBar_Transient, scrollbar)) - sbextent = proxy()->pixelMetric(PM_ScrollBarExtent, scrollbar); - int maxlen = ((scrollbar->orientation == Qt::Horizontal) ? - scrollBarRect.width() : scrollBarRect.height()) - (sbextent * 2); - int sliderlen; - - // calculate slider length - if (scrollbar->maximum != scrollbar->minimum) { - uint range = scrollbar->maximum - scrollbar->minimum; - sliderlen = (qint64(scrollbar->pageStep) * maxlen) / (range + scrollbar->pageStep); - - int slidermin = proxy()->pixelMetric(PM_ScrollBarSliderMin, scrollbar); - if (sliderlen < slidermin || range > INT_MAX / 2) - sliderlen = slidermin; - if (sliderlen > maxlen) - sliderlen = maxlen; - } else { - sliderlen = maxlen; - } - - int sliderstart = sbextent + sliderPositionFromValue(scrollbar->minimum, - scrollbar->maximum, - scrollbar->sliderPosition, - maxlen - sliderlen, - scrollbar->upsideDown); - - switch (sc) { - case SC_ScrollBarSubLine: // top/left button - if (scrollbar->orientation == Qt::Horizontal) { - int buttonWidth = qMin(scrollBarRect.width() / 2, sbextent); - ret.setRect(0, 0, buttonWidth, scrollBarRect.height()); - } else { - int buttonHeight = qMin(scrollBarRect.height() / 2, sbextent); - ret.setRect(0, 0, scrollBarRect.width(), buttonHeight); - } - break; - case SC_ScrollBarAddLine: // bottom/right button - if (scrollbar->orientation == Qt::Horizontal) { - int buttonWidth = qMin(scrollBarRect.width()/2, sbextent); - ret.setRect(scrollBarRect.width() - buttonWidth, 0, buttonWidth, scrollBarRect.height()); - } else { - int buttonHeight = qMin(scrollBarRect.height()/2, sbextent); - ret.setRect(0, scrollBarRect.height() - buttonHeight, scrollBarRect.width(), buttonHeight); - } - break; - case SC_ScrollBarSubPage: // between top/left button and slider - if (scrollbar->orientation == Qt::Horizontal) - ret.setRect(sbextent, 0, sliderstart - sbextent, scrollBarRect.height()); - else - ret.setRect(0, sbextent, scrollBarRect.width(), sliderstart - sbextent); - break; - case SC_ScrollBarAddPage: // between bottom/right button and slider - if (scrollbar->orientation == Qt::Horizontal) - ret.setRect(sliderstart + sliderlen, 0, - maxlen - sliderstart - sliderlen + sbextent, scrollBarRect.height()); - else - ret.setRect(0, sliderstart + sliderlen, scrollBarRect.width(), - maxlen - sliderstart - sliderlen + sbextent); - break; - case SC_ScrollBarGroove: - if (scrollbar->orientation == Qt::Horizontal) - ret.setRect(sbextent, 0, scrollBarRect.width() - sbextent * 2, - scrollBarRect.height()); - else - ret.setRect(0, sbextent, scrollBarRect.width(), - scrollBarRect.height() - sbextent * 2); - break; - case SC_ScrollBarSlider: - if (scrollbar->orientation == Qt::Horizontal) - ret.setRect(sliderstart, 0, sliderlen, scrollBarRect.height()); - else - ret.setRect(0, sliderstart, scrollBarRect.width(), sliderlen); - break; - default: - break; - } - ret = visualRect(scrollbar->direction, scrollBarRect, ret); - } - break; - case CC_SpinBox: - if (const QStyleOptionSpinBox *spinbox = qstyleoption_cast(opt)) { - QSize bs; - int fw = spinbox->frame ? proxy()->pixelMetric(PM_SpinBoxFrameWidth, spinbox) : 0; - bs.setHeight(qMax(8, spinbox->rect.height()/2 - fw)); - // 1.6 -approximate golden mean - bs.setWidth(qMax(16, qMin(bs.height() * 8 / 5, spinbox->rect.width() / 4))); - int y = fw + spinbox->rect.y(); - int x, lx, rx; - x = spinbox->rect.x() + spinbox->rect.width() - fw - bs.width(); - lx = fw; - rx = x - fw; - switch (sc) { - case SC_SpinBoxUp: - if (spinbox->buttonSymbols == QStyleOptionSpinBox::NoButtons) - return QRect(); - ret = QRect(x, y, bs.width(), bs.height()); - break; - case SC_SpinBoxDown: - if (spinbox->buttonSymbols == QStyleOptionSpinBox::NoButtons) - return QRect(); - - ret = QRect(x, y + bs.height(), bs.width(), bs.height()); - break; - case SC_SpinBoxEditField: - if (spinbox->buttonSymbols == QStyleOptionSpinBox::NoButtons) { - ret = QRect(lx, fw, spinbox->rect.width() - 2*fw, spinbox->rect.height() - 2*fw); - } else { - ret = QRect(lx, fw, rx, spinbox->rect.height() - 2*fw); - } - break; - case SC_SpinBoxFrame: - ret = spinbox->rect; - default: - break; - } - ret = visualRect(spinbox->direction, spinbox->rect, ret); - } - break; - case CC_ToolButton: - if (const QStyleOptionToolButton *tb = qstyleoption_cast(opt)) { - int mbi = proxy()->pixelMetric(PM_MenuButtonIndicator, tb); - ret = tb->rect; - switch (sc) { - case SC_ToolButton: - if ((tb->features - & (QStyleOptionToolButton::MenuButtonPopup | QStyleOptionToolButton::PopupDelay)) - == QStyleOptionToolButton::MenuButtonPopup) - ret.adjust(0, 0, -mbi, 0); - break; - case SC_ToolButtonMenu: - if ((tb->features - & (QStyleOptionToolButton::MenuButtonPopup | QStyleOptionToolButton::PopupDelay)) - == QStyleOptionToolButton::MenuButtonPopup) - ret.adjust(ret.width() - mbi, 0, 0, 0); - break; - default: - break; - } - ret = visualRect(tb->direction, tb->rect, ret); - } - break; - case CC_ComboBox: - if (const QStyleOptionComboBox *cb = qstyleoption_cast(opt)) { - const qreal dpi = QStyleHelper::dpi(opt); - const int x = cb->rect.x(), y = cb->rect.y(), wi = cb->rect.width(), he = cb->rect.height(); - const int margin = cb->frame ? qRound(QStyleHelper::dpiScaled(3, dpi)) : 0; - const int bmarg = cb->frame ? qRound(QStyleHelper::dpiScaled(2, dpi)) : 0; - const int xpos = x + wi - bmarg - qRound(QStyleHelper::dpiScaled(16, dpi)); - - - switch (sc) { - case SC_ComboBoxFrame: - ret = cb->rect; - break; - case SC_ComboBoxArrow: - ret.setRect(xpos, y + bmarg, qRound(QStyleHelper::dpiScaled(16, opt)), he - 2*bmarg); - break; - case SC_ComboBoxEditField: - ret.setRect(x + margin, y + margin, wi - 2 * margin - qRound(QStyleHelper::dpiScaled(16, dpi)), he - 2 * margin); - break; - case SC_ComboBoxListBoxPopup: - ret = cb->rect; - break; - default: - break; - } - ret = visualRect(cb->direction, cb->rect, ret); - } - break; - case CC_TitleBar: - if (const QStyleOptionTitleBar *tb = qstyleoption_cast(opt)) { - const int controlMargin = 2; - const int controlHeight = tb->rect.height() - controlMargin *2; - const int delta = controlHeight + controlMargin; - int offset = 0; - - bool isMinimized = tb->titleBarState & Qt::WindowMinimized; - bool isMaximized = tb->titleBarState & Qt::WindowMaximized; - - switch (sc) { - case SC_TitleBarLabel: - if (tb->titleBarFlags & (Qt::WindowTitleHint | Qt::WindowSystemMenuHint)) { - ret = tb->rect; - if (tb->titleBarFlags & Qt::WindowSystemMenuHint) - ret.adjust(delta, 0, -delta, 0); - if (tb->titleBarFlags & Qt::WindowMinimizeButtonHint) - ret.adjust(0, 0, -delta, 0); - if (tb->titleBarFlags & Qt::WindowMaximizeButtonHint) - ret.adjust(0, 0, -delta, 0); - if (tb->titleBarFlags & Qt::WindowShadeButtonHint) - ret.adjust(0, 0, -delta, 0); - if (tb->titleBarFlags & Qt::WindowContextHelpButtonHint) - ret.adjust(0, 0, -delta, 0); - } - break; - case SC_TitleBarContextHelpButton: - if (tb->titleBarFlags & Qt::WindowContextHelpButtonHint) - offset += delta; - Q_FALLTHROUGH(); - case SC_TitleBarMinButton: - if (!isMinimized && (tb->titleBarFlags & Qt::WindowMinimizeButtonHint)) - offset += delta; - else if (sc == SC_TitleBarMinButton) - break; - Q_FALLTHROUGH(); - case SC_TitleBarNormalButton: - if (isMinimized && (tb->titleBarFlags & Qt::WindowMinimizeButtonHint)) - offset += delta; - else if (isMaximized && (tb->titleBarFlags & Qt::WindowMaximizeButtonHint)) - offset += delta; - else if (sc == SC_TitleBarNormalButton) - break; - Q_FALLTHROUGH(); - case SC_TitleBarMaxButton: - if (!isMaximized && (tb->titleBarFlags & Qt::WindowMaximizeButtonHint)) - offset += delta; - else if (sc == SC_TitleBarMaxButton) - break; - Q_FALLTHROUGH(); - case SC_TitleBarShadeButton: - if (!isMinimized && (tb->titleBarFlags & Qt::WindowShadeButtonHint)) - offset += delta; - else if (sc == SC_TitleBarShadeButton) - break; - Q_FALLTHROUGH(); - case SC_TitleBarUnshadeButton: - if (isMinimized && (tb->titleBarFlags & Qt::WindowShadeButtonHint)) - offset += delta; - else if (sc == SC_TitleBarUnshadeButton) - break; - Q_FALLTHROUGH(); - case SC_TitleBarCloseButton: - if (tb->titleBarFlags & Qt::WindowSystemMenuHint) - offset += delta; - else if (sc == SC_TitleBarCloseButton) - break; - ret.setRect(tb->rect.right() - offset, tb->rect.top() + controlMargin, - controlHeight, controlHeight); - break; - case SC_TitleBarSysMenu: - if (tb->titleBarFlags & Qt::WindowSystemMenuHint) { - ret.setRect(tb->rect.left() + controlMargin, tb->rect.top() + controlMargin, - controlHeight, controlHeight); - } - break; - default: - break; - } - ret = visualRect(tb->direction, tb->rect, ret); - } - break; - case CC_GroupBox: { - if (const QStyleOptionGroupBox *groupBox = qstyleoption_cast(opt)) { - switch (sc) { - case SC_GroupBoxFrame: - case SC_GroupBoxContents: { - int topMargin = 0; - int topHeight = 0; - int verticalAlignment = proxy()->styleHint(SH_GroupBox_TextLabelVerticalAlignment, groupBox); - bool hasCheckBox = groupBox->subControls & QStyle::SC_GroupBoxCheckBox; - if (groupBox->text.size() || hasCheckBox) { - int checkBoxHeight = hasCheckBox ? proxy()->pixelMetric(PM_IndicatorHeight, groupBox) : 0; - topHeight = qMax(groupBox->fontMetrics.height(), checkBoxHeight); - if (verticalAlignment & Qt::AlignVCenter) - topMargin = topHeight / 2; - else if (verticalAlignment & Qt::AlignTop) - topMargin = topHeight; - } - - QRect frameRect = groupBox->rect; - frameRect.setTop(topMargin); - - if (sc == SC_GroupBoxFrame) { - ret = frameRect; - break; - } - - int frameWidth = 0; - if ((groupBox->features & QStyleOptionFrame::Flat) == 0) - frameWidth = proxy()->pixelMetric(PM_DefaultFrameWidth, groupBox); - ret = frameRect.adjusted(frameWidth, frameWidth + topHeight - topMargin, - -frameWidth, -frameWidth); - break; - } - case SC_GroupBoxCheckBox: - case SC_GroupBoxLabel: { - QFontMetrics fontMetrics = groupBox->fontMetrics; - int th = fontMetrics.height(); - int tw = fontMetrics.size(Qt::TextShowMnemonic, groupBox->text + QLatin1Char(' ')).width(); - int marg = (groupBox->features & QStyleOptionFrame::Flat) ? 0 : 8; - ret = groupBox->rect.adjusted(marg, 0, -marg, 0); - - int indicatorWidth = proxy()->pixelMetric(PM_IndicatorWidth, opt); - int indicatorHeight = proxy()->pixelMetric(PM_IndicatorHeight, opt); - int indicatorSpace = proxy()->pixelMetric(PM_CheckBoxLabelSpacing, opt) - 1; - bool hasCheckBox = groupBox->subControls & QStyle::SC_GroupBoxCheckBox; - int checkBoxWidth = hasCheckBox ? (indicatorWidth + indicatorSpace) : 0; - int checkBoxHeight = hasCheckBox ? indicatorHeight : 0; - - int h = qMax(th, checkBoxHeight); - ret.setHeight(h); - - // Adjusted rect for label + indicatorWidth + indicatorSpace - QRect totalRect = alignedRect(groupBox->direction, groupBox->textAlignment, - QSize(tw + checkBoxWidth, h), ret); - - // Adjust totalRect if checkbox is set - if (hasCheckBox) { - bool ltr = groupBox->direction == Qt::LeftToRight; - int left = 0; - // Adjust for check box - if (sc == SC_GroupBoxCheckBox) { - left = ltr ? totalRect.left() : (totalRect.right() - indicatorWidth); - int top = totalRect.top() + (h - checkBoxHeight) / 2; - totalRect.setRect(left, top, indicatorWidth, indicatorHeight); - // Adjust for label - } else { - left = ltr ? (totalRect.left() + checkBoxWidth - 2) : totalRect.left(); - int top = totalRect.top() + (h - th) / 2; - totalRect.setRect(left, top, totalRect.width() - checkBoxWidth, th); - } - } - ret = totalRect; - break; - } - default: - break; - } - } - break; - } - case CC_MdiControls: - { - int numSubControls = 0; - if (opt->subControls & SC_MdiCloseButton) - ++numSubControls; - if (opt->subControls & SC_MdiMinButton) - ++numSubControls; - if (opt->subControls & SC_MdiNormalButton) - ++numSubControls; - if (numSubControls == 0) - break; - - int buttonWidth = opt->rect.width() / numSubControls - 1; - int offset = 0; - switch (sc) { - case SC_MdiCloseButton: - // Only one sub control, no offset needed. - if (numSubControls == 1) - break; - offset += buttonWidth + 2; - Q_FALLTHROUGH(); - case SC_MdiNormalButton: - // No offset needed if - // 1) There's only one sub control - // 2) We have a close button and a normal button (offset already added in SC_MdiClose) - if (numSubControls == 1 || (numSubControls == 2 && !(opt->subControls & SC_MdiMinButton))) - break; - if (opt->subControls & SC_MdiNormalButton) - offset += buttonWidth; - break; - default: - break; - } - - // Subtract one pixel if we only have one sub control. At this point - // buttonWidth is the actual width + 1 pixel margin, but we don't want the - // margin when there are no other controllers. - if (numSubControls == 1) - --buttonWidth; - ret = QRect(offset, 0, buttonWidth, opt->rect.height()); - break; } - default: - qWarning("QCommonStyle::subControlRect: Case %d not handled", cc); - } - - return ret; -} - -int QCommonStyle::pixelMetric(PixelMetric m, const QStyleOption *opt) const -{ - int ret; - - switch (m) { - case PM_FocusFrameVMargin: - case PM_FocusFrameHMargin: - ret = 2; - break; - case PM_MenuBarVMargin: - case PM_MenuBarHMargin: - ret = 0; - break; - case PM_DialogButtonsSeparator: - ret = int(QStyleHelper::dpiScaled(5, opt)); - break; - case PM_DialogButtonsButtonWidth: - ret = int(QStyleHelper::dpiScaled(70, opt)); - break; - case PM_DialogButtonsButtonHeight: - ret = int(QStyleHelper::dpiScaled(30, opt)); - break; - case PM_TitleBarHeight: { - if (const QStyleOptionTitleBar *tb = qstyleoption_cast(opt)) { - if ((tb->titleBarFlags & Qt::WindowType_Mask) == Qt::Tool) { - ret = qMax(opt->fontMetrics.height(), 16); - } else { - ret = qMax(opt->fontMetrics.height(), 18); - } - } else { - ret = int(QStyleHelper::dpiScaled(18., opt)); - } - - break; } - case PM_TitleBarButtonSize: - ret = int(QStyleHelper::dpiScaled(16., opt)); - break; - case PM_TitleBarButtonIconSize: - ret = int(QStyleHelper::dpiScaled(16., opt)); - break; - - case PM_ScrollBarSliderMin: - ret = int(QStyleHelper::dpiScaled(9., opt)); - break; - - case PM_ButtonMargin: - ret = int(QStyleHelper::dpiScaled(6., opt)); - break; - - case PM_DockWidgetTitleBarButtonMargin: - ret = int(QStyleHelper::dpiScaled(2., opt)); - break; - - case PM_ButtonDefaultIndicator: - ret = 0; - break; - - case PM_MenuButtonIndicator: - ret = int(QStyleHelper::dpiScaled(12, opt)); - break; - - case PM_ButtonShiftHorizontal: - case PM_ButtonShiftVertical: - - case PM_DefaultFrameWidth: - ret = 2; - break; - - case PM_ComboBoxFrameWidth: - case PM_SpinBoxFrameWidth: - case PM_MenuPanelWidth: - case PM_TabBarBaseOverlap: - case PM_TabBarBaseHeight: - ret = proxy()->pixelMetric(PM_DefaultFrameWidth, opt); - break; - case PM_MdiSubWindowFrameWidth: - ret = int(QStyleHelper::dpiScaled(4, opt)); - break; - case PM_MdiSubWindowMinimizedWidth: - ret = int(QStyleHelper::dpiScaled(196, opt)); - break; - case PM_ScrollBarExtent: - ret = int(QStyleHelper::dpiScaled(16, opt)); - break; - case PM_MaximumDragDistance: - ret = QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::MaximumScrollBarDragDistance).toInt(); - break; - case PM_SliderThickness: - ret = int(QStyleHelper::dpiScaled(16, opt)); - break; - case PM_SliderTickmarkOffset: - if (const QStyleOptionSlider *sl = qstyleoption_cast(opt)) { - int space = (sl->orientation == Qt::Horizontal) ? sl->rect.height() - : sl->rect.width(); - int thickness = proxy()->pixelMetric(PM_SliderControlThickness, sl); - int ticks = sl->tickPosition; - - if (ticks == QStyleOptionSlider::TicksBothSides) - ret = (space - thickness) / 2; - else if (ticks == QStyleOptionSlider::TicksAbove) - ret = space - thickness; - else - ret = 0; - } else { - ret = 0; - } - break; - case PM_SliderSpaceAvailable: - if (const QStyleOptionSlider *sl = qstyleoption_cast(opt)) { - if (sl->orientation == Qt::Horizontal) - ret = sl->rect.width() - proxy()->pixelMetric(PM_SliderLength, sl); - else - ret = sl->rect.height() - proxy()->pixelMetric(PM_SliderLength, sl); - } else { - ret = 0; - } - break; - case PM_DockWidgetSeparatorExtent: - ret = int(QStyleHelper::dpiScaled(6, opt)); - break; - - case PM_DockWidgetHandleExtent: - ret = int(QStyleHelper::dpiScaled(8, opt)); - break; - case PM_DockWidgetTitleMargin: - ret = 0; - break; - case PM_DockWidgetFrameWidth: - ret = 1; - break; - case PM_SpinBoxSliderHeight: - case PM_MenuBarPanelWidth: - ret = 2; - break; - case PM_MenuBarItemSpacing: - ret = 0; - break; - case PM_ToolBarFrameWidth: - ret = 1; - break; - - case PM_ToolBarItemMargin: - ret = 0; - break; - - case PM_ToolBarItemSpacing: - ret = int(QStyleHelper::dpiScaled(4, opt)); - break; - - case PM_ToolBarHandleExtent: - ret = int(QStyleHelper::dpiScaled(8, opt)); - break; - - case PM_ToolBarSeparatorExtent: - ret = int(QStyleHelper::dpiScaled(6, opt)); - break; - - case PM_ToolBarExtensionExtent: - ret = int(QStyleHelper::dpiScaled(12, opt)); - break; - - case PM_TabBarTabOverlap: - ret = 3; - break; - - case PM_TabBarTabHSpace: - ret = int(QStyleHelper::dpiScaled(24, opt)); - break; - - case PM_TabBarTabShiftHorizontal: - ret = 0; - break; - - case PM_TabBarTabShiftVertical: - ret = 2; - break; - - case PM_TabBarTabVSpace: { - const QStyleOptionTab *tb = qstyleoption_cast(opt); - if (tb && (tb->shape == QStyleOptionTab::RoundedNorth || tb->shape == QStyleOptionTab::RoundedSouth - || tb->shape == QStyleOptionTab::RoundedWest || tb->shape == QStyleOptionTab::RoundedEast)) - ret = 8; - else - if(tb && (tb->shape == QStyleOptionTab::TriangularWest || tb->shape == QStyleOptionTab::TriangularEast)) - ret = 3; - else - ret = 2; - break; } - - case PM_ProgressBarChunkWidth: - ret = 9; - break; - - case PM_IndicatorWidth: - ret = int(QStyleHelper::dpiScaled(13, opt)); - break; - - case PM_IndicatorHeight: - ret = int(QStyleHelper::dpiScaled(13, opt)); - break; - - case PM_ExclusiveIndicatorWidth: - ret = int(QStyleHelper::dpiScaled(12, opt)); - break; - - case PM_ExclusiveIndicatorHeight: - ret = int(QStyleHelper::dpiScaled(12, opt)); - break; - - case PM_MenuTearoffHeight: - ret = int(QStyleHelper::dpiScaled(10, opt)); - break; - - case PM_MenuScrollerHeight: - ret = int(QStyleHelper::dpiScaled(10, opt)); - break; - - case PM_MenuDesktopFrameWidth: - case PM_MenuHMargin: - case PM_MenuVMargin: - ret = 0; - break; - - case PM_HeaderMargin: - ret = int(QStyleHelper::dpiScaled(4, opt)); - break; - case PM_HeaderMarkSize: - ret = int(QStyleHelper::dpiScaled(16, opt)); - break; - case PM_HeaderGripMargin: - ret = int(QStyleHelper::dpiScaled(4, opt)); - break; - case PM_HeaderDefaultSectionSizeHorizontal: - ret = int(QStyleHelper::dpiScaled(100, opt)); - break; - case PM_HeaderDefaultSectionSizeVertical: - ret = int(QStyleHelper::dpiScaled(30, opt)); - break; - case PM_TabBarScrollButtonWidth: - ret = int(QStyleHelper::dpiScaled(16, opt)); - break; - case PM_LayoutLeftMargin: - case PM_LayoutTopMargin: - case PM_LayoutRightMargin: - case PM_LayoutBottomMargin: - { - bool isWindow = opt ? (opt->state & State_Window) : false; - ret = proxy()->pixelMetric(isWindow ? PM_DefaultTopLevelMargin : PM_DefaultChildMargin); - } - break; - case PM_LayoutHorizontalSpacing: - case PM_LayoutVerticalSpacing: - ret = proxy()->pixelMetric(PM_DefaultLayoutSpacing); - break; - - case PM_DefaultTopLevelMargin: - ret = int(QStyleHelper::dpiScaled(11, opt)); - break; - case PM_DefaultChildMargin: - ret = int(QStyleHelper::dpiScaled(9, opt)); - break; - case PM_DefaultLayoutSpacing: - ret = int(QStyleHelper::dpiScaled(6, opt)); - break; - - case PM_ToolBarIconSize: - ret = 0; - if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) - ret = theme->themeHint(QPlatformTheme::ToolBarIconSize).toInt(); - if (ret <= 0) - ret = int(QStyleHelper::dpiScaled(24, opt)); - break; - - case PM_TabBarIconSize: - case PM_ListViewIconSize: - ret = proxy()->pixelMetric(PM_SmallIconSize, opt); - break; - - case PM_ButtonIconSize: - case PM_SmallIconSize: - ret = int(QStyleHelper::dpiScaled(16, opt)); - break; - case PM_IconViewIconSize: - ret = proxy()->pixelMetric(PM_LargeIconSize, opt); - break; - - case PM_LargeIconSize: - ret = int(QStyleHelper::dpiScaled(32, opt)); - break; - - case PM_ToolTipLabelFrameWidth: - ret = 1; - break; - case PM_CheckBoxLabelSpacing: - case PM_RadioButtonLabelSpacing: - ret = int(QStyleHelper::dpiScaled(6, opt)); - break; - case PM_SizeGripSize: - ret = int(QStyleHelper::dpiScaled(13, opt)); - break; - case PM_MessageBoxIconSize: -#ifdef Q_OS_MAC - if (QGuiApplication::desktopSettingsAware()) { - ret = 64; // No DPI scaling, it's handled elsewhere. - } else -#endif - { - ret = int(QStyleHelper::dpiScaled(32, opt)); - } - break; - case PM_TextCursorWidth: - ret = QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::TextCursorWidth).toInt(); - break; - case PM_TabBar_ScrollButtonOverlap: - ret = 1; - break; - case PM_TabCloseIndicatorWidth: - case PM_TabCloseIndicatorHeight: - ret = int(QStyleHelper::dpiScaled(16, opt)); - break; - case PM_ScrollView_ScrollBarSpacing: - ret = 2 * proxy()->pixelMetric(PM_DefaultFrameWidth, opt); - break; - case PM_ScrollView_ScrollBarOverlap: - ret = 0; - break; - case PM_SubMenuOverlap: - ret = -proxy()->pixelMetric(QStyle::PM_MenuPanelWidth, opt); - break; - case PM_TreeViewIndentation: - ret = int(QStyleHelper::dpiScaled(20, opt)); - break; - default: - ret = 0; - break; - } - - return ret; -} - -QSize QCommonStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, const QSize &csz) const -{ - Q_D(const QCommonStyle); - QSize sz(csz); - switch (ct) { - case CT_PushButton: - if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { - int w = csz.width(), - h = csz.height(), - bm = proxy()->pixelMetric(PM_ButtonMargin, btn), - fw = proxy()->pixelMetric(PM_DefaultFrameWidth, btn) * 2; - w += bm + fw; - h += bm + fw; - if (btn->features & QStyleOptionButton::AutoDefaultButton){ - int dbw = proxy()->pixelMetric(PM_ButtonDefaultIndicator, btn) * 2; - w += dbw; - h += dbw; - } - sz = QSize(w, h); - } - break; - case CT_RadioButton: - case CT_CheckBox: - if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { - bool isRadio = (ct == CT_RadioButton); - - int w = proxy()->pixelMetric(isRadio ? PM_ExclusiveIndicatorWidth - : PM_IndicatorWidth, btn); - int h = proxy()->pixelMetric(isRadio ? PM_ExclusiveIndicatorHeight - : PM_IndicatorHeight, btn); - - int margins = 0; - // we add 4 pixels for label margins - if (!btn->icon.isNull() || !btn->text.isEmpty()) - margins = 4 + proxy()->pixelMetric(isRadio ? PM_RadioButtonLabelSpacing - : PM_CheckBoxLabelSpacing, opt); - sz += QSize(w + margins, 4); - sz.setHeight(qMax(sz.height(), h)); - } - break; - case CT_MenuItem: - if (const QStyleOptionMenuItem *mi = qstyleoption_cast(opt)) { - bool checkable = mi->menuHasCheckableItems; - int maxpmw = mi->maxIconWidth; - int w = sz.width(), h = sz.height(); - if (mi->menuItemType == QStyleOptionMenuItem::Separator) { - w = 10; - h = 2; - } else { - h = mi->fontMetrics.height() + 8; - if (!mi->icon.isNull()) { - int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); - h = qMax(h, mi->icon.actualSize(QSize(iconExtent, iconExtent)).height() + 4); - } - } - if (mi->text.contains(QLatin1Char('\t'))) - w += 12; - if (maxpmw > 0) - w += maxpmw + 6; - if (checkable && maxpmw < 20) - w += 20 - maxpmw; - if (checkable || maxpmw > 0) - w += 2; - w += 12; - sz = QSize(w, h); - } - break; - case CT_ToolButton: - sz = QSize(sz.width() + 6, sz.height() + 5); - break; - case CT_ComboBox: - if (const QStyleOptionComboBox *cmb = qstyleoption_cast(opt)) { - int fw = cmb->frame ? proxy()->pixelMetric(PM_ComboBoxFrameWidth, opt) * 2 : 0; - const int textMargins = 2*(proxy()->pixelMetric(PM_FocusFrameHMargin) + 1); - // QItemDelegate::sizeHint expands the textMargins two times, thus the 2*textMargins... - int other = qMax(23, 2*textMargins + proxy()->pixelMetric(QStyle::PM_ScrollBarExtent, opt)); - sz = QSize(sz.width() + fw + other, sz.height() + fw); - } - break; - case CT_HeaderSection: - if (const QStyleOptionHeader *hdr = qstyleoption_cast(opt)) { - bool nullIcon = hdr->icon.isNull(); - int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, hdr); - int iconSize = nullIcon ? 0 : proxy()->pixelMetric(QStyle::PM_SmallIconSize, hdr); - QSize txt = hdr->fontMetrics.size(0, hdr->text); - sz.setHeight(margin + qMax(iconSize, txt.height()) + margin); - sz.setWidth((nullIcon ? 0 : margin) + iconSize - + (hdr->text.isNull() ? 0 : margin) + txt.width() + margin); - if (hdr->sortIndicator != QStyleOptionHeader::None) { - int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, hdr); - if (hdr->orientation == Qt::Horizontal) - sz.rwidth() += sz.height() + margin; - else - sz.rheight() += sz.width() + margin; - } - } - break; - case CT_TabWidget: - sz += QSize(4, 4); - break; - case CT_LineEdit: - if (const QStyleOptionFrame *f = qstyleoption_cast(opt)) { - const int borderSize = 2 * f->lineWidth; - sz += QSize(borderSize, borderSize); - const int minSize = 10; - if (sz.width() < minSize) - sz.rwidth() = minSize; - if (sz.height() < minSize) - sz.rheight() = minSize; - } - break; - case CT_GroupBox: - if (const QStyleOptionGroupBox *styleOpt = qstyleoption_cast(opt)) { - if (sz.isEmpty()) - sz = QSize(20, 20); - sz += QSize(styleOpt->features.testFlag(QStyleOptionFrame::Flat) ? 0 : 16, 0); - } - break; - case CT_MdiControls: - if (const QStyleOptionComplex *styleOpt = qstyleoption_cast(opt)) { - const int buttonSize = proxy()->pixelMetric(PM_TitleBarButtonSize, styleOpt); - int width = 1; - if (styleOpt->subControls & SC_MdiMinButton) - width += buttonSize + 1; - if (styleOpt->subControls & SC_MdiNormalButton) - width += buttonSize + 1; - if (styleOpt->subControls & SC_MdiCloseButton) - width += buttonSize + 1; - sz = QSize(width, buttonSize); - } else { - const int buttonSize = proxy()->pixelMetric(PM_TitleBarButtonSize, opt); - sz = QSize(1 + 3 * (buttonSize + 1), buttonSize); - } - break; - case CT_ItemViewItem: - if (const QStyleOptionViewItem *vopt = qstyleoption_cast(opt)) { - QRect decorationRect, displayRect, checkRect; - d->viewItemLayout(vopt, &checkRect, &decorationRect, &displayRect, true); - sz = (decorationRect|displayRect|checkRect).size(); - if (decorationRect.isValid() && sz.height() == decorationRect.height()) - sz.rheight() += 2; // Prevent icons from overlapping. - } - break; - case CT_SpinBox: - if (const QStyleOptionSpinBox *vopt = qstyleoption_cast(opt)) { - // Add button + frame widths - if (vopt->subControls == SC_SpinBoxFrame) { - const qreal dpi = QStyleHelper::dpi(opt); - const bool hasButtons = (vopt->buttonSymbols != QStyleOptionSpinBox::NoButtons); - const int buttonWidth = hasButtons ? qRound(QStyleHelper::dpiScaled(16, dpi)) : 0; - const int fw = vopt->frame ? proxy()->pixelMetric(PM_SpinBoxFrameWidth, vopt) : 0; - sz += QSize(buttonWidth + 2*fw, 1 + 2*fw); - } else { - const QSize buttonSize = proxy()->subControlRect(CC_SpinBox, vopt, SC_SpinBoxUp).size(); - const int upAndDownTogetherHeight = buttonSize.height() * 2; - sz += QSize(buttonSize.width(), upAndDownTogetherHeight); - } - } - break; - case CT_Slider: - if (const QStyleOptionSlider *option = qstyleoption_cast(opt)) - sz = subControlRect(QStyle::CC_Slider, option, QStyle::SC_SliderHandle).size(); - break; - case CT_Dial: - sz = QSize(20, 20); - break; - case CT_Frame: - if (const QStyleOptionFrame *option = qstyleoption_cast(opt)) { - const int ninePatchSplit = 1; - int w = qMax(10, (option->lineWidth * 2) + ninePatchSplit); - sz = QSize(w, w); - } - break; - case CT_ProgressBar: - if (sz.isNull()) { - // Special case: return minimum nine patch image size - sz = QSize(10, 10); - } - break; - case CT_ScrollBar: - case CT_MenuBar: - case CT_Menu: - case CT_MenuBarItem: - case CT_TabBarTab: - // just return the contentsSize for now - Q_FALLTHROUGH(); - default: - break; - } - return sz; -} - -QFont QCommonStyle::font(QStyle::ControlElement element, const QStyle::State state) const -{ - Q_UNUSED(element); - Q_UNUSED(state); - return QGuiApplication::font(); -} - -QMargins QCommonStyle::ninePatchMargins(QStyle::ControlElement /*ce*/, const QStyleOption */*opt*/, const QSize &imageSize) const -{ - // By default, we just divide the image at the center - int w = imageSize.width() / 2; - int h = imageSize.height() / 2; - return QMargins(w, h, w, h); -} - -QMargins QCommonStyle::ninePatchMargins(QStyle::ComplexControl /*cc*/, const QStyleOptionComplex */*opt*/, const QSize &imageSize) const -{ - // By default, we just divide the image at the center - int w = imageSize.width() / 2; - int h = imageSize.height() / 2; - return QMargins(w, h, w, h); -} - -int QCommonStyle::styleHint(StyleHint sh, const QStyleOption *opt, QStyleHintReturn *hret) const -{ - int ret = 0; - - switch (sh) { - case SH_Menu_KeyboardSearch: - ret = false; - break; - case SH_Slider_AbsoluteSetButtons: - ret = Qt::MiddleButton; - break; - case SH_Slider_PageSetButtons: - ret = Qt::LeftButton; - break; - case SH_ScrollBar_ContextMenu: - ret = true; - break; - case SH_GroupBox_TextLabelVerticalAlignment: - ret = Qt::AlignVCenter; - break; - case SH_GroupBox_TextLabelColor: - ret = opt ? int(opt->palette.color(QPalette::Text).rgba()) : 0; - break; - - case SH_ListViewExpand_SelectMouseType: - case SH_TabBar_SelectMouseType: - ret = QEvent::MouseButtonPress; - break; - - case SH_TabBar_Alignment: - ret = Qt::AlignLeft; - break; - - case SH_Header_ArrowAlignment: - ret = Qt::AlignRight | Qt::AlignVCenter; - break; - - case SH_TitleBar_AutoRaise: - ret = false; - break; - - case SH_Menu_SubMenuPopupDelay: - ret = 256; - break; - - case SH_Menu_SloppySubMenus: - ret = true; - break; - - case SH_Menu_SubMenuUniDirection: - ret = false; - break; - case SH_Menu_SubMenuUniDirectionFailCount: - ret = 1; - break; - case SH_Menu_SubMenuSloppySelectOtherActions: - ret = true; - break; - case SH_Menu_SubMenuSloppyCloseTimeout: - ret = 1000; - break; - case SH_Menu_SubMenuResetWhenReenteringParent: - ret = false; - break; - case SH_Menu_SubMenuDontStartSloppyOnLeave: - ret = false; - break; - - case SH_ProgressDialog_TextLabelAlignment: - ret = Qt::AlignCenter; - break; - - case SH_BlinkCursorWhenTextSelected: -#if defined(Q_OS_DARWIN) - ret = 0; -#else - ret = 1; -#endif - break; - - case SH_Table_GridLineColor: - if (opt) - ret = opt->palette.color(QPalette::Mid).rgba(); - else - ret = -1; - break; - case SH_LineEdit_PasswordCharacter: { - const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme(); - const QPlatformTheme::ThemeHint hintType = QPlatformTheme::PasswordMaskCharacter; - const QVariant hint = theme ? theme->themeHint(hintType) : QPlatformTheme::defaultThemeHint(hintType); - ret = hint.toChar().unicode(); - break; - } - case SH_LineEdit_PasswordMaskDelay: - ret = QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::PasswordMaskDelay).toInt(); - break; - case SH_ToolBox_SelectedPageTitleBold: - ret = 1; - break; - - case SH_UnderlineShortcut: - ret = 1; - break; - - case SH_SpinBox_ClickAutoRepeatRate: - ret = 150; - break; - - case SH_SpinBox_ClickAutoRepeatThreshold: - ret = 500; - break; - - case SH_SpinBox_KeyPressAutoRepeatRate: - ret = 75; - break; - - case SH_Menu_SelectionWrap: - ret = true; - break; - - case SH_Menu_FillScreenWithScroll: - ret = true; - break; - - case SH_ToolTipLabel_Opacity: - ret = 255; - break; - - case SH_Button_FocusPolicy: - ret = Qt::StrongFocus; - break; - - case SH_MessageBox_UseBorderForButtonSpacing: - ret = 0; - break; - - case SH_ToolButton_PopupDelay: - ret = 600; - break; - - case SH_FocusFrame_Mask: - ret = 1; - break; - case SH_RubberBand_Mask: - if (const QStyleOptionRubberBand *rbOpt = qstyleoption_cast(opt)) { - ret = 0; - if (rbOpt->shape == QStyleOptionRubberBand::Rectangle) { - ret = true; - if(QStyleHintReturnMask *mask = qstyleoption_cast(hret)) { - mask->region = opt->rect; - int margin = proxy()->pixelMetric(PM_DefaultFrameWidth) * 2; - mask->region -= opt->rect.adjusted(margin, margin, -margin, -margin); - } - } - } - break; - case SH_SpinControls_DisableOnBounds: - ret = 1; - break; - - case SH_Dial_BackgroundRole: - ret = QPalette::Window; - break; - - case SH_ComboBox_LayoutDirection: - ret = opt ? opt->direction : Qt::LeftToRight; - break; - - case SH_ItemView_EllipsisLocation: - ret = Qt::AlignTrailing; - break; - - case SH_ItemView_ShowDecorationSelected: - ret = false; - break; - - case SH_ItemView_ActivateItemOnSingleClick: - ret = 0; - if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) - ret = theme->themeHint(QPlatformTheme::ItemViewActivateItemOnSingleClick).toBool() ? 1 : 0; - break; - case SH_TitleBar_ModifyNotification: - ret = true; - break; - case SH_ScrollBar_RollBetweenButtons: - ret = false; - break; - case SH_TabBar_ElideMode: - ret = Qt::ElideNone; - break; - case SH_DialogButtonLayout: - if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) - ret = theme->themeHint(QPlatformTheme::DialogButtonBoxLayout).toInt(); - break; - case SH_ComboBox_PopupFrameStyle: - ret = QStyleOptionFrame::StyledPanel | QStyleOptionFrame::Plain; - break; - case SH_MessageBox_TextInteractionFlags: - ret = Qt::LinksAccessibleByMouse; - break; - case SH_DialogButtonBox_ButtonsHaveIcons: - ret = 0; - if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) - ret = theme->themeHint(QPlatformTheme::DialogButtonBoxButtonsHaveIcons).toBool() ? 1 : 0; - break; - case SH_SpellCheckUnderlineStyle: - ret = QTextCharFormat::WaveUnderline; - break; - case SH_MessageBox_CenterButtons: - ret = true; - break; - case SH_ItemView_MovementWithoutUpdatingSelection: - ret = true; - break; - case SH_FocusFrame_AboveWidget: - ret = false; - break; - case SH_TabWidget_DefaultTabPosition: - ret = QStyleOptionTabBarBase::North; - break; - case SH_ToolBar_Movable: - ret = true; - break; - case SH_TextControl_FocusIndicatorTextCharFormat: - ret = true; - if (QStyleHintReturnVariant *vret = qstyleoption_cast(hret)) { - QPen outline(opt->palette.color(QPalette::Text), 1, Qt::DotLine); - QTextCharFormat fmt; - fmt.setProperty(QTextFormat::OutlinePen, outline); - vret->variant = fmt; - } - break; - case SH_WizardStyle: - break; - case SH_FormLayoutWrapPolicy: - break; - case SH_FormLayoutFieldGrowthPolicy: - break; - case SH_FormLayoutFormAlignment: - ret = Qt::AlignLeft | Qt::AlignTop; - break; - case SH_FormLayoutLabelAlignment: - ret = Qt::AlignLeft; - break; - case SH_ItemView_ArrowKeysNavigateIntoChildren: - ret = false; - break; - case SH_ItemView_DrawDelegateFrame: - ret = 0; - break; - case SH_TabBar_CloseButtonPosition: - ret = QStyleOptionTabBarBase::RightSide; - break; - case SH_TabBar_ChangeCurrentDelay: - ret = 500; - break; - case SH_DockWidget_ButtonsHaveFrame: - ret = true; - break; - case SH_ToolButtonStyle: - ret = 0; - if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) - ret = theme->themeHint(QPlatformTheme::ToolButtonStyle).toInt(); - break; - case SH_RequestSoftwareInputPanel: - ret = RSIP_OnMouseClick; - break; - case SH_ScrollBar_Transient: - ret = false; - break; - case SH_Menu_SupportsSections: - ret = false; - break; - case SH_ToolTip_WakeUpDelay: - ret = 700; - break; - case SH_ToolTip_FallAsleepDelay: - ret = 2000; - break; - case SH_Widget_Animate: - ret = true; - break; - case SH_Splitter_OpaqueResize: - ret = true; - break; - case SH_ItemView_ScrollMode: - ret = QStyleOptionViewItem::ScrollPerItem; - break; - case SH_TitleBar_ShowToolTipsOnButtons: - ret = true; - break; - case SH_Widget_Animation_Duration: - ret = styleHint(SH_Widget_Animate, opt, hret) ? 200 : 0; - break; - case SH_ComboBox_AllowWheelScrolling: - ret = true; - break; - case SH_SpinBox_ButtonsInsideFrame: - ret = true; - break; - case SH_SpinBox_StepModifier: - ret = Qt::ControlModifier; - break; - default: - ret = 0; - break; - } - - return ret; -} - -#if QT_CONFIG(imageformat_xpm) -static QPixmap cachedPixmapFromXPM(const char * const *xpm) -{ - QPixmap result; - const QString tag = QString::asprintf("xpm:0x%p", static_cast(xpm)); - if (!QPixmapCache::find(tag, &result)) { - result = QPixmap(xpm); - QPixmapCache::insert(tag, result); - } - return result; -} - -static inline QPixmap titleBarMenuCachedPixmapFromXPM() { return cachedPixmapFromXPM(qt_menu_xpm); } -#endif - -static inline QString clearText16IconPath() -{ - return QStringLiteral(":/qt-project.org/styles/commonstyle/images/cleartext-16.png"); -} - -#if defined(Q_OS_WIN) || QT_CONFIG(imageformat_png) -static QIcon clearTextIcon(bool rtl) -{ - const QString directionalThemeName = rtl - ? QStringLiteral("edit-clear-locationbar-ltr") : QStringLiteral("edit-clear-locationbar-rtl"); - if (QIcon::hasThemeIcon(directionalThemeName)) - return QIcon::fromTheme(directionalThemeName); - const QString themeName = QStringLiteral("edit-clear"); - if (QIcon::hasThemeIcon(themeName)) - return QIcon::fromTheme(themeName); - - QIcon icon; -#ifndef QT_NO_IMAGEFORMAT_PNG - QPixmap clearText16(clearText16IconPath()); - Q_ASSERT(!clearText16.size().isEmpty()); - icon.addPixmap(clearText16); - QPixmap clearText32(QStringLiteral(":/qt-project.org/styles/commonstyle/images/cleartext-32.png")); - Q_ASSERT(!clearText32.size().isEmpty()); - icon.addPixmap(clearText32); - clearText32.setDevicePixelRatio(2); // The 32x32 pixmap can also be used for 16x16/devicePixelRatio=2 - icon.addPixmap(clearText32); -#endif // !QT_NO_IMAGEFORMAT_PNG - return icon; -} -#endif - -QPixmap QCommonStyle::standardPixmap(StandardPixmap sp, const QStyleOption *option) const -{ - const bool rtl = (option && option->direction == Qt::RightToLeft) || (!option && QGuiApplication::isRightToLeft()); -#if QT_CONFIG(imageformat_png) - QPixmap pixmap; - - if (QGuiApplication::desktopSettingsAware() && !QIcon::themeName().isEmpty()) { - switch (sp) { - case SP_DialogYesButton: - case SP_DialogOkButton: - pixmap = QIcon::fromTheme(QLatin1String("dialog-ok")).pixmap(16); - break; - case SP_DialogApplyButton: - pixmap = QIcon::fromTheme(QLatin1String("dialog-ok-apply")).pixmap(16); - break; - case SP_DialogDiscardButton: - pixmap = QIcon::fromTheme(QLatin1String("edit-delete")).pixmap(16); - break; - case SP_DialogCloseButton: - pixmap = QIcon::fromTheme(QLatin1String("dialog-close")).pixmap(16); - break; - case SP_DirHomeIcon: - pixmap = QIcon::fromTheme(QLatin1String("user-home")).pixmap(16); - break; - case SP_MessageBoxInformation: - pixmap = QIcon::fromTheme(QLatin1String("messagebox_info")).pixmap(16); - break; - case SP_MessageBoxWarning: - pixmap = QIcon::fromTheme(QLatin1String("messagebox_warning")).pixmap(16); - break; - case SP_MessageBoxCritical: - pixmap = QIcon::fromTheme(QLatin1String("messagebox_critical")).pixmap(16); - break; - case SP_MessageBoxQuestion: - pixmap = QIcon::fromTheme(QLatin1String("help")).pixmap(16); - break; - case SP_DialogOpenButton: - case SP_DirOpenIcon: - pixmap = QIcon::fromTheme(QLatin1String("folder-open")).pixmap(16); - break; - case SP_FileIcon: - pixmap = QIcon::fromTheme(QLatin1String("text-x-generic"), - QIcon::fromTheme(QLatin1String("empty"))).pixmap(16); - break; - case SP_DirClosedIcon: - case SP_DirIcon: - pixmap = QIcon::fromTheme(QLatin1String("folder")).pixmap(16); - break; - case SP_DriveFDIcon: - pixmap = QIcon::fromTheme(QLatin1String("media-floppy"), - QIcon::fromTheme(QLatin1String("3floppy_unmount"))).pixmap(16); - break; - case SP_ComputerIcon: - pixmap = QIcon::fromTheme(QLatin1String("computer"), - QIcon::fromTheme(QLatin1String("system"))).pixmap(16); - break; - case SP_DesktopIcon: - pixmap = QIcon::fromTheme(QLatin1String("user-desktop"), - QIcon::fromTheme(QLatin1String("desktop"))).pixmap(16); - break; - case SP_TrashIcon: - pixmap = QIcon::fromTheme(QLatin1String("user-trash"), - QIcon::fromTheme(QLatin1String("trashcan_empty"))).pixmap(16); - break; - case SP_DriveCDIcon: - case SP_DriveDVDIcon: - pixmap = QIcon::fromTheme(QLatin1String("media-optical"), - QIcon::fromTheme(QLatin1String("cdrom_unmount"))).pixmap(16); - break; - case SP_DriveHDIcon: - pixmap = QIcon::fromTheme(QLatin1String("drive-harddisk"), - QIcon::fromTheme(QLatin1String("hdd_unmount"))).pixmap(16); - break; - case SP_FileDialogToParent: - pixmap = QIcon::fromTheme(QLatin1String("go-up"), - QIcon::fromTheme(QLatin1String("up"))).pixmap(16); - break; - case SP_FileDialogNewFolder: - pixmap = QIcon::fromTheme(QLatin1String("folder_new")).pixmap(16); - break; - case SP_ArrowUp: - pixmap = QIcon::fromTheme(QLatin1String("go-up"), - QIcon::fromTheme(QLatin1String("up"))).pixmap(16); - break; - case SP_ArrowDown: - pixmap = QIcon::fromTheme(QLatin1String("go-down"), - QIcon::fromTheme(QLatin1String("down"))).pixmap(16); - break; - case SP_ArrowRight: - pixmap = QIcon::fromTheme(QLatin1String("go-next"), - QIcon::fromTheme(QLatin1String("forward"))).pixmap(16); - break; - case SP_ArrowLeft: - pixmap = QIcon::fromTheme(QLatin1String("go-previous"), - QIcon::fromTheme(QLatin1String("back"))).pixmap(16); - break; - case SP_FileDialogDetailedView: - pixmap = QIcon::fromTheme(QLatin1String("view_detailed")).pixmap(16); - break; - case SP_FileDialogListView: - pixmap = QIcon::fromTheme(QLatin1String("view_icon")).pixmap(16); - break; - case SP_BrowserReload: - pixmap = QIcon::fromTheme(QLatin1String("reload")).pixmap(16); - break; - case SP_BrowserStop: - pixmap = QIcon::fromTheme(QLatin1String("process-stop")).pixmap(16); - break; - case SP_MediaPlay: - pixmap = QIcon::fromTheme(QLatin1String("media-playback-start")).pixmap(16); - break; - case SP_MediaPause: - pixmap = QIcon::fromTheme(QLatin1String("media-playback-pause")).pixmap(16); - break; - case SP_MediaStop: - pixmap = QIcon::fromTheme(QLatin1String("media-playback-stop")).pixmap(16); - break; - case SP_MediaSeekForward: - pixmap = QIcon::fromTheme(QLatin1String("media-seek-forward")).pixmap(16); - break; - case SP_MediaSeekBackward: - pixmap = QIcon::fromTheme(QLatin1String("media-seek-backward")).pixmap(16); - break; - case SP_MediaSkipForward: - pixmap = QIcon::fromTheme(QLatin1String("media-skip-forward")).pixmap(16); - break; - case SP_MediaSkipBackward: - pixmap = QIcon::fromTheme(QLatin1String("media-skip-backward")).pixmap(16); - break; - case SP_DialogResetButton: - pixmap = QIcon::fromTheme(QLatin1String("edit-clear")).pixmap(24); - break; - case SP_DialogHelpButton: - pixmap = QIcon::fromTheme(QLatin1String("help-contents")).pixmap(24); - break; - case SP_DialogNoButton: - case SP_DialogCancelButton: - pixmap = QIcon::fromTheme(QLatin1String("dialog-cancel"), - QIcon::fromTheme(QLatin1String("process-stop"))).pixmap(24); - break; - case SP_DialogSaveButton: - pixmap = QIcon::fromTheme(QLatin1String("document-save")).pixmap(24); - break; - case SP_FileLinkIcon: - pixmap = QIcon::fromTheme(QLatin1String("emblem-symbolic-link")).pixmap(16); - if (!pixmap.isNull()) { - QPixmap fileIcon = QIcon::fromTheme(QLatin1String("text-x-generic")).pixmap(16); - if (fileIcon.isNull()) - fileIcon = QIcon::fromTheme(QLatin1String("empty")).pixmap(16); - if (!fileIcon.isNull()) { - QPainter painter(&fileIcon); - painter.drawPixmap(0, 0, 16, 16, pixmap); - return fileIcon; - } - } - break; - case SP_DirLinkIcon: - pixmap = QIcon::fromTheme(QLatin1String("emblem-symbolic-link")).pixmap(16); - if (!pixmap.isNull()) { - QPixmap dirIcon = QIcon::fromTheme(QLatin1String("folder")).pixmap(16); - if (!dirIcon.isNull()) { - QPainter painter(&dirIcon); - painter.drawPixmap(0, 0, 16, 16, pixmap); - return dirIcon; - } - } - break; - case SP_LineEditClearButton: - pixmap = clearTextIcon(rtl).pixmap(16); - break; - default: - break; - } - } - - if (!pixmap.isNull()) - return pixmap; -#endif // QT_CONFIG(imageformat_png) - switch (sp) { -#ifndef QT_NO_IMAGEFORMAT_XPM - case SP_ToolBarHorizontalExtensionButton: - if (rtl) { - QImage im(tb_extension_arrow_h_xpm); - im = im.convertToFormat(QImage::Format_ARGB32).mirrored(true, false); - return QPixmap::fromImage(im); - } - return cachedPixmapFromXPM(tb_extension_arrow_h_xpm); - case SP_ToolBarVerticalExtensionButton: - return cachedPixmapFromXPM(tb_extension_arrow_v_xpm); - case SP_FileDialogStart: - return cachedPixmapFromXPM(filedialog_start_xpm); - case SP_FileDialogEnd: - return cachedPixmapFromXPM(filedialog_end_xpm); -#endif -#ifndef QT_NO_IMAGEFORMAT_PNG - case SP_CommandLink: - case SP_ArrowForward: - if (rtl) - return proxy()->standardPixmap(SP_ArrowLeft, option); - return proxy()->standardPixmap(SP_ArrowRight, option); - case SP_ArrowBack: - if (rtl) - return proxy()->standardPixmap(SP_ArrowRight, option); - return proxy()->standardPixmap(SP_ArrowLeft, option); - case SP_ArrowLeft: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/left-16.png")); - case SP_ArrowRight: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/right-16.png")); - case SP_ArrowUp: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/up-16.png")); - case SP_ArrowDown: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/down-16.png")); - case SP_FileDialogToParent: - return proxy()->standardPixmap(SP_ArrowUp, option); - case SP_FileDialogNewFolder: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/newdirectory-16.png")); - case SP_FileDialogDetailedView: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/viewdetailed-16.png")); - case SP_FileDialogInfoView: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/fileinfo-16.png")); - case SP_FileDialogContentsView: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/filecontents-16.png")); - case SP_FileDialogListView: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/viewlist-16.png")); - case SP_FileDialogBack: - return proxy()->standardPixmap(SP_ArrowBack, option); - case SP_DriveHDIcon: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/harddrive-16.png")); - case SP_TrashIcon: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/trash-16.png")); - case SP_DriveFDIcon: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/floppy-16.png")); - case SP_DriveNetIcon: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/networkdrive-16.png")); - case SP_DesktopIcon: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/desktop-16.png")); - case SP_ComputerIcon: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/computer-16.png")); - case SP_DriveCDIcon: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/cdr-16.png")); - case SP_DriveDVDIcon: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/dvd-16.png")); - case SP_DirHomeIcon: - case SP_DirOpenIcon: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/diropen-16.png")); - case SP_DirIcon: - case SP_DirClosedIcon: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/dirclosed-16.png")); - case SP_DirLinkIcon: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/dirlink-16.png")); - case SP_FileIcon: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/file-16.png")); - case SP_FileLinkIcon: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/filelink-16.png")); - case SP_DialogOkButton: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-ok-16.png")); - case SP_DialogCancelButton: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-cancel-16.png")); - case SP_DialogHelpButton: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-help-16.png")); - case SP_DialogOpenButton: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-open-16.png")); - case SP_DialogSaveButton: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-save-16.png")); - case SP_DialogCloseButton: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-close-16.png")); - case SP_DialogApplyButton: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-apply-16.png")); - case SP_DialogResetButton: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-clear-16.png")); - case SP_DialogDiscardButton: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-delete-16.png")); - case SP_DialogYesButton: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-yes-16.png")); - case SP_DialogNoButton: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-no-16.png")); - case SP_BrowserReload: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/refresh-24.png")); - case SP_BrowserStop: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/stop-24.png")); - case SP_MediaPlay: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-play-32.png")); - case SP_MediaPause: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-pause-32.png")); - case SP_MediaStop: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-stop-32.png")); - case SP_MediaSeekForward: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-seek-forward-32.png")); - case SP_MediaSeekBackward: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-seek-backward-32.png")); - case SP_MediaSkipForward: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-skip-forward-32.png")); - case SP_MediaSkipBackward: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-skip-backward-32.png")); - case SP_MediaVolume: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-volume-16.png")); - case SP_MediaVolumeMuted: - return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-volume-muted-16.png")); - case SP_LineEditClearButton: - return QPixmap(clearText16IconPath()); -#endif // QT_NO_IMAGEFORMAT_PNG - default: - break; - } - -#ifndef QT_NO_IMAGEFORMAT_XPM - switch (sp) { - case SP_TitleBarMenuButton: - return titleBarMenuCachedPixmapFromXPM(); - case SP_TitleBarShadeButton: - return cachedPixmapFromXPM(qt_shade_xpm); - case SP_TitleBarUnshadeButton: - return cachedPixmapFromXPM(qt_unshade_xpm); - case SP_TitleBarNormalButton: - return cachedPixmapFromXPM(qt_normalizeup_xpm); - case SP_TitleBarMinButton: - return cachedPixmapFromXPM(qt_minimize_xpm); - case SP_TitleBarMaxButton: - return cachedPixmapFromXPM(qt_maximize_xpm); - case SP_TitleBarCloseButton: - return cachedPixmapFromXPM(qt_close_xpm); - case SP_TitleBarContextHelpButton: - return cachedPixmapFromXPM(qt_help_xpm); - case SP_DockWidgetCloseButton: - return cachedPixmapFromXPM(dock_widget_close_xpm); - case SP_MessageBoxInformation: - return cachedPixmapFromXPM(information_xpm); - case SP_MessageBoxWarning: - return cachedPixmapFromXPM(warning_xpm); - case SP_MessageBoxCritical: - return cachedPixmapFromXPM(critical_xpm); - case SP_MessageBoxQuestion: - return cachedPixmapFromXPM(question_xpm); - default: - break; - } -#endif //QT_NO_IMAGEFORMAT_XPM - -#if !QT_CONFIG(imageformat_png) && !QT_CONFIG(imageformat_xpm) - Q_UNUSED(rtl); -#endif - - return QPixmap(); -} - -#if QT_CONFIG(imageformat_png) -static inline QString iconResourcePrefix() { return QStringLiteral(":/qt-project.org/styles/commonstyle/images/"); } -static inline QString iconPngSuffix() { return QStringLiteral(".png"); } - -static void addIconFiles(const QString &prefix, const int sizes[], size_t count, QIcon &icon) -{ - for (size_t i = 0; i < count; ++i) - icon.addFile(prefix + QString::number(sizes[i]) + iconPngSuffix()); -} - -static const int dockTitleIconSizes[] = {10, 16, 20, 32, 48, 64}; -static const int titleBarSizes[] = {16, 32, 48}; -static const int toolBarExtHSizes[] = {8, 16, 32}; -static const int toolBarExtVSizes[] = {5, 10, 20}; -#endif // imageformat_png - -/*! - \internal -*/ -QIcon QCommonStyle::standardIcon(StandardPixmap standardIcon, const QStyleOption *option) const -{ - QIcon icon; - const bool rtl = (option && option->direction == Qt::RightToLeft) || (!option && QGuiApplication::isRightToLeft()); - -#ifdef Q_OS_WIN - switch (standardIcon) { - case SP_DriveCDIcon: - case SP_DriveDVDIcon: - case SP_DriveNetIcon: - case SP_DriveHDIcon: - case SP_DriveFDIcon: - case SP_FileIcon: - case SP_FileLinkIcon: - case SP_DesktopIcon: - case SP_ComputerIcon: - case SP_VistaShield: - case SP_MessageBoxInformation: - case SP_MessageBoxWarning: - case SP_MessageBoxCritical: - case SP_MessageBoxQuestion: - if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) { - QPlatformTheme::StandardPixmap sp = static_cast(standardIcon); - for (int size = 16 ; size <= 32 ; size += 16) { - QPixmap pixmap = theme->standardPixmap(sp, QSizeF(size, size)); - icon.addPixmap(pixmap, QIcon::Normal); - } - } - break; - case SP_DirIcon: - case SP_DirLinkIcon: - if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) { - QPlatformTheme::StandardPixmap spOff = static_cast(standardIcon); - QPlatformTheme::StandardPixmap spOn = standardIcon == SP_DirIcon ? QPlatformTheme::DirOpenIcon : - QPlatformTheme::DirLinkOpenIcon; - for (int size = 16 ; size <= 32 ; size += 16) { - QSizeF pixSize(size, size); - QPixmap pixmap = theme->standardPixmap(spOff, pixSize); - icon.addPixmap(pixmap, QIcon::Normal, QIcon::Off); - pixmap = theme->standardPixmap(spOn, pixSize); - icon.addPixmap(pixmap, QIcon::Normal, QIcon::On); - } - } - break; - case SP_LineEditClearButton: - icon = clearTextIcon(rtl); - break; - default: - break; - } - if (!icon.isNull()) - return icon; - -#endif - - if (QGuiApplication::desktopSettingsAware() && !QIcon::themeName().isEmpty()) { - switch (standardIcon) { - case SP_DirHomeIcon: - icon = QIcon::fromTheme(QLatin1String("user-home")); - break; - case SP_MessageBoxInformation: - icon = QIcon::fromTheme(QLatin1String("dialog-information")); - break; - case SP_MessageBoxWarning: - icon = QIcon::fromTheme(QLatin1String("dialog-warning")); - break; - case SP_MessageBoxCritical: - icon = QIcon::fromTheme(QLatin1String("dialog-error")); - break; - case SP_MessageBoxQuestion: - icon = QIcon::fromTheme(QLatin1String("dialog-question")); - break; - case SP_DialogOpenButton: - case SP_DirOpenIcon: - icon = QIcon::fromTheme(QLatin1String("folder-open")); - break; - case SP_DialogSaveButton: - icon = QIcon::fromTheme(QLatin1String("document-save")); - break; - case SP_DialogApplyButton: - icon = QIcon::fromTheme(QLatin1String("dialog-ok-apply")); - break; - case SP_DialogYesButton: - case SP_DialogOkButton: - icon = QIcon::fromTheme(QLatin1String("dialog-ok")); - break; - case SP_DialogDiscardButton: - icon = QIcon::fromTheme(QLatin1String("edit-delete")); - break; - case SP_DialogResetButton: - icon = QIcon::fromTheme(QLatin1String("edit-clear")); - break; - case SP_DialogHelpButton: - icon = QIcon::fromTheme(QLatin1String("help-contents")); - break; - case SP_FileIcon: - icon = QIcon::fromTheme(QLatin1String("text-x-generic")); - break; - case SP_DirClosedIcon: - case SP_DirIcon: - icon = QIcon::fromTheme(QLatin1String("folder")); - break; - case SP_DriveFDIcon: - icon = QIcon::fromTheme(QLatin1String("floppy_unmount")); - break; - case SP_ComputerIcon: - icon = QIcon::fromTheme(QLatin1String("computer"), - QIcon::fromTheme(QLatin1String("system"))); - break; - case SP_DesktopIcon: - icon = QIcon::fromTheme(QLatin1String("user-desktop")); - break; - case SP_TrashIcon: - icon = QIcon::fromTheme(QLatin1String("user-trash")); - break; - case SP_DriveCDIcon: - case SP_DriveDVDIcon: - icon = QIcon::fromTheme(QLatin1String("media-optical")); - break; - case SP_DriveHDIcon: - icon = QIcon::fromTheme(QLatin1String("drive-harddisk")); - break; - case SP_FileDialogToParent: - icon = QIcon::fromTheme(QLatin1String("go-up")); - break; - case SP_FileDialogNewFolder: - icon = QIcon::fromTheme(QLatin1String("folder-new")); - break; - case SP_ArrowUp: - icon = QIcon::fromTheme(QLatin1String("go-up")); - break; - case SP_ArrowDown: - icon = QIcon::fromTheme(QLatin1String("go-down")); - break; - case SP_ArrowRight: - icon = QIcon::fromTheme(QLatin1String("go-next")); - break; - case SP_ArrowLeft: - icon = QIcon::fromTheme(QLatin1String("go-previous")); - break; - case SP_DialogNoButton: - case SP_DialogCancelButton: - icon = QIcon::fromTheme(QLatin1String("dialog-cancel"), - QIcon::fromTheme(QLatin1String("process-stop"))); - break; - case SP_DialogCloseButton: - icon = QIcon::fromTheme(QLatin1String("window-close")); - break; - case SP_FileDialogDetailedView: - icon = QIcon::fromTheme(QLatin1String("view-list-details")); - break; - case SP_FileDialogListView: - icon = QIcon::fromTheme(QLatin1String("view-list-icons")); - break; - case SP_BrowserReload: - icon = QIcon::fromTheme(QLatin1String("view-refresh")); - break; - case SP_BrowserStop: - icon = QIcon::fromTheme(QLatin1String("process-stop")); - break; - case SP_MediaPlay: - icon = QIcon::fromTheme(QLatin1String("media-playback-start")); - break; - case SP_MediaPause: - icon = QIcon::fromTheme(QLatin1String("media-playback-pause")); - break; - case SP_MediaStop: - icon = QIcon::fromTheme(QLatin1String("media-playback-stop")); - break; - case SP_MediaSeekForward: - icon = QIcon::fromTheme(QLatin1String("media-seek-forward")); - break; - case SP_MediaSeekBackward: - icon = QIcon::fromTheme(QLatin1String("media-seek-backward")); - break; - case SP_MediaSkipForward: - icon = QIcon::fromTheme(QLatin1String("media-skip-forward")); - break; - case SP_MediaSkipBackward: - icon = QIcon::fromTheme(QLatin1String("media-skip-backward")); - break; - case SP_MediaVolume: - icon = QIcon::fromTheme(QLatin1String("audio-volume-medium")); - break; - case SP_MediaVolumeMuted: - icon = QIcon::fromTheme(QLatin1String("audio-volume-muted")); - break; - case SP_ArrowForward: - if (rtl) - return QCommonStyle::standardIcon(SP_ArrowLeft, option); - return QCommonStyle::standardIcon(SP_ArrowRight, option); - case SP_ArrowBack: - if (rtl) - return QCommonStyle::standardIcon(SP_ArrowRight, option); - return QCommonStyle::standardIcon(SP_ArrowLeft, option); - case SP_FileLinkIcon: - { - QIcon linkIcon = QIcon::fromTheme(QLatin1String("emblem-symbolic-link")); - if (!linkIcon.isNull()) { - QIcon baseIcon = QCommonStyle::standardIcon(SP_FileIcon, option); - const QList sizes = baseIcon.availableSizes(QIcon::Normal, QIcon::Off); - const qreal devicePixelRatio = option ? dpr(option->window) : 1.; - for (int i = 0 ; i < sizes.size() ; ++i) { - int size = sizes[i].width(); - QPixmap basePixmap = baseIcon.pixmap(QSize(size, size), devicePixelRatio); - QPixmap linkPixmap = linkIcon.pixmap(QSize(size / 2, size / 2), devicePixelRatio); - QPainter painter(&basePixmap); - painter.drawPixmap(size/2, size/2, linkPixmap); - icon.addPixmap(basePixmap); - } - } - } - break; - case SP_DirLinkIcon: - { - QIcon linkIcon = QIcon::fromTheme(QLatin1String("emblem-symbolic-link")); - if (!linkIcon.isNull()) { - QIcon baseIcon = QCommonStyle::standardIcon(SP_DirIcon, option); - const QList sizes = baseIcon.availableSizes(QIcon::Normal, QIcon::Off); - const qreal devicePixelRatio = option ? dpr(option->window) : 1.; - for (int i = 0 ; i < sizes.size() ; ++i) { - int size = sizes[i].width(); - QPixmap basePixmap = baseIcon.pixmap(QSize(size, size), devicePixelRatio); - QPixmap linkPixmap = linkIcon.pixmap(QSize(size / 2, size / 2), devicePixelRatio); - QPainter painter(&basePixmap); - painter.drawPixmap(size/2, size/2, linkPixmap); - icon.addPixmap(basePixmap); - } - } - } - break; - default: - break; - } - } // if (QGuiApplication::desktopSettingsAware() && !QIcon::themeName().isEmpty()) - - if (!icon.isNull()) - return icon; - -#if defined(Q_OS_MAC) - if (QGuiApplication::desktopSettingsAware()) { - switch (standardIcon) { - case SP_DirIcon: { - // A rather special case - QIcon closeIcon = QCommonStyle::standardIcon(SP_DirClosedIcon, option); - QIcon openIcon = QCommonStyle::standardIcon(SP_DirOpenIcon, option); - closeIcon.addPixmap(openIcon.pixmap(16, 16), QIcon::Normal, QIcon::On); - closeIcon.addPixmap(openIcon.pixmap(32, 32), QIcon::Normal, QIcon::On); - closeIcon.addPixmap(openIcon.pixmap(64, 64), QIcon::Normal, QIcon::On); - closeIcon.addPixmap(openIcon.pixmap(128, 128), QIcon::Normal, QIcon::On); - return closeIcon; - } - - case SP_TitleBarNormalButton: - case SP_TitleBarCloseButton: { - QIcon titleBarIcon; - if (standardIcon == SP_TitleBarCloseButton) { - titleBarIcon.addFile(QLatin1String(":/qt-project.org/styles/macstyle/images/closedock-16.png")); - titleBarIcon.addFile(QLatin1String(":/qt-project.org/styles/macstyle/images/closedock-down-16.png"), QSize(16, 16), QIcon::Normal, QIcon::On); - } else { - titleBarIcon.addFile(QLatin1String(":/qt-project.org/styles/macstyle/images/dockdock-16.png")); - titleBarIcon.addFile(QLatin1String(":/qt-project.org/styles/macstyle/images/dockdock-down-16.png"), QSize(16, 16), QIcon::Normal, QIcon::On); - } - return titleBarIcon; - } - - case SP_MessageBoxQuestion: - case SP_MessageBoxInformation: - case SP_MessageBoxWarning: - case SP_MessageBoxCritical: - case SP_DesktopIcon: - case SP_TrashIcon: - case SP_ComputerIcon: - case SP_DriveFDIcon: - case SP_DriveHDIcon: - case SP_DriveCDIcon: - case SP_DriveDVDIcon: - case SP_DriveNetIcon: - case SP_DirOpenIcon: - case SP_DirClosedIcon: - case SP_DirLinkIcon: - case SP_FileLinkIcon: - case SP_FileIcon: - if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) { - QPlatformTheme::StandardPixmap sp = static_cast(standardIcon); - QIcon retIcon; - const QList sizes = theme->themeHint(QPlatformTheme::IconPixmapSizes).value >(); - for (const QSize &size : sizes) { - QPixmap mainIcon; - const QString cacheKey = QLatin1String("qt_mac_constructQIconFromIconRef") + QString::number(standardIcon) + QString::number(size.width()); - if (standardIcon >= QStyle::SP_CustomBase) { - mainIcon = theme->standardPixmap(sp, QSizeF(size)); - } else if (QPixmapCache::find(cacheKey, &mainIcon) == false) { - mainIcon = theme->standardPixmap(sp, QSizeF(size)); - QPixmapCache::insert(cacheKey, mainIcon); - } - - retIcon.addPixmap(mainIcon); - } - if (!retIcon.isNull()) - return retIcon; - } - - default: - break; - } - } // if (QGuiApplication::desktopSettingsAware()) -#endif // Q_OS_MAC - - switch (standardIcon) { -#ifndef QT_NO_IMAGEFORMAT_PNG - case SP_TitleBarMinButton: - addIconFiles(iconResourcePrefix() + QStringLiteral("titlebar-min-"), - titleBarSizes, sizeof(titleBarSizes)/sizeof(titleBarSizes[0]), icon); - break; - case SP_TitleBarMaxButton: - addIconFiles(iconResourcePrefix() + QStringLiteral("titlebar-max-"), - titleBarSizes, sizeof(titleBarSizes)/sizeof(titleBarSizes[0]), icon); - break; - case SP_TitleBarShadeButton: - addIconFiles(iconResourcePrefix() + QStringLiteral("titlebar-shade-"), - titleBarSizes, sizeof(titleBarSizes)/sizeof(titleBarSizes[0]), icon); - - break; - case SP_TitleBarUnshadeButton: - addIconFiles(iconResourcePrefix() + QStringLiteral("titlebar-unshade-"), - titleBarSizes, sizeof(titleBarSizes)/sizeof(titleBarSizes[0]), icon); - break; - case SP_TitleBarContextHelpButton: - addIconFiles(iconResourcePrefix() + QStringLiteral("titlebar-contexthelp-"), - titleBarSizes, sizeof(titleBarSizes)/sizeof(titleBarSizes[0]), icon); - break; - case SP_FileDialogNewFolder: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/newdirectory-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/newdirectory-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/newdirectory-128.png"), QSize(128, 128)); - break; - case SP_FileDialogBack: - return QCommonStyle::standardIcon(SP_ArrowBack, option); - case SP_FileDialogToParent: - return QCommonStyle::standardIcon(SP_ArrowUp, option); - case SP_FileDialogDetailedView: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/viewdetailed-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/viewdetailed-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/viewdetailed-128.png"), QSize(128, 128)); - break; - case SP_FileDialogInfoView: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/fileinfo-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/fileinfo-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/fileinfo-128.png"), QSize(128, 128)); - break; - case SP_FileDialogContentsView: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/filecontents-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/filecontents-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/filecontents-128.png"), QSize(128, 128)); - break; - case SP_FileDialogListView: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/viewlist-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/viewlist-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/viewlist-128.png"), QSize(128, 128)); - break; - case SP_DialogOkButton: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-ok-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-ok-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-ok-128.png"), QSize(128, 128)); - break; - case SP_DialogCancelButton: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-cancel-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-cancel-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-cancel-128.png"), QSize(128, 128)); - break; - case SP_DialogHelpButton: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-help-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-help-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-help-128.png"), QSize(128, 128)); - break; - case SP_DialogOpenButton: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-open-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-open-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-open-128.png"), QSize(128, 128)); - break; - case SP_DialogSaveButton: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-save-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-save-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-save-128.png"), QSize(128, 128)); - break; - case SP_DialogCloseButton: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-close-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-close-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-close-128.png"), QSize(128, 128)); - break; - case SP_DialogApplyButton: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-apply-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-apply-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-apply-128.png"), QSize(128, 128)); - break; - case SP_DialogResetButton: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-clear-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-clear-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-clear-128.png"), QSize(128, 128)); - break; - case SP_DialogDiscardButton: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-delete-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-delete-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-delete-128.png"), QSize(128, 128)); - break; - case SP_DialogYesButton: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-yes-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-yes-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-yes-128.png"), QSize(128, 128)); - break; - case SP_DialogNoButton: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-no-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-no-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-no-128.png"), QSize(128, 128)); - break; - case SP_ArrowForward: - if (rtl) - return QCommonStyle::standardIcon(SP_ArrowLeft, option); - return QCommonStyle::standardIcon(SP_ArrowRight, option); - case SP_ArrowBack: - if (rtl) - return QCommonStyle::standardIcon(SP_ArrowRight, option); - return QCommonStyle::standardIcon(SP_ArrowLeft, option); - case SP_ArrowLeft: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/left-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/left-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/left-128.png"), QSize(128, 128)); - break; - case SP_ArrowRight: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/right-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/right-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/right-128.png"), QSize(128, 128)); - break; - case SP_ArrowUp: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/up-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/up-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/up-128.png"), QSize(128, 128)); - break; - case SP_ArrowDown: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/down-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/down-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/down-128.png"), QSize(128, 128)); - break; - case SP_DirHomeIcon: - case SP_DirIcon: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/dirclosed-16.png"), - QSize(), QIcon::Normal, QIcon::Off); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/diropen-16.png"), - QSize(), QIcon::Normal, QIcon::On); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/dirclosed-32.png"), - QSize(32, 32), QIcon::Normal, QIcon::Off); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/diropen-32.png"), - QSize(32, 32), QIcon::Normal, QIcon::On); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/dirclosed-128.png"), - QSize(128, 128), QIcon::Normal, QIcon::Off); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/diropen-128.png"), - QSize(128, 128), QIcon::Normal, QIcon::On); - break; - case SP_DriveCDIcon: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/cdr-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/cdr-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/cdr-128.png"), QSize(128, 128)); - break; - case SP_DriveDVDIcon: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/dvd-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/dvd-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/dvd-128.png"), QSize(128, 128)); - break; - case SP_FileIcon: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/file-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/file-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/file-128.png"), QSize(128, 128)); - break; - case SP_FileLinkIcon: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/filelink-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/filelink-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/filelink-128.png"), QSize(128, 128)); - break; - case SP_TrashIcon: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/trash-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/trash-32.png"), QSize(32, 32)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/trash-128.png"), QSize(128, 128)); - break; - case SP_BrowserReload: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/refresh-24.png"), QSize(24, 24)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/refresh-32.png"), QSize(32, 32)); - break; - case SP_BrowserStop: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/stop-24.png"), QSize(24, 24)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/stop-32.png"), QSize(32, 32)); - break; - case SP_MediaPlay: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-play-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-play-32.png"), QSize(32, 32)); - break; - case SP_MediaPause: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-pause-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-pause-32.png"), QSize(32, 32)); - break; - case SP_MediaStop: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-stop-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-stop-32.png"), QSize(32, 32)); - break; - case SP_MediaSeekForward: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-seek-forward-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-seek-forward-32.png"), QSize(32, 32)); - break; - case SP_MediaSeekBackward: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-seek-backward-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-seek-backward-32.png"), QSize(32, 32)); - break; - case SP_MediaSkipForward: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-skip-forward-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-skip-forward-32.png"), QSize(32, 32)); - break; - case SP_MediaSkipBackward: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-skip-backward-16.png"), QSize(16, 16)); - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-skip-backward-32.png"), QSize(32, 32)); - break; - case SP_MediaVolume: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-volume-16.png"), QSize(16, 16)); - break; - case SP_MediaVolumeMuted: - icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-volume-muted-16.png"), QSize(16, 16)); - break; - case SP_TitleBarCloseButton: - addIconFiles(iconResourcePrefix() + QStringLiteral("closedock-"), - dockTitleIconSizes, sizeof(dockTitleIconSizes)/sizeof(dockTitleIconSizes[0]), icon); - break; - case SP_TitleBarMenuButton: -# ifndef QT_NO_IMAGEFORMAT_XPM - icon.addPixmap(titleBarMenuCachedPixmapFromXPM()); -# endif - icon.addFile(QLatin1String(":/qt-project.org/qmessagebox/images/qtlogo-64.png")); - break; - case SP_TitleBarNormalButton: - addIconFiles(iconResourcePrefix() + QStringLiteral("normalizedockup-"), - dockTitleIconSizes, sizeof(dockTitleIconSizes)/sizeof(dockTitleIconSizes[0]), icon); - break; - case SP_ToolBarHorizontalExtensionButton: { - QString prefix = iconResourcePrefix() + QStringLiteral("toolbar-ext-h-"); - if (rtl) - prefix += QStringLiteral("rtl-"); - addIconFiles(prefix, toolBarExtHSizes, sizeof(toolBarExtHSizes)/sizeof(toolBarExtHSizes[0]), icon); - } - break; - case SP_ToolBarVerticalExtensionButton: - addIconFiles(iconResourcePrefix() + QStringLiteral("toolbar-ext-v-"), - toolBarExtVSizes, sizeof(toolBarExtVSizes)/sizeof(toolBarExtVSizes[0]), icon); - break; -#endif // QT_NO_IMAGEFORMAT_PNG - default: - icon.addPixmap(proxy()->standardPixmap(standardIcon, option)); - break; - } - return icon; -} - -static inline uint qt_intensity(uint r, uint g, uint b) -{ - // 30% red, 59% green, 11% blue - return (77 * r + 150 * g + 28 * b) / 255; -} - -/*! \reimp */ -QPixmap QCommonStyle::generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, - const QStyleOption *opt) const -{ - switch (iconMode) { - case QIcon::Disabled: { - QImage im = pixmap.toImage().convertToFormat(QImage::Format_ARGB32); - - // Create a colortable based on the background (black -> bg -> white) - QColor bg = opt->palette.color(QPalette::Disabled, QPalette::Window); - int red = bg.red(); - int green = bg.green(); - int blue = bg.blue(); - uchar reds[256], greens[256], blues[256]; - for (int i=0; i<128; ++i) { - reds[i] = uchar((red * (i<<1)) >> 8); - greens[i] = uchar((green * (i<<1)) >> 8); - blues[i] = uchar((blue * (i<<1)) >> 8); - } - for (int i=0; i<128; ++i) { - reds[i+128] = uchar(qMin(red + (i << 1), 255)); - greens[i+128] = uchar(qMin(green + (i << 1), 255)); - blues[i+128] = uchar(qMin(blue + (i << 1), 255)); - } - - int intensity = qt_intensity(red, green, blue); - const int factor = 191; - - // High intensity colors needs dark shifting in the color table, while - // low intensity colors needs light shifting. This is to increase the - // perceived contrast. - if ((red - factor > green && red - factor > blue) - || (green - factor > red && green - factor > blue) - || (blue - factor > red && blue - factor > green)) - intensity = qMin(255, intensity + 91); - else if (intensity <= 128) - intensity -= 51; - - for (int y=0; ypalette.color(QPalette::Normal, QPalette::Highlight); - color.setAlphaF(0.3f); - QPainter painter(&img); - painter.setCompositionMode(QPainter::CompositionMode_SourceAtop); - painter.fillRect(0, 0, img.width(), img.height(), color); - painter.end(); - return QPixmap::fromImage(img); } - case QIcon::Active: - return pixmap; - default: - break; - } - return pixmap; -} - -} // namespace QQC2 - -QT_END_NAMESPACE - -#include "moc_qquickcommonstyle.cpp" diff --git a/src/imports/nativestyle/qstyle/qquickcommonstyle.h b/src/imports/nativestyle/qstyle/qquickcommonstyle.h deleted file mode 100644 index 894194a0..00000000 --- a/src/imports/nativestyle/qstyle/qquickcommonstyle.h +++ /dev/null @@ -1,89 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QCOMMONSTYLE_H -#define QCOMMONSTYLE_H - -#include "qquickstyle.h" - -QT_BEGIN_NAMESPACE - -namespace QQC2 { - -class QCommonStylePrivate; - -class QCommonStyle: public QStyle -{ - Q_OBJECT - -public: - QCommonStyle(); - ~QCommonStyle() override; - - void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p) const override; - void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p) const override; - void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p) const override; - - QRect subElementRect(SubElement r, const QStyleOption *opt) const override; - QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc) const override; - - QSize sizeFromContents(ContentsType ct, const QStyleOption *opt, const QSize &contentsSize) const override; - QFont font(ControlElement element, const QStyle::State state) const override; - QMargins ninePatchMargins(ControlElement ce, const QStyleOption *opt, const QSize &imageSize) const override; - QMargins ninePatchMargins(ComplexControl cc, const QStyleOptionComplex *opt, const QSize &imageSize) const override; - - int pixelMetric(PixelMetric m, const QStyleOption *opt = nullptr) const override; - int styleHint(StyleHint sh, const QStyleOption *opt = nullptr, QStyleHintReturn *shret = nullptr) const override; - - QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *opt = nullptr) const override; - QPixmap standardPixmap(StandardPixmap sp, const QStyleOption *opt = nullptr) const override; - QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const override; - - SubControl hitTestComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, const QPoint &pt) const override; - -protected: - QCommonStyle(QCommonStylePrivate &dd); - -private: - Q_DECLARE_PRIVATE(QCommonStyle) - Q_DISABLE_COPY(QCommonStyle) -}; - -} // namespace QQC2 - -QT_END_NAMESPACE - -#endif // QCOMMONSTYLE_H diff --git a/src/imports/nativestyle/qstyle/qquickcommonstyle_p.h b/src/imports/nativestyle/qstyle/qquickcommonstyle_p.h deleted file mode 100644 index ba2b8689..00000000 --- a/src/imports/nativestyle/qstyle/qquickcommonstyle_p.h +++ /dev/null @@ -1,109 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QCOMMONSTYLE_P_H -#define QCOMMONSTYLE_P_H - -#include "qquickcommonstyle.h" -#include "qquickstyle_p.h" -#include "qquickstyleoption.h" - -QT_BEGIN_NAMESPACE - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of qapplication_*.cpp, qwidget*.cpp and qfiledialog.cpp. This header -// file may change from version to version without notice, or even be removed. -// -// We mean it. -// - -class QTextOption; - -namespace QQC2 { - -class QCommonStylePrivate : public QStylePrivate -{ - Q_DECLARE_PUBLIC(QCommonStyle) -public: - - ~QCommonStylePrivate() - { - delete cachedOption; - } - - QString calculateElidedText(const QString &text, const QTextOption &textOption, - const QFont &font, const QRect &textRect, const Qt::Alignment valign, - Qt::TextElideMode textElideMode, int flags, - bool lastVisibleLineShouldBeElided, QPointF *paintStartPosition) const; - void viewItemDrawText(QPainter *p, const QStyleOptionViewItem *option, const QRect &rect) const; - void viewItemLayout(const QStyleOptionViewItem *opt, QRect *checkRect, - QRect *pixmapRect, QRect *textRect, bool sizehint) const; - QSize viewItemSize(const QStyleOptionViewItem *option, int role) const; - - mutable QRect decorationRect, displayRect, checkRect; - mutable QStyleOptionViewItem *cachedOption = nullptr; - bool isViewItemCached(const QStyleOptionViewItem &option) const { - return cachedOption - && option.index == cachedOption->index - && option.state == cachedOption->state - && option.rect == cachedOption->rect - && option.text == cachedOption->text - && option.direction == cachedOption->direction - && option.displayAlignment == cachedOption->displayAlignment - && option.decorationAlignment == cachedOption->decorationAlignment - && option.decorationPosition == cachedOption->decorationPosition - && option.decorationSize == cachedOption->decorationSize - && option.features == cachedOption->features - && option.icon.isNull() == cachedOption->icon.isNull() - && option.font == cachedOption->font - && option.viewItemPosition == cachedOption->viewItemPosition; - } - QString toolButtonElideText(const QStyleOptionToolButton *toolbutton, - const QRect &textRect, int flags) const; - - mutable QIcon tabBarcloseButtonIcon; - virtual void tabLayout(const QStyleOptionTab *opt, QRect *textRect, QRect *pixmapRect) const; -}; - -} // namespace QQC2 - -QT_END_NAMESPACE - -#endif //QCOMMONSTYLE_P_H diff --git a/src/imports/nativestyle/qstyle/qquickcommonstylepixmaps_p.h b/src/imports/nativestyle/qstyle/qquickcommonstylepixmaps_p.h deleted file mode 100644 index 59f1afac..00000000 --- a/src/imports/nativestyle/qstyle/qquickcommonstylepixmaps_p.h +++ /dev/null @@ -1,532 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QT_NO_IMAGEFORMAT_XPM - -// -// 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. -// - -QT_BEGIN_NAMESPACE - -namespace QQC2 { - -static const char * const check_list_controller_xpm[] = { -"16 16 4 1", -" c None", -". c #000000000000", -"X c #FFFFFFFF0000", -"o c #C71BC30BC71B", -" ", -" ", -" .......... ", -" .XXXXXXXX. ", -" .XXXXXXXX.oo ", -" .XXXXXXXX.oo ", -" .XXXXXXXX.oo ", -" .XXXXXXXX.oo ", -" .XXXXXXXX.oo ", -" .XXXXXXXX.oo ", -" .XXXXXXXX.oo ", -" ..........oo ", -" oooooooooo ", -" oooooooooo ", -" ", -" "}; - - -static const char * const tb_extension_arrow_v_xpm[] = { - "5 8 3 1", - " c None", - ". c #000000", - "+ c none", - ".+++.", - "..+..", - "+...+", - "++.++", - ".+++.", - "..+..", - "+...+", - "++.++" -}; - -static const char * const tb_extension_arrow_h_xpm[] = { - "8 5 3 1", - " c None", - ". c #000000", - "+ c none", - "..++..++", - "+..++..+", - "++..++..", - "+..++..+", - "..++..++", -}; - -static const char * const filedialog_start_xpm[]={ - "16 15 8 1", - "a c #cec6bd", - "# c #000000", - "e c #ffff00", - "b c #999999", - "f c #cccccc", - "d c #dcdcdc", - "c c #ffffff", - ". c None", - ".....######aaaaa", - "...bb#cccc##aaaa", - "..bcc#cccc#d#aaa", - ".bcef#cccc#dd#aa", - ".bcfe#cccc#####a", - ".bcef#ccccccccc#", - "bbbbbbbbbbbbccc#", - "bccccccccccbbcc#", - "bcefefefefee#bc#", - ".bcefefefefef#c#", - ".bcfefefefefe#c#", - "..bcfefefefeeb##", - "..bbbbbbbbbbbbb#", - "...#############", - "................"}; - -static const char * const filedialog_end_xpm[]={ - "16 15 9 1", - "d c #a0a0a0", - "c c #c3c3c3", - "# c #cec6bd", - ". c #000000", - "f c #ffff00", - "e c #999999", - "g c #cccccc", - "b c #ffffff", - "a c None", - "......####aaaaaa", - ".bbbb..###aaaaaa", - ".bbbb.c.##aaaaaa", - ".bbbb....ddeeeea", - ".bbbbbbb.bbbbbe.", - ".bbbbbbb.bcfgfe.", - "eeeeeeeeeeeeefe.", - "ebbbbbbbbbbeege.", - "ebfgfgfgfgff.ee.", - "aebfgfgfgfgfg.e.", - "aebgfgfgfgfgf.e.", - "aaebgfgfgfgffe..", - "aaeeeeeeeeeeeee.", - "aaa.............", - "aaaaaaaaaaaaaaaa"}; - - -/* XPM */ -static const char * const qt_menu_xpm[] = { -"16 16 72 1", -" c None", -". c #65AF36", -"+ c #66B036", -"@ c #77B94C", -"# c #A7D28C", -"$ c #BADBA4", -"% c #A4D088", -"& c #72B646", -"* c #9ACB7A", -"= c #7FBD56", -"- c #85C05F", -"; c #F4F9F0", -"> c #FFFFFF", -", c #E5F1DC", -"' c #ECF5E7", -") c #7ABA50", -"! c #83BF5C", -"~ c #AED595", -"{ c #D7EACA", -"] c #A9D28D", -"^ c #BCDDA8", -"/ c #C4E0B1", -"( c #81BE59", -"_ c #D0E7C2", -": c #D4E9C6", -"< c #6FB542", -"[ c #6EB440", -"} c #88C162", -"| c #98CA78", -"1 c #F4F9F1", -"2 c #8FC56C", -"3 c #F1F8EC", -"4 c #E8F3E1", -"5 c #D4E9C7", -"6 c #74B748", -"7 c #80BE59", -"8 c #73B747", -"9 c #6DB43F", -"0 c #CBE4BA", -"a c #80BD58", -"b c #6DB33F", -"c c #FEFFFE", -"d c #68B138", -"e c #F9FCF7", -"f c #91C66F", -"g c #E8F3E0", -"h c #DCEDD0", -"i c #91C66E", -"j c #A3CF86", -"k c #C9E3B8", -"l c #B0D697", -"m c #E3F0DA", -"n c #95C873", -"o c #E6F2DE", -"p c #9ECD80", -"q c #BEDEAA", -"r c #C7E2B6", -"s c #79BA4F", -"t c #6EB441", -"u c #BCDCA7", -"v c #FAFCF8", -"w c #F6FAF3", -"x c #84BF5D", -"y c #EDF6E7", -"z c #FAFDF9", -"A c #88C263", -"B c #98CA77", -"C c #CDE5BE", -"D c #67B037", -"E c #D9EBCD", -"F c #6AB23C", -"G c #77B94D", -" .++++++++++++++", -".+++++++++++++++", -"+++@#$%&+++*=+++", -"++-;>,>')+!>~+++", -"++{>]+^>/(_>:~<+", -"+[>>}+|>123>456+", -"+7>>8+->>90>~+++", -"+a>>b+a>c[0>~+++", -"+de>=+f>g+0>~+++", -"++h>i+j>k+0>~+++", -"++l>mno>p+q>rst+", -"++duv>wl++xy>zA+", -"++++B>Cb++++&D++", -"+++++0zE++++++++", -"++++++FG+++++++.", -"++++++++++++++. "}; - -static const char * const qt_close_xpm[] = { -"10 10 2 1", -"# c #000000", -". c None", -"..........", -".##....##.", -"..##..##..", -"...####...", -"....##....", -"...####...", -"..##..##..", -".##....##.", -"..........", -".........."}; - -static const char * const qt_maximize_xpm[]={ -"10 10 2 1", -"# c #000000", -". c None", -"#########.", -"#########.", -"#.......#.", -"#.......#.", -"#.......#.", -"#.......#.", -"#.......#.", -"#.......#.", -"#########.", -".........."}; - -static const char * const qt_minimize_xpm[] = { -"10 10 2 1", -"# c #000000", -". c None", -"..........", -"..........", -"..........", -"..........", -"..........", -"..........", -"..........", -".#######..", -".#######..", -".........."}; - -static const char * const qt_normalizeup_xpm[] = { -"10 10 2 1", -"# c #000000", -". c None", -"...######.", -"...######.", -"...#....#.", -".######.#.", -".######.#.", -".#....###.", -".#....#...", -".#....#...", -".######...", -".........."}; - -static const char * const qt_help_xpm[] = { -"10 10 2 1", -". c None", -"# c #000000", -"..........", -"..######..", -".##....##.", -"......##..", -".....##...", -"....##....", -"....##....", -"..........", -"....##....", -".........."}; - -static const char * const qt_shade_xpm[] = { -"10 10 2 1", -"# c #000000", -". c None", -"..........", -"..........", -"..........", -"..........", -"....#.....", -"...###....", -"..#####...", -".#######..", -"..........", -".........."}; - -static const char * const qt_unshade_xpm[] = { -"10 10 2 1", -"# c #000000", -". c None", -"..........", -"..........", -"..........", -".#######..", -"..#####...", -"...###....", -"....#.....", -"..........", -"..........", -".........."}; - -static const char * const dock_widget_close_xpm[] = { -"8 8 2 1", -"# c #000000", -". c None", -"........", -".##..##.", -"..####..", -"...##...", -"..####..", -".##..##.", -"........", -"........"}; - -/* XPM */ -static const char * const information_xpm[]={ -"32 32 5 1", -". c None", -"c c #000000", -"* c #999999", -"a c #ffffff", -"b c #0000ff", -"...........********.............", -"........***aaaaaaaa***..........", -"......**aaaaaaaaaaaaaa**........", -".....*aaaaaaaaaaaaaaaaaa*.......", -"....*aaaaaaaabbbbaaaaaaaac......", -"...*aaaaaaaabbbbbbaaaaaaaac.....", -"..*aaaaaaaaabbbbbbaaaaaaaaac....", -".*aaaaaaaaaaabbbbaaaaaaaaaaac...", -".*aaaaaaaaaaaaaaaaaaaaaaaaaac*..", -"*aaaaaaaaaaaaaaaaaaaaaaaaaaaac*.", -"*aaaaaaaaaabbbbbbbaaaaaaaaaaac*.", -"*aaaaaaaaaaaabbbbbaaaaaaaaaaac**", -"*aaaaaaaaaaaabbbbbaaaaaaaaaaac**", -"*aaaaaaaaaaaabbbbbaaaaaaaaaaac**", -"*aaaaaaaaaaaabbbbbaaaaaaaaaaac**", -"*aaaaaaaaaaaabbbbbaaaaaaaaaaac**", -".*aaaaaaaaaaabbbbbaaaaaaaaaac***", -".*aaaaaaaaaaabbbbbaaaaaaaaaac***", -"..*aaaaaaaaaabbbbbaaaaaaaaac***.", -"...caaaaaaabbbbbbbbbaaaaaac****.", -"....caaaaaaaaaaaaaaaaaaaac****..", -".....caaaaaaaaaaaaaaaaaac****...", -"......ccaaaaaaaaaaaaaacc****....", -".......*cccaaaaaaaaccc*****.....", -"........***cccaaaac*******......", -"..........****caaac*****........", -".............*caaac**...........", -"...............caac**...........", -"................cac**...........", -".................cc**...........", -"..................***...........", -"...................**..........."}; -/* XPM */ -static const char* const warning_xpm[]={ -"32 32 4 1", -". c None", -"a c #ffff00", -"* c #000000", -"b c #999999", -".............***................", -"............*aaa*...............", -"...........*aaaaa*b.............", -"...........*aaaaa*bb............", -"..........*aaaaaaa*bb...........", -"..........*aaaaaaa*bb...........", -".........*aaaaaaaaa*bb..........", -".........*aaaaaaaaa*bb..........", -"........*aaaaaaaaaaa*bb.........", -"........*aaaa***aaaa*bb.........", -".......*aaaa*****aaaa*bb........", -".......*aaaa*****aaaa*bb........", -"......*aaaaa*****aaaaa*bb.......", -"......*aaaaa*****aaaaa*bb.......", -".....*aaaaaa*****aaaaaa*bb......", -".....*aaaaaa*****aaaaaa*bb......", -"....*aaaaaaaa***aaaaaaaa*bb.....", -"....*aaaaaaaa***aaaaaaaa*bb.....", -"...*aaaaaaaaa***aaaaaaaaa*bb....", -"...*aaaaaaaaaa*aaaaaaaaaa*bb....", -"..*aaaaaaaaaaa*aaaaaaaaaaa*bb...", -"..*aaaaaaaaaaaaaaaaaaaaaaa*bb...", -".*aaaaaaaaaaaa**aaaaaaaaaaa*bb..", -".*aaaaaaaaaaa****aaaaaaaaaa*bb..", -"*aaaaaaaaaaaa****aaaaaaaaaaa*bb.", -"*aaaaaaaaaaaaa**aaaaaaaaaaaa*bb.", -"*aaaaaaaaaaaaaaaaaaaaaaaaaaa*bbb", -"*aaaaaaaaaaaaaaaaaaaaaaaaaaa*bbb", -".*aaaaaaaaaaaaaaaaaaaaaaaaa*bbbb", -"..*************************bbbbb", -"....bbbbbbbbbbbbbbbbbbbbbbbbbbb.", -".....bbbbbbbbbbbbbbbbbbbbbbbbb.."}; -/* XPM */ -static const char* const critical_xpm[]={ -"32 32 4 1", -". c None", -"a c #999999", -"* c #ff0000", -"b c #ffffff", -"...........********.............", -".........************...........", -".......****************.........", -"......******************........", -".....********************a......", -"....**********************a.....", -"...************************a....", -"..*******b**********b*******a...", -"..******bbb********bbb******a...", -".******bbbbb******bbbbb******a..", -".*******bbbbb****bbbbb*******a..", -"*********bbbbb**bbbbb*********a.", -"**********bbbbbbbbbb**********a.", -"***********bbbbbbbb***********aa", -"************bbbbbb************aa", -"************bbbbbb************aa", -"***********bbbbbbbb***********aa", -"**********bbbbbbbbbb**********aa", -"*********bbbbb**bbbbb*********aa", -".*******bbbbb****bbbbb*******aa.", -".******bbbbb******bbbbb******aa.", -"..******bbb********bbb******aaa.", -"..*******b**********b*******aa..", -"...************************aaa..", -"....**********************aaa...", -"....a********************aaa....", -".....a******************aaa.....", -"......a****************aaa......", -".......aa************aaaa.......", -".........aa********aaaaa........", -"...........aaaaaaaaaaa..........", -".............aaaaaaa............"}; -/* XPM */ -static const char *const question_xpm[] = { -"32 32 5 1", -". c None", -"c c #000000", -"* c #999999", -"a c #ffffff", -"b c #0000ff", -"...........********.............", -"........***aaaaaaaa***..........", -"......**aaaaaaaaaaaaaa**........", -".....*aaaaaaaaaaaaaaaaaa*.......", -"....*aaaaaaaaaaaaaaaaaaaac......", -"...*aaaaaaaabbbbbbaaaaaaaac.....", -"..*aaaaaaaabaaabbbbaaaaaaaac....", -".*aaaaaaaabbaaaabbbbaaaaaaaac...", -".*aaaaaaaabbbbaabbbbaaaaaaaac*..", -"*aaaaaaaaabbbbaabbbbaaaaaaaaac*.", -"*aaaaaaaaaabbaabbbbaaaaaaaaaac*.", -"*aaaaaaaaaaaaabbbbaaaaaaaaaaac**", -"*aaaaaaaaaaaaabbbaaaaaaaaaaaac**", -"*aaaaaaaaaaaaabbaaaaaaaaaaaaac**", -"*aaaaaaaaaaaaabbaaaaaaaaaaaaac**", -"*aaaaaaaaaaaaaaaaaaaaaaaaaaaac**", -".*aaaaaaaaaaaabbaaaaaaaaaaaac***", -".*aaaaaaaaaaabbbbaaaaaaaaaaac***", -"..*aaaaaaaaaabbbbaaaaaaaaaac***.", -"...caaaaaaaaaabbaaaaaaaaaac****.", -"....caaaaaaaaaaaaaaaaaaaac****..", -".....caaaaaaaaaaaaaaaaaac****...", -"......ccaaaaaaaaaaaaaacc****....", -".......*cccaaaaaaaaccc*****.....", -"........***cccaaaac*******......", -"..........****caaac*****........", -".............*caaac**...........", -"...............caac**...........", -"................cac**...........", -".................cc**...........", -"..................***...........", -"...................**..........."}; - -} // namespace QQC2 - -QT_END_NAMESPACE - -#endif //QT_NO_IMAGEFORMAT_XPM diff --git a/src/imports/nativestyle/qstyle/qquickdrawutil.cpp b/src/imports/nativestyle/qstyle/qquickdrawutil.cpp deleted file mode 100644 index d5290a7b..00000000 --- a/src/imports/nativestyle/qstyle/qquickdrawutil.cpp +++ /dev/null @@ -1,1145 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickdrawutil.h" - -#include "qbitmap.h" -#include "qpixmapcache.h" -#include "qpainter.h" -#include "qpalette.h" -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -namespace QQC2 { - -namespace { -class PainterStateGuard { - Q_DISABLE_COPY_MOVE(PainterStateGuard) -public: - explicit PainterStateGuard(QPainter *p) : m_painter(p) {} - ~PainterStateGuard() - { - for ( ; m_level > 0; --m_level) - m_painter->restore(); - } - - void save() - { - m_painter->save(); - ++m_level; - } - - void restore() - { - m_painter->restore(); - --m_level; - } - -private: - QPainter *m_painter; - int m_level= 0; -}; -} // namespace - -/*! - \headerfile - \title Drawing Utility Functions - - \sa QPainter -*/ - -/*! - \fn void qDrawShadeLine(QPainter *painter, int x1, int y1, int x2, int y2, - const QPalette &palette, bool sunken, - int lineWidth, int midLineWidth) - \relates - - Draws a horizontal (\a y1 == \a y2) or vertical (\a x1 == \a x2) - shaded line using the given \a painter. Note that nothing is - drawn if \a y1 != \a y2 and \a x1 != \a x2 (i.e. the line is - neither horizontal nor vertical). - - The provided \a palette specifies the shading colors (\l - {QPalette::light()}{light}, \l {QPalette::dark()}{dark} and \l - {QPalette::mid()}{middle} colors). The given \a lineWidth - specifies the line width for each of the lines; it is not the - total line width. The given \a midLineWidth specifies the width of - a middle line drawn in the QPalette::mid() color. - - The line appears sunken if \a sunken is true, otherwise raised. - - \warning This function does not look at QWidget::style() or - QApplication::style(). Use the drawing functions in QStyle to - make widgets that follow the current GUI style. - - - Alternatively you can use a QFrame widget and apply the - QFrame::setFrameStyle() function to display a shaded line: - - \snippet code/src_gui_painting_qdrawutil.cpp 0 - - \sa qDrawShadeRect(), qDrawShadePanel(), QStyle -*/ - -void qDrawShadeLine(QPainter *p, int x1, int y1, int x2, int y2, - const QPalette &pal, bool sunken, - int lineWidth, int midLineWidth) -{ - if (Q_UNLIKELY(!p || lineWidth < 0 || midLineWidth < 0)) { - qWarning("qDrawShadeLine: Invalid parameters"); - return; - } - int tlw = lineWidth*2 + midLineWidth; // total line width - QPen oldPen = p->pen(); // save pen - if (sunken) - p->setPen(pal.color(QPalette::Dark)); - else - p->setPen(pal.light().color()); - QPolygon a; - int i; - if (y1 == y2) { // horizontal line - int y = y1 - tlw/2; - if (x1 > x2) { // swap x1 and x2 - int t = x1; - x1 = x2; - x2 = t; - } - x2--; - for (i=0; idrawPolyline(a); - } - if (midLineWidth > 0) { - p->setPen(pal.mid().color()); - for (i=0; idrawLine(x1+lineWidth, y+lineWidth+i, - x2-lineWidth, y+lineWidth+i); - } - if (sunken) - p->setPen(pal.light().color()); - else - p->setPen(pal.dark().color()); - for (i=0; idrawPolyline(a); - } - } - else if (x1 == x2) { // vertical line - int x = x1 - tlw/2; - if (y1 > y2) { // swap y1 and y2 - int t = y1; - y1 = y2; - y2 = t; - } - y2--; - for (i=0; idrawPolyline(a); - } - if (midLineWidth > 0) { - p->setPen(pal.mid().color()); - for (i=0; idrawLine(x+lineWidth+i, y1+lineWidth, x+lineWidth+i, y2); - } - if (sunken) - p->setPen(pal.light().color()); - else - p->setPen(pal.dark().color()); - for (i=0; idrawPolyline(a); - } - } - p->setPen(oldPen); -} - -/*! - \fn void qDrawShadeRect(QPainter *painter, int x, int y, int width, int height, - const QPalette &palette, bool sunken, - int lineWidth, int midLineWidth, - const QBrush *fill) - \relates - - Draws the shaded rectangle beginning at (\a x, \a y) with the - given \a width and \a height using the provided \a painter. - - The provide \a palette specifies the shading colors (\l - {QPalette::light()}{light}, \l {QPalette::dark()}{dark} and \l - {QPalette::mid()}{middle} colors. The given \a lineWidth - specifies the line width for each of the lines; it is not the - total line width. The \a midLineWidth specifies the width of a - middle line drawn in the QPalette::mid() color. The rectangle's - interior is filled with the \a fill brush unless \a fill is 0. - - The rectangle appears sunken if \a sunken is true, otherwise - raised. - - \warning This function does not look at QWidget::style() or - QApplication::style(). Use the drawing functions in QStyle to make - widgets that follow the current GUI style. - - Alternatively you can use a QFrame widget and apply the - QFrame::setFrameStyle() function to display a shaded rectangle: - - \snippet code/src_gui_painting_qdrawutil.cpp 1 - - \sa qDrawShadeLine(), qDrawShadePanel(), qDrawPlainRect(), QStyle -*/ - -void qDrawShadeRect(QPainter *p, int x, int y, int w, int h, - const QPalette &pal, bool sunken, - int lineWidth, int midLineWidth, - const QBrush *fill) -{ - if (w == 0 || h == 0) - return; - if (Q_UNLIKELY(w < 0 || h < 0 || lineWidth < 0 || midLineWidth < 0)) { - qWarning("qDrawShadeRect: Invalid parameters"); - return; - } - - PainterStateGuard painterGuard(p); - const qreal devicePixelRatio = p->device()->devicePixelRatioF(); - if (!qFuzzyCompare(devicePixelRatio, qreal(1))) { - painterGuard.save(); - const qreal inverseScale = qreal(1) / devicePixelRatio; - p->scale(inverseScale, inverseScale); - x = qRound(devicePixelRatio * x); - y = qRound(devicePixelRatio * y); - w = qRound(devicePixelRatio * w); - h = qRound(devicePixelRatio * h); - lineWidth = qRound(devicePixelRatio * lineWidth); - midLineWidth = qRound(devicePixelRatio * midLineWidth); - } - - QPen oldPen = p->pen(); - if (sunken) - p->setPen(pal.dark().color()); - else - p->setPen(pal.light().color()); - int x1=x, y1=y, x2=x+w-1, y2=y+h-1; - - if (lineWidth == 1 && midLineWidth == 0) {// standard shade rectangle - p->drawRect(x1, y1, w-2, h-2); - if (sunken) - p->setPen(pal.light().color()); - else - p->setPen(pal.dark().color()); - QLineF lines[4] = { QLineF(x1+1, y1+1, x2-2, y1+1), - QLineF(x1+1, y1+2, x1+1, y2-2), - QLineF(x1, y2, x2, y2), - QLineF(x2,y1, x2,y2-1) }; - p->drawLines(lines, 4); // draw bottom/right lines - } else { // more complicated - int m = lineWidth+midLineWidth; - int i, j=0, k=m; - for (i=0; idrawLines(lines, 4); - k++; - } - p->setPen(pal.mid().color()); - j = lineWidth*2; - for (i=0; idrawRect(x1+lineWidth+i, y1+lineWidth+i, w-j-1, h-j-1); - j += 2; - } - if (sunken) - p->setPen(pal.light().color()); - else - p->setPen(pal.dark().color()); - k = m; - for (i=0; idrawLines(lines, 4); - k++; - } - } - if (fill) { - QBrush oldBrush = p->brush(); - int tlw = lineWidth + midLineWidth; - p->setPen(Qt::NoPen); - p->setBrush(*fill); - p->drawRect(x+tlw, y+tlw, w-2*tlw, h-2*tlw); - p->setBrush(oldBrush); - } - p->setPen(oldPen); // restore pen -} - - -/*! - \fn void qDrawShadePanel(QPainter *painter, int x, int y, int width, int height, - const QPalette &palette, bool sunken, - int lineWidth, const QBrush *fill) - \relates - - Draws the shaded panel beginning at (\a x, \a y) with the given \a - width and \a height using the provided \a painter and the given \a - lineWidth. - - The given \a palette specifies the shading colors (\l - {QPalette::light()}{light}, \l {QPalette::dark()}{dark} and \l - {QPalette::mid()}{middle} colors). The panel's interior is filled - with the \a fill brush unless \a fill is 0. - - The panel appears sunken if \a sunken is true, otherwise raised. - - \warning This function does not look at QWidget::style() or - QApplication::style(). Use the drawing functions in QStyle to make - widgets that follow the current GUI style. - - Alternatively you can use a QFrame widget and apply the - QFrame::setFrameStyle() function to display a shaded panel: - - \snippet code/src_gui_painting_qdrawutil.cpp 2 - - \sa qDrawWinPanel(), qDrawShadeLine(), qDrawShadeRect(), QStyle -*/ - -void qDrawShadePanel(QPainter *p, int x, int y, int w, int h, - const QPalette &pal, bool sunken, - int lineWidth, const QBrush *fill) -{ - if (w == 0 || h == 0) - return; - if (Q_UNLIKELY(w < 0 || h < 0 || lineWidth < 0)) { - qWarning("qDrawShadePanel: Invalid parameters"); - } - - PainterStateGuard painterGuard(p); - const qreal devicePixelRatio = p->device()->devicePixelRatioF(); - if (!qFuzzyCompare(devicePixelRatio, qreal(1))) { - painterGuard.save(); - const qreal inverseScale = qreal(1) / devicePixelRatio; - p->scale(inverseScale, inverseScale); - x = qRound(devicePixelRatio * x); - y = qRound(devicePixelRatio * y); - w = qRound(devicePixelRatio * w); - h = qRound(devicePixelRatio * h); - lineWidth = qRound(devicePixelRatio * lineWidth); - } - - QColor shade = pal.dark().color(); - QColor light = pal.light().color(); - if (fill) { - if (fill->color() == shade) - shade = pal.shadow().color(); - if (fill->color() == light) - light = pal.midlight().color(); - } - QPen oldPen = p->pen(); // save pen - QVector lines; - lines.reserve(2*lineWidth); - - if (sunken) - p->setPen(shade); - else - p->setPen(light); - int x1, y1, x2, y2; - int i; - x1 = x; - y1 = y2 = y; - x2 = x+w-2; - for (i=0; idrawLines(lines); - lines.clear(); - if (sunken) - p->setPen(light); - else - p->setPen(shade); - x1 = x; - y1 = y2 = y+h-1; - x2 = x+w-1; - for (i=0; idrawLines(lines); - if (fill) // fill with fill color - p->fillRect(x+lineWidth, y+lineWidth, w-lineWidth*2, h-lineWidth*2, *fill); - p->setPen(oldPen); // restore pen -} - - -/*! - \internal - This function draws a rectangle with two pixel line width. - It is called from qDrawWinButton() and qDrawWinPanel(). - - c1..c4 and fill are used: - - 1 1 1 1 1 2 - 1 3 3 3 4 2 - 1 3 F F 4 2 - 1 3 F F 4 2 - 1 4 4 4 4 2 - 2 2 2 2 2 2 -*/ - -static void qDrawWinShades(QPainter *p, - int x, int y, int w, int h, - const QColor &c1, const QColor &c2, - const QColor &c3, const QColor &c4, - const QBrush *fill) -{ - if (w < 2 || h < 2) // can't do anything with that - return; - - PainterStateGuard painterGuard(p); - const qreal devicePixelRatio = p->device()->devicePixelRatioF(); - if (!qFuzzyCompare(devicePixelRatio, qreal(1))) { - painterGuard.save(); - const qreal inverseScale = qreal(1) / devicePixelRatio; - p->scale(inverseScale, inverseScale); - x = qRound(devicePixelRatio * x); - y = qRound(devicePixelRatio * y); - w = qRound(devicePixelRatio * w); - h = qRound(devicePixelRatio * h); - } - - QPen oldPen = p->pen(); - QPoint a[3] = { QPoint(x, y+h-2), QPoint(x, y), QPoint(x+w-2, y) }; - p->setPen(c1); - p->drawPolyline(a, 3); - QPoint b[3] = { QPoint(x, y+h-1), QPoint(x+w-1, y+h-1), QPoint(x+w-1, y) }; - p->setPen(c2); - p->drawPolyline(b, 3); - if (w > 4 && h > 4) { - QPoint c[3] = { QPoint(x+1, y+h-3), QPoint(x+1, y+1), QPoint(x+w-3, y+1) }; - p->setPen(c3); - p->drawPolyline(c, 3); - QPoint d[3] = { QPoint(x+1, y+h-2), QPoint(x+w-2, y+h-2), QPoint(x+w-2, y+1) }; - p->setPen(c4); - p->drawPolyline(d, 3); - if (fill) - p->fillRect(QRect(x+2, y+2, w-4, h-4), *fill); - } - p->setPen(oldPen); -} - - -/*! - \fn void qDrawWinButton(QPainter *painter, int x, int y, int width, int height, - const QPalette &palette, bool sunken, - const QBrush *fill) - \relates - - Draws the Windows-style button specified by the given point (\a x, - \a y}, \a width and \a height using the provided \a painter with a - line width of 2 pixels. The button's interior is filled with the - \a{fill} brush unless \a fill is 0. - - The given \a palette specifies the shading colors (\l - {QPalette::light()}{light}, \l {QPalette::dark()}{dark} and \l - {QPalette::mid()}{middle} colors). - - The button appears sunken if \a sunken is true, otherwise raised. - - \warning This function does not look at QWidget::style() or - QApplication::style()-> Use the drawing functions in QStyle to make - widgets that follow the current GUI style. - - \sa qDrawWinPanel(), QStyle -*/ - -void qDrawWinButton(QPainter *p, int x, int y, int w, int h, - const QPalette &pal, bool sunken, - const QBrush *fill) -{ - if (sunken) - qDrawWinShades(p, x, y, w, h, - pal.shadow().color(), pal.light().color(), pal.dark().color(), - pal.button().color(), fill); - else - qDrawWinShades(p, x, y, w, h, - pal.light().color(), pal.shadow().color(), pal.button().color(), - pal.dark().color(), fill); -} - -/*! - \fn void qDrawWinPanel(QPainter *painter, int x, int y, int width, int height, - const QPalette &palette, bool sunken, - const QBrush *fill) - \relates - - Draws the Windows-style panel specified by the given point(\a x, - \a y), \a width and \a height using the provided \a painter with a - line width of 2 pixels. The button's interior is filled with the - \a fill brush unless \a fill is 0. - - The given \a palette specifies the shading colors. The panel - appears sunken if \a sunken is true, otherwise raised. - - \warning This function does not look at QWidget::style() or - QApplication::style(). Use the drawing functions in QStyle to make - widgets that follow the current GUI style. - - Alternatively you can use a QFrame widget and apply the - QFrame::setFrameStyle() function to display a shaded panel: - - \snippet code/src_gui_painting_qdrawutil.cpp 3 - - \sa qDrawShadePanel(), qDrawWinButton(), QStyle -*/ - -void qDrawWinPanel(QPainter *p, int x, int y, int w, int h, - const QPalette &pal, bool sunken, - const QBrush *fill) -{ - if (sunken) - qDrawWinShades(p, x, y, w, h, - pal.dark().color(), pal.light().color(), pal.shadow().color(), - pal.midlight().color(), fill); - else - qDrawWinShades(p, x, y, w, h, - pal.light().color(), pal.shadow().color(), pal.midlight().color(), - pal.dark().color(), fill); -} - -/*! - \fn void qDrawPlainRect(QPainter *painter, int x, int y, int width, int height, const QColor &lineColor, - int lineWidth, const QBrush *fill) - \relates - - Draws the plain rectangle beginning at (\a x, \a y) with the given - \a width and \a height, using the specified \a painter, \a lineColor - and \a lineWidth. The rectangle's interior is filled with the \a - fill brush unless \a fill is 0. - - \warning This function does not look at QWidget::style() or - QApplication::style(). Use the drawing functions in QStyle to make - widgets that follow the current GUI style. - - Alternatively you can use a QFrame widget and apply the - QFrame::setFrameStyle() function to display a plain rectangle: - - \snippet code/src_gui_painting_qdrawutil.cpp 4 - - \sa qDrawShadeRect(), QStyle -*/ - -void qDrawPlainRect(QPainter *p, int x, int y, int w, int h, const QColor &c, - int lineWidth, const QBrush *fill) -{ - if (w == 0 || h == 0) - return; - if (Q_UNLIKELY(w < 0 || h < 0 || lineWidth < 0)) { - qWarning("qDrawPlainRect: Invalid parameters"); - } - - PainterStateGuard painterGuard(p); - const qreal devicePixelRatio = p->device()->devicePixelRatioF(); - if (!qFuzzyCompare(devicePixelRatio, qreal(1))) { - painterGuard.save(); - const qreal inverseScale = qreal(1) / devicePixelRatio; - p->scale(inverseScale, inverseScale); - x = qRound(devicePixelRatio * x); - y = qRound(devicePixelRatio * y); - w = qRound(devicePixelRatio * w); - h = qRound(devicePixelRatio * h); - lineWidth = qRound(devicePixelRatio * lineWidth); - } - - QPen oldPen = p->pen(); - QBrush oldBrush = p->brush(); - p->setPen(c); - p->setBrush(Qt::NoBrush); - for (int i=0; idrawRect(x+i, y+i, w-i*2 - 1, h-i*2 - 1); - if (fill) { // fill with fill color - p->setPen(Qt::NoPen); - p->setBrush(*fill); - p->drawRect(x+lineWidth, y+lineWidth, w-lineWidth*2, h-lineWidth*2); - } - p->setPen(oldPen); - p->setBrush(oldBrush); -} - -/***************************************************************************** - Overloaded functions. - *****************************************************************************/ - -/*! - \fn void qDrawShadeLine(QPainter *painter, const QPoint &p1, const QPoint &p2, - const QPalette &palette, bool sunken, int lineWidth, int midLineWidth) - \relates - \overload - - Draws a horizontal or vertical shaded line between \a p1 and \a p2 - using the given \a painter. Note that nothing is drawn if the line - between the points would be neither horizontal nor vertical. - - The provided \a palette specifies the shading colors (\l - {QPalette::light()}{light}, \l {QPalette::dark()}{dark} and \l - {QPalette::mid()}{middle} colors). The given \a lineWidth - specifies the line width for each of the lines; it is not the - total line width. The given \a midLineWidth specifies the width of - a middle line drawn in the QPalette::mid() color. - - The line appears sunken if \a sunken is true, otherwise raised. - - \warning This function does not look at QWidget::style() or - QApplication::style(). Use the drawing functions in QStyle to - make widgets that follow the current GUI style. - - - Alternatively you can use a QFrame widget and apply the - QFrame::setFrameStyle() function to display a shaded line: - - \snippet code/src_gui_painting_qdrawutil.cpp 5 - - \sa qDrawShadeRect(), qDrawShadePanel(), QStyle -*/ - -void qDrawShadeLine(QPainter *p, const QPoint &p1, const QPoint &p2, - const QPalette &pal, bool sunken, - int lineWidth, int midLineWidth) -{ - qDrawShadeLine(p, p1.x(), p1.y(), p2.x(), p2.y(), pal, sunken, - lineWidth, midLineWidth); -} - -/*! - \fn void qDrawShadeRect(QPainter *painter, const QRect &rect, const QPalette &palette, - bool sunken, int lineWidth, int midLineWidth, const QBrush *fill) - \relates - \overload - - Draws the shaded rectangle specified by \a rect using the given \a painter. - - The provide \a palette specifies the shading colors (\l - {QPalette::light()}{light}, \l {QPalette::dark()}{dark} and \l - {QPalette::mid()}{middle} colors. The given \a lineWidth - specifies the line width for each of the lines; it is not the - total line width. The \a midLineWidth specifies the width of a - middle line drawn in the QPalette::mid() color. The rectangle's - interior is filled with the \a fill brush unless \a fill is 0. - - The rectangle appears sunken if \a sunken is true, otherwise - raised. - - \warning This function does not look at QWidget::style() or - QApplication::style(). Use the drawing functions in QStyle to make - widgets that follow the current GUI style. - - Alternatively you can use a QFrame widget and apply the - QFrame::setFrameStyle() function to display a shaded rectangle: - - \snippet code/src_gui_painting_qdrawutil.cpp 6 - - \sa qDrawShadeLine(), qDrawShadePanel(), qDrawPlainRect(), QStyle -*/ - -void qDrawShadeRect(QPainter *p, const QRect &r, - const QPalette &pal, bool sunken, - int lineWidth, int midLineWidth, - const QBrush *fill) -{ - qDrawShadeRect(p, r.x(), r.y(), r.width(), r.height(), pal, sunken, - lineWidth, midLineWidth, fill); -} - -/*! - \fn void qDrawShadePanel(QPainter *painter, const QRect &rect, const QPalette &palette, - bool sunken, int lineWidth, const QBrush *fill) - \relates - \overload - - Draws the shaded panel at the rectangle specified by \a rect using the - given \a painter and the given \a lineWidth. - - The given \a palette specifies the shading colors (\l - {QPalette::light()}{light}, \l {QPalette::dark()}{dark} and \l - {QPalette::mid()}{middle} colors). The panel's interior is filled - with the \a fill brush unless \a fill is 0. - - The panel appears sunken if \a sunken is true, otherwise raised. - - \warning This function does not look at QWidget::style() or - QApplication::style(). Use the drawing functions in QStyle to make - widgets that follow the current GUI style. - - Alternatively you can use a QFrame widget and apply the - QFrame::setFrameStyle() function to display a shaded panel: - - \snippet code/src_gui_painting_qdrawutil.cpp 7 - - \sa qDrawWinPanel(), qDrawShadeLine(), qDrawShadeRect(), QStyle -*/ - -void qDrawShadePanel(QPainter *p, const QRect &r, - const QPalette &pal, bool sunken, - int lineWidth, const QBrush *fill) -{ - qDrawShadePanel(p, r.x(), r.y(), r.width(), r.height(), pal, sunken, - lineWidth, fill); -} - -/*! - \fn void qDrawWinButton(QPainter *painter, const QRect &rect, const QPalette &palette, - bool sunken, const QBrush *fill) - \relates - \overload - - Draws the Windows-style button at the rectangle specified by \a rect using - the given \a painter with a line width of 2 pixels. The button's interior - is filled with the \a{fill} brush unless \a fill is 0. - - The given \a palette specifies the shading colors (\l - {QPalette::light()}{light}, \l {QPalette::dark()}{dark} and \l - {QPalette::mid()}{middle} colors). - - The button appears sunken if \a sunken is true, otherwise raised. - - \warning This function does not look at QWidget::style() or - QApplication::style()-> Use the drawing functions in QStyle to make - widgets that follow the current GUI style. - - \sa qDrawWinPanel(), QStyle -*/ - -void qDrawWinButton(QPainter *p, const QRect &r, - const QPalette &pal, bool sunken, const QBrush *fill) -{ - qDrawWinButton(p, r.x(), r.y(), r.width(), r.height(), pal, sunken, fill); -} - -/*! - \fn void qDrawWinPanel(QPainter *painter, const QRect &rect, const QPalette &palette, - bool sunken, const QBrush *fill) - \overload - - Draws the Windows-style panel at the rectangle specified by \a rect using - the given \a painter with a line width of 2 pixels. The button's interior - is filled with the \a fill brush unless \a fill is 0. - - The given \a palette specifies the shading colors. The panel - appears sunken if \a sunken is true, otherwise raised. - - \warning This function does not look at QWidget::style() or - QApplication::style(). Use the drawing functions in QStyle to make - widgets that follow the current GUI style. - - Alternatively you can use a QFrame widget and apply the - QFrame::setFrameStyle() function to display a shaded panel: - - \snippet code/src_gui_painting_qdrawutil.cpp 8 - - \sa qDrawShadePanel(), qDrawWinButton(), QStyle -*/ - -void qDrawWinPanel(QPainter *p, const QRect &r, - const QPalette &pal, bool sunken, const QBrush *fill) -{ - qDrawWinPanel(p, r.x(), r.y(), r.width(), r.height(), pal, sunken, fill); -} - -/*! - \fn void qDrawPlainRect(QPainter *painter, const QRect &rect, const QColor &lineColor, int lineWidth, const QBrush *fill) - \relates - \overload - - Draws the plain rectangle specified by \a rect using the given \a painter, - \a lineColor and \a lineWidth. The rectangle's interior is filled with the - \a fill brush unless \a fill is 0. - - \warning This function does not look at QWidget::style() or - QApplication::style(). Use the drawing functions in QStyle to make - widgets that follow the current GUI style. - - Alternatively you can use a QFrame widget and apply the - QFrame::setFrameStyle() function to display a plain rectangle: - - \snippet code/src_gui_painting_qdrawutil.cpp 9 - - \sa qDrawShadeRect(), QStyle -*/ - -void qDrawPlainRect(QPainter *p, const QRect &r, const QColor &c, - int lineWidth, const QBrush *fill) -{ - qDrawPlainRect(p, r.x(), r.y(), r.width(), r.height(), c, - lineWidth, fill); -} - - -/*! - \class QTileRules - \since 4.6 - - \inmodule QtWidgets - - \brief The QTileRules class provides the rules used to draw a - pixmap or image split into nine segments. - - Spliiting is similar to \l{http://www.w3.org/TR/css3-background/}{CSS3 border-images}. - - \sa Qt::TileRule, QMargins -*/ - -/*! \fn QTileRules::QTileRules(Qt::TileRule horizontalRule, Qt::TileRule verticalRule) - Constructs a QTileRules with the given \a horizontalRule and - \a verticalRule. - */ - -/*! \fn QTileRules::QTileRules(Qt::TileRule rule) - Constructs a QTileRules with the given \a rule used for both - the horizontal rule and the vertical rule. - */ - -/*! - \fn void qDrawBorderPixmap(QPainter *painter, const QRect &target, const QMargins &margins, const QPixmap &pixmap) - \relates - \since 4.6 - - \brief The qDrawBorderPixmap function is for drawing a pixmap into - the margins of a rectangle. - - Draws the given \a pixmap into the given \a target rectangle, using the - given \a painter. The pixmap will be split into nine segments and drawn - according to the \a margins structure. -*/ - -typedef QVarLengthArray QPixmapFragmentsArray; - -/*! - \since 4.6 - - Draws the indicated \a sourceRect rectangle from the given \a pixmap into - the given \a targetRect rectangle, using the given \a painter. The pixmap - will be split into nine segments according to the given \a targetMargins - and \a sourceMargins structures. Finally, the pixmap will be drawn - according to the given \a rules. - - This function is used to draw a scaled pixmap, similar to - \l{http://www.w3.org/TR/css3-background/}{CSS3 border-images} - - \sa Qt::TileRule, QTileRules, QMargins -*/ - -void qDrawBorderPixmap(QPainter *painter, const QRect &targetRect, const QMargins &targetMargins, - const QPixmap &pixmap, const QRect &sourceRect,const QMargins &sourceMargins, - const QTileRules &rules -#ifndef Q_CLANG_QDOC - , QDrawBorderPixmap::DrawingHints hints -#endif - ) -{ - QPainter::PixmapFragment d; - d.opacity = 1.0; - d.rotation = 0.0; - - QPixmapFragmentsArray opaqueData; - QPixmapFragmentsArray translucentData; - - // source center - const int sourceCenterTop = sourceRect.top() + sourceMargins.top(); - const int sourceCenterLeft = sourceRect.left() + sourceMargins.left(); - const int sourceCenterBottom = sourceRect.bottom() - sourceMargins.bottom() + 1; - const int sourceCenterRight = sourceRect.right() - sourceMargins.right() + 1; - const int sourceCenterWidth = sourceCenterRight - sourceCenterLeft; - const int sourceCenterHeight = sourceCenterBottom - sourceCenterTop; - // target center - const int targetCenterTop = targetRect.top() + targetMargins.top(); - const int targetCenterLeft = targetRect.left() + targetMargins.left(); - const int targetCenterBottom = targetRect.bottom() - targetMargins.bottom() + 1; - const int targetCenterRight = targetRect.right() - targetMargins.right() + 1; - const int targetCenterWidth = targetCenterRight - targetCenterLeft; - const int targetCenterHeight = targetCenterBottom - targetCenterTop; - - QVarLengthArray xTarget; // x-coordinates of target rectangles - QVarLengthArray yTarget; // y-coordinates of target rectangles - - int columns = 3; - int rows = 3; - if (rules.horizontal != Qt::StretchTile && sourceCenterWidth != 0) - columns = qMax(3, 2 + qCeil(targetCenterWidth / qreal(sourceCenterWidth))); - if (rules.vertical != Qt::StretchTile && sourceCenterHeight != 0) - rows = qMax(3, 2 + qCeil(targetCenterHeight / qreal(sourceCenterHeight))); - - xTarget.resize(columns + 1); - yTarget.resize(rows + 1); - - bool oldAA = painter->testRenderHint(QPainter::Antialiasing); - if (painter->paintEngine()->type() != QPaintEngine::OpenGL - && painter->paintEngine()->type() != QPaintEngine::OpenGL2 - && oldAA && painter->combinedTransform().type() != QTransform::TxNone) { - painter->setRenderHint(QPainter::Antialiasing, false); - } - - xTarget[0] = targetRect.left(); - xTarget[1] = targetCenterLeft; - xTarget[columns - 1] = targetCenterRight; - xTarget[columns] = targetRect.left() + targetRect.width(); - - yTarget[0] = targetRect.top(); - yTarget[1] = targetCenterTop; - yTarget[rows - 1] = targetCenterBottom; - yTarget[rows] = targetRect.top() + targetRect.height(); - - qreal dx = targetCenterWidth; - qreal dy = targetCenterHeight; - - switch (rules.horizontal) { - case Qt::StretchTile: - dx = targetCenterWidth; - break; - case Qt::RepeatTile: - dx = sourceCenterWidth; - break; - case Qt::RoundTile: - dx = targetCenterWidth / qreal(columns - 2); - break; - } - - for (int i = 2; i < columns - 1; ++i) - xTarget[i] = xTarget[i - 1] + dx; - - switch (rules.vertical) { - case Qt::StretchTile: - dy = targetCenterHeight; - break; - case Qt::RepeatTile: - dy = sourceCenterHeight; - break; - case Qt::RoundTile: - dy = targetCenterHeight / qreal(rows - 2); - break; - } - - for (int i = 2; i < rows - 1; ++i) - yTarget[i] = yTarget[i - 1] + dy; - - // corners - if (targetMargins.top() > 0 && targetMargins.left() > 0 && sourceMargins.top() > 0 && sourceMargins.left() > 0) { // top left - d.x = (0.5 * (xTarget[1] + xTarget[0])); - d.y = (0.5 * (yTarget[1] + yTarget[0])); - d.sourceLeft = sourceRect.left(); - d.sourceTop = sourceRect.top(); - d.width = sourceMargins.left(); - d.height = sourceMargins.top(); - d.scaleX = qreal(xTarget[1] - xTarget[0]) / d.width; - d.scaleY = qreal(yTarget[1] - yTarget[0]) / d.height; - if (hints & QDrawBorderPixmap::OpaqueTopLeft) - opaqueData.append(d); - else - translucentData.append(d); - } - if (targetMargins.top() > 0 && targetMargins.right() > 0 && sourceMargins.top() > 0 && sourceMargins.right() > 0) { // top right - d.x = (0.5 * (xTarget[columns] + xTarget[columns - 1])); - d.y = (0.5 * (yTarget[1] + yTarget[0])); - d.sourceLeft = sourceCenterRight; - d.sourceTop = sourceRect.top(); - d.width = sourceMargins.right(); - d.height = sourceMargins.top(); - d.scaleX = qreal(xTarget[columns] - xTarget[columns - 1]) / d.width; - d.scaleY = qreal(yTarget[1] - yTarget[0]) / d.height; - if (hints & QDrawBorderPixmap::OpaqueTopRight) - opaqueData.append(d); - else - translucentData.append(d); - } - if (targetMargins.bottom() > 0 && targetMargins.left() > 0 && sourceMargins.bottom() > 0 && sourceMargins.left() > 0) { // bottom left - d.x = (0.5 * (xTarget[1] + xTarget[0])); - d.y =(0.5 * (yTarget[rows] + yTarget[rows - 1])); - d.sourceLeft = sourceRect.left(); - d.sourceTop = sourceCenterBottom; - d.width = sourceMargins.left(); - d.height = sourceMargins.bottom(); - d.scaleX = qreal(xTarget[1] - xTarget[0]) / d.width; - d.scaleY = qreal(yTarget[rows] - yTarget[rows - 1]) / d.height; - if (hints & QDrawBorderPixmap::OpaqueBottomLeft) - opaqueData.append(d); - else - translucentData.append(d); - } - if (targetMargins.bottom() > 0 && targetMargins.right() > 0 && sourceMargins.bottom() > 0 && sourceMargins.right() > 0) { // bottom right - d.x = (0.5 * (xTarget[columns] + xTarget[columns - 1])); - d.y = (0.5 * (yTarget[rows] + yTarget[rows - 1])); - d.sourceLeft = sourceCenterRight; - d.sourceTop = sourceCenterBottom; - d.width = sourceMargins.right(); - d.height = sourceMargins.bottom(); - d.scaleX = qreal(xTarget[columns] - xTarget[columns - 1]) / d.width; - d.scaleY = qreal(yTarget[rows] - yTarget[rows - 1]) / d.height; - if (hints & QDrawBorderPixmap::OpaqueBottomRight) - opaqueData.append(d); - else - translucentData.append(d); - } - - // horizontal edges - if (targetCenterWidth > 0 && sourceCenterWidth > 0) { - if (targetMargins.top() > 0 && sourceMargins.top() > 0) { // top - QPixmapFragmentsArray &data = hints & QDrawBorderPixmap::OpaqueTop ? opaqueData : translucentData; - d.sourceLeft = sourceCenterLeft; - d.sourceTop = sourceRect.top(); - d.width = sourceCenterWidth; - d.height = sourceMargins.top(); - d.y = (0.5 * (yTarget[1] + yTarget[0])); - d.scaleX = dx / d.width; - d.scaleY = qreal(yTarget[1] - yTarget[0]) / d.height; - for (int i = 1; i < columns - 1; ++i) { - d.x = (0.5 * (xTarget[i + 1] + xTarget[i])); - data.append(d); - } - if (rules.horizontal == Qt::RepeatTile) - data[data.size() - 1].width = ((xTarget[columns - 1] - xTarget[columns - 2]) / d.scaleX); - } - if (targetMargins.bottom() > 0 && sourceMargins.bottom() > 0) { // bottom - QPixmapFragmentsArray &data = hints & QDrawBorderPixmap::OpaqueBottom ? opaqueData : translucentData; - d.sourceLeft = sourceCenterLeft; - d.sourceTop = sourceCenterBottom; - d.width = sourceCenterWidth; - d.height = sourceMargins.bottom(); - d.y = (0.5 * (yTarget[rows] + yTarget[rows - 1])); - d.scaleX = dx / d.width; - d.scaleY = qreal(yTarget[rows] - yTarget[rows - 1]) / d.height; - for (int i = 1; i < columns - 1; ++i) { - d.x = (0.5 * (xTarget[i + 1] + xTarget[i])); - data.append(d); - } - if (rules.horizontal == Qt::RepeatTile) - data[data.size() - 1].width = ((xTarget[columns - 1] - xTarget[columns - 2]) / d.scaleX); - } - } - - // vertical edges - if (targetCenterHeight > 0 && sourceCenterHeight > 0) { - if (targetMargins.left() > 0 && sourceMargins.left() > 0) { // left - QPixmapFragmentsArray &data = hints & QDrawBorderPixmap::OpaqueLeft ? opaqueData : translucentData; - d.sourceLeft = sourceRect.left(); - d.sourceTop = sourceCenterTop; - d.width = sourceMargins.left(); - d.height = sourceCenterHeight; - d.x = (0.5 * (xTarget[1] + xTarget[0])); - d.scaleX = qreal(xTarget[1] - xTarget[0]) / d.width; - d.scaleY = dy / d.height; - for (int i = 1; i < rows - 1; ++i) { - d.y = (0.5 * (yTarget[i + 1] + yTarget[i])); - data.append(d); - } - if (rules.vertical == Qt::RepeatTile) - data[data.size() - 1].height = ((yTarget[rows - 1] - yTarget[rows - 2]) / d.scaleY); - } - if (targetMargins.right() > 0 && sourceMargins.right() > 0) { // right - QPixmapFragmentsArray &data = hints & QDrawBorderPixmap::OpaqueRight ? opaqueData : translucentData; - d.sourceLeft = sourceCenterRight; - d.sourceTop = sourceCenterTop; - d.width = sourceMargins.right(); - d.height = sourceCenterHeight; - d.x = (0.5 * (xTarget[columns] + xTarget[columns - 1])); - d.scaleX = qreal(xTarget[columns] - xTarget[columns - 1]) / d.width; - d.scaleY = dy / d.height; - for (int i = 1; i < rows - 1; ++i) { - d.y = (0.5 * (yTarget[i + 1] + yTarget[i])); - data.append(d); - } - if (rules.vertical == Qt::RepeatTile) - data[data.size() - 1].height = ((yTarget[rows - 1] - yTarget[rows - 2]) / d.scaleY); - } - } - - // center - if (targetCenterWidth > 0 && targetCenterHeight > 0 && sourceCenterWidth > 0 && sourceCenterHeight > 0) { - QPixmapFragmentsArray &data = hints & QDrawBorderPixmap::OpaqueCenter ? opaqueData : translucentData; - d.sourceLeft = sourceCenterLeft; - d.sourceTop = sourceCenterTop; - d.width = sourceCenterWidth; - d.height = sourceCenterHeight; - d.scaleX = dx / d.width; - d.scaleY = dy / d.height; - - qreal repeatWidth = (xTarget[columns - 1] - xTarget[columns - 2]) / d.scaleX; - qreal repeatHeight = (yTarget[rows - 1] - yTarget[rows - 2]) / d.scaleY; - - for (int j = 1; j < rows - 1; ++j) { - d.y = (0.5 * (yTarget[j + 1] + yTarget[j])); - for (int i = 1; i < columns - 1; ++i) { - d.x = (0.5 * (xTarget[i + 1] + xTarget[i])); - data.append(d); - } - if (rules.horizontal == Qt::RepeatTile) - data[data.size() - 1].width = repeatWidth; - } - if (rules.vertical == Qt::RepeatTile) { - for (int i = 1; i < columns - 1; ++i) - data[data.size() - i].height = repeatHeight; - } - } - - if (opaqueData.size()) - painter->drawPixmapFragments(opaqueData.data(), opaqueData.size(), pixmap, QPainter::OpaqueHint); - if (translucentData.size()) - painter->drawPixmapFragments(translucentData.data(), translucentData.size(), pixmap); - - if (oldAA) - painter->setRenderHint(QPainter::Antialiasing, true); -} - -} // namespace QQC2 - -QT_END_NAMESPACE diff --git a/src/imports/nativestyle/qstyle/qquickdrawutil.h b/src/imports/nativestyle/qstyle/qquickdrawutil.h deleted file mode 100644 index 4f7a6c2e..00000000 --- a/src/imports/nativestyle/qstyle/qquickdrawutil.h +++ /dev/null @@ -1,170 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QDRAWUTIL_H -#define QDRAWUTIL_H - -#include -#include // char*->QString conversion -#include -#include - -QT_BEGIN_NAMESPACE - - -class QPainter; -class QPalette; -class QPoint; -class QColor; -class QBrush; -class QRect; - -namespace QQC2 { - -// -// Standard shade drawing -// - -void qDrawShadeLine(QPainter *p, int x1, int y1, int x2, int y2, - const QPalette &pal, bool sunken = true, - int lineWidth = 1, int midLineWidth = 0); - -void qDrawShadeLine(QPainter *p, const QPoint &p1, const QPoint &p2, - const QPalette &pal, bool sunken = true, - int lineWidth = 1, int midLineWidth = 0); - -void qDrawShadeRect(QPainter *p, int x, int y, int w, int h, - const QPalette &pal, bool sunken = false, - int lineWidth = 1, int midLineWidth = 0, - const QBrush *fill = nullptr); - -void qDrawShadeRect(QPainter *p, const QRect &r, - const QPalette &pal, bool sunken = false, - int lineWidth = 1, int midLineWidth = 0, - const QBrush *fill = nullptr); - -void qDrawShadePanel(QPainter *p, int x, int y, int w, int h, - const QPalette &pal, bool sunken = false, - int lineWidth = 1, const QBrush *fill = nullptr); - -void qDrawShadePanel(QPainter *p, const QRect &r, - const QPalette &pal, bool sunken = false, - int lineWidth = 1, const QBrush *fill = nullptr); - -void qDrawWinButton(QPainter *p, int x, int y, int w, int h, - const QPalette &pal, bool sunken = false, - const QBrush *fill = nullptr); - -void qDrawWinButton(QPainter *p, const QRect &r, - const QPalette &pal, bool sunken = false, - const QBrush *fill = nullptr); - -void qDrawWinPanel(QPainter *p, int x, int y, int w, int h, - const QPalette &pal, bool sunken = false, - const QBrush *fill = nullptr); - -void qDrawWinPanel(QPainter *p, const QRect &r, - const QPalette &pal, bool sunken = false, - const QBrush *fill = nullptr); - -void qDrawPlainRect(QPainter *p, int x, int y, int w, int h, const QColor &, - int lineWidth = 1, const QBrush *fill = nullptr); - -void qDrawPlainRect(QPainter *p, const QRect &r, const QColor &, - int lineWidth = 1, const QBrush *fill = nullptr); - - - -struct QTileRules -{ - inline QTileRules(Qt::TileRule horizontalRule, Qt::TileRule verticalRule) - : horizontal(horizontalRule), vertical(verticalRule) {} - inline QTileRules(Qt::TileRule rule = Qt::StretchTile) - : horizontal(rule), vertical(rule) {} - Qt::TileRule horizontal; - Qt::TileRule vertical; -}; - -#ifndef Q_CLANG_QDOC -// For internal use only. -namespace QDrawBorderPixmap -{ - enum DrawingHint - { - OpaqueTopLeft = 0x0001, - OpaqueTop = 0x0002, - OpaqueTopRight = 0x0004, - OpaqueLeft = 0x0008, - OpaqueCenter = 0x0010, - OpaqueRight = 0x0020, - OpaqueBottomLeft = 0x0040, - OpaqueBottom = 0x0080, - OpaqueBottomRight = 0x0100, - OpaqueCorners = OpaqueTopLeft | OpaqueTopRight | OpaqueBottomLeft | OpaqueBottomRight, - OpaqueEdges = OpaqueTop | OpaqueLeft | OpaqueRight | OpaqueBottom, - OpaqueFrame = OpaqueCorners | OpaqueEdges, - OpaqueAll = OpaqueCenter | OpaqueFrame - }; - - Q_DECLARE_FLAGS(DrawingHints, DrawingHint) -} -#endif - -void qDrawBorderPixmap(QPainter *painter, - const QRect &targetRect, - const QMargins &targetMargins, - const QPixmap &pixmap, - const QRect &sourceRect, - const QMargins &sourceMargins, - const QTileRules &rules = QTileRules() -#ifndef Q_CLANG_QDOC - , QDrawBorderPixmap::DrawingHints hints = QDrawBorderPixmap::DrawingHints() -#endif - ); - -inline void qDrawBorderPixmap(QPainter *painter, - const QRect &target, - const QMargins &margins, - const QPixmap &pixmap) -{ - qDrawBorderPixmap(painter, target, margins, pixmap, pixmap.rect(), margins); -} - -} // namespace QQC2 - -QT_END_NAMESPACE - -#endif // QDRAWUTIL_H diff --git a/src/imports/nativestyle/qstyle/qquicknativestyle.cpp b/src/imports/nativestyle/qstyle/qquicknativestyle.cpp deleted file mode 100644 index 7a2030e0..00000000 --- a/src/imports/nativestyle/qstyle/qquicknativestyle.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquicknativestyle.h" - -QT_BEGIN_NAMESPACE - -namespace QQC2 { - -QStyle *QQuickNativeStyle::s_style = nullptr; - -} // namespace QQC2 - -QT_END_NAMESPACE diff --git a/src/imports/nativestyle/qstyle/qquicknativestyle.h b/src/imports/nativestyle/qstyle/qquicknativestyle.h deleted file mode 100644 index 13c313f0..00000000 --- a/src/imports/nativestyle/qstyle/qquicknativestyle.h +++ /dev/null @@ -1,69 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKNATIVESTYLE_H -#define QQUICKNATIVESTYLE_H - -#include "qquickstyle.h" - -QT_BEGIN_NAMESPACE - -namespace QQC2 { - -class QQuickNativeStyle -{ -public: - static void setStyle(QStyle *style) - { - if (s_style) - delete s_style; - s_style = style; - } - - inline static QStyle *style() - { - return s_style; - } - -private: - static QStyle *s_style; -}; - -} // namespace QQC2 - -QT_END_NAMESPACE - -#endif // QQUICKNATIVESTYLE_H diff --git a/src/imports/nativestyle/qstyle/qquickstyle.cpp b/src/imports/nativestyle/qstyle/qquickstyle.cpp deleted file mode 100644 index 2278fb65..00000000 --- a/src/imports/nativestyle/qstyle/qquickstyle.cpp +++ /dev/null @@ -1,412 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickstyle.h" -#include "qquickstyle_p.h" -#include "qquickstyleoption.h" - -#include -#include -#include -#include - -#include - -#ifndef QT_NO_DEBUG -# include -#endif - -#include -#include - -QT_BEGIN_NAMESPACE - -namespace QQC2 { - -/*! - Constructs a style object. -*/ -QStyle::QStyle() - : QObject(*new QStylePrivate) -{ - Q_D(QStyle); - d->proxyStyle = this; -} - -/*! - \internal - - Constructs a style object. -*/ -QStyle::QStyle(QStylePrivate &dd) - : QObject(dd) -{ - Q_D(QStyle); - d->proxyStyle = this; -} - -/*! - Destroys the style object. -*/ -QStyle::~QStyle() -{ -} - -/*! - \fn QRect QStyle::itemTextRect(const QFontMetrics &metrics, const QRect &rectangle, int alignment, bool enabled, const QString &text) const - - Returns the area within the given \a rectangle in which to draw - the provided \a text according to the specified font \a metrics - and \a alignment. The \a enabled parameter indicates whether or - not the associated item is enabled. - - If the given \a rectangle is larger than the area needed to render - the \a text, the rectangle that is returned will be offset within - \a rectangle according to the specified \a alignment. For - example, if \a alignment is Qt::AlignCenter, the returned - rectangle will be centered within \a rectangle. If the given \a - rectangle is smaller than the area needed, the returned rectangle - will be the smallest rectangle large enough to render the \a text. - - \sa Qt::Alignment -*/ -QRect QStyle::itemTextRect(const QFontMetrics &metrics, const QRect &rect, int alignment, bool enabled, - const QString &text) const -{ - QRect result; - int x, y, w, h; - rect.getRect(&x, &y, &w, &h); - if (!text.isEmpty()) { - result = metrics.boundingRect(x, y, w, h, alignment, text); - if (!enabled && proxy()->styleHint(SH_EtchDisabledText)) { - result.setWidth(result.width()+1); - result.setHeight(result.height()+1); - } - } else { - result = QRect(x, y, w, h); - } - return result; -} - -/*! - \fn QRect QStyle::itemPixmapRect(const QRect &rectangle, int alignment, const QPixmap &pixmap) const - - Returns the area within the given \a rectangle in which to draw - the specified \a pixmap according to the defined \a alignment. -*/ -QRect QStyle::itemPixmapRect(const QRect &rect, int alignment, const QPixmap &pixmap) const -{ - QRect result; - int x, y, w, h; - rect.getRect(&x, &y, &w, &h); - - const int pixmapWidth = pixmap.width()/pixmap.devicePixelRatio(); - const int pixmapHeight = pixmap.height()/pixmap.devicePixelRatio(); - - if ((alignment & Qt::AlignVCenter) == Qt::AlignVCenter) - y += h/2 - pixmapHeight/2; - else if ((alignment & Qt::AlignBottom) == Qt::AlignBottom) - y += h - pixmapHeight; - if ((alignment & Qt::AlignRight) == Qt::AlignRight) - x += w - pixmapWidth; - else if ((alignment & Qt::AlignHCenter) == Qt::AlignHCenter) - x += w/2 - pixmapWidth/2; - else if ((alignment & Qt::AlignLeft) != Qt::AlignLeft && QGuiApplication::isRightToLeft()) - x += w - pixmapWidth; - result = QRect(x, y, pixmapWidth, pixmapHeight); - return result; -} - -/*! - \fn void QStyle::drawItemText(QPainter *painter, const QRect &rectangle, int alignment, const QPalette &palette, bool enabled, const QString& text, QPalette::ColorRole textRole) const - - Draws the given \a text in the specified \a rectangle using the - provided \a painter and \a palette. - - The text is drawn using the painter's pen, and aligned and wrapped - according to the specified \a alignment. If an explicit \a - textRole is specified, the text is drawn using the \a palette's - color for the given role. The \a enabled parameter indicates - whether or not the item is enabled; when reimplementing this - function, the \a enabled parameter should influence how the item is - drawn. - - \sa Qt::Alignment, drawItemPixmap() -*/ -void QStyle::drawItemText(QPainter *painter, const QRect &rect, int alignment, const QPalette &pal, - bool enabled, const QString& text, QPalette::ColorRole textRole) const -{ - if (text.isEmpty()) - return; - QPen savedPen; - if (textRole != QPalette::NoRole) { - savedPen = painter->pen(); - painter->setPen(QPen(pal.brush(textRole), savedPen.widthF())); - } - if (!enabled) { - if (proxy()->styleHint(SH_DitherDisabledText)) { - QRect br; - painter->drawText(rect, alignment, text, &br); - painter->fillRect(br, QBrush(painter->background().color(), Qt::Dense5Pattern)); - return; - } else if (proxy()->styleHint(SH_EtchDisabledText)) { - QPen pen = painter->pen(); - painter->setPen(pal.light().color()); - painter->drawText(rect.adjusted(1, 1, 1, 1), alignment, text); - painter->setPen(pen); - } - } - painter->drawText(rect, alignment, text); - if (textRole != QPalette::NoRole) - painter->setPen(savedPen); -} - -/*! - \fn void QStyle::drawItemPixmap(QPainter *painter, const QRect &rectangle, int alignment, - const QPixmap &pixmap) const - - Draws the given \a pixmap in the specified \a rectangle, according - to the specified \a alignment, using the provided \a painter. - - \sa drawItemText() -*/ - -void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, - const QPixmap &pixmap) const -{ - qreal scale = pixmap.devicePixelRatio(); - QRect aligned = alignedRect(QGuiApplication::layoutDirection(), QFlag(alignment), pixmap.size() / scale, rect); - QRect inter = aligned.intersected(rect); - - painter->drawPixmap(inter.x(), inter.y(), pixmap, inter.x() - aligned.x(), inter.y() - aligned.y(), inter.width() * scale, inter.height() *scale); -} - -/*! - \fn QRect QStyle::visualRect(Qt::LayoutDirection direction, const QRect &boundingRectangle, const QRect &logicalRectangle) - - Returns the given \a logicalRectangle converted to screen - coordinates based on the specified \a direction. The \a - boundingRectangle is used when performing the translation. - - This function is provided to support right-to-left desktops, and - is typically used in implementations of the subControlRect() - function. - - \sa QWidget::layoutDirection -*/ -QRect QStyle::visualRect(Qt::LayoutDirection direction, const QRect &boundingRect, const QRect &logicalRect) -{ - if (direction == Qt::LeftToRight) - return logicalRect; - QRect rect = logicalRect; - rect.translate(2 * (boundingRect.right() - logicalRect.right()) + - logicalRect.width() - boundingRect.width(), 0); - return rect; -} - -/*! - \fn QPoint QStyle::visualPos(Qt::LayoutDirection direction, const QRect &boundingRectangle, const QPoint &logicalPosition) - - Returns the given \a logicalPosition converted to screen - coordinates based on the specified \a direction. The \a - boundingRectangle is used when performing the translation. - - \sa QWidget::layoutDirection -*/ -QPoint QStyle::visualPos(Qt::LayoutDirection direction, const QRect &boundingRect, const QPoint &logicalPos) -{ - if (direction == Qt::LeftToRight) - return logicalPos; - return QPoint(boundingRect.right() - logicalPos.x(), logicalPos.y()); -} - -/*! - Returns a new rectangle of the specified \a size that is aligned to the given \a - rectangle according to the specified \a alignment and \a direction. - */ -QRect QStyle::alignedRect(Qt::LayoutDirection direction, Qt::Alignment alignment, const QSize &size, const QRect &rectangle) -{ - alignment = visualAlignment(direction, alignment); - int x = rectangle.x(); - int y = rectangle.y(); - int w = size.width(); - int h = size.height(); - if ((alignment & Qt::AlignVCenter) == Qt::AlignVCenter) - y += rectangle.size().height()/2 - h/2; - else if ((alignment & Qt::AlignBottom) == Qt::AlignBottom) - y += rectangle.size().height() - h; - if ((alignment & Qt::AlignRight) == Qt::AlignRight) - x += rectangle.size().width() - w; - else if ((alignment & Qt::AlignHCenter) == Qt::AlignHCenter) - x += rectangle.size().width()/2 - w/2; - return QRect(x, y, w, h); -} - -/*! - Transforms an \a alignment of Qt::AlignLeft or Qt::AlignRight - without Qt::AlignAbsolute into Qt::AlignLeft or Qt::AlignRight with - Qt::AlignAbsolute according to the layout \a direction. The other - alignment flags are left untouched. - - If no horizontal alignment was specified, the function returns the - default alignment for the given layout \a direction. - - QWidget::layoutDirection -*/ -Qt::Alignment QStyle::visualAlignment(Qt::LayoutDirection direction, Qt::Alignment alignment) -{ - return QGuiApplicationPrivate::visualAlignment(direction, alignment); -} - -/*! - Converts the given \a logicalValue to a pixel position. The \a min - parameter maps to 0, \a max maps to \a span and other values are - distributed evenly in-between. - - This function can handle the entire integer range without - overflow, providing that \a span is less than 4096. - - By default, this function assumes that the maximum value is on the - right for horizontal items and on the bottom for vertical items. - Set the \a upsideDown parameter to true to reverse this behavior. - - \sa sliderValueFromPosition() -*/ - -int QStyle::sliderPositionFromValue(int min, int max, int logicalValue, int span, bool upsideDown) -{ - if (span <= 0 || logicalValue < min || max <= min) - return 0; - if (logicalValue > max) - return upsideDown ? span : min; - - uint range = max - min; - uint p = upsideDown ? max - logicalValue : logicalValue - min; - - if (range > (uint)INT_MAX/4096) { - double dpos = (double(p))/(double(range)/span); - return int(dpos); - } else if (range > (uint)span) { - return (2 * p * span + range) / (2*range); - } else { - uint div = span / range; - uint mod = span % range; - return p * div + (2 * p * mod + range) / (2 * range); - } - // equiv. to (p * span) / range + 0.5 - // no overflow because of this implicit assumption: - // span <= 4096 -} - -/*! - \fn int QStyle::sliderValueFromPosition(int min, int max, int position, int span, bool upsideDown) - - Converts the given pixel \a position to a logical value. 0 maps to - the \a min parameter, \a span maps to \a max and other values are - distributed evenly in-between. - - This function can handle the entire integer range without - overflow. - - By default, this function assumes that the maximum value is on the - right for horizontal items and on the bottom for vertical - items. Set the \a upsideDown parameter to true to reverse this - behavior. - - \sa sliderPositionFromValue() -*/ - -int QStyle::sliderValueFromPosition(int min, int max, int pos, int span, bool upsideDown) -{ - if (span <= 0 || pos <= 0) - return upsideDown ? max : min; - if (pos >= span) - return upsideDown ? min : max; - - uint range = max - min; - - if ((uint)span > range) { - int tmp = (2 * pos * range + span) / (2 * span); - return upsideDown ? max - tmp : tmp + min; - } else { - uint div = range / span; - uint mod = range % span; - int tmp = pos * div + (2 * pos * mod + span) / (2 * span); - return upsideDown ? max - tmp : tmp + min; - } - // equiv. to min + (pos*range)/span + 0.5 - // no overflow because of this implicit assumption: - // pos <= span < sqrt(INT_MAX+0.0625)+0.25 ~ sqrt(INT_MAX) -} - -/*! - Returns the style's standard palette. - - Note that on systems that support system colors, the style's - standard palette is not used. In particular, the Windows - Vista and Mac styles do not use the standard palette, but make - use of native theme engines. With these styles, you should not set - the palette with QApplication::setPalette(). - - \sa QApplication::setPalette() - */ -QPalette QStyle::standardPalette() const -{ - QColor background = QColor(0xd4, 0xd0, 0xc8); // win 2000 grey - - QColor light(background.lighter()); - QColor dark(background.darker()); - QColor mid(Qt::gray); - QPalette palette(Qt::black, background, light, dark, mid, Qt::black, Qt::white); - palette.setBrush(QPalette::Disabled, QPalette::WindowText, dark); - palette.setBrush(QPalette::Disabled, QPalette::Text, dark); - palette.setBrush(QPalette::Disabled, QPalette::ButtonText, dark); - palette.setBrush(QPalette::Disabled, QPalette::Base, background); - return palette; -} - -//Windows and KDE allow menus to cover the taskbar, while GNOME and macOS don't -bool QStylePrivate::useFullScreenForPopup() -{ - auto theme = QGuiApplicationPrivate::platformTheme(); - return theme && theme->themeHint(QPlatformTheme::UseFullScreenForPopupMenu).toBool(); -} - -} // namespace QQC2 - -QT_END_NAMESPACE - -#include "moc_qquickstyle.cpp" diff --git a/src/imports/nativestyle/qstyle/qquickstyle.h b/src/imports/nativestyle/qstyle/qquickstyle.h deleted file mode 100644 index 38a0dcf5..00000000 --- a/src/imports/nativestyle/qstyle/qquickstyle.h +++ /dev/null @@ -1,839 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QSTYLE_H -#define QSTYLE_H - -#include -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class QAction; -class QDebug; -class QFontMetrics; - -namespace QQC2 { - -class QStyleHintReturn; -class QStyleOption; -class QStyleOptionComplex; -class QStylePrivate; - -class QStyle : public QObject -{ - Q_OBJECT - Q_DECLARE_PRIVATE(QStyle) - -protected: - QStyle(QStylePrivate &dd); - -public: - QStyle(); - virtual ~QStyle(); - - enum StateFlag { - State_None = 0x00000000, - State_Enabled = 0x00000001, - State_Raised = 0x00000002, - State_Sunken = 0x00000004, - State_Off = 0x00000008, - State_NoChange = 0x00000010, - State_On = 0x00000020, - State_DownArrow = 0x00000040, - State_Horizontal = 0x00000080, - State_HasFocus = 0x00000100, - State_Top = 0x00000200, - State_Bottom = 0x00000400, - State_FocusAtBorder = 0x00000800, - State_AutoRaise = 0x00001000, - State_MouseOver = 0x00002000, - State_UpArrow = 0x00004000, - State_Selected = 0x00008000, - State_Active = 0x00010000, - State_Window = 0x00020000, - State_Open = 0x00040000, - State_Children = 0x00080000, - State_Item = 0x00100000, - State_Sibling = 0x00200000, - State_Editing = 0x00400000, - State_KeyboardFocusChange = 0x00800000, -#ifdef QT_KEYPAD_NAVIGATION - State_HasEditFocus = 0x01000000, -#endif - State_ReadOnly = 0x02000000, - State_Small = 0x04000000, - State_Mini = 0x08000000 - }; - Q_ENUM(StateFlag) - Q_DECLARE_FLAGS(State, StateFlag) - - enum PrimitiveElement { - PE_Frame, - PE_FrameDefaultButton, - PE_FrameDockWidget, - PE_FrameFocusRect, - PE_FrameGroupBox, - PE_FrameLineEdit, - PE_FrameMenu, - PE_FrameStatusBarItem, - PE_FrameTabWidget, - PE_FrameWindow, - PE_FrameButtonBevel, - PE_FrameButtonTool, - PE_FrameTabBarBase, - - PE_PanelButtonCommand, - PE_PanelButtonBevel, - PE_PanelButtonTool, - PE_PanelMenuBar, - PE_PanelToolBar, - PE_PanelLineEdit, - - PE_IndicatorArrowDown, - PE_IndicatorArrowLeft, - PE_IndicatorArrowRight, - PE_IndicatorArrowUp, - PE_IndicatorBranch, - PE_IndicatorButtonDropDown, - PE_IndicatorItemViewItemCheck, - PE_IndicatorCheckBox, - PE_IndicatorDockWidgetResizeHandle, - PE_IndicatorHeaderArrow, - PE_IndicatorMenuCheckMark, - PE_IndicatorProgressChunk, - PE_IndicatorRadioButton, - PE_IndicatorSpinDown, - PE_IndicatorSpinMinus, - PE_IndicatorSpinPlus, - PE_IndicatorSpinUp, - PE_IndicatorToolBarHandle, - PE_IndicatorToolBarSeparator, - PE_PanelTipLabel, - PE_IndicatorTabTear, - PE_IndicatorTabTearLeft = PE_IndicatorTabTear, - PE_PanelScrollAreaCorner, - - PE_Widget, - - PE_IndicatorColumnViewArrow, - PE_IndicatorItemViewItemDrop, - - PE_PanelItemViewItem, - PE_PanelItemViewRow, // ### Qt 6: remove - - PE_PanelStatusBar, - - PE_IndicatorTabClose, - PE_PanelMenu, - - PE_IndicatorTabTearRight, - - // do not add any values below/greater this - PE_CustomBase = 0xf000000 - }; - Q_ENUM(PrimitiveElement) - - enum ControlElement { - CE_PushButton, - CE_PushButtonBevel, - CE_PushButtonLabel, - - CE_CheckBox, - CE_CheckBoxLabel, - - CE_RadioButton, - CE_RadioButtonLabel, - - CE_TabBarTab, - CE_TabBarTabShape, - CE_TabBarTabLabel, - - CE_ProgressBar, - CE_ProgressBarGroove, - CE_ProgressBarContents, - CE_ProgressBarLabel, - - CE_MenuItem, - CE_MenuScroller, - CE_MenuVMargin, - CE_MenuHMargin, - CE_MenuTearoff, - CE_MenuEmptyArea, - - CE_MenuBarItem, - CE_MenuBarEmptyArea, - - CE_ToolButtonLabel, - - CE_Header, - CE_HeaderSection, - CE_HeaderLabel, - - CE_ToolBoxTab, - CE_SizeGrip, - CE_Splitter, - CE_RubberBand, - CE_DockWidgetTitle, - - CE_ScrollBarAddLine, - CE_ScrollBarSubLine, - CE_ScrollBarAddPage, - CE_ScrollBarSubPage, - CE_ScrollBarSlider, - CE_ScrollBarFirst, - CE_ScrollBarLast, - - CE_FocusFrame, - CE_ComboBoxLabel, - - CE_ToolBar, - CE_ToolBoxTabShape, - CE_ToolBoxTabLabel, - CE_HeaderEmptyArea, - - CE_ColumnViewGrip, - - CE_ItemViewItem, - - CE_ShapedFrame, - - // do not add any values below/greater than this - CE_CustomBase = 0xf0000000 - }; - Q_ENUM(ControlElement) - - enum SubElement { - SE_PushButtonContents, - SE_PushButtonFocusRect, - - SE_CheckBoxIndicator, - SE_CheckBoxContents, - SE_CheckBoxFocusRect, - SE_CheckBoxClickRect, - - SE_RadioButtonIndicator, - SE_RadioButtonContents, - SE_RadioButtonFocusRect, - SE_RadioButtonClickRect, - - SE_ComboBoxFocusRect, - - SE_SliderFocusRect, - - SE_ProgressBarGroove, - SE_ProgressBarContents, - SE_ProgressBarLabel, - - SE_ToolBoxTabContents, - - SE_HeaderLabel, - SE_HeaderArrow, - - SE_TabWidgetTabBar, - SE_TabWidgetTabPane, - SE_TabWidgetTabContents, - SE_TabWidgetLeftCorner, - SE_TabWidgetRightCorner, - - SE_ItemViewItemCheckIndicator, - SE_TabBarTearIndicator, - SE_TabBarTearIndicatorLeft = SE_TabBarTearIndicator, - - SE_TreeViewDisclosureItem, - - SE_LineEditContents, - SE_FrameContents, - - SE_DockWidgetCloseButton, - SE_DockWidgetFloatButton, - SE_DockWidgetTitleBarText, - SE_DockWidgetIcon, - - SE_CheckBoxLayoutItem, - SE_ComboBoxLayoutItem, - SE_DateTimeEditLayoutItem, - SE_LabelLayoutItem, - SE_ProgressBarLayoutItem, - SE_PushButtonLayoutItem, - SE_RadioButtonLayoutItem, - SE_SliderLayoutItem, - SE_ScrollBarLayoutItem, - SE_SpinBoxLayoutItem, - SE_ToolButtonLayoutItem, - - SE_FrameLayoutItem, - SE_GroupBoxLayoutItem, - SE_TabWidgetLayoutItem, - - SE_ItemViewItemDecoration, - SE_ItemViewItemText, - SE_ItemViewItemFocusRect, - - SE_TabBarTabLeftButton, - SE_TabBarTabRightButton, - SE_TabBarTabText, - - SE_ShapedFrameContents, - - SE_ToolBarHandle, - - SE_TabBarScrollLeftButton, - SE_TabBarScrollRightButton, - SE_TabBarTearIndicatorRight, - - // do not add any values below/greater than this - SE_CustomBase = 0xf0000000 - }; - Q_ENUM(SubElement) - - enum ComplexControl { - CC_SpinBox, - CC_ComboBox, - CC_ScrollBar, - CC_Slider, - CC_ToolButton, - CC_TitleBar, - CC_Dial, - CC_GroupBox, - CC_MdiControls, - - // do not add any values below/greater than this - CC_CustomBase = 0xf0000000 - }; - Q_ENUM(ComplexControl) - - enum SubControl { - SC_None = 0x00000000, - - SC_ScrollBarAddLine = 0x00000001, - SC_ScrollBarSubLine = 0x00000002, - SC_ScrollBarAddPage = 0x00000004, - SC_ScrollBarSubPage = 0x00000008, - SC_ScrollBarFirst = 0x00000010, - SC_ScrollBarLast = 0x00000020, - SC_ScrollBarSlider = 0x00000040, - SC_ScrollBarGroove = 0x00000080, - - SC_SpinBoxUp = 0x00000001, - SC_SpinBoxDown = 0x00000002, - SC_SpinBoxFrame = 0x00000004, - SC_SpinBoxEditField = 0x00000008, - - SC_ComboBoxFrame = 0x00000001, - SC_ComboBoxEditField = 0x00000002, - SC_ComboBoxArrow = 0x00000004, - SC_ComboBoxListBoxPopup = 0x00000008, - - SC_SliderGroove = 0x00000001, - SC_SliderHandle = 0x00000002, - SC_SliderTickmarks = 0x00000004, - - SC_ToolButton = 0x00000001, - SC_ToolButtonMenu = 0x00000002, - - SC_TitleBarSysMenu = 0x00000001, - SC_TitleBarMinButton = 0x00000002, - SC_TitleBarMaxButton = 0x00000004, - SC_TitleBarCloseButton = 0x00000008, - SC_TitleBarNormalButton = 0x00000010, - SC_TitleBarShadeButton = 0x00000020, - SC_TitleBarUnshadeButton = 0x00000040, - SC_TitleBarContextHelpButton = 0x00000080, - SC_TitleBarLabel = 0x00000100, - - SC_DialGroove = 0x00000001, - SC_DialHandle = 0x00000002, - SC_DialTickmarks = 0x00000004, - - SC_GroupBoxCheckBox = 0x00000001, - SC_GroupBoxLabel = 0x00000002, - SC_GroupBoxContents = 0x00000004, - SC_GroupBoxFrame = 0x00000008, - - SC_MdiMinButton = 0x00000001, - SC_MdiNormalButton = 0x00000002, - SC_MdiCloseButton = 0x00000004, - - SC_CustomBase = 0xf0000000, - SC_All = 0xffffffff - }; - Q_ENUM(SubControl) - Q_DECLARE_FLAGS(SubControls, SubControl) - - enum PixelMetric { - PM_ButtonMargin, - PM_ButtonDefaultIndicator, - PM_MenuButtonIndicator, - PM_ButtonShiftHorizontal, - PM_ButtonShiftVertical, - - PM_DefaultFrameWidth, - PM_SpinBoxFrameWidth, - PM_ComboBoxFrameWidth, - - PM_MaximumDragDistance, - - PM_ScrollBarExtent, - PM_ScrollBarSliderMin, - - PM_SliderThickness, // total slider thickness - PM_SliderControlThickness, // thickness of the business part - PM_SliderLength, // total length of slider - PM_SliderTickmarkOffset, // - PM_SliderSpaceAvailable, // available space for slider to move - - PM_DockWidgetSeparatorExtent, - PM_DockWidgetHandleExtent, - PM_DockWidgetFrameWidth, - - PM_TabBarTabOverlap, - PM_TabBarTabHSpace, - PM_TabBarTabVSpace, - PM_TabBarBaseHeight, - PM_TabBarBaseOverlap, - - PM_ProgressBarChunkWidth, - - PM_SplitterWidth, - PM_TitleBarHeight, - - PM_MenuScrollerHeight, - PM_MenuHMargin, - PM_MenuVMargin, - PM_MenuPanelWidth, - PM_MenuTearoffHeight, - PM_MenuDesktopFrameWidth, - - PM_MenuBarPanelWidth, - PM_MenuBarItemSpacing, - PM_MenuBarVMargin, - PM_MenuBarHMargin, - - PM_IndicatorWidth, - PM_IndicatorHeight, - PM_ExclusiveIndicatorWidth, - PM_ExclusiveIndicatorHeight, - - PM_DialogButtonsSeparator, - PM_DialogButtonsButtonWidth, - PM_DialogButtonsButtonHeight, - - PM_MdiSubWindowFrameWidth, - PM_MdiSubWindowMinimizedWidth, - - PM_HeaderMargin, - PM_HeaderMarkSize, - PM_HeaderGripMargin, - PM_TabBarTabShiftHorizontal, - PM_TabBarTabShiftVertical, - PM_TabBarScrollButtonWidth, - - PM_ToolBarFrameWidth, - PM_ToolBarHandleExtent, - PM_ToolBarItemSpacing, - PM_ToolBarItemMargin, - PM_ToolBarSeparatorExtent, - PM_ToolBarExtensionExtent, - - PM_SpinBoxSliderHeight, - - PM_DefaultTopLevelMargin, - PM_DefaultChildMargin, - PM_DefaultLayoutSpacing, - - PM_ToolBarIconSize, - PM_ListViewIconSize, - PM_IconViewIconSize, - PM_SmallIconSize, - PM_LargeIconSize, - - PM_FocusFrameVMargin, - PM_FocusFrameHMargin, - - PM_ToolTipLabelFrameWidth, - PM_CheckBoxLabelSpacing, - PM_TabBarIconSize, - PM_SizeGripSize, - PM_DockWidgetTitleMargin, - PM_MessageBoxIconSize, - PM_ButtonIconSize, - - PM_DockWidgetTitleBarButtonMargin, - - PM_RadioButtonLabelSpacing, - PM_LayoutLeftMargin, - PM_LayoutTopMargin, - PM_LayoutRightMargin, - PM_LayoutBottomMargin, - PM_LayoutHorizontalSpacing, - PM_LayoutVerticalSpacing, - PM_TabBar_ScrollButtonOverlap, - - PM_TextCursorWidth, - - PM_TabCloseIndicatorWidth, - PM_TabCloseIndicatorHeight, - - PM_ScrollView_ScrollBarSpacing, - PM_ScrollView_ScrollBarOverlap, - PM_SubMenuOverlap, - PM_TreeViewIndentation, - - PM_HeaderDefaultSectionSizeHorizontal, - PM_HeaderDefaultSectionSizeVertical, - - PM_TitleBarButtonIconSize, - PM_TitleBarButtonSize, - - PM_PushButtonFocusFrameRadius, - PM_CheckBoxFocusFrameRadius, - PM_ComboBoxFocusFrameRadius, - PM_DialFocusFrameRadius, - PM_RadioButtonFocusFrameRadius, - PM_SliderFocusFrameRadius, - PM_SpinBoxFocusFrameRadius, - PM_TextAreaFocusFrameRadius, - PM_TextFieldFocusFrameRadius, - - // do not add any values below/greater than this - PM_CustomBase = 0xf0000000 - }; - Q_ENUM(PixelMetric) - - enum ContentsType { - CT_PushButton, - CT_CheckBox, - CT_RadioButton, - CT_ToolButton, - CT_ComboBox, - CT_Splitter, - CT_ProgressBar, - CT_MenuItem, - CT_MenuBarItem, - CT_MenuBar, - CT_Menu, - CT_TabBarTab, - CT_Slider, - CT_Dial, - CT_ScrollBar, - CT_LineEdit, - CT_SpinBox, - CT_SizeGrip, - CT_TabWidget, - CT_DialogButtons, - CT_HeaderSection, - CT_GroupBox, - CT_MdiControls, - CT_ItemViewItem, - CT_Frame, - // do not add any values below/greater than this - CT_CustomBase = 0xf0000000 - }; - Q_ENUM(ContentsType) - - enum RequestSoftwareInputPanel { - RSIP_OnMouseClickAndAlreadyFocused, - RSIP_OnMouseClick - }; - Q_ENUM(RequestSoftwareInputPanel) - - enum StyleHint { - SH_EtchDisabledText, - SH_DitherDisabledText, - SH_ScrollBar_MiddleClickAbsolutePosition, - SH_ScrollBar_ScrollWhenPointerLeavesControl, - SH_TabBar_SelectMouseType, - SH_TabBar_Alignment, - SH_Header_ArrowAlignment, - SH_Slider_SnapToValue, - SH_Slider_SloppyKeyEvents, - SH_ProgressDialog_CenterCancelButton, - SH_ProgressDialog_TextLabelAlignment, - SH_PrintDialog_RightAlignButtons, - SH_MainWindow_SpaceBelowMenuBar, - SH_FontDialog_SelectAssociatedText, - SH_Menu_AllowActiveAndDisabled, - SH_Menu_SpaceActivatesItem, - SH_Menu_SubMenuPopupDelay, - SH_ScrollView_FrameOnlyAroundContents, - SH_MenuBar_AltKeyNavigation, - SH_ComboBox_ListMouseTracking, - SH_Menu_MouseTracking, - SH_MenuBar_MouseTracking, - SH_ItemView_ChangeHighlightOnFocus, - SH_Widget_ShareActivation, - SH_Workspace_FillSpaceOnMaximize, - SH_ComboBox_Popup, - SH_TitleBar_NoBorder, - SH_Slider_StopMouseOverSlider, - SH_BlinkCursorWhenTextSelected, - SH_RichText_FullWidthSelection, - SH_Menu_Scrollable, - SH_GroupBox_TextLabelVerticalAlignment, - SH_GroupBox_TextLabelColor, - SH_Menu_SloppySubMenus, - SH_Table_GridLineColor, - SH_LineEdit_PasswordCharacter, - SH_DialogButtons_DefaultButton, - SH_ToolBox_SelectedPageTitleBold, - SH_TabBar_PreferNoArrows, - SH_ScrollBar_LeftClickAbsolutePosition, - SH_ListViewExpand_SelectMouseType, - SH_UnderlineShortcut, - SH_SpinBox_AnimateButton, - SH_SpinBox_KeyPressAutoRepeatRate, - SH_SpinBox_ClickAutoRepeatRate, - SH_Menu_FillScreenWithScroll, - SH_ToolTipLabel_Opacity, - SH_DrawMenuBarSeparator, - SH_TitleBar_ModifyNotification, - SH_Button_FocusPolicy, - SH_MessageBox_UseBorderForButtonSpacing, - SH_TitleBar_AutoRaise, - SH_ToolButton_PopupDelay, - SH_FocusFrame_Mask, - SH_RubberBand_Mask, - SH_WindowFrame_Mask, - SH_SpinControls_DisableOnBounds, - SH_Dial_BackgroundRole, - SH_ComboBox_LayoutDirection, - SH_ItemView_EllipsisLocation, - SH_ItemView_ShowDecorationSelected, - SH_ItemView_ActivateItemOnSingleClick, - SH_ScrollBar_ContextMenu, - SH_ScrollBar_RollBetweenButtons, - SH_Slider_AbsoluteSetButtons, - SH_Slider_PageSetButtons, - SH_Menu_KeyboardSearch, - SH_TabBar_ElideMode, - SH_DialogButtonLayout, - SH_ComboBox_PopupFrameStyle, - SH_MessageBox_TextInteractionFlags, - SH_DialogButtonBox_ButtonsHaveIcons, - SH_SpellCheckUnderlineStyle, - SH_MessageBox_CenterButtons, - SH_Menu_SelectionWrap, - SH_ItemView_MovementWithoutUpdatingSelection, - SH_ToolTip_Mask, - SH_FocusFrame_AboveWidget, - SH_TextControl_FocusIndicatorTextCharFormat, - SH_WizardStyle, - SH_ItemView_ArrowKeysNavigateIntoChildren, - SH_Menu_Mask, - SH_Menu_FlashTriggeredItem, - SH_Menu_FadeOutOnHide, - SH_SpinBox_ClickAutoRepeatThreshold, - SH_ItemView_PaintAlternatingRowColorsForEmptyArea, - SH_FormLayoutWrapPolicy, - SH_TabWidget_DefaultTabPosition, - SH_ToolBar_Movable, - SH_FormLayoutFieldGrowthPolicy, - SH_FormLayoutFormAlignment, - SH_FormLayoutLabelAlignment, - SH_ItemView_DrawDelegateFrame, - SH_TabBar_CloseButtonPosition, - SH_DockWidget_ButtonsHaveFrame, - SH_ToolButtonStyle, - SH_RequestSoftwareInputPanel, - SH_ScrollBar_Transient, - SH_Menu_SupportsSections, - SH_ToolTip_WakeUpDelay, - SH_ToolTip_FallAsleepDelay, - SH_Widget_Animate, - SH_Splitter_OpaqueResize, - // Whether we should use a native popup. - // Only supported for non-editable combo boxes on Mac OS X so far. - SH_ComboBox_UseNativePopup, - SH_LineEdit_PasswordMaskDelay, - SH_TabBar_ChangeCurrentDelay, - SH_Menu_SubMenuUniDirection, - SH_Menu_SubMenuUniDirectionFailCount, - SH_Menu_SubMenuSloppySelectOtherActions, - SH_Menu_SubMenuSloppyCloseTimeout, - SH_Menu_SubMenuResetWhenReenteringParent, - SH_Menu_SubMenuDontStartSloppyOnLeave, - SH_ItemView_ScrollMode, - SH_TitleBar_ShowToolTipsOnButtons, - SH_Widget_Animation_Duration, - SH_ComboBox_AllowWheelScrolling, - SH_SpinBox_ButtonsInsideFrame, - SH_SpinBox_StepModifier, - // Add new style hint values here - - SH_CustomBase = 0xf0000000 - }; - Q_ENUM(StyleHint) - - enum StandardPixmap { - SP_TitleBarMenuButton, - SP_TitleBarMinButton, - SP_TitleBarMaxButton, - SP_TitleBarCloseButton, - SP_TitleBarNormalButton, - SP_TitleBarShadeButton, - SP_TitleBarUnshadeButton, - SP_TitleBarContextHelpButton, - SP_DockWidgetCloseButton, - SP_MessageBoxInformation, - SP_MessageBoxWarning, - SP_MessageBoxCritical, - SP_MessageBoxQuestion, - SP_DesktopIcon, - SP_TrashIcon, - SP_ComputerIcon, - SP_DriveFDIcon, - SP_DriveHDIcon, - SP_DriveCDIcon, - SP_DriveDVDIcon, - SP_DriveNetIcon, - SP_DirOpenIcon, - SP_DirClosedIcon, - SP_DirLinkIcon, - SP_DirLinkOpenIcon, - SP_FileIcon, - SP_FileLinkIcon, - SP_ToolBarHorizontalExtensionButton, - SP_ToolBarVerticalExtensionButton, - SP_FileDialogStart, - SP_FileDialogEnd, - SP_FileDialogToParent, - SP_FileDialogNewFolder, - SP_FileDialogDetailedView, - SP_FileDialogInfoView, - SP_FileDialogContentsView, - SP_FileDialogListView, - SP_FileDialogBack, - SP_DirIcon, - SP_DialogOkButton, - SP_DialogCancelButton, - SP_DialogHelpButton, - SP_DialogOpenButton, - SP_DialogSaveButton, - SP_DialogCloseButton, - SP_DialogApplyButton, - SP_DialogResetButton, - SP_DialogDiscardButton, - SP_DialogYesButton, - SP_DialogNoButton, - SP_ArrowUp, - SP_ArrowDown, - SP_ArrowLeft, - SP_ArrowRight, - SP_ArrowBack, - SP_ArrowForward, - SP_DirHomeIcon, - SP_CommandLink, - SP_VistaShield, - SP_BrowserReload, - SP_BrowserStop, - SP_MediaPlay, - SP_MediaStop, - SP_MediaPause, - SP_MediaSkipForward, - SP_MediaSkipBackward, - SP_MediaSeekForward, - SP_MediaSeekBackward, - SP_MediaVolume, - SP_MediaVolumeMuted, - SP_LineEditClearButton, - SP_DialogYesToAllButton, - SP_DialogNoToAllButton, - SP_DialogSaveAllButton, - SP_DialogAbortButton, - SP_DialogRetryButton, - SP_DialogIgnoreButton, - SP_RestoreDefaultsButton, - // do not add any values below/greater than this - SP_CustomBase = 0xf0000000 - }; - Q_ENUM(StandardPixmap) - - virtual QRect itemTextRect(const QFontMetrics &fm, const QRect &r, int flags, bool enabled, const QString &text) const; - virtual QRect itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const; - virtual QRect subElementRect(SubElement subElement, const QStyleOption *option) const = 0; - virtual QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc) const = 0; - - virtual QSize sizeFromContents(ContentsType ct, const QStyleOption *opt, const QSize &contentsSize) const = 0; - virtual QFont font(ControlElement element, const QStyle::State state) const = 0; - virtual QMargins ninePatchMargins(ControlElement ce, const QStyleOption *opt, const QSize &imageSize) const = 0; - virtual QMargins ninePatchMargins(ComplexControl cc, const QStyleOptionComplex *opt, const QSize &imageSize) const = 0; - - virtual SubControl hitTestComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, const QPoint &pt) const = 0; - - virtual int pixelMetric(PixelMetric metric, const QStyleOption *option = nullptr) const = 0; - virtual int styleHint(StyleHint stylehint, const QStyleOption *opt = nullptr, QStyleHintReturn* returnData = nullptr) const = 0; - - virtual void drawItemText(QPainter *painter, const QRect &rect, - int flags, const QPalette &pal, bool enabled, - const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const; - virtual void drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const; - virtual void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p) const = 0; - virtual void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p) const = 0; - virtual void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p) const = 0; - - virtual QPalette standardPalette() const; - virtual QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt = nullptr) const = 0; - virtual QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = nullptr) const = 0; - virtual QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const = 0; - - static QRect visualRect(Qt::LayoutDirection direction, const QRect &boundingRect, const QRect &logicalRect); - static QPoint visualPos(Qt::LayoutDirection direction, const QRect &boundingRect, const QPoint &logicalPos); - static int sliderPositionFromValue(int min, int max, int val, int space, bool upsideDown = false); - static int sliderValueFromPosition(int min, int max, int pos, int space, bool upsideDown = false); - static Qt::Alignment visualAlignment(Qt::LayoutDirection direction, Qt::Alignment alignment); - static QRect alignedRect(Qt::LayoutDirection direction, Qt::Alignment alignment, const QSize &size, const QRect &rectangle); - - // TODO: Remove the concept of proxy (but keep it for now until everything builds) - const QStyle *proxy() const { return this; } - -private: - Q_DISABLE_COPY(QStyle) -}; - -Q_DECLARE_OPERATORS_FOR_FLAGS(QStyle::State) -Q_DECLARE_OPERATORS_FOR_FLAGS(QStyle::SubControls) - -} // namespace QQC2 - -QT_END_NAMESPACE - -#endif // QSTYLE_H diff --git a/src/imports/nativestyle/qstyle/qquickstyle_p.h b/src/imports/nativestyle/qstyle/qquickstyle_p.h deleted file mode 100644 index 46f53740..00000000 --- a/src/imports/nativestyle/qstyle/qquickstyle_p.h +++ /dev/null @@ -1,121 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QSTYLE_P_H -#define QSTYLE_P_H - -#include "qquickstyle.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of qstyle_*.cpp. This header file may change from version to version -// without notice, or even be removed. -// -// We mean it. -// - -// Private class - -namespace QQC2 { - -class QStylePrivate: public QObjectPrivate -{ - Q_DECLARE_PUBLIC(QStyle) - -public: - static bool useFullScreenForPopup(); - mutable int layoutSpacingIndex = -1; - QStyle *proxyStyle; -}; - -inline QImage styleCacheImage(const QSize &size) -{ - const qreal pixelRatio = qApp->devicePixelRatio(); - QImage cacheImage = QImage(size * pixelRatio, QImage::Format_ARGB32_Premultiplied); - cacheImage.setDevicePixelRatio(pixelRatio); - return cacheImage; -} - -inline QPixmap styleCachePixmap(const QSize &size) -{ - const qreal pixelRatio = qApp->devicePixelRatio(); - QPixmap cachePixmap = QPixmap(size * pixelRatio); - cachePixmap.setDevicePixelRatio(pixelRatio); - return cachePixmap; -} - -#define BEGIN_STYLE_PIXMAPCACHE(a) \ - QRect rect = option->rect; \ - QPixmap internalPixmapCache; \ - QImage imageCache; \ - QPainter *p = painter; \ - QString unique = QStyleHelper::uniqueName((a), option, option->rect.size()); \ - int txType = painter->deviceTransform().type() | painter->worldTransform().type(); \ - bool doPixmapCache = (!option->rect.isEmpty()) \ - && ((txType <= QTransform::TxTranslate) || (painter->deviceTransform().type() == QTransform::TxScale)); \ - if (doPixmapCache && QPixmapCache::find(unique, &internalPixmapCache)) { \ - painter->drawPixmap(option->rect.topLeft(), internalPixmapCache); \ - } else { \ - if (doPixmapCache) { \ - rect.setRect(0, 0, option->rect.width(), option->rect.height()); \ - imageCache = styleCacheImage(option->rect.size()); \ - imageCache.fill(0); \ - p = new QPainter(&imageCache); \ - } - -#define END_STYLE_PIXMAPCACHE \ - if (doPixmapCache) { \ - p->end(); \ - delete p; \ - internalPixmapCache = QPixmap::fromImage(imageCache); \ - painter->drawPixmap(option->rect.topLeft(), internalPixmapCache); \ - QPixmapCache::insert(unique, internalPixmapCache); \ - } \ - } - -} // namespace QQC2 - -QT_END_NAMESPACE - -#endif //QSTYLE_P_H diff --git a/src/imports/nativestyle/qstyle/qquickstylehelper.cpp b/src/imports/nativestyle/qstyle/qquickstylehelper.cpp deleted file mode 100644 index ebc82864..00000000 --- a/src/imports/nativestyle/qstyle/qquickstylehelper.cpp +++ /dev/null @@ -1,438 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickstylehelper_p.h" -#include "qquickstyleoption.h" -#include "qquickstyle_p.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -QT_BEGIN_NAMESPACE - -Q_GUI_EXPORT int qt_defaultDpiX(); - -namespace QQC2 { - -namespace QStyleHelper { - -QString uniqueName(const QString &key, const QStyleOption *option, const QSize &size) -{ - const QStyleOptionComplex *complexOption = qstyleoption_cast(option); - QString tmp = key % HexString(option->state) - % HexString(option->direction) - % HexString(complexOption ? uint(complexOption->activeSubControls) : 0u) - % HexString(option->palette.cacheKey()) - % HexString(size.width()) - % HexString(size.height()); - - if (const QStyleOptionSpinBox *spinBox = qstyleoption_cast(option)) { - tmp = tmp % HexString(spinBox->buttonSymbols) - % HexString(spinBox->stepEnabled) - % QLatin1Char(spinBox->frame ? '1' : '0'); ; - } - - return tmp; -} - -#ifdef Q_OS_DARWIN -static const qreal qstyleBaseDpi = 72; -#else -static const qreal qstyleBaseDpi = 96; -#endif - -qreal dpi(const QStyleOption *option) -{ -#ifndef Q_OS_DARWIN - // Prioritize the application override, except for on macOS where - // we have historically not supported the AA_Use96Dpi flag. - if (QCoreApplication::testAttribute(Qt::AA_Use96Dpi)) - return 96; -#endif - - // Expect that QStyleOption::QFontMetrics::QFont has the correct DPI set - if (option) - return option->fontMetrics.fontDpi(); - - return qstyleBaseDpi; -} - -qreal dpiScaled(qreal value, qreal dpi) -{ - return value * dpi / qstyleBaseDpi; -} - -qreal dpiScaled(qreal value, const QPaintDevice *device) -{ - return dpiScaled(value, device->logicalDpiX()); -} - -qreal dpiScaled(qreal value, const QStyleOption *option) -{ - return dpiScaled(value, dpi(option)); -} - -bool isInstanceOf(QObject *obj, QAccessible::Role role) -{ - bool match = false; - QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(obj); - match = iface && iface->role() == role; - return match; -} - -// Searches for an ancestor of a particular accessible role -bool hasAncestor(QObject *obj, QAccessible::Role role) -{ - bool found = false; - QObject *parent = obj ? obj->parent() : nullptr; - while (parent && !found) { - if (isInstanceOf(parent, role)) - found = true; - parent = parent->parent(); - } - return found; -} - - -int calcBigLineSize(int radius) -{ - int bigLineSize = radius / 6; - if (bigLineSize < 4) - bigLineSize = 4; - if (bigLineSize > radius / 2) - bigLineSize = radius / 2; - return bigLineSize; -} - -static QPointF calcRadialPos(const QStyleOptionSlider *dial, qreal offset) -{ - const int width = dial->rect.width(); - const int height = dial->rect.height(); - const int r = qMin(width, height) / 2; - const int currentSliderPosition = dial->upsideDown ? dial->sliderPosition : (dial->maximum - dial->sliderPosition); - qreal a = 0; - if (dial->maximum == dial->minimum) - a = Q_PI / 2; - else if (dial->dialWrapping) - a = Q_PI * 3 / 2 - (currentSliderPosition - dial->minimum) * 2 * Q_PI - / (dial->maximum - dial->minimum); - else - a = (Q_PI * 8 - (currentSliderPosition - dial->minimum) * 10 * Q_PI - / (dial->maximum - dial->minimum)) / 6; - qreal xc = width / 2.0; - qreal yc = height / 2.0; - qreal len = r - QStyleHelper::calcBigLineSize(r) - 3; - qreal back = offset * len; - QPointF pos(QPointF(xc + back * qCos(a), yc - back * qSin(a))); - return pos; -} - -qreal angle(const QPointF &p1, const QPointF &p2) -{ - static const qreal rad_factor = 180 / Q_PI; - qreal _angle = 0; - - if (p1.x() == p2.x()) { - if (p1.y() < p2.y()) - _angle = 270; - else - _angle = 90; - } else { - qreal x1, x2, y1, y2; - - if (p1.x() <= p2.x()) { - x1 = p1.x(); y1 = p1.y(); - x2 = p2.x(); y2 = p2.y(); - } else { - x2 = p1.x(); y2 = p1.y(); - x1 = p2.x(); y1 = p2.y(); - } - - qreal m = -(y2 - y1) / (x2 - x1); - _angle = qAtan(m) * rad_factor; - - if (p1.x() < p2.x()) - _angle = 180 - _angle; - else - _angle = -_angle; - } - return _angle; -} - -QPolygonF calcLines(const QStyleOptionSlider *dial) -{ - QPolygonF poly; - int width = dial->rect.width(); - int height = dial->rect.height(); - qreal r = qMin(width, height) / 2; - int bigLineSize = calcBigLineSize(int(r)); - - qreal xc = width / 2 + 0.5; - qreal yc = height / 2 + 0.5; - const int ns = dial->tickInterval; - if (!ns) // Invalid values may be set by Qt Designer. - return poly; - int notches = (dial->maximum + ns - 1 - dial->minimum) / ns; - if (notches <= 0) - return poly; - if (dial->maximum < dial->minimum || dial->maximum - dial->minimum > 1000) { - int maximum = dial->minimum + 1000; - notches = (maximum + ns - 1 - dial->minimum) / ns; - } - - poly.resize(2 + 2 * notches); - int smallLineSize = bigLineSize / 2; - for (int i = 0; i <= notches; ++i) { - qreal angle = dial->dialWrapping ? Q_PI * 3 / 2 - i * 2 * Q_PI / notches - : (Q_PI * 8 - i * 10 * Q_PI / notches) / 6; - qreal s = qSin(angle); - qreal c = qCos(angle); - if (i == 0 || (((ns * i) % (dial->pageStep ? dial->pageStep : 1)) == 0)) { - poly[2 * i] = QPointF(xc + (r - bigLineSize) * c, - yc - (r - bigLineSize) * s); - poly[2 * i + 1] = QPointF(xc + r * c, yc - r * s); - } else { - poly[2 * i] = QPointF(xc + (r - 1 - smallLineSize) * c, - yc - (r - 1 - smallLineSize) * s); - poly[2 * i + 1] = QPointF(xc + (r - 1) * c, yc -(r - 1) * s); - } - } - return poly; -} - -// This will draw a nice and shiny QDial for us. We don't want -// all the shinyness in QWindowsStyle, hence we place it here - -void drawDial(const QStyleOptionSlider *option, QPainter *painter) -{ - QPalette pal = option->palette; - QColor buttonColor = pal.button().color(); - const int width = option->rect.width(); - const int height = option->rect.height(); - const bool enabled = option->state & QStyle::State_Enabled; - qreal r = qMin(width, height) / 2; - r -= r/50; - const qreal penSize = r/20.0; - - painter->save(); - painter->setRenderHint(QPainter::Antialiasing); - - // Draw notches - if (option->subControls & QStyle::SC_DialTickmarks) { - painter->setPen(option->palette.dark().color().darker(120)); - painter->drawLines(QStyleHelper::calcLines(option)); - } - - // setting color before BEGIN_STYLE_PIXMAPCACHE since - // otherwise it is not set when the image is in the cache - buttonColor.setHsv(buttonColor .hue(), - qMin(140, buttonColor .saturation()), - qMax(180, buttonColor.value())); - - // Cache dial background - BEGIN_STYLE_PIXMAPCACHE(QString::fromLatin1("qdial")) - p->setRenderHint(QPainter::Antialiasing); - - const qreal d_ = r / 6; - const qreal dx = option->rect.x() + d_ + (width - 2 * r) / 2 + 1; - const qreal dy = option->rect.y() + d_ + (height - 2 * r) / 2 + 1; - - QRectF br = QRectF(dx + 0.5, dy + 0.5, - int(r * 2 - 2 * d_ - 2), - int(r * 2 - 2 * d_ - 2)); - - if (enabled) { - // Drop shadow - qreal shadowSize = qMax(1.0, penSize/2.0); - QRectF shadowRect= br.adjusted(-2*shadowSize, -2*shadowSize, - 2*shadowSize, 2*shadowSize); - QRadialGradient shadowGradient(shadowRect.center().x(), - shadowRect.center().y(), shadowRect.width()/2.0, - shadowRect.center().x(), shadowRect.center().y()); - shadowGradient.setColorAt(qreal(0.91), QColor(0, 0, 0, 40)); - shadowGradient.setColorAt(qreal(1.0), Qt::transparent); - p->setBrush(shadowGradient); - p->setPen(Qt::NoPen); - p->translate(shadowSize, shadowSize); - p->drawEllipse(shadowRect); - p->translate(-shadowSize, -shadowSize); - - // Main gradient - QRadialGradient gradient(br.center().x() - br.width()/3, dy, - br.width()*1.3, br.center().x(), - br.center().y() - br.height()/2); - gradient.setColorAt(0, buttonColor.lighter(110)); - gradient.setColorAt(qreal(0.5), buttonColor); - gradient.setColorAt(qreal(0.501), buttonColor.darker(102)); - gradient.setColorAt(1, buttonColor.darker(115)); - p->setBrush(gradient); - } else { - p->setBrush(Qt::NoBrush); - } - - p->setPen(QPen(buttonColor.darker(280))); - p->drawEllipse(br); - p->setBrush(Qt::NoBrush); - p->setPen(buttonColor.lighter(110)); - p->drawEllipse(br.adjusted(1, 1, -1, -1)); - - if (option->state & QStyle::State_HasFocus) { - QColor highlight = pal.highlight().color(); - highlight.setHsv(highlight.hue(), - qMin(160, highlight.saturation()), - qMax(230, highlight.value())); - highlight.setAlpha(127); - p->setPen(QPen(highlight, 2.0)); - p->setBrush(Qt::NoBrush); - p->drawEllipse(br.adjusted(-1, -1, 1, 1)); - } - - END_STYLE_PIXMAPCACHE - - QPointF dp = calcRadialPos(option, qreal(0.70)); - buttonColor = buttonColor.lighter(104); - buttonColor.setAlphaF(0.8f); - const qreal ds = r/qreal(7.0); - QRectF dialRect(dp.x() - ds, dp.y() - ds, 2*ds, 2*ds); - QRadialGradient dialGradient(dialRect.center().x() + dialRect.width()/2, - dialRect.center().y() + dialRect.width(), - dialRect.width()*2, - dialRect.center().x(), dialRect.center().y()); - dialGradient.setColorAt(1, buttonColor.darker(140)); - dialGradient.setColorAt(qreal(0.4), buttonColor.darker(120)); - dialGradient.setColorAt(0, buttonColor.darker(110)); - if (penSize > 3.0) { - painter->setPen(QPen(QColor(0, 0, 0, 25), penSize)); - painter->drawLine(calcRadialPos(option, qreal(0.90)), calcRadialPos(option, qreal(0.96))); - } - - painter->setBrush(dialGradient); - painter->setPen(QColor(255, 255, 255, 150)); - painter->drawEllipse(dialRect.adjusted(-1, -1, 1, 1)); - painter->setPen(QColor(0, 0, 0, 80)); - painter->drawEllipse(dialRect); - painter->restore(); -} - -void drawBorderPixmap(const QPixmap &pixmap, QPainter *painter, const QRect &rect, - int left, int top, int right, - int bottom) -{ - QSize size = pixmap.size(); - //painter->setRenderHint(QPainter::SmoothPixmapTransform); - - //top - if (top > 0) { - painter->drawPixmap(QRect(rect.left() + left, rect.top(), rect.width() -right - left, top), pixmap, - QRect(left, 0, size.width() -right - left, top)); - - //top-left - if(left > 0) - painter->drawPixmap(QRect(rect.left(), rect.top(), left, top), pixmap, - QRect(0, 0, left, top)); - - //top-right - if (right > 0) - painter->drawPixmap(QRect(rect.left() + rect.width() - right, rect.top(), right, top), pixmap, - QRect(size.width() - right, 0, right, top)); - } - - //left - if (left > 0) - painter->drawPixmap(QRect(rect.left(), rect.top()+top, left, rect.height() - top - bottom), pixmap, - QRect(0, top, left, size.height() - bottom - top)); - - //center - painter->drawPixmap(QRect(rect.left() + left, rect.top()+top, rect.width() -right - left, - rect.height() - bottom - top), pixmap, - QRect(left, top, size.width() -right -left, - size.height() - bottom - top)); - //right - if (right > 0) - painter->drawPixmap(QRect(rect.left() +rect.width() - right, rect.top()+top, right, rect.height() - top - bottom), pixmap, - QRect(size.width() - right, top, right, size.height() - bottom - top)); - - //bottom - if (bottom > 0) { - painter->drawPixmap(QRect(rect.left() +left, rect.top() + rect.height() - bottom, - rect.width() - right - left, bottom), pixmap, - QRect(left, size.height() - bottom, - size.width() - right - left, bottom)); - //bottom-left - if (left > 0) - painter->drawPixmap(QRect(rect.left(), rect.top() + rect.height() - bottom, left, bottom), pixmap, - QRect(0, size.height() - bottom, left, bottom)); - - //bottom-right - if (right > 0) - painter->drawPixmap(QRect(rect.left() + rect.width() - right, rect.top() + rect.height() - bottom, right, bottom), pixmap, - QRect(size.width() - right, size.height() - bottom, right, bottom)); - - } -} - -WidgetSizePolicy widgetSizePolicy(const QStyleOption *opt) -{ - if (opt && opt->state & QStyle::State_Mini) - return SizeMini; - else if (opt && opt->state & QStyle::State_Small) - return SizeSmall; - - return SizeDefault; -} - -QColor backgroundColor(const QPalette &pal) -{ -// if (qobject_cast(widget) && widget->parent() && -// qobject_cast(widget->parent()->parent())) -// return widget->parentWidget()->parentWidget()->palette().color(QPalette::Base); - return pal.color(QPalette::Base); -} - -} - -} // namespace QQC2 - -QT_END_NAMESPACE diff --git a/src/imports/nativestyle/qstyle/qquickstylehelper_p.h b/src/imports/nativestyle/qstyle/qquickstylehelper_p.h deleted file mode 100644 index 757d647d..00000000 --- a/src/imports/nativestyle/qstyle/qquickstylehelper_p.h +++ /dev/null @@ -1,99 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include -#include -#include -#include - -#ifndef QSTYLEHELPER_P_H -#define QSTYLEHELPER_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. -// - -QT_BEGIN_NAMESPACE - -class QObject; -class QPainter; -class QPixmap; - -namespace QQC2 { - -class QStyleOptionSlider; -class QStyleOption; - -namespace QStyleHelper -{ - QString uniqueName(const QString &key, const QStyleOption *option, const QSize &size); - - qreal dpi(const QStyleOption *option); - qreal dpiScaled(qreal value, qreal dpi); - qreal dpiScaled(qreal value, const QPaintDevice *device); - qreal dpiScaled(qreal value, const QStyleOption *option); - - qreal angle(const QPointF &p1, const QPointF &p2); - QPolygonF calcLines(const QStyleOptionSlider *dial); - int calcBigLineSize(int radius); - void drawDial(const QStyleOptionSlider *dial, QPainter *painter); - - void drawBorderPixmap(const QPixmap &pixmap, QPainter *painter, const QRect &rect, - int left = 0, int top = 0, int right = 0, - int bottom = 0); - - bool isInstanceOf(QObject *obj, QAccessible::Role role); - bool hasAncestor(QObject *obj, QAccessible::Role role); - QColor backgroundColor(const QPalette &pal); - - enum WidgetSizePolicy { SizeLarge = 0, SizeSmall = 1, SizeMini = 2, SizeDefault = -1 }; - WidgetSizePolicy widgetSizePolicy(const QStyleOption *opt); -} - -} // namespace QQC2 - -QT_END_NAMESPACE - -#endif // QSTYLEHELPER_P_H diff --git a/src/imports/nativestyle/qstyle/qquickstyleoption.cpp b/src/imports/nativestyle/qstyle/qquickstyleoption.cpp deleted file mode 100644 index c34dddd7..00000000 --- a/src/imports/nativestyle/qstyle/qquickstyleoption.cpp +++ /dev/null @@ -1,652 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickstyleoption.h" - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -namespace QQC2 { - -QStyleOption::QStyleOption(int version, int type) - : version(version), type(type), state(QStyle::State_None), - direction(QGuiApplication::layoutDirection()), fontMetrics(QFont()), - styleObject(nullptr), control(nullptr), window(nullptr) -{ -} - -/*! - Destroys this style option object. -*/ -QStyleOption::~QStyleOption() -{ -} - -/*! - Constructs a copy of \a other. -*/ -QStyleOption::QStyleOption(const QStyleOption &other) - : version(Version), type(Type), state(other.state), - direction(other.direction), rect(other.rect), fontMetrics(other.fontMetrics), - palette(other.palette), styleObject(other.styleObject), - control(other.control), window(other.window) -{ -} - -/*! - Assign \a other to this QStyleOption. -*/ -QStyleOption &QStyleOption::operator=(const QStyleOption &other) -{ - control = other.control; - window = other.window; - state = other.state; - direction = other.direction; - rect = other.rect; - fontMetrics = other.fontMetrics; - palette = other.palette; - styleObject = other.styleObject; - return *this; -} - -/*! - Constructs a QStyleOptionFocusRect, initializing the members - variables to their default values. -*/ -QStyleOptionFocusRect::QStyleOptionFocusRect() - : QStyleOption(Version, SO_FocusRect) -{ - state |= QStyle::State_KeyboardFocusChange; // assume we had one, will be corrected in initFrom() -} - -/*! - \internal -*/ -QStyleOptionFocusRect::QStyleOptionFocusRect(int versionIn) - : QStyleOption(versionIn, SO_FocusRect) -{ - state |= QStyle::State_KeyboardFocusChange; // assume we had one, will be corrected in initFrom() -} - -/*! - Constructs a QStyleOptionFrame, initializing the members - variables to their default values. -*/ -QStyleOptionFrame::QStyleOptionFrame() - : QStyleOption(Version, SO_Frame), lineWidth(0), midLineWidth(0), - features(None), frameShape(NoFrame) -{ -} - -/*! - \internal -*/ -QStyleOptionFrame::QStyleOptionFrame(int versionIn) - : QStyleOption(versionIn, SO_Frame), lineWidth(0), midLineWidth(0), - features(None) -{ -} - -/*! - Constructs a QStyleOptionGroupBox, initializing the members - variables to their default values. -*/ -QStyleOptionGroupBox::QStyleOptionGroupBox() - : QStyleOptionComplex(Version, Type), features(QStyleOptionFrame::None), - textAlignment(Qt::AlignLeft), lineWidth(0), midLineWidth(0) -{ -} - -QStyleOptionGroupBox::QStyleOptionGroupBox(int versionIn) - : QStyleOptionComplex(versionIn, Type), features(QStyleOptionFrame::None), - textAlignment(Qt::AlignLeft), lineWidth(0), midLineWidth(0) -{ -} - -/*! - Constructs a QStyleOptionHeader, initializing the members - variables to their default values. -*/ -QStyleOptionHeader::QStyleOptionHeader() - : QStyleOption(QStyleOptionHeader::Version, SO_Header), - section(0), textAlignment(Qt::AlignLeft), iconAlignment(Qt::AlignLeft), - position(QStyleOptionHeader::Beginning), - selectedPosition(QStyleOptionHeader::NotAdjacent), sortIndicator(None), - orientation(Qt::Horizontal) -{ -} - -/*! - \internal -*/ -QStyleOptionHeader::QStyleOptionHeader(int versionIn) - : QStyleOption(versionIn, SO_Header), - section(0), textAlignment(Qt::AlignLeft), iconAlignment(Qt::AlignLeft), - position(QStyleOptionHeader::Beginning), - selectedPosition(QStyleOptionHeader::NotAdjacent), sortIndicator(None), - orientation(Qt::Horizontal) -{ -} - -/*! - Constructs a QStyleOptionButton, initializing the members - variables to their default values. -*/ -QStyleOptionButton::QStyleOptionButton() - : QStyleOption(QStyleOptionButton::Version, SO_Button), features(None) -{ -} - -/*! - \internal -*/ -QStyleOptionButton::QStyleOptionButton(int versionIn) - : QStyleOption(versionIn, SO_Button), features(None) -{ -} - -/*! - Constructs a QStyleOptionToolBar, initializing the members - variables to their default values. -*/ -QStyleOptionToolBar::QStyleOptionToolBar() - : QStyleOption(Version, SO_ToolBar), positionOfLine(OnlyOne), positionWithinLine(OnlyOne), - toolBarArea(Qt::TopToolBarArea), features(None), lineWidth(0), midLineWidth(0) -{ -} - -/*! - \fn QStyleOptionToolBar::QStyleOptionToolBar(const QStyleOptionToolBar &other) - - Constructs a copy of the \a other style option. -*/ -QStyleOptionToolBar::QStyleOptionToolBar(int versionIn) -: QStyleOption(versionIn, SO_ToolBar), positionOfLine(OnlyOne), positionWithinLine(OnlyOne), - toolBarArea(Qt::TopToolBarArea), features(None), lineWidth(0), midLineWidth(0) -{ - -} - -/*! - Constructs a QStyleOptionTab object, initializing the members - variables to their default values. -*/ -QStyleOptionTab::QStyleOptionTab() - : QStyleOption(QStyleOptionTab::Version, SO_Tab), - row(0), - position(Beginning), - selectedPosition(NotAdjacent), cornerWidgets(QStyleOptionTab::NoCornerWidgets), - documentMode(false), - features(QStyleOptionTab::None) -{ -} - -QStyleOptionTab::QStyleOptionTab(int versionIn) - : QStyleOption(versionIn, SO_Tab), - row(0), - position(Beginning), - selectedPosition(NotAdjacent), cornerWidgets(QStyleOptionTab::NoCornerWidgets), - documentMode(false), - features(QStyleOptionTab::None) -{ -} - -/*! - Constructs a QStyleOptionTabV4 object, initializing the members - variables to their default values. - */ -QStyleOptionTabV4::QStyleOptionTabV4() : QStyleOptionTab(QStyleOptionTabV4::Version) -{ -} - -/*! - Constructs a QStyleOptionProgressBar, initializing the members - variables to their default values. -*/ -QStyleOptionProgressBar::QStyleOptionProgressBar() - : QStyleOption(QStyleOptionProgressBar::Version, SO_ProgressBar), - minimum(0), maximum(0), progress(0), textAlignment(Qt::AlignLeft), textVisible(false), - invertedAppearance(false), bottomToTop(false) -{ -} - -QStyleOptionProgressBar::QStyleOptionProgressBar(int versionIn) - : QStyleOption(versionIn, SO_ProgressBar), - minimum(0), maximum(0), progress(0), textAlignment(Qt::AlignLeft), textVisible(false), - invertedAppearance(false), bottomToTop(false) -{ -} - -/*! - Constructs a QStyleOptionMenuItem, initializing the members - variables to their default values. -*/ -QStyleOptionMenuItem::QStyleOptionMenuItem() - : QStyleOption(QStyleOptionMenuItem::Version, SO_MenuItem), menuItemType(Normal), - checkType(NotCheckable), checked(false), menuHasCheckableItems(true), maxIconWidth(0), tabWidth(0) -{ -} - -/*! - \internal -*/ -QStyleOptionMenuItem::QStyleOptionMenuItem(int versionIn) - : QStyleOption(versionIn, SO_MenuItem), menuItemType(Normal), - checkType(NotCheckable), checked(false), menuHasCheckableItems(true), maxIconWidth(0), tabWidth(0) -{ -} - -/*! - Constructs a QStyleOptionComplex of the specified \a type and \a - version, initializing the member variables to their default - values. This constructor is usually called by subclasses. -*/ -QStyleOptionComplex::QStyleOptionComplex(int versionIn, int typeIn) - : QStyleOption(versionIn, typeIn), subControls(QStyle::SC_All), activeSubControls(QStyle::SC_None) -{ -} - - -/*! - Constructs a QStyleOptionSlider, initializing the members - variables to their default values. -*/ -QStyleOptionSlider::QStyleOptionSlider() - : QStyleOptionComplex(Version, SO_Slider), orientation(Qt::Horizontal), minimum(0), maximum(0), - tickPosition(NoTicks), tickInterval(0), upsideDown(false), - sliderPosition(0), sliderValue(0), singleStep(0), pageStep(0), notchTarget(0.0), - dialWrapping(false) -{ -} - -/*! - \internal -*/ -QStyleOptionSlider::QStyleOptionSlider(int versionIn) - : QStyleOptionComplex(versionIn, SO_Slider), orientation(Qt::Horizontal), minimum(0), maximum(0), - tickPosition(NoTicks), tickInterval(0), upsideDown(false), - sliderPosition(0), sliderValue(0), singleStep(0), pageStep(0), notchTarget(0.0), - dialWrapping(false) -{ -} - -/*! - Constructs a QStyleOptionSpinBox, initializing the members - variables to their default values. -*/ -QStyleOptionSpinBox::QStyleOptionSpinBox() - : QStyleOptionComplex(Version, SO_SpinBox), buttonSymbols(UpDownArrows), - stepEnabled(StepNone), frame(false) -{ -} - -/*! - \internal -*/ -QStyleOptionSpinBox::QStyleOptionSpinBox(int versionIn) - : QStyleOptionComplex(versionIn, SO_SpinBox), buttonSymbols(UpDownArrows), - stepEnabled(StepNone), frame(false) -{ -} - -/*! - Constructs a QStyleOptionDockWidget, initializing the member - variables to their default values. -*/ -QStyleOptionDockWidget::QStyleOptionDockWidget() - : QStyleOption(Version, SO_DockWidget), closable(false), - movable(false), floatable(false), verticalTitleBar(false) -{ -} - -/*! - \internal -*/ -QStyleOptionDockWidget::QStyleOptionDockWidget(int versionIn) - : QStyleOption(versionIn, SO_DockWidget), closable(false), - movable(false), floatable(false), verticalTitleBar(false) -{ -} - -/*! - Constructs a QStyleOptionToolButton, initializing the members - variables to their default values. -*/ -QStyleOptionToolButton::QStyleOptionToolButton() - : QStyleOptionComplex(Version, SO_ToolButton), features(None), arrowType(Qt::DownArrow) - , toolButtonStyle(Qt::ToolButtonIconOnly) -{ -} - -QStyleOptionToolButton::QStyleOptionToolButton(int versionIn) - : QStyleOptionComplex(versionIn, SO_ToolButton), features(None), arrowType(Qt::DownArrow) - , toolButtonStyle(Qt::ToolButtonIconOnly) - -{ -} - -/*! - Creates a QStyleOptionComboBox, initializing the members variables - to their default values. -*/ -QStyleOptionComboBox::QStyleOptionComboBox() - : QStyleOptionComplex(Version, SO_ComboBox), editable(false), frame(true) -{ -} - -QStyleOptionComboBox::QStyleOptionComboBox(int versionIn) - : QStyleOptionComplex(versionIn, SO_ComboBox), editable(false), frame(true) -{ -} - -/*! - Creates a QStyleOptionToolBox, initializing the members variables - to their default values. -*/ -QStyleOptionToolBox::QStyleOptionToolBox() - : QStyleOption(Version, SO_ToolBox), position(Beginning), selectedPosition(NotAdjacent) -{ -} - -QStyleOptionToolBox::QStyleOptionToolBox(int versionIn) - : QStyleOption(versionIn, SO_ToolBox), position(Beginning), selectedPosition(NotAdjacent) -{ -} - - -/*! - Creates a QStyleOptionRubberBand, initializing the members - variables to their default values. -*/ -QStyleOptionRubberBand::QStyleOptionRubberBand() - : QStyleOption(Version, SO_RubberBand), opaque(false), shape(Line) -{ -} - -QStyleOptionRubberBand::QStyleOptionRubberBand(int versionIn) - : QStyleOption(versionIn, SO_RubberBand), opaque(false) -{ -} - -/*! - Constructs a QStyleOptionTitleBar, initializing the members - variables to their default values. -*/ -QStyleOptionTitleBar::QStyleOptionTitleBar() - : QStyleOptionComplex(Version, SO_TitleBar), titleBarState(0) -{ -} - -QStyleOptionTitleBar::QStyleOptionTitleBar(int versionIn) - : QStyleOptionComplex(versionIn, SO_TitleBar), titleBarState(0) -{ -} - -/*! - Constructs a QStyleOptionViewItem, initializing the members - variables to their default values. -*/ -QStyleOptionViewItem::QStyleOptionViewItem() - : QStyleOption(Version, SO_ViewItem), - displayAlignment(Qt::AlignLeft), decorationAlignment(Qt::AlignLeft), - textElideMode(Qt::ElideMiddle), decorationPosition(Left), - showDecorationSelected(false), features(None), - checkState(Qt::Unchecked), viewItemPosition(QStyleOptionViewItem::Invalid) -{ -} - -QStyleOptionViewItem::QStyleOptionViewItem(int versionIn) - : QStyleOption(versionIn, SO_ViewItem), - displayAlignment(Qt::AlignLeft), decorationAlignment(Qt::AlignLeft), - textElideMode(Qt::ElideMiddle), decorationPosition(Left), - showDecorationSelected(false), features(None), - checkState(Qt::Unchecked), viewItemPosition(QStyleOptionViewItem::Invalid) -{ -} - -/*! - Constructs a QStyleOptionTabWidgetFrame, initializing the members - variables to their default values. -*/ -QStyleOptionTabWidgetFrame::QStyleOptionTabWidgetFrame() - : QStyleOption(Version, SO_TabWidgetFrame), lineWidth(0), midLineWidth(0), shape(QStyleOptionTab::RoundedNorth) -{ -} - -QStyleOptionTabWidgetFrame::QStyleOptionTabWidgetFrame(int versionIn) - : QStyleOption(versionIn, SO_TabWidgetFrame), lineWidth(0), midLineWidth(0) -{ -} - -/*! - Construct a QStyleOptionTabBarBase, initializing the members - vaiables to their default values. -*/ -QStyleOptionTabBarBase::QStyleOptionTabBarBase() - : QStyleOption(Version, SO_TabBarBase), documentMode(false), shape(QStyleOptionTab::RoundedNorth) -{ -} - -QStyleOptionTabBarBase::QStyleOptionTabBarBase(int versionIn) - : QStyleOption(versionIn, SO_TabBarBase), documentMode(false) -{ -} - -/*! - Constructs a QStyleOptionSizeGrip. -*/ -QStyleOptionSizeGrip::QStyleOptionSizeGrip() - : QStyleOptionComplex(Version, Type), corner(Qt::BottomRightCorner) -{ -} - -QStyleOptionSizeGrip::QStyleOptionSizeGrip(int versionIn) - : QStyleOptionComplex(versionIn, Type), corner(Qt::BottomRightCorner) -{ -} - -/*! - Constructs a QStyleOptionGraphicsItem. -*/ -QStyleOptionGraphicsItem::QStyleOptionGraphicsItem() - : QStyleOption(Version, Type), levelOfDetail(1) -{ -} - -QStyleOptionGraphicsItem::QStyleOptionGraphicsItem(int versionIn) - : QStyleOption(versionIn, Type), levelOfDetail(1) -{ -} - -/*! - \since 4.6 - - Returns the level of detail from the \a worldTransform. - - Its value represents the maximum value of the height and - width of a unity rectangle, mapped using the \a worldTransform - of the painter used to draw the item. By default, if no - transformations are applied, its value is 1. If zoomed out 1:2, the level - of detail will be 0.5, and if zoomed in 2:1, its value is 2. - - \sa QGraphicsScene::minimumRenderSize() -*/ -qreal QStyleOptionGraphicsItem::levelOfDetailFromTransform(const QTransform &worldTransform) -{ - if (worldTransform.type() <= QTransform::TxTranslate) - return 1; // Translation only? The LOD is 1. - - // Two unit vectors. - QLineF v1(0, 0, 1, 0); - QLineF v2(0, 0, 0, 1); - // LOD is the transformed area of a 1x1 rectangle. - return qSqrt(worldTransform.map(v1).length() * worldTransform.map(v2).length()); -} - -/*! - Constructs a QStyleHintReturn with version \a version and type \a - type. - - The version has no special meaning for QStyleHintReturn; it can be - used by subclasses to distinguish between different version of - the same hint type. - - \sa QStyleOption::version, QStyleOption::type -*/ -QStyleHintReturn::QStyleHintReturn(int versionIn, int type) - : version(versionIn), type(type) -{ -} - -/*! - \internal -*/ - -QStyleHintReturn::~QStyleHintReturn() -{ -} - -/*! - Constructs a QStyleHintReturnMask. The member variables are - initialized to default values. -*/ -QStyleHintReturnMask::QStyleHintReturnMask() : QStyleHintReturn(Version, Type) -{ -} - -QStyleHintReturnMask::~QStyleHintReturnMask() -{ -} - -/*! - Constructs a QStyleHintReturnVariant. The member variables are - initialized to default values. -*/ -QStyleHintReturnVariant::QStyleHintReturnVariant() : QStyleHintReturn(Version, Type) -{ -} - -QStyleHintReturnVariant::~QStyleHintReturnVariant() -{ -} - -#if !defined(QT_NO_DEBUG_STREAM) -QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType) -{ -#if !defined(QT_NO_DEBUG) - switch (optionType) { - case QStyleOption::SO_Default: - debug << "SO_Default"; break; - case QStyleOption::SO_FocusRect: - debug << "SO_FocusRect"; break; - case QStyleOption::SO_Button: - debug << "SO_Button"; break; - case QStyleOption::SO_Tab: - debug << "SO_Tab"; break; - case QStyleOption::SO_MenuItem: - debug << "SO_MenuItem"; break; - case QStyleOption::SO_Frame: - debug << "SO_Frame"; break; - case QStyleOption::SO_ProgressBar: - debug << "SO_ProgressBar"; break; - case QStyleOption::SO_ToolBox: - debug << "SO_ToolBox"; break; - case QStyleOption::SO_Header: - debug << "SO_Header"; break; - case QStyleOption::SO_DockWidget: - debug << "SO_DockWidget"; break; - case QStyleOption::SO_ViewItem: - debug << "SO_ViewItem"; break; - case QStyleOption::SO_TabWidgetFrame: - debug << "SO_TabWidgetFrame"; break; - case QStyleOption::SO_TabBarBase: - debug << "SO_TabBarBase"; break; - case QStyleOption::SO_RubberBand: - debug << "SO_RubberBand"; break; - case QStyleOption::SO_Complex: - debug << "SO_Complex"; break; - case QStyleOption::SO_Slider: - debug << "SO_Slider"; break; - case QStyleOption::SO_SpinBox: - debug << "SO_SpinBox"; break; - case QStyleOption::SO_ToolButton: - debug << "SO_ToolButton"; break; - case QStyleOption::SO_ComboBox: - debug << "SO_ComboBox"; break; - case QStyleOption::SO_TitleBar: - debug << "SO_TitleBar"; break; - case QStyleOption::SO_CustomBase: - debug << "SO_CustomBase"; break; - case QStyleOption::SO_GroupBox: - debug << "SO_GroupBox"; break; - case QStyleOption::SO_ToolBar: - debug << "SO_ToolBar"; break; - case QStyleOption::SO_ComplexCustomBase: - debug << "SO_ComplexCustomBase"; break; - case QStyleOption::SO_SizeGrip: - debug << "SO_SizeGrip"; break; - case QStyleOption::SO_GraphicsItem: - debug << "SO_GraphicsItem"; break; - } -#else - Q_UNUSED(optionType); -#endif - return debug; -} - -QDebug operator<<(QDebug debug, const QStyleOption &option) -{ -#if !defined(QT_NO_DEBUG) - debug << "QStyleOption("; - debug << QStyleOption::OptionType(option.type); - debug << ',' << (option.direction == Qt::RightToLeft ? "RightToLeft" : "LeftToRight"); - debug << ',' << option.state; - debug << ',' << option.rect; - debug << ',' << option.styleObject; - debug << ')'; -#else - Q_UNUSED(option); -#endif - return debug; -} -#endif - -} // namespace QQC2 - -QT_END_NAMESPACE diff --git a/src/imports/nativestyle/qstyle/qquickstyleoption.h b/src/imports/nativestyle/qstyle/qquickstyleoption.h deleted file mode 100644 index 05c9ce57..00000000 --- a/src/imports/nativestyle/qstyle/qquickstyleoption.h +++ /dev/null @@ -1,795 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QSTYLEOPTION_H -#define QSTYLEOPTION_H - -#include "qquickstyle.h" - -#include -#include -#include -#include - -#include -#include - -QT_BEGIN_NAMESPACE - -class QQuickItem; - -namespace QQC2 { - -class QStyleOption -{ -public: - enum OptionType { - SO_Default, SO_FocusRect, SO_Button, SO_Tab, SO_MenuItem, - SO_Frame, SO_ProgressBar, SO_ToolBox, SO_Header, - SO_DockWidget, SO_ViewItem, SO_TabWidgetFrame, - SO_TabBarBase, SO_RubberBand, SO_ToolBar, SO_GraphicsItem, - - SO_Complex = 0xf0000, SO_Slider, SO_SpinBox, SO_ToolButton, SO_ComboBox, - SO_TitleBar, SO_GroupBox, SO_SizeGrip, - - SO_CustomBase = 0xf00, - SO_ComplexCustomBase = 0xf000000 - }; - Q_ENUMS(OptionType) - - enum StyleOptionType { Type = SO_Default }; - enum StyleOptionVersion { Version = 1 }; - - int version; // TODO: Remove version information - int type; - QStyle::State state; - Qt::LayoutDirection direction; - QRect rect; - QFontMetrics fontMetrics; - QPalette palette; - QObject *styleObject; - - // QQC2 additions. Remember to also update copy - // constructor and assignment operator when adding - // new variables here. - QQuickItem *control; - QWindow *window; - - QStyleOption(int version = QStyleOption::Version, int type = SO_Default); - QStyleOption(const QStyleOption &other); - ~QStyleOption(); - - QStyleOption &operator=(const QStyleOption &other); -}; - -class QStyleOptionFocusRect : public QStyleOption -{ -public: - enum StyleOptionType { Type = SO_FocusRect }; - enum StyleOptionVersion { Version = 1 }; - - QColor backgroundColor; - - QStyleOptionFocusRect(); - QStyleOptionFocusRect(const QStyleOptionFocusRect &other) : QStyleOption(Version, Type) { *this = other; } - QStyleOptionFocusRect &operator=(const QStyleOptionFocusRect &) = default; - -protected: - QStyleOptionFocusRect(int version); -}; - -class QStyleOptionFrame : public QStyleOption -{ -public: - enum StyleOptionType { Type = SO_Frame }; - enum StyleOptionVersion { Version = 3 }; - enum FrameFeature { - None = 0x00, - Flat = 0x01, - Rounded = 0x02 - }; - Q_DECLARE_FLAGS(FrameFeatures, FrameFeature) - enum Shape { - NoFrame = 0, // no frame - Box = 0x0001, // rectangular box - Panel = 0x0002, // rectangular panel - WinPanel = 0x0003, // rectangular panel (Windows) - HLine = 0x0004, // horizontal line - VLine = 0x0005, // vertical line - StyledPanel = 0x0006 // rectangular panel depending on the GUI style - }; - enum Shadow { - Plain = 0x0010, // plain line - Raised = 0x0020, // raised shadow effect - Sunken = 0x0030 // sunken shadow effect - }; - - int lineWidth; - int midLineWidth; - FrameFeatures features; - Shape frameShape; - - QStyleOptionFrame(); - QStyleOptionFrame(const QStyleOptionFrame &other) : QStyleOption(Version, Type) { *this = other; } - QStyleOptionFrame &operator=(const QStyleOptionFrame &) = default; - -protected: - QStyleOptionFrame(int version); -}; - -Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionFrame::FrameFeatures) - -Q_DECL_DEPRECATED typedef QStyleOptionFrame QStyleOptionFrameV2; -Q_DECL_DEPRECATED typedef QStyleOptionFrame QStyleOptionFrameV3; - -class QStyleOptionTab : public QStyleOption -{ -public: - enum StyleOptionType { Type = SO_Tab }; - enum StyleOptionVersion { Version = 3 }; - - enum TabPosition { Beginning, Middle, End, OnlyOneTab }; - enum SelectedPosition { NotAdjacent, NextIsSelected, PreviousIsSelected }; - enum CornerWidget { NoCornerWidgets = 0x00, LeftCornerWidget = 0x01, - RightCornerWidget = 0x02 }; - enum TabFeature { None = 0x00, HasFrame = 0x01 }; - enum Shape { RoundedNorth, RoundedSouth, RoundedWest, RoundedEast, - TriangularNorth, TriangularSouth, TriangularWest, TriangularEast - }; - Q_DECLARE_FLAGS(CornerWidgets, CornerWidget) - Q_DECLARE_FLAGS(TabFeatures, TabFeature) - - QString text; - QIcon icon; - int row; - TabPosition position; - Shape shape = RoundedNorth; - SelectedPosition selectedPosition; - CornerWidgets cornerWidgets; - QSize iconSize; - bool documentMode; - QSize leftButtonSize; - QSize rightButtonSize; - TabFeatures features; - - QStyleOptionTab(); - QStyleOptionTab(const QStyleOptionTab &other) : QStyleOption(Version, Type) { *this = other; } - QStyleOptionTab &operator=(const QStyleOptionTab &) = default; - -protected: - QStyleOptionTab(int version); -}; - -class QStyleOptionTabWidgetFrame : public QStyleOption -{ -public: - enum StyleOptionType { Type = SO_TabWidgetFrame }; - enum StyleOptionVersion { Version = 2 }; - - int lineWidth; - int midLineWidth; - QStyleOptionTab::Shape shape; - QSize tabBarSize; - QSize rightCornerWidgetSize; - QSize leftCornerWidgetSize; - QRect tabBarRect; - QRect selectedTabRect; - - QStyleOptionTabWidgetFrame(); - inline QStyleOptionTabWidgetFrame(const QStyleOptionTabWidgetFrame &other) - : QStyleOption(Version, Type) { *this = other; } - QStyleOptionTabWidgetFrame &operator=(const QStyleOptionTabWidgetFrame &) = default; - -protected: - QStyleOptionTabWidgetFrame(int version); -}; - -Q_DECL_DEPRECATED typedef QStyleOptionTabWidgetFrame QStyleOptionTabWidgetFrameV2; - - -class QStyleOptionTabBarBase : public QStyleOption -{ -public: - enum StyleOptionType { Type = SO_TabBarBase }; - - enum TabBarPosition { North, South, West, East }; - enum ButtonPosition { LeftSide, RightSide }; - - QRect tabBarRect; - QRect selectedTabRect; - bool documentMode; - QStyleOptionTab::Shape shape; - - QStyleOptionTabBarBase(); - QStyleOptionTabBarBase(const QStyleOptionTabBarBase &other) : QStyleOption(Version, Type) { *this = other; } - QStyleOptionTabBarBase &operator=(const QStyleOptionTabBarBase &) = default; - -protected: - QStyleOptionTabBarBase(int version); -}; - -class QStyleOptionHeader : public QStyleOption -{ -public: - enum StyleOptionType { Type = SO_Header }; - enum StyleOptionVersion { Version = 1 }; - enum SectionPosition { Beginning, Middle, End, OnlyOneSection }; - enum SelectedPosition { NotAdjacent, NextIsSelected, PreviousIsSelected, - NextAndPreviousAreSelected }; - enum SortIndicator { None, SortUp, SortDown }; - - int section; - QString text; - Qt::Alignment textAlignment; - QIcon icon; - Qt::Alignment iconAlignment; - SectionPosition position; - SelectedPosition selectedPosition; - SortIndicator sortIndicator; - Qt::Orientation orientation; - - QStyleOptionHeader(); - QStyleOptionHeader(const QStyleOptionHeader &other) : QStyleOption(Version, Type) { *this = other; } - QStyleOptionHeader &operator=(const QStyleOptionHeader &) = default; - -protected: - QStyleOptionHeader(int version); -}; - -class QStyleOptionButton : public QStyleOption -{ -public: - enum StyleOptionType { Type = SO_Button }; - enum StyleOptionVersion { Version = 1 }; - - enum ButtonFeature { None = 0x00, Flat = 0x01, HasMenu = 0x02, DefaultButton = 0x04, - AutoDefaultButton = 0x08, CommandLinkButton = 0x10 }; - Q_DECLARE_FLAGS(ButtonFeatures, ButtonFeature) - - ButtonFeatures features; - QString text; - QIcon icon; - QSize iconSize; - - QStyleOptionButton(); - QStyleOptionButton(const QStyleOptionButton &other) : QStyleOption(Version, Type) { *this = other; } - QStyleOptionButton &operator=(const QStyleOptionButton &) = default; - -protected: - QStyleOptionButton(int version); -}; - -Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionButton::ButtonFeatures) - -class QStyleOptionTabV4 : public QStyleOptionTab -{ -public: - enum StyleOptionVersion { Version = 4 }; - QStyleOptionTabV4(); - int tabIndex = -1; -}; - -Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionTab::CornerWidgets) - -Q_DECL_DEPRECATED typedef QStyleOptionTab QStyleOptionTabV2; -Q_DECL_DEPRECATED typedef QStyleOptionTab QStyleOptionTabV3; - - -class QStyleOptionToolBar : public QStyleOption -{ -public: - enum StyleOptionType { Type = SO_ToolBar }; - enum StyleOptionVersion { Version = 1 }; - enum ToolBarPosition { Beginning, Middle, End, OnlyOne }; - enum ToolBarFeature { None = 0x0, Movable = 0x1 }; - Q_DECLARE_FLAGS(ToolBarFeatures, ToolBarFeature) - - ToolBarPosition positionOfLine; // The toolbar line position - ToolBarPosition positionWithinLine; // The position within a toolbar - Qt::ToolBarArea toolBarArea; // The toolbar docking area - ToolBarFeatures features; - int lineWidth; - int midLineWidth; - - QStyleOptionToolBar(); - QStyleOptionToolBar(const QStyleOptionToolBar &other) : QStyleOption(Version, Type) { *this = other; } - QStyleOptionToolBar &operator=(const QStyleOptionToolBar &) = default; - -protected: - QStyleOptionToolBar(int version); -}; - -Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionToolBar::ToolBarFeatures) - -class QStyleOptionProgressBar : public QStyleOption -{ -public: - enum StyleOptionType { Type = SO_ProgressBar }; - enum StyleOptionVersion { Version = 2 }; - - int minimum; - int maximum; - int progress; - QString text; - Qt::Alignment textAlignment; - bool textVisible; - bool invertedAppearance; - bool bottomToTop; - - QStyleOptionProgressBar(); - QStyleOptionProgressBar(const QStyleOptionProgressBar &other) : QStyleOption(Version, Type) { *this = other; } - QStyleOptionProgressBar &operator=(const QStyleOptionProgressBar &) = default; - -protected: - QStyleOptionProgressBar(int version); -}; - -class QStyleOptionMenuItem : public QStyleOption -{ -public: - enum StyleOptionType { Type = SO_MenuItem }; - enum StyleOptionVersion { Version = 1 }; - - enum MenuItemType { Normal, DefaultItem, Separator, SubMenu, Scroller, TearOff, Margin, - EmptyArea }; - enum CheckType { NotCheckable, Exclusive, NonExclusive }; - - MenuItemType menuItemType; - CheckType checkType; - bool checked; - bool menuHasCheckableItems; - QRect menuRect; - QString text; - QIcon icon; - int maxIconWidth; - int tabWidth; // ### Qt 6: rename to reservedShortcutWidth - QFont font; - - QStyleOptionMenuItem(); - QStyleOptionMenuItem(const QStyleOptionMenuItem &other) : QStyleOption(Version, Type) { *this = other; } - QStyleOptionMenuItem &operator=(const QStyleOptionMenuItem &) = default; - -protected: - QStyleOptionMenuItem(int version); -}; - -class QStyleOptionDockWidget : public QStyleOption -{ -public: - enum StyleOptionType { Type = SO_DockWidget }; - enum StyleOptionVersion { Version = 2 }; - - QString title; - bool closable; - bool movable; - bool floatable; - bool verticalTitleBar; - - QStyleOptionDockWidget(); - QStyleOptionDockWidget(const QStyleOptionDockWidget &other) : QStyleOption(Version, Type) { *this = other; } - QStyleOptionDockWidget &operator=(const QStyleOptionDockWidget &) = default; - -protected: - QStyleOptionDockWidget(int version); -}; - -Q_DECL_DEPRECATED typedef QStyleOptionDockWidget QStyleOptionDockWidgetV2; - -class QStyleOptionViewItem : public QStyleOption -{ -public: - enum StyleOptionType { Type = SO_ViewItem }; - enum StyleOptionVersion { Version = 4 }; - - enum Position { Left, Right, Top, Bottom }; - enum ScrollMode { ScrollPerItem, ScrollPerPixel }; // Doesn't really belong in this class. - - Qt::Alignment displayAlignment; - Qt::Alignment decorationAlignment; - Qt::TextElideMode textElideMode; - Position decorationPosition; - QSize decorationSize; - QFont font; - bool showDecorationSelected; - - enum ViewItemFeature { - None = 0x00, - WrapText = 0x01, - Alternate = 0x02, - HasCheckIndicator = 0x04, - HasDisplay = 0x08, - HasDecoration = 0x10 - }; - Q_DECLARE_FLAGS(ViewItemFeatures, ViewItemFeature) - - ViewItemFeatures features; - - QLocale locale; - - enum ViewItemPosition { Invalid, Beginning, Middle, End, OnlyOne }; - - QModelIndex index; - Qt::CheckState checkState; - QIcon icon; - QString text; - ViewItemPosition viewItemPosition; - QBrush backgroundBrush; - - QStyleOptionViewItem(); - QStyleOptionViewItem(const QStyleOptionViewItem &other) : QStyleOption(Version, Type) { *this = other; } - QStyleOptionViewItem &operator=(const QStyleOptionViewItem &) = default; - -protected: - QStyleOptionViewItem(int version); -}; - -Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionViewItem::ViewItemFeatures) - -Q_DECL_DEPRECATED typedef QStyleOptionViewItem QStyleOptionViewItemV2; -Q_DECL_DEPRECATED typedef QStyleOptionViewItem QStyleOptionViewItemV3; -Q_DECL_DEPRECATED typedef QStyleOptionViewItem QStyleOptionViewItemV4; - -class QStyleOptionToolBox : public QStyleOption -{ -public: - enum StyleOptionType { Type = SO_ToolBox }; - enum StyleOptionVersion { Version = 2 }; - - QString text; - QIcon icon; - - enum TabPosition { Beginning, Middle, End, OnlyOneTab }; - enum SelectedPosition { NotAdjacent, NextIsSelected, PreviousIsSelected }; - - TabPosition position; - SelectedPosition selectedPosition; - - QStyleOptionToolBox(); - QStyleOptionToolBox(const QStyleOptionToolBox &other) : QStyleOption(Version, Type) { *this = other; } - QStyleOptionToolBox &operator=(const QStyleOptionToolBox &) = default; - -protected: - QStyleOptionToolBox(int version); -}; - -Q_DECL_DEPRECATED typedef QStyleOptionToolBox QStyleOptionToolBoxV2; - -class QStyleOptionRubberBand : public QStyleOption -{ -public: - enum StyleOptionType { Type = SO_RubberBand }; - enum StyleOptionVersion { Version = 1 }; - enum Shape { Line, Rectangle }; - - bool opaque; - Shape shape; - - QStyleOptionRubberBand(); - QStyleOptionRubberBand(const QStyleOptionRubberBand &other) : QStyleOption(Version, Type) { *this = other; } - QStyleOptionRubberBand &operator=(const QStyleOptionRubberBand &) = default; - -protected: - QStyleOptionRubberBand(int version); -}; - -// -------------------------- Complex style options ------------------------------- -class QStyleOptionComplex : public QStyleOption -{ -public: - enum StyleOptionType { Type = SO_Complex }; - enum StyleOptionVersion { Version = 1 }; - - QStyle::SubControls subControls; - QStyle::SubControls activeSubControls; - - QStyleOptionComplex(int version = QStyleOptionComplex::Version, int type = SO_Complex); - QStyleOptionComplex(const QStyleOptionComplex &other) : QStyleOption(Version, Type) { *this = other; } - QStyleOptionComplex &operator=(const QStyleOptionComplex &) = default; -}; - -class QStyleOptionSlider : public QStyleOptionComplex -{ -public: - enum StyleOptionType { Type = SO_Slider }; - enum StyleOptionVersion { Version = 1 }; - enum TickPosition { - NoTicks = 0, - TicksAbove = 1, - TicksLeft = TicksAbove, - TicksBelow = 2, - TicksRight = TicksBelow, - TicksBothSides = 3 - }; - - Qt::Orientation orientation; - int minimum; - int maximum; - TickPosition tickPosition; - int tickInterval; - bool upsideDown; - int sliderPosition; - int sliderValue; - int singleStep; - int pageStep; - qreal notchTarget; - bool dialWrapping; - - QStyleOptionSlider(); - QStyleOptionSlider(const QStyleOptionSlider &other) : QStyleOptionComplex(Version, Type) { *this = other; } - QStyleOptionSlider &operator=(const QStyleOptionSlider &) = default; - -protected: - QStyleOptionSlider(int version); -}; - -class QStyleOptionSpinBox : public QStyleOptionComplex -{ -public: - enum StyleOptionType { Type = SO_SpinBox }; - enum StyleOptionVersion { Version = 1 }; - enum StepEnabledFlag { StepNone = 0x00, StepUpEnabled = 0x01, StepDownEnabled = 0x02, StepEnabled = 0xFF }; - enum ButtonSymbols { UpDownArrows, PlusMinus, NoButtons }; - - ButtonSymbols buttonSymbols; - StepEnabledFlag stepEnabled; - bool frame; - - QStyleOptionSpinBox(); - QStyleOptionSpinBox(const QStyleOptionSpinBox &other) : QStyleOptionComplex(Version, Type) { *this = other; } - QStyleOptionSpinBox &operator=(const QStyleOptionSpinBox &) = default; - -protected: - QStyleOptionSpinBox(int version); -}; - -class QStyleOptionToolButton : public QStyleOptionComplex -{ -public: - enum StyleOptionType { Type = SO_ToolButton }; - enum StyleOptionVersion { Version = 1 }; - - enum ToolButtonFeature { None = 0x00, Arrow = 0x01, Menu = 0x04, MenuButtonPopup = Menu, PopupDelay = 0x08, - HasMenu = 0x10 }; - Q_DECLARE_FLAGS(ToolButtonFeatures, ToolButtonFeature) - - ToolButtonFeatures features; - QIcon icon; - QSize iconSize; - QString text; - Qt::ArrowType arrowType; - Qt::ToolButtonStyle toolButtonStyle; - QPoint pos; - QFont font; - - QStyleOptionToolButton(); - QStyleOptionToolButton(const QStyleOptionToolButton &other) : QStyleOptionComplex(Version, Type) { *this = other; } - QStyleOptionToolButton &operator=(const QStyleOptionToolButton &) = default; - -protected: - QStyleOptionToolButton(int version); -}; - -Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionToolButton::ToolButtonFeatures) - -class QStyleOptionComboBox : public QStyleOptionComplex -{ -public: - enum StyleOptionType { Type = SO_ComboBox }; - enum StyleOptionVersion { Version = 1 }; - - bool editable; - QRect popupRect; - bool frame; - QString currentText; - QIcon currentIcon; - QSize iconSize; - - QStyleOptionComboBox(); - QStyleOptionComboBox(const QStyleOptionComboBox &other) : QStyleOptionComplex(Version, Type) { *this = other; } - QStyleOptionComboBox &operator=(const QStyleOptionComboBox &) = default; - -protected: - QStyleOptionComboBox(int version); -}; - -class QStyleOptionTitleBar : public QStyleOptionComplex -{ -public: - enum StyleOptionType { Type = SO_TitleBar }; - enum StyleOptionVersion { Version = 1 }; - - QString text; - QIcon icon; - int titleBarState; - Qt::WindowFlags titleBarFlags; - - QStyleOptionTitleBar(); - QStyleOptionTitleBar(const QStyleOptionTitleBar &other) : QStyleOptionComplex(Version, Type) { *this = other; } - QStyleOptionTitleBar &operator=(const QStyleOptionTitleBar &) = default; - -protected: - QStyleOptionTitleBar(int version); -}; - -class QStyleOptionGroupBox : public QStyleOptionComplex -{ -public: - enum StyleOptionType { Type = SO_GroupBox }; - enum StyleOptionVersion { Version = 1 }; - - QStyleOptionFrame::FrameFeatures features; - QString text; - Qt::Alignment textAlignment; - QColor textColor; - int lineWidth; - int midLineWidth; - - QStyleOptionGroupBox(); - QStyleOptionGroupBox(const QStyleOptionGroupBox &other) : QStyleOptionComplex(Version, Type) { *this = other; } - QStyleOptionGroupBox &operator=(const QStyleOptionGroupBox &) = default; -protected: - QStyleOptionGroupBox(int version); -}; - -class QStyleOptionSizeGrip : public QStyleOptionComplex -{ -public: - enum StyleOptionType { Type = SO_SizeGrip }; - enum StyleOptionVersion { Version = 1 }; - - Qt::Corner corner; - - QStyleOptionSizeGrip(); - QStyleOptionSizeGrip(const QStyleOptionSizeGrip &other) : QStyleOptionComplex(Version, Type) { *this = other; } - QStyleOptionSizeGrip &operator=(const QStyleOptionSizeGrip &) = default; -protected: - QStyleOptionSizeGrip(int version); -}; - -class QStyleOptionGraphicsItem : public QStyleOption -{ -public: - enum StyleOptionType { Type = SO_GraphicsItem }; - enum StyleOptionVersion { Version = 1 }; - - QRectF exposedRect; - qreal levelOfDetail; - - QStyleOptionGraphicsItem(); - QStyleOptionGraphicsItem(const QStyleOptionGraphicsItem &other) : QStyleOption(Version, Type) { *this = other; } - QStyleOptionGraphicsItem &operator=(const QStyleOptionGraphicsItem &) = default; - static qreal levelOfDetailFromTransform(const QTransform &worldTransform); -protected: - QStyleOptionGraphicsItem(int version); -}; - -template -T qstyleoption_cast(const QStyleOption *opt) -{ - typedef typename std::remove_cv::type>::type Opt; - if (opt && opt->version >= Opt::Version && (opt->type == Opt::Type - || int(Opt::Type) == QStyleOption::SO_Default - || (int(Opt::Type) == QStyleOption::SO_Complex - && opt->type > QStyleOption::SO_Complex))) - return static_cast(opt); - return nullptr; -} - -template -T qstyleoption_cast(QStyleOption *opt) -{ - typedef typename std::remove_cv::type>::type Opt; - if (opt && opt->version >= Opt::Version && (opt->type == Opt::Type - || int(Opt::Type) == QStyleOption::SO_Default - || (int(Opt::Type) == QStyleOption::SO_Complex - && opt->type > QStyleOption::SO_Complex))) - return static_cast(opt); - return nullptr; -} - -// -------------------------- QStyleHintReturn ------------------------------- - -class QStyleHintReturn -{ -public: - enum HintReturnType { - SH_Default=0xf000, SH_Mask, SH_Variant - }; - - enum StyleOptionType { Type = SH_Default }; - enum StyleOptionVersion { Version = 1 }; - - QStyleHintReturn(int version = QStyleOption::Version, int type = SH_Default); - ~QStyleHintReturn(); - - int version; - int type; -}; - -class QStyleHintReturnMask : public QStyleHintReturn -{ -public: - enum StyleOptionType { Type = SH_Mask }; - enum StyleOptionVersion { Version = 1 }; - - QStyleHintReturnMask(); - ~QStyleHintReturnMask(); - - QRegion region; -}; - -class QStyleHintReturnVariant : public QStyleHintReturn -{ -public: - enum StyleOptionType { Type = SH_Variant }; - enum StyleOptionVersion { Version = 1 }; - - QStyleHintReturnVariant(); - ~QStyleHintReturnVariant(); - - QVariant variant; -}; - -template -T qstyleoption_cast(const QStyleHintReturn *hint) -{ - typedef typename std::remove_cv::type>::type Opt; - if (hint && hint->version <= Opt::Version && - (hint->type == Opt::Type || int(Opt::Type) == QStyleHintReturn::SH_Default)) - return static_cast(hint); - return nullptr; -} - -template -T qstyleoption_cast(QStyleHintReturn *hint) -{ - typedef typename std::remove_cv::type>::type Opt; - if (hint && hint->version <= Opt::Version && - (hint->type == Opt::Type || int(Opt::Type) == QStyleHintReturn::SH_Default)) - return static_cast(hint); - return nullptr; -} - -#if !defined(QT_NO_DEBUG_STREAM) -QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType); -QDebug operator<<(QDebug debug, const QStyleOption &option); -#endif - -} // namespace QQC2 - -QT_END_NAMESPACE - -#endif // QSTYLEOPTION_H diff --git a/src/imports/nativestyle/qstyle/qstyle.pri b/src/imports/nativestyle/qstyle/qstyle.pri deleted file mode 100644 index 4d025498..00000000 --- a/src/imports/nativestyle/qstyle/qstyle.pri +++ /dev/null @@ -1,23 +0,0 @@ -INCLUDEPATH += $$PWD - -HEADERS += \ - $$PWD/qquicknativestyle.h \ - $$PWD/qquickcommonstyle.h \ - $$PWD/qquickcommonstyle_p.h \ - $$PWD/qquickcommonstylepixmaps_p.h \ - $$PWD/qquickdrawutil.h \ - $$PWD/qquickstyle.h \ - $$PWD/qquickstyle_p.h \ - $$PWD/qquickstylehelper_p.h \ - $$PWD/qquickstyleoption.h - -SOURCES += \ - $$PWD/qquicknativestyle.cpp \ - $$PWD/qquickcommonstyle.cpp \ - $$PWD/qquickdrawutil.cpp \ - $$PWD/qquickstyle.cpp \ - $$PWD/qquickstylehelper.cpp \ - $$PWD/qquickstyleoption.cpp - -macos: include(mac/mac.pri) -win32: include(windows/windows.pri) diff --git a/src/imports/nativestyle/qstyle/windows/qquickwindowsstyle.cpp b/src/imports/nativestyle/qstyle/windows/qquickwindowsstyle.cpp deleted file mode 100644 index 242b770d..00000000 --- a/src/imports/nativestyle/qstyle/windows/qquickwindowsstyle.cpp +++ /dev/null @@ -1,2388 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWidgets module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickwindowsstyle_p.h" -#include "qquickwindowsstyle_p_p.h" -#include "qquickstyleoption.h" -#include "qquickstylehelper_p.h" -#include "qquickdrawutil.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if 0 && QT_CONFIG(animation) -//#include -#endif - -#include - -QT_BEGIN_NAMESPACE - -#if defined(Q_OS_WIN) - -QT_BEGIN_INCLUDE_NAMESPACE -#include "qt_windows.h" -QT_END_INCLUDE_NAMESPACE -# ifndef COLOR_GRADIENTACTIVECAPTION -# define COLOR_GRADIENTACTIVECAPTION 27 -# endif -# ifndef COLOR_GRADIENTINACTIVECAPTION -# define COLOR_GRADIENTINACTIVECAPTION 28 -# endif - -Q_GUI_EXPORT HICON qt_pixmapToWinHICON(const QPixmap &); -#endif //Q_OS_WIN - -QT_BEGIN_INCLUDE_NAMESPACE -#include -QT_END_INCLUDE_NAMESPACE - -namespace QQC2 { - -enum QSliderDirection { SlUp, SlDown, SlLeft, SlRight }; - -/* - \internal -*/ - -QWindowsStylePrivate::QWindowsStylePrivate() = default; - -qreal QWindowsStylePrivate::appDevicePixelRatio() -{ - return qApp->devicePixelRatio(); -} - -bool QWindowsStylePrivate::isDarkMode() -{ - bool result = false; -#ifdef Q_OS_WIN - // Windows only: Return whether dark mode style support is desired and - // dark mode is in effect. - if (auto ni = QGuiApplication::platformNativeInterface()) { - const QVariant darkModeStyleP = ni->property("darkModeStyle"); - result = darkModeStyleP.metaType().id() == QMetaType::Bool - && darkModeStyleP.value() - && ni->property("darkMode").value(); - } -#endif - return result; -} - -// ###TODO SH_UnderlineShortcut -#if 0 -// Returns \c true if the toplevel parent of \a widget has seen the Alt-key -bool QWindowsStylePrivate::hasSeenAlt(const QWidget *widget) const -{ - widget = widget->window(); - return seenAlt.contains(widget); -} - -/*! - \reimp -*/ -bool QWindowsStyle::eventFilter(QObject *o, QEvent *e) -{ - // Records Alt- and Focus events -// if (!o->isWidgetType()) - return QObject::eventFilter(o, e); - QWidget *widget = qobject_cast(o); - Q_D(QWindowsStyle); - switch (e->type()) { - case QEvent::KeyPress: - if (static_cast(e)->key() == Qt::Key_Alt) { - widget = widget->window(); - - // Alt has been pressed - find all widgets that care - QList l = widget->findChildren(); - auto ignorable = [](QWidget *w) { - return w->isWindow() || !w->isVisible() - || w->style()->styleHint(SH_UnderlineShortcut, nullptr, w); - }; - l.erase(std::remove_if (l.begin(), l.end(), ignorable), l.end()); - // Update states before repainting - d->seenAlt.append(widget); - d->alt_down = true; - - // Repaint all relevant widgets - for (int pos = 0; pos < l.size(); ++pos) - l.at(pos)->update(); - } - break; - case QEvent::KeyRelease: - if (static_cast(e)->key() == Qt::Key_Alt) { - widget = widget->window(); - - // Update state and repaint the menu bars. - d->alt_down = false; -#if 0 && QT_CONFIG(menubar) - QList l = widget->findChildren(); - for (int i = 0; i < l.size(); ++i) - l.at(i)->update(); -#endif - } - break; - case QEvent::Close: - // Reset widget when closing - d->seenAlt.removeAll(widget); - d->seenAlt.removeAll(widget->window()); - break; - default: - break; - } - return QCommonStyle::eventFilter(o, e); -} -#endif - -/*! - \class QWindowsStyle - \brief The QWindowsStyle class provides a Microsoft Windows-like look and feel. - - \ingroup appearance - \inmodule QtWidgets - \internal - - This style is Qt's default GUI style on Windows. - - \image qwindowsstyle.png - \sa QWindowsVistaStyle, QMacStyle, QFusionStyle -*/ - -/*! - Constructs a QWindowsStyle object. -*/ -QWindowsStyle::QWindowsStyle() : QCommonStyle(*new QWindowsStylePrivate) -{ -} - -/*! - \internal - - Constructs a QWindowsStyle object. -*/ -QWindowsStyle::QWindowsStyle(QWindowsStylePrivate &dd) : QCommonStyle(dd) -{ -} - - -/*! Destroys the QWindowsStyle object. */ -QWindowsStyle::~QWindowsStyle() -{ -} - -#ifdef Q_OS_WIN -static inline QRgb colorref2qrgb(COLORREF col) -{ - return qRgb(GetRValue(col), GetGValue(col), GetBValue(col)); -} -#endif -#if 0 -/*! \reimp */ -void QWindowsStyle::polish(QApplication *app) -{ - QCommonStyle::polish(app); - QWindowsStylePrivate *d = const_cast(d_func()); - // We only need the overhead when shortcuts are sometimes hidden - if (!proxy()->styleHint(SH_UnderlineShortcut, nullptr) && app) - app->installEventFilter(this); - - const auto &palette = QGuiApplication::palette(); - d->activeGradientCaptionColor = palette.highlight().color(); - d->activeCaptionColor = d->activeGradientCaptionColor; - d->inactiveGradientCaptionColor = palette.dark().color(); - d->inactiveCaptionColor = d->inactiveGradientCaptionColor; - d->inactiveCaptionText = palette.window().color(); - -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) //fetch native title bar colors - if (app->desktopSettingsAware()){ - DWORD activeCaption = GetSysColor(COLOR_ACTIVECAPTION); - DWORD gradientActiveCaption = GetSysColor(COLOR_GRADIENTACTIVECAPTION); - DWORD inactiveCaption = GetSysColor(COLOR_INACTIVECAPTION); - DWORD gradientInactiveCaption = GetSysColor(COLOR_GRADIENTINACTIVECAPTION); - DWORD inactiveCaptionText = GetSysColor(COLOR_INACTIVECAPTIONTEXT); - d->activeCaptionColor = colorref2qrgb(activeCaption); - d->activeGradientCaptionColor = colorref2qrgb(gradientActiveCaption); - d->inactiveCaptionColor = colorref2qrgb(inactiveCaption); - d->inactiveGradientCaptionColor = colorref2qrgb(gradientInactiveCaption); - d->inactiveCaptionText = colorref2qrgb(inactiveCaptionText); - } -#endif -} - -/*! \reimp */ -void QWindowsStyle::unpolish(QApplication *app) -{ - QCommonStyle::unpolish(app); - app->removeEventFilter(this); -} - -/*! \reimp */ -void QWindowsStyle::polish(QWidget *widget) -{ - QCommonStyle::polish(widget); -} - -/*! \reimp */ -void QWindowsStyle::unpolish(QWidget *widget) -{ - QCommonStyle::unpolish(widget); -} - -/*! - \reimp -*/ -void QWindowsStyle::polish(QPalette &pal) -{ - QCommonStyle::polish(pal); -} -#endif - -int QWindowsStylePrivate::pixelMetricFromSystemDp(QStyle::PixelMetric pm, const QStyleOption *opt) -{ -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) - switch (pm) { - case QStyle::PM_DockWidgetFrameWidth: - return GetSystemMetrics(SM_CXFRAME); - - case QStyle::PM_TitleBarHeight: - Q_ASSERT(opt); - if (const QStyleOptionTitleBar *tb = qstyleoption_cast(opt)) { - if ((tb->titleBarFlags & Qt::WindowType_Mask) == Qt::Tool) { - // MS always use one less than they say - return GetSystemMetrics(SM_CYSMCAPTION) - 1; - } - } - return GetSystemMetrics(SM_CYCAPTION) - 1; - - case QStyle::PM_ScrollBarExtent: - { - NONCLIENTMETRICS ncm; - ncm.cbSize = FIELD_OFFSET(NONCLIENTMETRICS, lfMessageFont) + sizeof(LOGFONT); - if (SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0)) - return qMax(ncm.iScrollHeight, ncm.iScrollWidth); - } - break; - - case QStyle::PM_MdiSubWindowFrameWidth: - return GetSystemMetrics(SM_CYFRAME); - - default: - break; - } -#else // Q_OS_WIN && !Q_OS_WINRT - Q_UNUSED(pm); - Q_UNUSED(widget); -#endif - return QWindowsStylePrivate::InvalidMetric; -} - -int QWindowsStylePrivate::fixedPixelMetric(QStyle::PixelMetric pm) -{ - switch (pm) { - case QStyle::PM_ToolBarItemSpacing: - return 0; - case QStyle::PM_ButtonDefaultIndicator: - case QStyle::PM_ButtonShiftHorizontal: - case QStyle::PM_ButtonShiftVertical: - case QStyle::PM_MenuHMargin: - case QStyle::PM_MenuVMargin: - case QStyle::PM_ToolBarItemMargin: - return 1; - case QStyle::PM_DockWidgetSeparatorExtent: - return 4; -#if 0 && QT_CONFIG(tabbar) - case QStyle::PM_TabBarTabShiftHorizontal: - return 0; - case QStyle::PM_TabBarTabShiftVertical: - return 2; -#endif - - case QStyle::PM_SliderLength: - return 11; - -#if 0 && QT_CONFIG(menu) - case QStyle::PM_MenuBarHMargin: - case QStyle::PM_MenuBarVMargin: - case QStyle::PM_MenuBarPanelWidth: - return 0; - case QStyle::PM_SmallIconSize: - return 16; - case QStyle::PM_LargeIconSize: - return 32; - case QStyle::PM_DockWidgetTitleMargin: - return 2; - case QStyle::PM_DockWidgetTitleBarButtonMargin: - case QStyle::PM_DockWidgetFrameWidth: - return 4; - -#endif // QT_CONFIG(menu) - case QStyle::PM_ToolBarHandleExtent: - return 10; - default: - break; - } - return QWindowsStylePrivate::InvalidMetric; -} - -static QScreen *screenOf(const QWindow *w) -{ - if (w) { - if (auto screen = w->screen()) - return screen; - } - return QGuiApplication::primaryScreen(); -} - -// Calculate the overall scale factor to obtain Qt Device Independent -// Pixels from a native Windows size. Divide by devicePixelRatio -// and account for secondary screens with differing logical DPI. -qreal QWindowsStylePrivate::nativeMetricScaleFactor(const QStyleOption *opt) -{ - Q_ASSERT(opt); - const QWindow *win = opt->window; - return nativeMetricScaleFactor(win); -} - -qreal QWindowsStylePrivate::nativeMetricScaleFactor(const QWindow *win) -{ - qreal result = qreal(1) / QWindowsStylePrivate::devicePixelRatio(win); - if (QGuiApplicationPrivate::screen_list.size() > 1) { - const QScreen *primaryScreen = QGuiApplication::primaryScreen(); - const QScreen *screen = screenOf(win); - if (screen != primaryScreen) { - const qreal primaryLogicalDpi = primaryScreen->handle()->logicalDpi().first; - const qreal logicalDpi = screen->handle()->logicalDpi().first; - if (!qFuzzyCompare(primaryLogicalDpi, logicalDpi)) - result *= logicalDpi / primaryLogicalDpi; - } - } - return result; -} - -/*! - \reimp -*/ -int QWindowsStyle::pixelMetric(PixelMetric pm, const QStyleOption *opt) const -{ - int ret = QWindowsStylePrivate::pixelMetricFromSystemDp(pm, opt); - if (ret != QWindowsStylePrivate::InvalidMetric) - return qRound(qreal(ret) * QWindowsStylePrivate::nativeMetricScaleFactor(opt)); - - ret = QWindowsStylePrivate::fixedPixelMetric(pm); - if (ret != QWindowsStylePrivate::InvalidMetric) - return int(QStyleHelper::dpiScaled(ret, opt)); - - ret = 0; - - switch (pm) { - case PM_MaximumDragDistance: - ret = QCommonStyle::pixelMetric(PM_MaximumDragDistance); - if (ret == -1) - ret = 60; - break; - - // Returns the number of pixels to use for the business part of the - // slider (i.e., the non-tickmark portion). The remaining space is shared - // equally between the tickmark regions. - case PM_SliderControlThickness: - if (const QStyleOptionSlider *sl = qstyleoption_cast(opt)) { - int space = (sl->orientation == Qt::Horizontal) ? sl->rect.height() : sl->rect.width(); - int ticks = sl->tickPosition; - int n = 0; - if (ticks & QStyleOptionSlider::TicksAbove) - ++n; - if (ticks & QStyleOptionSlider::TicksBelow) - ++n; - if (!n) { - ret = space; - break; - } - - int thick = 6; // Magic constant to get 5 + 16 + 5 - if (ticks != QStyleOptionSlider::TicksBothSides && ticks != QStyleOptionSlider::NoTicks) - thick += proxy()->pixelMetric(PM_SliderLength, sl) / 4; - - space -= thick; - if (space > 0) - thick += (space * 2) / (n + 2); - ret = thick; - } - break; - - case PM_IconViewIconSize: - ret = proxy()->pixelMetric(PM_LargeIconSize, opt); - break; - - case PM_SplitterWidth: - ret = int(QStyleHelper::dpiScaled(4, opt)); - break; - - default: - ret = QCommonStyle::pixelMetric(pm, opt); - break; - } - - return ret; -} - -/*! - \reimp - */ -QPixmap QWindowsStyle::standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt) const -{ -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) - QPixmap desktopIcon; - switch (standardPixmap) { - case SP_DriveCDIcon: - case SP_DriveDVDIcon: - case SP_DriveNetIcon: - case SP_DriveHDIcon: - case SP_DriveFDIcon: - case SP_FileIcon: - case SP_FileLinkIcon: - case SP_DirLinkIcon: - case SP_DirClosedIcon: - case SP_DesktopIcon: - case SP_ComputerIcon: - case SP_DirOpenIcon: - case SP_FileDialogNewFolder: - case SP_DirHomeIcon: - case SP_TrashIcon: - case SP_VistaShield: - if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) { - QPlatformTheme::StandardPixmap sp = static_cast(standardPixmap); - desktopIcon = theme->standardPixmap(sp, QSizeF(16, 16)); - } - break; - case SP_MessageBoxInformation: - case SP_MessageBoxWarning: - case SP_MessageBoxCritical: - case SP_MessageBoxQuestion: - if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) { - QPlatformTheme::StandardPixmap sp = static_cast(standardPixmap); - desktopIcon = theme->standardPixmap(sp, QSizeF()); - } - break; - default: - break; - } - if (!desktopIcon.isNull()) { - return desktopIcon; - } -#endif // Q_OS_WIN && !Q_OS_WINRT - return QCommonStyle::standardPixmap(standardPixmap, opt); -} - -/*! \reimp */ -int QWindowsStyle::styleHint(StyleHint hint, const QStyleOption *opt, - QStyleHintReturn *returnData) const -{ - int ret = 0; - - switch (hint) { - case SH_EtchDisabledText: - ret = d_func()->isDarkMode() ? 0 : 1; - break; - case SH_Slider_SnapToValue: - case SH_PrintDialog_RightAlignButtons: - case SH_FontDialog_SelectAssociatedText: - case SH_Menu_AllowActiveAndDisabled: - case SH_MenuBar_AltKeyNavigation: - case SH_MenuBar_MouseTracking: - case SH_Menu_MouseTracking: - case SH_ComboBox_ListMouseTracking: - case SH_Slider_StopMouseOverSlider: - case SH_MainWindow_SpaceBelowMenuBar: - ret = 1; - - break; - case SH_ItemView_ShowDecorationSelected: -#if 0 && QT_CONFIG(listview) - if (qobject_cast(widget)) - ret = 1; -#endif - break; - case SH_ItemView_ChangeHighlightOnFocus: - ret = 1; - break; - case SH_ToolBox_SelectedPageTitleBold: - ret = 0; - break; - -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) // Option not used on WinRT -> common style - case SH_UnderlineShortcut: - { - ret = 1; - BOOL cues = false; - SystemParametersInfo(SPI_GETKEYBOARDCUES, 0, &cues, 0); - ret = int(cues); - // Do nothing if we always paint underlines - Q_D(const QWindowsStyle); - if (!ret && d) { -#if 0 && QT_CONFIG(menubar) - const QMenuBar *menuBar = qobject_cast(widget); - if (!menuBar && qobject_cast(widget)) { - QWidget *w = QApplication::activeWindow(); - if (w && w != widget) - menuBar = w->findChild(); - } - // If we paint a menu bar draw underlines if is in the keyboardState - if (menuBar) { - if (menuBar->d_func()->keyboardState || d->altDown()) - ret = 1; - // Otherwise draw underlines if the toplevel widget has seen an alt-press - } else -#endif // QT_CONFIG(menubar) -// if (d->hasSeenAlt(widget)) { -// ret = 1; -// } - } -#ifndef QT_NO_ACCESSIBILITY - if (!ret && opt && opt->type == QStyleOption::SO_MenuItem - && QStyleHelper::isInstanceOf(opt->styleObject, QAccessible::MenuItem) - && opt->styleObject->property("_q_showUnderlined").toBool()) - ret = 1; -#endif // QT_NO_ACCESSIBILITY - break; - } -#endif // Q_OS_WIN && !Q_OS_WINRT - case SH_Menu_SubMenuSloppyCloseTimeout: - case SH_Menu_SubMenuPopupDelay: { -#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) - DWORD delay; - if (SystemParametersInfo(SPI_GETMENUSHOWDELAY, 0, &delay, 0)) - ret = delay; - else -#endif // Q_OS_WIN && !Q_OS_WINRT - ret = 400; - break; - } -#if 0 && QT_CONFIG(rubberband) - case SH_RubberBand_Mask: - if (const QStyleOptionRubberBand *rbOpt = qstyleoption_cast(opt)) { - ret = 0; - if (rbOpt->shape == QRubberBand::Rectangle) { - ret = true; - if (QStyleHintReturnMask *mask = qstyleoption_cast(returnData)) { - mask->region = opt->rect; - int size = 1; - if (widget && widget->isWindow()) - size = 4; - mask->region -= opt->rect.adjusted(size, size, -size, -size); - } - } - } - break; -#endif // QT_CONFIG(rubberband) -#if 0 && QT_CONFIG(wizard) - case SH_WizardStyle: - ret = QWizard::ModernStyle; - break; -#endif - case SH_ItemView_ArrowKeysNavigateIntoChildren: - ret = true; - break; - case SH_DialogButtonBox_ButtonsHaveIcons: - ret = 0; - break; - default: - ret = QCommonStyle::styleHint(hint, opt, returnData); - break; - } - return ret; -} - -/*! \reimp */ -void QWindowsStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p) const -{ - // Used to restore across fallthrough cases. Currently only used in PE_IndicatorCheckBox - bool doRestore = false; - - switch (pe) { -#if 0 && QT_CONFIG(toolbar) - case PE_IndicatorToolBarSeparator: - { - QRect rect = opt->rect; - const int margin = 2; - QPen oldPen = p->pen(); - if (opt->state & State_Horizontal){ - const int offset = rect.width()/2; - p->setPen(QPen(opt->palette.dark().color())); - p->drawLine(rect.bottomLeft().x() + offset, - rect.bottomLeft().y() - margin, - rect.topLeft().x() + offset, - rect.topLeft().y() + margin); - p->setPen(QPen(opt->palette.light().color())); - p->drawLine(rect.bottomLeft().x() + offset + 1, - rect.bottomLeft().y() - margin, - rect.topLeft().x() + offset + 1, - rect.topLeft().y() + margin); - } - else{ //Draw vertical separator - const int offset = rect.height()/2; - p->setPen(QPen(opt->palette.dark().color())); - p->drawLine(rect.topLeft().x() + margin , - rect.topLeft().y() + offset, - rect.topRight().x() - margin, - rect.topRight().y() + offset); - p->setPen(QPen(opt->palette.light().color())); - p->drawLine(rect.topLeft().x() + margin , - rect.topLeft().y() + offset + 1, - rect.topRight().x() - margin, - rect.topRight().y() + offset + 1); - } - p->setPen(oldPen); - } - break; - case PE_IndicatorToolBarHandle: - p->save(); - p->translate(opt->rect.x(), opt->rect.y()); - if (opt->state & State_Horizontal) { - int x = opt->rect.width() / 2 - 4; - if (opt->direction == Qt::RightToLeft) - x -= 2; - if (opt->rect.height() > 4) { - qDrawShadePanel(p, x, 2, 3, opt->rect.height() - 4, - opt->palette, false, 1, nullptr); - qDrawShadePanel(p, x + 3, 2, 3, opt->rect.height() - 4, - opt->palette, false, 1, nullptr); - } - } else { - if (opt->rect.width() > 4) { - int y = opt->rect.height() / 2 - 4; - qDrawShadePanel(p, 2, y, opt->rect.width() - 4, 3, - opt->palette, false, 1, nullptr); - qDrawShadePanel(p, 2, y + 3, opt->rect.width() - 4, 3, - opt->palette, false, 1, nullptr); - } - } - p->restore(); - break; - -#endif // QT_CONFIG(toolbar) - case PE_FrameButtonTool: - case PE_PanelButtonTool: { - QPen oldPen = p->pen(); -#if 0 && QT_CONFIG(dockwidget) - if (w && w->inherits("QDockWidgetTitleButton")) { - if (const QWidget *dw = w->parentWidget()) - if (dw->isWindow()){ - qDrawWinButton(p, opt->rect.adjusted(1, 1, 0, 0), opt->palette, opt->state & (State_Sunken | State_On), - &opt->palette.button()); - - return; - } - } -#endif // QT_CONFIG(dockwidget) - QBrush fill; - bool stippled; - bool panel = (pe == PE_PanelButtonTool); - if ((!(opt->state & State_Sunken )) - && (!(opt->state & State_Enabled) - || !(opt->state & State_MouseOver && opt->state & State_AutoRaise)) - && (opt->state & State_On)) { - fill = QBrush(opt->palette.light().color(), Qt::Dense4Pattern); - stippled = true; - } else { - fill = opt->palette.brush(QPalette::Button); - stippled = false; - } - - if (opt->state & (State_Raised | State_Sunken | State_On)) { - if (opt->state & State_AutoRaise) { - if (opt->state & (State_Enabled | State_Sunken | State_On)){ - if (panel) - qDrawShadePanel(p, opt->rect, opt->palette, - opt->state & (State_Sunken | State_On), 1, &fill); - else - qDrawShadeRect(p, opt->rect, opt->palette, - opt->state & (State_Sunken | State_On), 1); - } - if (stippled) { - p->setPen(opt->palette.button().color()); - p->drawRect(opt->rect.adjusted(1,1,-2,-2)); - } - } else { - qDrawWinButton(p, opt->rect, opt->palette, - opt->state & (State_Sunken | State_On), panel ? &fill : nullptr); - } - } else { - p->fillRect(opt->rect, fill); - } - p->setPen(oldPen); - break; } - case PE_PanelButtonCommand: - if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { - QBrush fill; - State flags = opt->state; - QPalette pal = opt->palette; - QRect r = opt->rect; - if (! (flags & State_Sunken) && (flags & State_On)) - fill = QBrush(pal.light().color(), Qt::Dense4Pattern); - else - fill = pal.brush(QPalette::Button); - - if (btn->features & QStyleOptionButton::DefaultButton && flags & State_Sunken) { - p->setPen(pal.dark().color()); - p->setBrush(fill); - p->drawRect(r.adjusted(0, 0, -1, -1)); - } else if (flags & (State_Raised | State_On | State_Sunken)) { - qDrawWinButton(p, r, pal, flags & (State_Sunken | State_On), - &fill); - } else { - p->fillRect(r, fill); - } - } - break; - case PE_FrameDefaultButton: { - QPen oldPen = p->pen(); - p->setPen(QPen(opt->palette.shadow().color(), 0)); - QRectF rect = opt->rect; - const qreal dpi = QStyleHelper::dpi(opt); - const qreal topLevelAdjustment = QStyleHelper::dpiScaled(0.5, dpi); - const qreal bottomRightAdjustment = QStyleHelper::dpiScaled(-1.5, dpi); - rect.adjust(topLevelAdjustment, topLevelAdjustment, - bottomRightAdjustment, bottomRightAdjustment); - p->drawRect(rect); - p->setPen(oldPen); - break; - } - case PE_IndicatorCheckBox: { - QBrush fill; - if (opt->state & State_NoChange) - fill = QBrush(opt->palette.base().color(), Qt::Dense4Pattern); - else if (opt->state & State_Sunken) - fill = opt->palette.button(); - else if (opt->state & State_Enabled) - fill = opt->palette.base(); - else - fill = opt->palette.window(); - p->save(); - doRestore = true; - qDrawWinPanel(p, opt->rect, opt->palette, true, &fill); - if (opt->state & State_NoChange) - p->setPen(opt->palette.dark().color()); - else - p->setPen(opt->palette.text().color()); - } - Q_FALLTHROUGH(); - case PE_IndicatorItemViewItemCheck: - if (!doRestore) { - p->save(); - doRestore = true; - } -#if 0 && QT_CONFIG(itemviews) - if (pe == PE_IndicatorItemViewItemCheck) { - const QStyleOptionViewItem *itemViewOpt = qstyleoption_cast(opt); - p->setPen(itemViewOpt - && itemViewOpt->showDecorationSelected - && opt->state & State_Selected - ? opt->palette.highlightedText().color() - : opt->palette.text().color()); - if (opt->state & State_NoChange) - p->setBrush(opt->palette.brush(QPalette::Button)); - p->drawRect(opt->rect.x() + 1, opt->rect.y() + 1, opt->rect.width() - 2, opt->rect.height() - 2); - } -#endif // QT_CONFIG(itemviews) - if (!(opt->state & State_Off)) { - QPointF points[6]; - qreal scaleh = opt->rect.width() / 12.0; - qreal scalev = opt->rect.height() / 12.0; - points[0] = { opt->rect.x() + 3.5 * scaleh, opt->rect.y() + 5.5 * scalev }; - points[1] = { points[0].x(), points[0].y() + 2 * scalev }; - points[2] = { points[1].x() + 2 * scaleh, points[1].y() + 2 * scalev }; - points[3] = { points[2].x() + 4 * scaleh, points[2].y() - 4 * scalev }; - points[4] = { points[3].x(), points[3].y() - 2 * scalev }; - points[5] = { points[4].x() - 4 * scaleh, points[4].y() + 4 * scalev }; - p->setPen(QPen(opt->palette.text().color(), 0)); - p->setBrush(opt->palette.text().color()); - p->drawPolygon(points, 6); - } - if (doRestore) - p->restore(); - break; - case PE_FrameFocusRect: - if (const QStyleOptionFocusRect *fropt = qstyleoption_cast(opt)) { - //### check for d->alt_down - if (!(fropt->state & State_KeyboardFocusChange) && !proxy()->styleHint(SH_UnderlineShortcut, opt)) - return; - QRect r = opt->rect; - p->save(); - p->setBackgroundMode(Qt::TransparentMode); - QColor bg_col = fropt->backgroundColor; - if (!bg_col.isValid()) - bg_col = p->background().color(); - // Create an "XOR" color. - QColor patternCol((bg_col.red() ^ 0xff) & 0xff, - (bg_col.green() ^ 0xff) & 0xff, - (bg_col.blue() ^ 0xff) & 0xff); - p->setBrush(QBrush(patternCol, Qt::Dense4Pattern)); - p->setBrushOrigin(r.topLeft()); - p->setPen(Qt::NoPen); - p->drawRect(r.left(), r.top(), r.width(), 1); // Top - p->drawRect(r.left(), r.bottom(), r.width(), 1); // Bottom - p->drawRect(r.left(), r.top(), 1, r.height()); // Left - p->drawRect(r.right(), r.top(), 1, r.height()); // Right - p->restore(); - } - break; - case PE_IndicatorRadioButton: - { - QRect r = opt->rect; - p->save(); - p->setRenderHint(QPainter::Antialiasing, true); - - QPointF circleCenter = r.center() + QPoint(1, 1); - qreal radius = (r.width() + (r.width() + 1) % 2) / 2.0 - 1; - - QPainterPath path1; - path1.addEllipse(circleCenter, radius, radius); - radius *= 0.85; - QPainterPath path2; - path2.addEllipse(circleCenter, radius, radius); - radius *= 0.85; - QPainterPath path3; - path3.addEllipse(circleCenter, radius, radius); - radius *= 0.5; - QPainterPath path4; - path4.addEllipse(circleCenter, radius, radius); - - QPolygon topLeftPol, bottomRightPol; - topLeftPol.setPoints(3, r.x(), r.y(), r.x(), r.y() + r.height(), r.x() + r.width(), r.y()); - bottomRightPol.setPoints(3, r.x(), r.y() + r.height(), r.x() + r.width(), r.y() + r.height(), r.x() + r.width(), r.y()); - - p->setClipRegion(QRegion(topLeftPol)); - p->setPen(opt->palette.dark().color()); - p->setBrush(opt->palette.dark().color()); - p->drawPath(path1); - p->setPen(opt->palette.shadow().color()); - p->setBrush(opt->palette.shadow().color()); - p->drawPath(path2); - - p->setClipRegion(QRegion(bottomRightPol)); - p->setPen(opt->palette.light().color()); - p->setBrush(opt->palette.light().color()); - p->drawPath(path1); - p->setPen(opt->palette.midlight().color()); - p->setBrush(opt->palette.midlight().color()); - p->drawPath(path2); - - QColor fillColor = ((opt->state & State_Sunken) || !(opt->state & State_Enabled)) ? - opt->palette.button().color() : opt->palette.base().color(); - - p->setClipping(false); - p->setPen(fillColor); - p->setBrush(fillColor); - p->drawPath(path3); - - if (opt->state & State_On) { - p->setPen(opt->palette.text().color()); - p->setBrush(opt->palette.text()); - p->drawPath(path4); - } - p->restore(); - break; - } -#ifndef QT_NO_FRAME - case PE_Frame: - case PE_FrameMenu: - if (const QStyleOptionFrame *frame = qstyleoption_cast(opt)) { - if (frame->lineWidth == 2 || pe == PE_Frame) { - QPalette popupPal = frame->palette; - if (pe == PE_FrameMenu) { - popupPal.setColor(QPalette::Light, frame->palette.window().color()); - popupPal.setColor(QPalette::Midlight, frame->palette.light().color()); - } - if (pe == PE_Frame && (frame->state & State_Raised)) - qDrawWinButton(p, frame->rect, popupPal, frame->state & State_Sunken); - else if (pe == PE_Frame && (frame->state & State_Sunken)) - { - popupPal.setColor(QPalette::Midlight, frame->palette.window().color()); - qDrawWinPanel(p, frame->rect, popupPal, frame->state & State_Sunken); - } - else - qDrawWinPanel(p, frame->rect, popupPal, frame->state & State_Sunken); - } else { - QCommonStyle::drawPrimitive(pe, opt, p); - } - } else { - QPalette popupPal = opt->palette; - popupPal.setColor(QPalette::Light, opt->palette.window().color()); - popupPal.setColor(QPalette::Midlight, opt->palette.light().color()); - qDrawWinPanel(p, opt->rect, popupPal, opt->state & State_Sunken); - } - break; -#endif // QT_NO_FRAME - case PE_FrameButtonBevel: - case PE_PanelButtonBevel: { - QBrush fill; - bool panel = pe != PE_FrameButtonBevel; - p->setBrushOrigin(opt->rect.topLeft()); - if (!(opt->state & State_Sunken) && (opt->state & State_On)) - fill = QBrush(opt->palette.light().color(), Qt::Dense4Pattern); - else - fill = opt->palette.brush(QPalette::Button); - - if (opt->state & (State_Raised | State_On | State_Sunken)) { - qDrawWinButton(p, opt->rect, opt->palette, opt->state & (State_Sunken | State_On), - panel ? &fill : nullptr); - } else { - if (panel) - p->fillRect(opt->rect, fill); - else - p->drawRect(opt->rect); - } - break; } - case PE_FrameWindow: { - QPalette popupPal = opt->palette; - popupPal.setColor(QPalette::Light, opt->palette.window().color()); - popupPal.setColor(QPalette::Midlight, opt->palette.light().color()); - qDrawWinPanel(p, opt->rect, popupPal, opt->state & State_Sunken); - break; } -#if 0 && QT_CONFIG(dockwidget) - case PE_IndicatorDockWidgetResizeHandle: - break; - case PE_FrameDockWidget: - if (qstyleoption_cast(opt)) { - proxy()->drawPrimitive(QStyle::PE_FrameWindow, opt, p, w); - } - break; -#endif // QT_CONFIG(dockwidget) - - case PE_FrameStatusBarItem: - qDrawShadePanel(p, opt->rect, opt->palette, true, 1, nullptr); - break; - - case PE_IndicatorProgressChunk: - { - bool vertical = false, inverted = false; - if (const QStyleOptionProgressBar *pb = qstyleoption_cast(opt)) { - vertical = !(pb->state & QStyle::State_Horizontal); - inverted = pb->invertedAppearance; - } - - int space = 2; - int chunksize = proxy()->pixelMetric(PM_ProgressBarChunkWidth, opt) - space; - if (!vertical) { - if (opt->rect.width() <= chunksize) - space = 0; - - if (inverted) - p->fillRect(opt->rect.x() + space, opt->rect.y(), opt->rect.width() - space, opt->rect.height(), - opt->palette.brush(QPalette::Highlight)); - else - p->fillRect(opt->rect.x(), opt->rect.y(), opt->rect.width() - space, opt->rect.height(), - opt->palette.brush(QPalette::Highlight)); - } else { - if (opt->rect.height() <= chunksize) - space = 0; - - if (inverted) - p->fillRect(opt->rect.x(), opt->rect.y(), opt->rect.width(), opt->rect.height() - space, - opt->palette.brush(QPalette::Highlight)); - else - p->fillRect(opt->rect.x(), opt->rect.y() + space, opt->rect.width(), opt->rect.height() - space, - opt->palette.brush(QPalette::Highlight)); - } - } - break; - - case PE_FrameTabWidget: { - qDrawWinButton(p, opt->rect, opt->palette, false, nullptr); - break; - } - default: - QCommonStyle::drawPrimitive(pe, opt, p); - } -} - -/*! \reimp */ -void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter *p) const -{ - switch (ce) { -#if 0 && QT_CONFIG(rubberband) - case CE_RubberBand: - if (qstyleoption_cast(opt)) { - // ### workaround for slow general painter path - QPixmap tiledPixmap(16, 16); - QPainter pixmapPainter(&tiledPixmap); - pixmapPainter.setPen(Qt::NoPen); - pixmapPainter.setBrush(Qt::Dense4Pattern); - pixmapPainter.setBackground(Qt::white); - pixmapPainter.setBackgroundMode(Qt::OpaqueMode); - pixmapPainter.drawRect(0, 0, tiledPixmap.width(), tiledPixmap.height()); - pixmapPainter.end(); - tiledPixmap = QPixmap::fromImage(tiledPixmap.toImage()); - p->save(); - QRect r = opt->rect; - QStyleHintReturnMask mask; - if (proxy()->styleHint(QStyle::SH_RubberBand_Mask, opt, widget, &mask)) - p->setClipRegion(mask.region); - p->drawTiledPixmap(r.x(), r.y(), r.width(), r.height(), tiledPixmap); - p->restore(); - return; - } - break; -#endif // QT_CONFIG(rubberband) - -#if 0 && QT_CONFIG(menu) && QT_CONFIG(mainwindow) - case CE_MenuBarEmptyArea: - if (widget && qobject_cast(widget->parentWidget())) { - p->fillRect(opt->rect, opt->palette.button()); - QPen oldPen = p->pen(); - p->setPen(QPen(opt->palette.dark().color())); - p->drawLine(opt->rect.bottomLeft(), opt->rect.bottomRight()); - p->setPen(oldPen); - } - break; -#endif -#if 0 && QT_CONFIG(menu) - case CE_MenuItem: - if (const QStyleOptionMenuItem *menuitem = qstyleoption_cast(opt)) { - int x, y, w, h; - menuitem->rect.getRect(&x, &y, &w, &h); - int tab = menuitem->tabWidth; - bool dis = !(menuitem->state & State_Enabled); - bool checked = menuitem->checkType != QStyleOptionMenuItem::NotCheckable - ? menuitem->checked : false; - bool act = menuitem->state & State_Selected; - - // windows always has a check column, regardless whether we have an icon or not - int checkcol = qMax(menuitem->maxIconWidth, QWindowsStylePrivate::windowsCheckMarkWidth); - - QBrush fill = menuitem->palette.brush(act ? QPalette::Highlight : QPalette::Button); - p->fillRect(menuitem->rect.adjusted(0, 0, -1, 0), fill); - - if (menuitem->menuItemType == QStyleOptionMenuItem::Separator){ - int yoff = y-1 + h / 2; - p->setPen(menuitem->palette.dark().color()); - p->drawLine(x + 2, yoff, x + w - 4, yoff); - p->setPen(menuitem->palette.light().color()); - p->drawLine(x + 2, yoff + 1, x + w - 4, yoff + 1); - return; - } - - QRect vCheckRect = visualRect(opt->direction, menuitem->rect, QRect(menuitem->rect.x(), menuitem->rect.y(), checkcol, menuitem->rect.height())); - if (!menuitem->icon.isNull() && checked) { - if (act) { - qDrawShadePanel(p, vCheckRect, - menuitem->palette, true, 1, - &menuitem->palette.brush(QPalette::Button)); - } else { - QBrush fill(menuitem->palette.light().color(), Qt::Dense4Pattern); - qDrawShadePanel(p, vCheckRect, menuitem->palette, true, 1, &fill); - } - } else if (!act) { - p->fillRect(vCheckRect, menuitem->palette.brush(QPalette::Button)); - } - - // On Windows Style, if we have a checkable item and an icon we - // draw the icon recessed to indicate an item is checked. If we - // have no icon, we draw a checkmark instead. - if (!menuitem->icon.isNull()) { - QIcon::Mode mode = dis ? QIcon::Disabled : QIcon::Normal; - if (act && !dis) - mode = QIcon::Active; - QPixmap pixmap; - if (checked) - pixmap = menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, opt, widget), mode, QIcon::On); - else - pixmap = menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, opt, widget), mode); - const int pixw = pixmap.width() / pixmap.devicePixelRatio(); - const int pixh = pixmap.height() / pixmap.devicePixelRatio(); - QRect pmr(0, 0, pixw, pixh); - pmr.moveCenter(vCheckRect.center()); - p->setPen(menuitem->palette.text().color()); - p->drawPixmap(pmr.topLeft(), pixmap); - } else if (checked) { - QStyleOptionMenuItem newMi = *menuitem; - newMi.state = State_None; - if (!dis) - newMi.state |= State_Enabled; - if (act) - newMi.state |= State_On; - newMi.rect = visualRect(opt->direction, menuitem->rect, QRect(menuitem->rect.x() + QWindowsStylePrivate::windowsItemFrame, - menuitem->rect.y() + QWindowsStylePrivate::windowsItemFrame, - checkcol - 2 * QWindowsStylePrivate::windowsItemFrame, - menuitem->rect.height() - 2 * QWindowsStylePrivate::windowsItemFrame)); - proxy()->drawPrimitive(PE_IndicatorMenuCheckMark, &newMi, p, widget); - } - p->setPen(act ? menuitem->palette.highlightedText().color() : menuitem->palette.buttonText().color()); - - QColor discol; - if (dis) { - discol = menuitem->palette.text().color(); - p->setPen(discol); - } - - int xm = int(QWindowsStylePrivate::windowsItemFrame) + checkcol + int(QWindowsStylePrivate::windowsItemHMargin); - int xpos = menuitem->rect.x() + xm; - QRect textRect(xpos, y + QWindowsStylePrivate::windowsItemVMargin, - w - xm - QWindowsStylePrivate::windowsRightBorder - tab + 1, h - 2 * QWindowsStylePrivate::windowsItemVMargin); - QRect vTextRect = visualRect(opt->direction, menuitem->rect, textRect); - QStringRef s(&menuitem->text); - if (!s.isEmpty()) { // draw text - p->save(); - int t = s.indexOf(QLatin1Char('\t')); - int text_flags = Qt::AlignVCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine; - if (!proxy()->styleHint(SH_UnderlineShortcut, menuitem, widget)) - text_flags |= Qt::TextHideMnemonic; - text_flags |= Qt::AlignLeft; - if (t >= 0) { - QRect vShortcutRect = visualRect(opt->direction, menuitem->rect, - QRect(textRect.topRight(), QPoint(menuitem->rect.right(), textRect.bottom()))); - const QString textToDraw = s.mid(t + 1).toString(); - if (dis && !act && proxy()->styleHint(SH_EtchDisabledText, opt, widget)) { - p->setPen(menuitem->palette.light().color()); - p->drawText(vShortcutRect.adjusted(1, 1, 1, 1), text_flags, textToDraw); - p->setPen(discol); - } - p->drawText(vShortcutRect, text_flags, textToDraw); - s = s.left(t); - } - QFont font = menuitem->font; - if (menuitem->menuItemType == QStyleOptionMenuItem::DefaultItem) - font.setBold(true); - p->setFont(font); - const QString textToDraw = s.left(t).toString(); - if (dis && !act && proxy()->styleHint(SH_EtchDisabledText, opt, widget)) { - p->setPen(menuitem->palette.light().color()); - p->drawText(vTextRect.adjusted(1, 1, 1, 1), text_flags, textToDraw); - p->setPen(discol); - } - p->drawText(vTextRect, text_flags, textToDraw); - p->restore(); - } - if (menuitem->menuItemType == QStyleOptionMenuItem::SubMenu) {// draw sub menu arrow - int dim = (h - 2 * QWindowsStylePrivate::windowsItemFrame) / 2; - PrimitiveElement arrow; - arrow = (opt->direction == Qt::RightToLeft) ? PE_IndicatorArrowLeft : PE_IndicatorArrowRight; - xpos = x + w - QWindowsStylePrivate::windowsArrowHMargin - QWindowsStylePrivate::windowsItemFrame - dim; - QRect vSubMenuRect = visualRect(opt->direction, menuitem->rect, QRect(xpos, y + h / 2 - dim / 2, dim, dim)); - QStyleOptionMenuItem newMI = *menuitem; - newMI.rect = vSubMenuRect; - newMI.state = dis ? State_None : State_Enabled; - if (act) - newMI.palette.setColor(QPalette::ButtonText, - newMI.palette.highlightedText().color()); - proxy()->drawPrimitive(arrow, &newMI, p, widget); - } - - } - break; -#endif // QT_CONFIG(menu) -#if 0 && QT_CONFIG(menubar) - case CE_MenuBarItem: - if (const QStyleOptionMenuItem *mbi = qstyleoption_cast(opt)) { - bool active = mbi->state & State_Selected; - bool hasFocus = mbi->state & State_HasFocus; - bool down = mbi->state & State_Sunken; - QStyleOptionMenuItem newMbi = *mbi; - p->fillRect(mbi->rect, mbi->palette.brush(QPalette::Button)); - if (active || hasFocus) { - QBrush b = mbi->palette.brush(QPalette::Button); - if (active && down) - p->setBrushOrigin(p->brushOrigin() + QPoint(1, 1)); - if (active && hasFocus) - qDrawShadeRect(p, mbi->rect.x(), mbi->rect.y(), mbi->rect.width(), - mbi->rect.height(), mbi->palette, active && down, 1, 0, &b); - if (active && down) { - newMbi.rect.translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, mbi, widget), - proxy()->pixelMetric(PM_ButtonShiftVertical, mbi, widget)); - p->setBrushOrigin(p->brushOrigin() - QPoint(1, 1)); - } - } - QCommonStyle::drawControl(ce, &newMbi, p, widget); - } - break; -#endif // QT_CONFIG(menubar) -#if 0 && QT_CONFIG(tabbar) - case CE_TabBarTabShape: - if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { - bool rtlHorTabs = (tab->direction == Qt::RightToLeft - && (tab->shape == QTabBar::RoundedNorth - || tab->shape == QTabBar::RoundedSouth)); - bool selected = tab->state & State_Selected; - bool lastTab = ((!rtlHorTabs && tab->position == QStyleOptionTab::End) - || (rtlHorTabs - && tab->position == QStyleOptionTab::Beginning)); - bool firstTab = ((!rtlHorTabs - && tab->position == QStyleOptionTab::Beginning) - || (rtlHorTabs - && tab->position == QStyleOptionTab::End)); - bool onlyOne = tab->position == QStyleOptionTab::OnlyOneTab; - bool previousSelected = - ((!rtlHorTabs - && tab->selectedPosition == QStyleOptionTab::PreviousIsSelected) - || (rtlHorTabs - && tab->selectedPosition == QStyleOptionTab::NextIsSelected)); - bool nextSelected = - ((!rtlHorTabs - && tab->selectedPosition == QStyleOptionTab::NextIsSelected) - || (rtlHorTabs - && tab->selectedPosition - == QStyleOptionTab::PreviousIsSelected)); - int tabBarAlignment = proxy()->styleHint(SH_TabBar_Alignment, tab, widget); - bool leftAligned = (!rtlHorTabs && tabBarAlignment == Qt::AlignLeft) - || (rtlHorTabs - && tabBarAlignment == Qt::AlignRight); - - bool rightAligned = (!rtlHorTabs && tabBarAlignment == Qt::AlignRight) - || (rtlHorTabs - && tabBarAlignment == Qt::AlignLeft); - - QColor light = tab->palette.light().color(); - QColor dark = tab->palette.dark().color(); - QColor shadow = tab->palette.shadow().color(); - int borderThinkness = proxy()->pixelMetric(PM_TabBarBaseOverlap, tab, widget); - if (selected) - borderThinkness /= 2; - QRect r2(opt->rect); - int x1 = r2.left(); - int x2 = r2.right(); - int y1 = r2.top(); - int y2 = r2.bottom(); - switch (tab->shape) { - default: - QCommonStyle::drawControl(ce, tab, p, widget); - break; - case QTabBar::RoundedNorth: { - if (!selected) { - y1 += 2; - x1 += onlyOne || firstTab ? borderThinkness : 0; - x2 -= onlyOne || lastTab ? borderThinkness : 0; - } - - p->fillRect(QRect(x1 + 1, y1 + 1, (x2 - x1) - 1, (y2 - y1) - 2), tab->palette.window()); - - // Delete border - if (selected) { - p->fillRect(QRect(x1,y2-1,x2-x1,1), tab->palette.window()); - p->fillRect(QRect(x1,y2,x2-x1,1), tab->palette.window()); - } - // Left - if (firstTab || selected || onlyOne || !previousSelected) { - p->setPen(light); - p->drawLine(x1, y1 + 2, x1, y2 - ((onlyOne || firstTab) && selected && leftAligned ? 0 : borderThinkness)); - p->drawPoint(x1 + 1, y1 + 1); - } - // Top - { - int beg = x1 + (previousSelected ? 0 : 2); - int end = x2 - (nextSelected ? 0 : 2); - p->setPen(light); - p->drawLine(beg, y1, end, y1); - } - // Right - if (lastTab || selected || onlyOne || !nextSelected) { - p->setPen(shadow); - p->drawLine(x2, y1 + 2, x2, y2 - ((onlyOne || lastTab) && selected && rightAligned ? 0 : borderThinkness)); - p->drawPoint(x2 - 1, y1 + 1); - p->setPen(dark); - p->drawLine(x2 - 1, y1 + 2, x2 - 1, y2 - ((onlyOne || lastTab) && selected && rightAligned ? 0 : borderThinkness)); - } - break; } - case QTabBar::RoundedSouth: { - if (!selected) { - y2 -= 2; - x1 += firstTab ? borderThinkness : 0; - x2 -= lastTab ? borderThinkness : 0; - } - - p->fillRect(QRect(x1 + 1, y1 + 2, (x2 - x1) - 1, (y2 - y1) - 1), tab->palette.window()); - - // Delete border - if (selected) { - p->fillRect(QRect(x1, y1 + 1, (x2 - 1)-x1, 1), tab->palette.window()); - p->fillRect(QRect(x1, y1, (x2 - 1)-x1, 1), tab->palette.window()); - } - // Left - if (firstTab || selected || onlyOne || !previousSelected) { - p->setPen(light); - p->drawLine(x1, y2 - 2, x1, y1 + ((onlyOne || firstTab) && selected && leftAligned ? 0 : borderThinkness)); - p->drawPoint(x1 + 1, y2 - 1); - } - // Bottom - { - int beg = x1 + (previousSelected ? 0 : 2); - int end = x2 - (nextSelected ? 0 : 2); - p->setPen(shadow); - p->drawLine(beg, y2, end, y2); - p->setPen(dark); - p->drawLine(beg, y2 - 1, end, y2 - 1); - } - // Right - if (lastTab || selected || onlyOne || !nextSelected) { - p->setPen(shadow); - p->drawLine(x2, y2 - 2, x2, y1 + ((onlyOne || lastTab) && selected && rightAligned ? 0 : borderThinkness)); - p->drawPoint(x2 - 1, y2 - 1); - p->setPen(dark); - p->drawLine(x2 - 1, y2 - 2, x2 - 1, y1 + ((onlyOne || lastTab) && selected && rightAligned ? 0 : borderThinkness)); - } - break; } - case QTabBar::RoundedWest: { - if (!selected) { - x1 += 2; - y1 += firstTab ? borderThinkness : 0; - y2 -= lastTab ? borderThinkness : 0; - } - - p->fillRect(QRect(x1 + 1, y1 + 1, (x2 - x1) - 2, (y2 - y1) - 1), tab->palette.window()); - - // Delete border - if (selected) { - p->fillRect(QRect(x2 - 1, y1, 1, y2-y1), tab->palette.window()); - p->fillRect(QRect(x2, y1, 1, y2-y1), tab->palette.window()); - } - // Top - if (firstTab || selected || onlyOne || !previousSelected) { - p->setPen(light); - p->drawLine(x1 + 2, y1, x2 - ((onlyOne || firstTab) && selected && leftAligned ? 0 : borderThinkness), y1); - p->drawPoint(x1 + 1, y1 + 1); - } - // Left - { - int beg = y1 + (previousSelected ? 0 : 2); - int end = y2 - (nextSelected ? 0 : 2); - p->setPen(light); - p->drawLine(x1, beg, x1, end); - } - // Bottom - if (lastTab || selected || onlyOne || !nextSelected) { - p->setPen(shadow); - p->drawLine(x1 + 3, y2, x2 - ((onlyOne || lastTab) && selected && rightAligned ? 0 : borderThinkness), y2); - p->drawPoint(x1 + 2, y2 - 1); - p->setPen(dark); - p->drawLine(x1 + 3, y2 - 1, x2 - ((onlyOne || lastTab) && selected && rightAligned ? 0 : borderThinkness), y2 - 1); - p->drawPoint(x1 + 1, y2 - 1); - p->drawPoint(x1 + 2, y2); - } - break; } - case QTabBar::RoundedEast: { - if (!selected) { - x2 -= 2; - y1 += firstTab ? borderThinkness : 0; - y2 -= lastTab ? borderThinkness : 0; - } - - p->fillRect(QRect(x1 + 2, y1 + 1, (x2 - x1) - 1, (y2 - y1) - 1), tab->palette.window()); - - // Delete border - if (selected) { - p->fillRect(QRect(x1 + 1, y1, 1, (y2 - 1)-y1),tab->palette.window()); - p->fillRect(QRect(x1, y1, 1, (y2-1)-y1), tab->palette.window()); - } - // Top - if (firstTab || selected || onlyOne || !previousSelected) { - p->setPen(light); - p->drawLine(x2 - 2, y1, x1 + ((onlyOne || firstTab) && selected && leftAligned ? 0 : borderThinkness), y1); - p->drawPoint(x2 - 1, y1 + 1); - } - // Right - { - int beg = y1 + (previousSelected ? 0 : 2); - int end = y2 - (nextSelected ? 0 : 2); - p->setPen(shadow); - p->drawLine(x2, beg, x2, end); - p->setPen(dark); - p->drawLine(x2 - 1, beg, x2 - 1, end); - } - // Bottom - if (lastTab || selected || onlyOne || !nextSelected) { - p->setPen(shadow); - p->drawLine(x2 - 2, y2, x1 + ((onlyOne || lastTab) && selected && rightAligned ? 0 : borderThinkness), y2); - p->drawPoint(x2 - 1, y2 - 1); - p->setPen(dark); - p->drawLine(x2 - 2, y2 - 1, x1 + ((onlyOne || lastTab) && selected && rightAligned ? 0 : borderThinkness), y2 - 1); - } - break; } - } - } - break; -#endif // QT_CONFIG(tabbar) - case CE_ToolBoxTabShape: - qDrawShadePanel(p, opt->rect, opt->palette, - opt->state & (State_Sunken | State_On), 1, - &opt->palette.brush(QPalette::Button)); - break; -#if 0 && QT_CONFIG(splitter) - case CE_Splitter: - p->eraseRect(opt->rect); - break; -#endif // QT_CONFIG(splitter) -#if 0 && QT_CONFIG(scrollbar) - case CE_ScrollBarSubLine: - case CE_ScrollBarAddLine: { - if ((opt->state & State_Sunken)) { - p->setPen(opt->palette.dark().color()); - p->setBrush(opt->palette.brush(QPalette::Button)); - p->drawRect(opt->rect.adjusted(0, 0, -1, -1)); - } else { - QStyleOption buttonOpt = *opt; - if (!(buttonOpt.state & State_Sunken)) - buttonOpt.state |= State_Raised; - QPalette pal(opt->palette); - pal.setColor(QPalette::Button, opt->palette.light().color()); - pal.setColor(QPalette::Light, opt->palette.button().color()); - qDrawWinButton(p, opt->rect, pal, opt->state & (State_Sunken | State_On), - &opt->palette.brush(QPalette::Button)); - } - PrimitiveElement arrow; - if (opt->state & State_Horizontal) { - if (ce == CE_ScrollBarAddLine) - arrow = opt->direction == Qt::LeftToRight ? PE_IndicatorArrowRight : PE_IndicatorArrowLeft; - else - arrow = opt->direction == Qt::LeftToRight ? PE_IndicatorArrowLeft : PE_IndicatorArrowRight; - } else { - if (ce == CE_ScrollBarAddLine) - arrow = PE_IndicatorArrowDown; - else - arrow = PE_IndicatorArrowUp; - } - QStyleOption arrowOpt = *opt; - arrowOpt.rect = opt->rect.adjusted(4, 4, -4, -4); - proxy()->drawPrimitive(arrow, &arrowOpt, p, widget); - break; } - case CE_ScrollBarAddPage: - case CE_ScrollBarSubPage: { - QBrush br; - QBrush bg = p->background(); - Qt::BGMode bg_mode = p->backgroundMode(); - p->setPen(Qt::NoPen); - p->setBackgroundMode(Qt::OpaqueMode); - - if (opt->state & State_Sunken) { - br = QBrush(opt->palette.shadow().color(), Qt::Dense4Pattern); - p->setBackground(opt->palette.dark().color()); - p->setBrush(br); - } else { - const QBrush paletteBrush = opt->palette.brush(QPalette::Light); - if (paletteBrush.style() == Qt::TexturePattern) { - if (qHasPixmapTexture(paletteBrush)) - br = QBrush(paletteBrush.texture()); - else - br = QBrush(paletteBrush.textureImage()); - } else - br = QBrush(opt->palette.light().color(), Qt::Dense4Pattern); - p->setBackground(opt->palette.window().color()); - p->setBrush(br); - } - p->drawRect(opt->rect); - p->setBackground(bg); - p->setBackgroundMode(bg_mode); - break; } - case CE_ScrollBarSlider: - if (!(opt->state & State_Enabled)) { - QBrush br; - const QBrush paletteBrush = opt->palette.brush(QPalette::Light); - if (paletteBrush.style() == Qt::TexturePattern) { - if (qHasPixmapTexture(paletteBrush)) - br = QBrush(paletteBrush.texture()); - else - br = QBrush(paletteBrush.textureImage()); - } else - br = QBrush(opt->palette.light().color(), Qt::Dense4Pattern); - p->setPen(Qt::NoPen); - p->setBrush(br); - p->setBackgroundMode(Qt::OpaqueMode); - p->drawRect(opt->rect); - } else { - QStyleOptionButton buttonOpt; - buttonOpt.QStyleOption::operator=(*opt); - buttonOpt.state = State_Enabled | State_Raised; - - QPalette pal(opt->palette); - pal.setColor(QPalette::Button, opt->palette.light().color()); - pal.setColor(QPalette::Light, opt->palette.button().color()); - qDrawWinButton(p, opt->rect, pal, false, &opt->palette.brush(QPalette::Button)); - } - break; -#endif // QT_CONFIG(scrollbar) - case CE_HeaderSection: { - QBrush fill; - if (opt->state & State_On) - fill = QBrush(opt->palette.light().color(), Qt::Dense4Pattern); - else - fill = opt->palette.brush(QPalette::Button); - - if (opt->state & (State_Raised | State_Sunken)) { - qDrawWinButton(p, opt->rect, opt->palette, opt->state & State_Sunken, &fill); - } else { - p->fillRect(opt->rect, fill); - } - break; } -#if 0 && QT_CONFIG(toolbar) - case CE_ToolBar: - if (const QStyleOptionToolBar *toolbar = qstyleoption_cast(opt)) { - // Reserve the beveled appearance only for mainwindow toolbars - if (!(widget && qobject_cast (widget->parentWidget()))) - break; - - QRect rect = opt->rect; - bool paintLeftBorder = true; - bool paintRightBorder = true; - bool paintBottomBorder = true; - - switch (toolbar->toolBarArea){ - case Qt::BottomToolBarArea : - switch (toolbar->positionOfLine){ - case QStyleOptionToolBar::Beginning: - case QStyleOptionToolBar::OnlyOne: - paintBottomBorder = false; - break; - default: - break; - } - Q_FALLTHROUGH(); // It continues in the end of the next case - case Qt::TopToolBarArea : - switch (toolbar->positionWithinLine){ - case QStyleOptionToolBar::Beginning: - paintLeftBorder = false; - break; - case QStyleOptionToolBar::End: - paintRightBorder = false; - break; - case QStyleOptionToolBar::OnlyOne: - paintRightBorder = false; - paintLeftBorder = false; - break; - default: - break; - } - if (opt->direction == Qt::RightToLeft){ //reverse layout changes the order of Beginning/end - bool tmp = paintLeftBorder; - paintRightBorder=paintLeftBorder; - paintLeftBorder=tmp; - } - break; - case Qt::RightToolBarArea : - switch (toolbar->positionOfLine){ - case QStyleOptionToolBar::Beginning: - case QStyleOptionToolBar::OnlyOne: - paintRightBorder = false; - break; - default: - break; - } - break; - case Qt::LeftToolBarArea : - switch (toolbar->positionOfLine){ - case QStyleOptionToolBar::Beginning: - case QStyleOptionToolBar::OnlyOne: - paintLeftBorder = false; - break; - default: - break; - } - break; - default: - break; - } - - - //draw top border - p->setPen(QPen(opt->palette.light().color())); - p->drawLine(rect.topLeft().x(), - rect.topLeft().y(), - rect.topRight().x(), - rect.topRight().y()); - - if (paintLeftBorder){ - p->setPen(QPen(opt->palette.light().color())); - p->drawLine(rect.topLeft().x(), - rect.topLeft().y(), - rect.bottomLeft().x(), - rect.bottomLeft().y()); - } - - if (paintRightBorder){ - p->setPen(QPen(opt->palette.dark().color())); - p->drawLine(rect.topRight().x(), - rect.topRight().y(), - rect.bottomRight().x(), - rect.bottomRight().y()); - } - - if (paintBottomBorder){ - p->setPen(QPen(opt->palette.dark().color())); - p->drawLine(rect.bottomLeft().x(), - rect.bottomLeft().y(), - rect.bottomRight().x(), - rect.bottomRight().y()); - } - } - break; - - -#endif // QT_CONFIG(toolbar) - - case CE_ProgressBarContents: - if (const QStyleOptionProgressBar *pb = qstyleoption_cast(opt)) { - QRect rect = pb->rect; - if (!rect.isValid()) - return; - - const bool vertical = !(pb->state & QStyle::State_Horizontal); - const bool inverted = pb->invertedAppearance; - - QTransform m; - if (vertical) { - rect = QRect(rect.y(), rect.x(), rect.height(), rect.width()); // flip width and height - m.rotate(90); - m.translate(0, -(rect.height() + rect.y()*2)); - } - QPalette pal2 = pb->palette; - // Correct the highlight color if it is the same as the background - if (pal2.highlight() == pal2.window()) - pal2.setColor(QPalette::Highlight, pb->palette.color(QPalette::Active, - QPalette::Highlight)); - bool reverse = ((!vertical && (pb->direction == Qt::RightToLeft)) || vertical); - if (inverted) - reverse = !reverse; - int w = rect.width(); - Q_D(const QWindowsStyle); - if (pb->minimum == 0 && pb->maximum == 0) { - const int unit_width = proxy()->pixelMetric(PM_ProgressBarChunkWidth, pb); - QStyleOptionProgressBar pbBits = *pb; - Q_ASSERT(unit_width >0); - - pbBits.rect = rect; - pbBits.palette = pal2; - - int step = 0; - int chunkCount = w / unit_width + 1; -#if 0 && QT_CONFIG(animation) - if (QProgressStyleAnimation *animation = qobject_cast(d->animation(opt->styleObject))) - step = (animation->animationStep() / 3) % chunkCount; - else - d->startAnimation(new QProgressStyleAnimation(d->animationFps, opt->styleObject)); -#else - Q_UNUSED(d); -#endif - int chunksInRow = 5; - int myY = pbBits.rect.y(); - int myHeight = pbBits.rect.height(); - int chunksToDraw = chunksInRow; - - if (step > chunkCount - 5)chunksToDraw = (chunkCount - step); - p->save(); - p->setClipRect(m.mapRect(QRectF(rect)).toRect()); - - int x0 = reverse ? rect.left() + rect.width() - unit_width*(step) - unit_width : rect.left() + unit_width * step; - int x = 0; - - for (int i = 0; i < chunksToDraw ; ++i) { - pbBits.rect.setRect(x0 + x, myY, unit_width, myHeight); - pbBits.rect = m.mapRect(QRectF(pbBits.rect)).toRect(); - proxy()->drawPrimitive(PE_IndicatorProgressChunk, &pbBits, p); - x += reverse ? -unit_width : unit_width; - } - //Draw wrap-around chunks - if ( step > chunkCount-5){ - x0 = reverse ? rect.left() + rect.width() - unit_width : rect.left() ; - x = 0; - int chunksToDraw = step - (chunkCount - chunksInRow); - for (int i = 0; i < chunksToDraw ; ++i) { - pbBits.rect.setRect(x0 + x, myY, unit_width, myHeight); - pbBits.rect = m.mapRect(QRectF(pbBits.rect)).toRect(); - proxy()->drawPrimitive(PE_IndicatorProgressChunk, &pbBits, p); - x += reverse ? -unit_width : unit_width; - } - } - p->restore(); //restore state - } - else { -#if 0 && QT_CONFIG(animation) - d->stopAnimation(opt->styleObject); -#endif - QCommonStyle::drawControl(ce, opt, p); - } - } - break; - -#if 0 && QT_CONFIG(dockwidget) - case CE_DockWidgetTitle: - - if (const QStyleOptionDockWidget *dwOpt = qstyleoption_cast(opt)) { - Q_D(const QWindowsStyle); - - const bool verticalTitleBar = dwOpt->verticalTitleBar; - - QRect rect = dwOpt->rect; - QRect r = rect; - - if (verticalTitleBar) { - r = r.transposed(); - - p->save(); - p->translate(r.left(), r.top() + r.width()); - p->rotate(-90); - p->translate(-r.left(), -r.top()); - } - - bool floating = false; - bool active = dwOpt->state & State_Active; - QColor inactiveCaptionTextColor = d->inactiveCaptionText; - if (dwOpt->movable) { - QColor left, right; - - //Titlebar gradient - if (opt->state & QStyle::State_Window) { - floating = true; - if (active) { - left = d->activeCaptionColor; - right = d->activeGradientCaptionColor; - } else { - left = d->inactiveCaptionColor; - right = d->inactiveGradientCaptionColor; - } - QBrush fillBrush(left); - if (left != right) { - QPoint p1(r.x(), r.top() + r.height()/2); - QPoint p2(rect.right(), r.top() + r.height()/2); - QLinearGradient lg(p1, p2); - lg.setColorAt(0, left); - lg.setColorAt(1, right); - fillBrush = lg; - } - p->fillRect(r.adjusted(0, 0, 0, -3), fillBrush); - } - } - if (!dwOpt->title.isEmpty()) { - QFont oldFont = p->font(); - if (floating) { - QFont font = oldFont; - font.setBold(true); - p->setFont(font); - } - QPalette palette = dwOpt->palette; - palette.setColor(QPalette::Window, inactiveCaptionTextColor); - QRect titleRect = subElementRect(SE_DockWidgetTitleBarText, opt, widget); - if (verticalTitleBar) { - titleRect = QRect(r.left() + rect.bottom() - - titleRect.bottom(), - r.top() + titleRect.left() - rect.left(), - titleRect.height(), titleRect.width()); - } - proxy()->drawItemText(p, titleRect, - Qt::AlignLeft | Qt::AlignVCenter, palette, - dwOpt->state & State_Enabled, dwOpt->title, - floating ? (active ? QPalette::BrightText : QPalette::Window) : QPalette::WindowText); - p->setFont(oldFont); - } - if (verticalTitleBar) - p->restore(); - } - return; -#endif // QT_CONFIG(dockwidget) -#if 0 && QT_CONFIG(combobox) - case CE_ComboBoxLabel: - if (const QStyleOptionComboBox *cb = qstyleoption_cast(opt)) { - if (cb->state & State_HasFocus) { - p->setPen(cb->palette.highlightedText().color()); - p->setBackground(cb->palette.highlight()); - } else { - p->setPen(cb->palette.text().color()); - p->setBackground(cb->palette.window()); - } - } - QCommonStyle::drawControl(ce, opt, p, widget); - break; -#endif // QT_CONFIG(combobox) - default: - QCommonStyle::drawControl(ce, opt, p); - } -} - -/*! \reimp */ -QRect QWindowsStyle::subElementRect(SubElement sr, const QStyleOption *opt) const -{ - QRect r; - switch (sr) { - case SE_SliderFocusRect: - case SE_ToolBoxTabContents: - r = visualRect(opt->direction, opt->rect, opt->rect); - break; - case SE_DockWidgetTitleBarText: { - r = QCommonStyle::subElementRect(sr, opt); - const QStyleOptionDockWidget *dwOpt - = qstyleoption_cast(opt); - const bool verticalTitleBar = dwOpt && dwOpt->verticalTitleBar; - int m = proxy()->pixelMetric(PM_DockWidgetTitleMargin, opt); - if (verticalTitleBar) { - r.adjust(0, 0, 0, -m); - } else { - if (opt->direction == Qt::LeftToRight) - r.adjust(m, 0, 0, 0); - else - r.adjust(0, 0, -m, 0); - } - break; - } - case SE_ProgressBarContents: - r = QCommonStyle::subElementRect(SE_ProgressBarGroove, opt); - r.adjust(3, 3, -3, -3); - break; - default: - r = QCommonStyle::subElementRect(sr, opt); - } - return r; -} - - -/*! \reimp */ -void QWindowsStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, - QPainter *p) const -{ -#if 0 - switch (cc) { -#if QT_CONFIG(slider) - case CC_Slider: - if (const QStyleOptionSlider *slider = qstyleoption_cast(opt)) { - int thickness = proxy()->pixelMetric(PM_SliderControlThickness, slider); - int len = proxy()->pixelMetric(PM_SliderLength, slider); - int ticks = slider->tickPosition; - QRect groove = proxy()->subControlRect(CC_Slider, slider, SC_SliderGroove); - QRect handle = proxy()->subControlRect(CC_Slider, slider, SC_SliderHandle); - - if ((slider->subControls & SC_SliderGroove) && groove.isValid()) { - int mid = thickness / 2; - - if (ticks & QStyleOptionSlider::TicksAbove) - mid += len / 8; - if (ticks & QStyleOptionSlider::TicksBelow) - mid -= len / 8; - - p->setPen(slider->palette.shadow().color()); - if (slider->orientation == Qt::Horizontal) { - qDrawWinPanel(p, groove.x(), groove.y() + mid - 2, - groove.width(), 4, slider->palette, true); - p->drawLine(groove.x() + 1, groove.y() + mid - 1, - groove.x() + groove.width() - 3, groove.y() + mid - 1); - } else { - qDrawWinPanel(p, groove.x() + mid - 2, groove.y(), - 4, groove.height(), slider->palette, true); - p->drawLine(groove.x() + mid - 1, groove.y() + 1, - groove.x() + mid - 1, groove.y() + groove.height() - 3); - } - } - - if (slider->subControls & SC_SliderTickmarks) { - QStyleOptionSlider tmpSlider = *slider; - tmpSlider.subControls = SC_SliderTickmarks; - QCommonStyle::drawComplexControl(cc, &tmpSlider, p); - } - - if (slider->subControls & SC_SliderHandle) { - // 4444440 - // 4333310 - // 4322210 - // 4322210 - // 4322210 - // 4322210 - // *43210* - // **410** - // ***0*** - const QColor c0 = slider->palette.shadow().color(); - const QColor c1 = slider->palette.dark().color(); - // const QColor c2 = g.button(); - const QColor c3 = slider->palette.midlight().color(); - const QColor c4 = slider->palette.light().color(); - QBrush handleBrush; - - if (slider->state & State_Enabled) { - handleBrush = slider->palette.color(QPalette::Button); - } else { - handleBrush = QBrush(slider->palette.color(QPalette::Button), - Qt::Dense4Pattern); - } - - - int x = handle.x(), y = handle.y(), - wi = handle.width(), he = handle.height(); - - int x1 = x; - int x2 = x+wi-1; - int y1 = y; - int y2 = y+he-1; - - Qt::Orientation orient = slider->orientation; - bool tickAbove = slider->tickPosition == QStyleOptionSlider::TicksAbove; - bool tickBelow = slider->tickPosition == QStyleOptionSlider::TicksBelow; - - if (slider->state & State_HasFocus) { - QStyleOptionFocusRect fropt; - fropt.QStyleOption::operator=(*slider); - fropt.rect = subElementRect(SE_SliderFocusRect, slider); - proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, p); - } - - if ((tickAbove && tickBelow) || (!tickAbove && !tickBelow)) { - Qt::BGMode oldMode = p->backgroundMode(); - p->setBackgroundMode(Qt::OpaqueMode); - qDrawWinButton(p, QRect(x, y, wi, he), slider->palette, false, - &handleBrush); - p->setBackgroundMode(oldMode); - return; - } - - QSliderDirection dir; - - if (orient == Qt::Horizontal) - if (tickAbove) - dir = SlUp; - else - dir = SlDown; - else - if (tickAbove) - dir = SlLeft; - else - dir = SlRight; - - QPolygon a; - - int d = 0; - switch (dir) { - case SlUp: - y1 = y1 + wi/2; - d = (wi + 1) / 2 - 1; - a.setPoints(5, x1,y1, x1,y2, x2,y2, x2,y1, x1+d,y1-d); - break; - case SlDown: - y2 = y2 - wi/2; - d = (wi + 1) / 2 - 1; - a.setPoints(5, x1,y1, x1,y2, x1+d,y2+d, x2,y2, x2,y1); - break; - case SlLeft: - d = (he + 1) / 2 - 1; - x1 = x1 + he/2; - a.setPoints(5, x1,y1, x1-d,y1+d, x1,y2, x2,y2, x2,y1); - break; - case SlRight: - d = (he + 1) / 2 - 1; - x2 = x2 - he/2; - a.setPoints(5, x1,y1, x1,y2, x2,y2, x2+d,y1+d, x2,y1); - break; - } - - QBrush oldBrush = p->brush(); - p->setPen(Qt::NoPen); - p->setBrush(handleBrush); - Qt::BGMode oldMode = p->backgroundMode(); - p->setBackgroundMode(Qt::OpaqueMode); - p->drawRect(x1, y1, x2-x1+1, y2-y1+1); - p->drawPolygon(a); - p->setBrush(oldBrush); - p->setBackgroundMode(oldMode); - - if (dir != SlUp) { - p->setPen(c4); - p->drawLine(x1, y1, x2, y1); - p->setPen(c3); - p->drawLine(x1, y1+1, x2, y1+1); - } - if (dir != SlLeft) { - p->setPen(c3); - p->drawLine(x1+1, y1+1, x1+1, y2); - p->setPen(c4); - p->drawLine(x1, y1, x1, y2); - } - if (dir != SlRight) { - p->setPen(c0); - p->drawLine(x2, y1, x2, y2); - p->setPen(c1); - p->drawLine(x2-1, y1+1, x2-1, y2-1); - } - if (dir != SlDown) { - p->setPen(c0); - p->drawLine(x1, y2, x2, y2); - p->setPen(c1); - p->drawLine(x1+1, y2-1, x2-1, y2-1); - } - - switch (dir) { - case SlUp: - p->setPen(c4); - p->drawLine(x1, y1, x1+d, y1-d); - p->setPen(c0); - d = wi - d - 1; - p->drawLine(x2, y1, x2-d, y1-d); - d--; - p->setPen(c3); - p->drawLine(x1+1, y1, x1+1+d, y1-d); - p->setPen(c1); - p->drawLine(x2-1, y1, x2-1-d, y1-d); - break; - case SlDown: - p->setPen(c4); - p->drawLine(x1, y2, x1+d, y2+d); - p->setPen(c0); - d = wi - d - 1; - p->drawLine(x2, y2, x2-d, y2+d); - d--; - p->setPen(c3); - p->drawLine(x1+1, y2, x1+1+d, y2+d); - p->setPen(c1); - p->drawLine(x2-1, y2, x2-1-d, y2+d); - break; - case SlLeft: - p->setPen(c4); - p->drawLine(x1, y1, x1-d, y1+d); - p->setPen(c0); - d = he - d - 1; - p->drawLine(x1, y2, x1-d, y2-d); - d--; - p->setPen(c3); - p->drawLine(x1, y1+1, x1-d, y1+1+d); - p->setPen(c1); - p->drawLine(x1, y2-1, x1-d, y2-1-d); - break; - case SlRight: - p->setPen(c4); - p->drawLine(x2, y1, x2+d, y1+d); - p->setPen(c0); - d = he - d - 1; - p->drawLine(x2, y2, x2+d, y2-d); - d--; - p->setPen(c3); - p->drawLine(x2, y1+1, x2+d, y1+1+d); - p->setPen(c1); - p->drawLine(x2, y2-1, x2+d, y2-1-d); - break; - } - } - } - break; -#endif // QT_CONFIG(slider) -#if QT_CONFIG(scrollbar) - case CC_ScrollBar: - if (const QStyleOptionSlider *scrollbar = qstyleoption_cast(opt)) { - QStyleOptionSlider newScrollbar = *scrollbar; - if (scrollbar->minimum == scrollbar->maximum) - newScrollbar.state &= ~State_Enabled; //do not draw the slider. - QCommonStyle::drawComplexControl(cc, &newScrollbar, p, widget); - } - break; -#endif // QT_CONFIG(scrollbar) -#if QT_CONFIG(combobox) - case CC_ComboBox: - if (const QStyleOptionComboBox *cmb = qstyleoption_cast(opt)) { - QBrush editBrush = cmb->palette.brush(QPalette::Button); - if ((cmb->subControls & SC_ComboBoxFrame)) { - if (cmb->frame) { - QPalette shadePal = opt->palette; - shadePal.setColor(QPalette::Midlight, shadePal.button().color()); - qDrawWinPanel(p, opt->rect, shadePal, true, &editBrush); - } - else { - p->fillRect(opt->rect, editBrush); - } - } - if (cmb->subControls & SC_ComboBoxArrow) { - State flags = State_None; - - QRect ar = proxy()->subControlRect(CC_ComboBox, cmb, SC_ComboBoxArrow, widget); - bool sunkenArrow = cmb->activeSubControls == SC_ComboBoxArrow - && cmb->state & State_Sunken; - if (sunkenArrow) { - p->setPen(cmb->palette.dark().color()); - p->setBrush(cmb->palette.brush(QPalette::Button)); - p->drawRect(ar.adjusted(0,0,-1,-1)); - } else { - // Make qDrawWinButton use the right colors for drawing the shade of the button - QPalette pal(cmb->palette); - pal.setColor(QPalette::Button, cmb->palette.light().color()); - pal.setColor(QPalette::Light, cmb->palette.button().color()); - qDrawWinButton(p, ar, pal, false, - &cmb->palette.brush(QPalette::Button)); - } - - ar.adjust(2, 2, -2, -2); - if (opt->state & State_Enabled) - flags |= State_Enabled; - if (opt->state & State_HasFocus) - flags |= State_HasFocus; - - if (sunkenArrow) - flags |= State_Sunken; - QStyleOption arrowOpt = *cmb; - arrowOpt.rect = ar.adjusted(1, 1, -1, -1); - arrowOpt.state = flags; - proxy()->drawPrimitive(PE_IndicatorArrowDown, &arrowOpt, p, widget); - } - - if (cmb->subControls & SC_ComboBoxEditField) { - QRect re = proxy()->subControlRect(CC_ComboBox, cmb, SC_ComboBoxEditField, widget); - if (cmb->state & State_HasFocus && !cmb->editable) - p->fillRect(re.x(), re.y(), re.width(), re.height(), - cmb->palette.brush(QPalette::Highlight)); - - if (cmb->state & State_HasFocus) { - p->setPen(cmb->palette.highlightedText().color()); - p->setBackground(cmb->palette.highlight()); - - } else { - p->setPen(cmb->palette.text().color()); - p->setBackground(cmb->palette.window()); - } - - if (cmb->state & State_HasFocus && !cmb->editable) { - QStyleOptionFocusRect focus; - focus.QStyleOption::operator=(*cmb); - focus.rect = subElementRect(SE_ComboBoxFocusRect, cmb, widget); - focus.state |= State_FocusAtBorder; - focus.backgroundColor = cmb->palette.highlight().color(); - proxy()->drawPrimitive(PE_FrameFocusRect, &focus, p, widget); - } - } - } - break; -#endif // QT_CONFIG(combobox) -#if QT_CONFIG(spinbox) - case CC_SpinBox: - if (const QStyleOptionSpinBox *sb = qstyleoption_cast(opt)) { - QStyleOptionSpinBox copy = *sb; - PrimitiveElement pe; - bool enabled = opt->state & State_Enabled; - if (sb->frame && (sb->subControls & SC_SpinBoxFrame)) { - QBrush editBrush = sb->palette.brush(QPalette::Base); - QRect r = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxFrame, widget); - QPalette shadePal = sb->palette; - shadePal.setColor(QPalette::Midlight, shadePal.button().color()); - qDrawWinPanel(p, r, shadePal, true, &editBrush); - } - - QPalette shadePal(opt->palette); - shadePal.setColor(QPalette::Button, opt->palette.light().color()); - shadePal.setColor(QPalette::Light, opt->palette.button().color()); - - if (sb->subControls & SC_SpinBoxUp) { - copy.subControls = SC_SpinBoxUp; - QPalette pal2 = sb->palette; - if (!(sb->stepEnabled & QAbstractSpinBox::StepUpEnabled)) { - pal2.setCurrentColorGroup(QPalette::Disabled); - copy.state &= ~State_Enabled; - } - - copy.palette = pal2; - - if (sb->activeSubControls == SC_SpinBoxUp && (sb->state & State_Sunken)) { - copy.state |= State_On; - copy.state |= State_Sunken; - } else { - copy.state |= State_Raised; - copy.state &= ~State_Sunken; - } - pe = (sb->buttonSymbols == QAbstractSpinBox::PlusMinus ? PE_IndicatorSpinPlus - : PE_IndicatorSpinUp); - - copy.rect = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxUp, widget); - qDrawWinButton(p, copy.rect, shadePal, copy.state & (State_Sunken | State_On), - ©.palette.brush(QPalette::Button)); - copy.rect.adjust(4, 1, -5, -1); - if ((!enabled || !(sb->stepEnabled & QAbstractSpinBox::StepUpEnabled)) - && proxy()->styleHint(SH_EtchDisabledText, opt, widget) ) - { - QStyleOptionSpinBox lightCopy = copy; - lightCopy.rect.adjust(1, 1, 1, 1); - lightCopy.palette.setBrush(QPalette::ButtonText, copy.palette.light()); - proxy()->drawPrimitive(pe, &lightCopy, p, widget); - } - proxy()->drawPrimitive(pe, ©, p, widget); - } - - if (sb->subControls & SC_SpinBoxDown) { - copy.subControls = SC_SpinBoxDown; - copy.state = sb->state; - QPalette pal2 = sb->palette; - if (!(sb->stepEnabled & QAbstractSpinBox::StepDownEnabled)) { - pal2.setCurrentColorGroup(QPalette::Disabled); - copy.state &= ~State_Enabled; - } - copy.palette = pal2; - - if (sb->activeSubControls == SC_SpinBoxDown && (sb->state & State_Sunken)) { - copy.state |= State_On; - copy.state |= State_Sunken; - } else { - copy.state |= State_Raised; - copy.state &= ~State_Sunken; - } - pe = (sb->buttonSymbols == QAbstractSpinBox::PlusMinus ? PE_IndicatorSpinMinus - : PE_IndicatorSpinDown); - - copy.rect = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxDown, widget); - qDrawWinButton(p, copy.rect, shadePal, copy.state & (State_Sunken | State_On), - ©.palette.brush(QPalette::Button)); - copy.rect.adjust(4, 0, -5, -1); - if ((!enabled || !(sb->stepEnabled & QAbstractSpinBox::StepDownEnabled)) - && proxy()->styleHint(SH_EtchDisabledText, opt, widget) ) - { - QStyleOptionSpinBox lightCopy = copy; - lightCopy.rect.adjust(1, 1, 1, 1); - lightCopy.palette.setBrush(QPalette::ButtonText, copy.palette.light()); - proxy()->drawPrimitive(pe, &lightCopy, p, widget); - } - proxy()->drawPrimitive(pe, ©, p, widget); - } - } - break; -#endif // QT_CONFIG(spinbox) - default: - QCommonStyle::drawComplexControl(cc, opt, p); - } -#else // 0 - QCommonStyle::drawComplexControl(cc, opt, p); -#endif -} - -/*! \reimp */ -QSize QWindowsStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, const QSize &csz) const -{ - QSize sz(csz); - switch (ct) { - case CT_PushButton: - if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { - sz = QCommonStyle::sizeFromContents(ct, opt, csz); - int w = sz.width(), - h = sz.height(); - int defwidth = 0; - if (btn->features & QStyleOptionButton::AutoDefaultButton) - defwidth = 2 * proxy()->pixelMetric(PM_ButtonDefaultIndicator, btn); - const qreal dpi = QStyleHelper::dpi(opt); - int minwidth = int(QStyleHelper::dpiScaled(75, dpi)); - int minheight = int(QStyleHelper::dpiScaled(23, dpi)); - -#ifndef QT_QWS_SMALL_PUSHBUTTON - if (w < minwidth + defwidth && !btn->text.isEmpty()) - w = minwidth + defwidth; - if (h < minheight + defwidth) - h = minheight + defwidth; -#endif - sz = QSize(w, h); - } - break; -#if 0 && QT_CONFIG(menu) - case CT_MenuItem: - if (const QStyleOptionMenuItem *mi = qstyleoption_cast(opt)) { - int w = sz.width(); - sz = QCommonStyle::sizeFromContents(ct, opt, csz, widget); - - if (mi->menuItemType == QStyleOptionMenuItem::Separator) { - sz = QSize(10, QWindowsStylePrivate::windowsSepHeight); - } - else if (mi->icon.isNull()) { - sz.setHeight(sz.height() - 2); - w -= 6; - } - - if (mi->menuItemType != QStyleOptionMenuItem::Separator && !mi->icon.isNull()) { - int iconExtent = proxy()->pixelMetric(PM_SmallIconSize, opt, widget); - sz.setHeight(qMax(sz.height(), - mi->icon.actualSize(QSize(iconExtent, iconExtent)).height() - + 2 * QWindowsStylePrivate::windowsItemFrame)); - } - int maxpmw = mi->maxIconWidth; - int tabSpacing = 20; - if (mi->text.contains(QLatin1Char('\t'))) - w += tabSpacing; - else if (mi->menuItemType == QStyleOptionMenuItem::SubMenu) - w += 2 * QWindowsStylePrivate::windowsArrowHMargin; - else if (mi->menuItemType == QStyleOptionMenuItem::DefaultItem) { - // adjust the font and add the difference in size. - // it would be better if the font could be adjusted in the initStyleOption qmenu func!! - QFontMetrics fm(mi->font); - QFont fontBold = mi->font; - fontBold.setBold(true); - QFontMetrics fmBold(fontBold); - w += fmBold.horizontalAdvance(mi->text) - fm.horizontalAdvance(mi->text); - } - - int checkcol = qMax(maxpmw, QWindowsStylePrivate::windowsCheckMarkWidth); // Windows always shows a check column - w += checkcol; - w += int(QWindowsStylePrivate::windowsRightBorder) + 10; - sz.setWidth(w); - } - break; -#endif // QT_CONFIG(menu) -#if 0 && QT_CONFIG(menubar) - case CT_MenuBarItem: - if (!sz.isEmpty()) - sz += QSize(QWindowsStylePrivate::windowsItemHMargin * 4, QWindowsStylePrivate::windowsItemVMargin * 2); - break; -#endif - case CT_ToolButton: - if (qstyleoption_cast(opt)) - return sz += QSize(7, 6); - Q_FALLTHROUGH(); - - default: - sz = QCommonStyle::sizeFromContents(ct, opt, csz); - } - return sz; -} - -/*! - \reimp -*/ -QIcon QWindowsStyle::standardIcon(StandardPixmap standardIcon, const QStyleOption *option) const -{ - return QCommonStyle::standardIcon(standardIcon, option); -} - -} // namespace QQC2 - -QT_END_NAMESPACE - -#include "moc_qquickwindowsstyle_p.cpp" diff --git a/src/imports/nativestyle/qstyle/windows/qquickwindowsstyle_p.h b/src/imports/nativestyle/qstyle/windows/qquickwindowsstyle_p.h deleted file mode 100644 index 92926b71..00000000 --- a/src/imports/nativestyle/qstyle/windows/qquickwindowsstyle_p.h +++ /dev/null @@ -1,111 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWidgets module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKWINDOWSSTYLE_P_H -#define QQUICKWINDOWSSTYLE_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 "qquickcommonstyle.h" - -QT_BEGIN_NAMESPACE - -class QPalette; - -namespace QQC2 { - -class QStyleOptionButton; -class QWindowsStylePrivate; - -class QWindowsStylePrivate; - -class QWindowsStyle : public QCommonStyle -{ - Q_OBJECT -public: - QWindowsStyle(); - ~QWindowsStyle() override; -/* - void polish(QApplication*) override; - void unpolish(QApplication*) override; - - void polish(QWidget*) override; - void unpolish(QWidget*) override; - - void polish(QPalette &) override; -*/ - void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p) const override; - void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p) const override; - void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p) const override; - - QRect subElementRect(SubElement r, const QStyleOption *opt) const override; - QSize sizeFromContents(ContentsType ct, const QStyleOption *opt, const QSize &contentsSize) const override; - - int pixelMetric(PixelMetric pm, const QStyleOption *option = nullptr) const override; - - int styleHint(StyleHint hint, const QStyleOption *opt = nullptr, - QStyleHintReturn *returnData = nullptr) const override; - - QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt) const override; - - QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = nullptr) const override; - -protected: -// bool eventFilter(QObject *o, QEvent *e) override; - QWindowsStyle(QWindowsStylePrivate &dd); - -private: - Q_DISABLE_COPY_MOVE(QWindowsStyle) - Q_DECLARE_PRIVATE(QWindowsStyle) -}; - -} // namespace QQC2 - -QT_END_NAMESPACE - -#endif // QQUICKWINDOWSSTYLE_P_H diff --git a/src/imports/nativestyle/qstyle/windows/qquickwindowsstyle_p_p.h b/src/imports/nativestyle/qstyle/windows/qquickwindowsstyle_p_p.h deleted file mode 100644 index 64b95a40..00000000 --- a/src/imports/nativestyle/qstyle/windows/qquickwindowsstyle_p_p.h +++ /dev/null @@ -1,122 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWidgets module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKWINDOWSSTYLE_P_P_H -#define QQUICKWINDOWSSTYLE_P_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of XX. This header -// file may change from version to version without notice, or even be removed. -// -// We mean it. -// - -#include "qquickwindowsstyle_p.h" -#include "qquickcommonstyle_p.h" -#include "qquickstylehelper_p.h" - -QT_BEGIN_NAMESPACE - -namespace QQC2 { - -class QStyleOptionButton; -class QWindowsStylePrivate; - -#include - -class QTime; - -class QWindowsStylePrivate : public QCommonStylePrivate -{ - Q_DECLARE_PUBLIC(QWindowsStyle) -public: - enum { InvalidMetric = -23576 }; - - QWindowsStylePrivate(); - static int pixelMetricFromSystemDp(QStyle::PixelMetric pm, const QStyleOption *option = nullptr); - static int fixedPixelMetric(QStyle::PixelMetric pm); - static qreal devicePixelRatio(const QStyleOption *option = nullptr) - { - return devicePixelRatio(option ? option->window : nullptr); - } - - static qreal devicePixelRatio(const QWindow *win) - { return win ? win->devicePixelRatio() : QWindowsStylePrivate::appDevicePixelRatio(); } - static qreal nativeMetricScaleFactor(const QStyleOption *option = nullptr); - static qreal nativeMetricScaleFactor(const QWindow *win); - static bool isDarkMode(); - -#if 0 - bool hasSeenAlt(const QWidget *widget) const; - bool altDown() const { return alt_down; } - bool alt_down = false; -#endif - QList seenAlt; - int menuBarTimer = 0; - - QColor inactiveCaptionText; - QColor activeCaptionColor; - QColor activeGradientCaptionColor; - QColor inactiveCaptionColor; - QColor inactiveGradientCaptionColor; - - enum { - windowsItemFrame = 2, // menu item frame width - windowsSepHeight = 9, // separator item height - windowsItemHMargin = 3, // menu item hor text margin - windowsItemVMargin = 2, // menu item ver text margin - windowsArrowHMargin = 6, // arrow horizontal margin - windowsRightBorder = 15, // right border on windows - windowsCheckMarkWidth = 12 // checkmarks width on windows - }; - -private: - static qreal appDevicePixelRatio(); -}; - -} // namespace QQC2 - -QT_END_NAMESPACE - -#endif //QQUICKWINDOWSSTYLE_P_P_H - diff --git a/src/imports/nativestyle/qstyle/windows/qquickwindowsvistastyle.cpp b/src/imports/nativestyle/qstyle/windows/qquickwindowsvistastyle.cpp deleted file mode 100644 index 512f8291..00000000 --- a/src/imports/nativestyle/qstyle/windows/qquickwindowsvistastyle.cpp +++ /dev/null @@ -1,2509 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWidgets module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickwindowsvistastyle_p.h" -#include "qquickwindowsvistastyle_p_p.h" -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -static const int windowsItemFrame = 2; // menu item frame width -static const int windowsItemHMargin = 3; // menu item hor text margin -static const int windowsItemVMargin = 4; // menu item ver text margin -static const int windowsArrowHMargin = 6; // arrow horizontal margin -static const int windowsRightBorder = 15; // right border on windows - -#ifndef TMT_CONTENTMARGINS -# define TMT_CONTENTMARGINS 3602 -#endif -#ifndef TMT_SIZINGMARGINS -# define TMT_SIZINGMARGINS 3601 -#endif -#ifndef LISS_NORMAL -# define LISS_NORMAL 1 -# define LISS_HOT 2 -# define LISS_SELECTED 3 -# define LISS_DISABLED 4 -# define LISS_SELECTEDNOTFOCUS 5 -# define LISS_HOTSELECTED 6 -#endif -#ifndef BP_COMMANDLINK -# define BP_COMMANDLINK 6 -# define BP_COMMANDLINKGLYPH 7 -# define CMDLGS_NORMAL 1 -# define CMDLGS_HOT 2 -# define CMDLGS_PRESSED 3 -# define CMDLGS_DISABLED 4 -#endif - -/* \internal - Checks if we should use Vista style , or if we should - fall back to Windows style. -*/ -bool QWindowsVistaStylePrivate::useVista() -{ - return QWindowsVistaStylePrivate::useXP(); -} - -/* \internal - Checks and returns the style object -*/ -inline QObject *styleObject(const QStyleOption *option) { - return option ? option->styleObject : nullptr; -} - -/* \internal - Checks if we can animate on a style option -*/ -bool canAnimate(const QStyleOption *option) { - return option - && option->styleObject - && !option->styleObject->property("_q_no_animation").toBool(); -} - -static inline QImage createAnimationBuffer(const QStyleOption *option, const QWidget *widget) -{ - const int devicePixelRatio = widget ? widget->devicePixelRatio() : 1; - QImage result(option->rect.size() * devicePixelRatio, QImage::Format_ARGB32_Premultiplied); - result.setDevicePixelRatio(devicePixelRatio); - result.fill(0); - return result; -} - -/* \internal - Used by animations to clone a styleoption and shift its offset -*/ -QStyleOption *clonedAnimationStyleOption(const QStyleOption*option) { - QStyleOption *styleOption = nullptr; - if (const QStyleOptionSlider *slider = qstyleoption_cast(option)) - styleOption = new QStyleOptionSlider(*slider); - else if (const QStyleOptionSpinBox *spinbox = qstyleoption_cast(option)) - styleOption = new QStyleOptionSpinBox(*spinbox); - else if (const QStyleOptionGroupBox *groupBox = qstyleoption_cast(option)) - styleOption = new QStyleOptionGroupBox(*groupBox); - else if (const QStyleOptionComboBox *combo = qstyleoption_cast(option)) - styleOption = new QStyleOptionComboBox(*combo); - else if (const QStyleOptionButton *button = qstyleoption_cast(option)) - styleOption = new QStyleOptionButton(*button); - else - styleOption = new QStyleOption(*option); - styleOption->rect = QRect(QPoint(0,0), option->rect.size()); - return styleOption; -} - -/* \internal - Used by animations to delete cloned styleoption -*/ -void deleteClonedAnimationStyleOption(const QStyleOption *option) -{ - if (const QStyleOptionSlider *slider = qstyleoption_cast(option)) - delete slider; - else if (const QStyleOptionSpinBox *spinbox = qstyleoption_cast(option)) - delete spinbox; - else if (const QStyleOptionGroupBox *groupBox = qstyleoption_cast(option)) - delete groupBox; - else if (const QStyleOptionComboBox *combo = qstyleoption_cast(option)) - delete combo; - else if (const QStyleOptionButton *button = qstyleoption_cast(option)) - delete button; - else - delete option; -} - -/*! - \class QWindowsVistaStyle - \brief The QWindowsVistaStyle class provides a look and feel suitable for applications on Microsoft Windows Vista. - \since 4.3 - \ingroup appearance - \inmodule QtWidgets - \internal - - \warning This style is only available on the Windows Vista platform - because it makes use of Windows Vista's style engine. - - \sa QMacStyle, QWindowsXPStyle, QFusionStyle -*/ - -/*! - Constructs a QWindowsVistaStyle object. -*/ -QWindowsVistaStyle::QWindowsVistaStyle() - : QWindowsXPStyle(*new QWindowsVistaStylePrivate) -{ -} - -/*! - Destructor. -*/ -QWindowsVistaStyle::~QWindowsVistaStyle() = default; - -//convert Qt state flags to uxtheme button states -static int buttonStateId(int flags, int partId) -{ - int stateId = 0; - if (partId == BP_RADIOBUTTON || partId == BP_CHECKBOX) { - if (!(flags & QStyle::State_Enabled)) - stateId = RBS_UNCHECKEDDISABLED; - else if (flags & QStyle::State_Sunken) - stateId = RBS_UNCHECKEDPRESSED; - else if (flags & QStyle::State_MouseOver) - stateId = RBS_UNCHECKEDHOT; - else - stateId = RBS_UNCHECKEDNORMAL; - - if (flags & QStyle::State_On) - stateId += RBS_CHECKEDNORMAL-1; - - } else if (partId == BP_PUSHBUTTON) { - if (!(flags & QStyle::State_Enabled)) - stateId = PBS_DISABLED; - else if (flags & (QStyle::State_Sunken | QStyle::State_On)) - stateId = PBS_PRESSED; - else if (flags & QStyle::State_MouseOver) - stateId = PBS_HOT; - else - stateId = PBS_NORMAL; - } else { - Q_ASSERT(1); - } - return stateId; -} - -bool QWindowsVistaAnimation::isUpdateNeeded() const -{ - return QWindowsVistaStylePrivate::useVista(); -} - -void QWindowsVistaAnimation::paint(QPainter *painter, const QStyleOption *option) -{ - painter->drawImage(option->rect, currentImage()); -} - -static inline bool supportsStateTransition(QStyle::PrimitiveElement element, - const QStyleOption *option, - const QWidget *widget) -{ - bool result = false; - switch (element) { - case QStyle::PE_IndicatorRadioButton: - case QStyle::PE_IndicatorCheckBox: - result = true; - break; - // QTBUG-40634, do not animate when color is set in palette for PE_PanelLineEdit. - case QStyle::PE_FrameLineEdit: - result = !QWindowsXPStylePrivate::isLineEditBaseColorSet(option, widget); - break; - default: - break; - } - return result; -} - -/*! - \internal - - Animations are used for some state transitions on specific widgets. - - Only one running animation can exist for a widget at any specific - time. Animations can be added through - QWindowsVistaStylePrivate::startAnimation(Animation *) and any - existing animation on a widget can be retrieved with - QWindowsVistaStylePrivate::widgetAnimation(Widget *). - - Once an animation has been started, - QWindowsVistaStylePrivate::timerEvent(QTimerEvent *) will - continuously call update() on the widget until it is stopped, - meaning that drawPrimitive will be called many times until the - transition has completed. During this time, the result will be - retrieved by the Animation::paint(...) function and not by the style - itself. - - To determine if a transition should occur, the style needs to know - the previous state of the widget as well as the current one. This is - solved by updating dynamic properties on the widget every time the - function is called. - - Transitions interrupting existing transitions should always be - smooth, so whenever a hover-transition is started on a pulsating - button, it uses the current frame of the pulse-animation as the - starting image for the hover transition. - - */ - -void QWindowsVistaStyle::drawPrimitive(PrimitiveElement element, const QStyleOption *option, - QPainter *painter, const QWidget *widget) const -{ - QWindowsVistaStylePrivate *d = const_cast(d_func()); - - int state = option->state; - if (!QWindowsVistaStylePrivate::useVista()) { - QWindowsStyle::drawPrimitive(element, option, painter, widget); - return; - } - - if ((option->state & State_Enabled) && d->transitionsEnabled() && canAnimate(option)) { - { - QRect oldRect; - QRect newRect; - - if (supportsStateTransition(element, option, widget)) { - // Retrieve and update the dynamic properties tracking - // the previous state of the widget: - QObject *styleObject = option->styleObject; - styleObject->setProperty("_q_no_animation", true); - - int oldState = styleObject->property("_q_stylestate").toInt(); - oldRect = styleObject->property("_q_stylerect").toRect(); - newRect = option->rect; - styleObject->setProperty("_q_stylestate", int(option->state)); - styleObject->setProperty("_q_stylerect", option->rect); - - bool doTransition = oldState && - ((state & State_Sunken) != (oldState & State_Sunken) || - (state & State_On) != (oldState & State_On) || - (state & State_MouseOver) != (oldState & State_MouseOver)); - - if (oldRect != newRect || - (state & State_Enabled) != (oldState & State_Enabled) || - (state & State_Active) != (oldState & State_Active)) - d->stopAnimation(styleObject); - - if (option->state & State_ReadOnly && element == PE_FrameLineEdit) // Do not animate read only line edits - doTransition = false; - - if (doTransition) { - QStyleOption *styleOption = clonedAnimationStyleOption(option); - styleOption->state = QStyle::State(oldState); - - QWindowsVistaAnimation *anim = qobject_cast(d->animation(styleObject)); - QWindowsVistaTransition *t = new QWindowsVistaTransition(styleObject); - - // We create separate images for the initial and final transition states and store them in the - // Transition object. - QImage startImage = createAnimationBuffer(option, widget); - QPainter startPainter(&startImage); - - QImage endImage = createAnimationBuffer(option, widget); - QPainter endPainter(&endImage); - - // If we have a running animation on the widget already, we will use that to paint the initial - // state of the new transition, this ensures a smooth transition from a current animation such as a - // pulsating default button into the intended target state. - if (!anim) - proxy()->drawPrimitive(element, styleOption, &startPainter, widget); - else - anim->paint(&startPainter, styleOption); - - t->setStartImage(startImage); - - // The end state of the transition is simply the result we would have painted - // if the style was not animated. - styleOption->styleObject = nullptr; - styleOption->state = option->state; - proxy()->drawPrimitive(element, styleOption, &endPainter, widget); - - - t->setEndImage(endImage); - - HTHEME theme; - int partId; - DWORD duration; - int fromState = 0; - int toState = 0; - - //translate state flags to UXTHEME states : - if (element == PE_FrameLineEdit) { - theme = OpenThemeData(nullptr, L"Edit"); - partId = EP_EDITBORDER_NOSCROLL; - - if (oldState & State_MouseOver) - fromState = ETS_HOT; - else if (oldState & State_HasFocus) - fromState = ETS_FOCUSED; - else - fromState = ETS_NORMAL; - - if (state & State_MouseOver) - toState = ETS_HOT; - else if (state & State_HasFocus) - toState = ETS_FOCUSED; - else - toState = ETS_NORMAL; - - } else { - theme = OpenThemeData(nullptr, L"Button"); - if (element == PE_IndicatorRadioButton) - partId = BP_RADIOBUTTON; - else if (element == PE_IndicatorCheckBox) - partId = BP_CHECKBOX; - else - partId = BP_PUSHBUTTON; - - fromState = buttonStateId(oldState, partId); - toState = buttonStateId(option->state, partId); - } - - // Retrieve the transition time between the states from the system. - if (theme - && SUCCEEDED(GetThemeTransitionDuration(theme, partId, fromState, toState, - TMT_TRANSITIONDURATIONS, &duration))) { - t->setDuration(int(duration)); - } - t->setStartTime(QTime::currentTime()); - - deleteClonedAnimationStyleOption(styleOption); - d->startAnimation(t); - } - styleObject->setProperty("_q_no_animation", false); - } - - } // End of animation part - } - - QRect rect = option->rect; - - switch (element) { - case PE_IndicatorHeaderArrow: - if (const QStyleOptionHeader *header = qstyleoption_cast(option)) { - int stateId = HSAS_SORTEDDOWN; - if (header->sortIndicator & QStyleOptionHeader::SortDown) - stateId = HSAS_SORTEDUP; //note that the uxtheme sort down indicator is the inverse of ours - XPThemeData theme(widget, painter, - QWindowsXPStylePrivate::HeaderTheme, - HP_HEADERSORTARROW, stateId, option->rect); - d->drawBackground(theme); - } - break; - - case PE_IndicatorBranch: - { - XPThemeData theme(widget, painter, QWindowsXPStylePrivate::VistaTreeViewTheme); - static int decoration_size = 0; - if (!decoration_size && theme.isValid()) { - XPThemeData themeSize = theme; - themeSize.partId = TVP_HOTGLYPH; - themeSize.stateId = GLPS_OPENED; - const QSizeF size = themeSize.size() * QWindowsStylePrivate::nativeMetricScaleFactor(widget); - decoration_size = qRound(qMax(size.width(), size.height())); - } - int mid_h = option->rect.x() + option->rect.width() / 2; - int mid_v = option->rect.y() + option->rect.height() / 2; - int bef_h = mid_h; - int bef_v = mid_v; - int aft_h = mid_h; - int aft_v = mid_v; - if (option->state & State_Children) { - int delta = decoration_size / 2; - theme.rect = QRect(bef_h - delta, bef_v - delta, decoration_size, decoration_size); - theme.partId = option->state & State_MouseOver ? TVP_HOTGLYPH : TVP_GLYPH; - theme.stateId = option->state & QStyle::State_Open ? GLPS_OPENED : GLPS_CLOSED; - if (option->direction == Qt::RightToLeft) - theme.mirrorHorizontally = true; - d->drawBackground(theme); - bef_h -= delta + 2; - bef_v -= delta + 2; - aft_h += delta - 2; - aft_v += delta - 2; - } -#if 0 - QBrush brush(option->palette.dark().color(), Qt::Dense4Pattern); - if (option->state & State_Item) { - if (option->direction == Qt::RightToLeft) - painter->fillRect(option->rect.left(), mid_v, bef_h - option->rect.left(), 1, brush); - else - painter->fillRect(aft_h, mid_v, option->rect.right() - aft_h + 1, 1, brush); - } - if (option->state & State_Sibling && option->rect.bottom() > aft_v) - painter->fillRect(mid_h, aft_v, 1, option->rect.bottom() - aft_v + 1, brush); - if (option->state & (State_Open | State_Children | State_Item | State_Sibling) && (bef_v > option->rect.y())) - painter->fillRect(mid_h, option->rect.y(), 1, bef_v - option->rect.y(), brush); -#endif - } - break; - - case PE_PanelButtonBevel: - case PE_IndicatorCheckBox: - case PE_IndicatorRadioButton: - { - if (QWindowsVistaAnimation *a = - qobject_cast(d->animation(styleObject(option)))){ - a->paint(painter, option); - } else { - QWindowsXPStyle::drawPrimitive(element, option, painter, widget); - } - } - break; - - case PE_FrameMenu: - { - int stateId = option->state & State_Active ? MB_ACTIVE : MB_INACTIVE; - XPThemeData theme(widget, painter, - QWindowsXPStylePrivate::MenuTheme, - MENU_POPUPBORDERS, stateId, option->rect); - d->drawBackground(theme); - } - break; - case PE_Frame: { -#ifndef QT_NO_ACCESSIBILITY - if (QStyleHelper::isInstanceOf(option->styleObject, QAccessible::EditableText) - || QStyleHelper::isInstanceOf(option->styleObject, QAccessible::StaticText) || -#else - if ( -#endif - (widget && widget->inherits("QTextEdit"))) { - painter->save(); - int stateId = ETS_NORMAL; - if (!(state & State_Enabled)) - stateId = ETS_DISABLED; - else if (state & State_ReadOnly) - stateId = ETS_READONLY; - else if (state & State_HasFocus) - stateId = ETS_SELECTED; - XPThemeData theme(widget, painter, - QWindowsXPStylePrivate::EditTheme, - EP_EDITBORDER_HVSCROLL, stateId, option->rect); - // Since EP_EDITBORDER_HVSCROLL does not us borderfill, theme.noContent cannot be used for clipping - int borderSize = 1; - GetThemeInt(theme.handle(), theme.partId, theme.stateId, TMT_BORDERSIZE, &borderSize); - QRegion clipRegion = option->rect; - QRegion content = option->rect.adjusted(borderSize, borderSize, -borderSize, -borderSize); - clipRegion ^= content; - painter->setClipRegion(clipRegion); - d->drawBackground(theme); - painter->restore(); - } else { - QWindowsXPStyle::drawPrimitive(element, option, painter, widget); - } - } - break; - - case PE_PanelLineEdit: - if (const QStyleOptionFrame *panel = qstyleoption_cast(option)) { - bool isEnabled = option->state & State_Enabled; - if (QWindowsXPStylePrivate::isLineEditBaseColorSet(option, widget)) { - painter->fillRect(panel->rect, panel->palette.brush(QPalette::Base)); - } else { - int partId = EP_BACKGROUND; - int stateId = EBS_NORMAL; - if (!isEnabled) - stateId = EBS_DISABLED; - else if (state & State_ReadOnly) - stateId = EBS_READONLY; - else if (state & State_MouseOver) - stateId = EBS_HOT; - - XPThemeData theme(nullptr, painter, QWindowsXPStylePrivate::EditTheme, - partId, stateId, rect); - if (!theme.isValid()) { - QWindowsStyle::drawPrimitive(element, option, painter, widget); - return; - } - int bgType; - GetThemeEnumValue(theme.handle(), partId, stateId, TMT_BGTYPE, &bgType); - if ( bgType == BT_IMAGEFILE ) { - d->drawBackground(theme); - } else { - QBrush fillColor = option->palette.brush(QPalette::Base); - if (!isEnabled) { - PROPERTYORIGIN origin = PO_NOTFOUND; - GetThemePropertyOrigin(theme.handle(), theme.partId, theme.stateId, TMT_FILLCOLOR, &origin); - // Use only if the fill property comes from our part - if ((origin == PO_PART || origin == PO_STATE)) { - COLORREF bgRef; - GetThemeColor(theme.handle(), partId, stateId, TMT_FILLCOLOR, &bgRef); - fillColor = QBrush(qRgb(GetRValue(bgRef), GetGValue(bgRef), GetBValue(bgRef))); - } - } - painter->fillRect(option->rect, fillColor); - } - } - if (panel->lineWidth > 0) - proxy()->drawPrimitive(PE_FrameLineEdit, panel, painter, widget); - return; - } - break; - - case PE_FrameLineEdit: - if (QWindowsVistaAnimation *anim = qobject_cast(d->animation(styleObject(option)))) { - anim->paint(painter, option); - } else { - QPainter *p = painter; - if (QWindowsXPStylePrivate::isItemViewDelegateLineEdit(widget)) { - // we try to check if this lineedit is a delegate on a QAbstractItemView-derived class. - QPen oldPen = p->pen(); - // Inner white border - p->setPen(QPen(option->palette.base().color(), 1)); - p->drawRect(option->rect.adjusted(1, 1, -2, -2)); - // Outer dark border - p->setPen(QPen(option->palette.shadow().color(), 1)); - p->drawRect(option->rect.adjusted(0, 0, -1, -1)); - p->setPen(oldPen); - return; - } - int stateId = ETS_NORMAL; - if (!(state & State_Enabled)) - stateId = ETS_DISABLED; - else if (state & State_ReadOnly) - stateId = ETS_READONLY; - else if (state & State_MouseOver) - stateId = ETS_HOT; - else if (state & State_HasFocus) - stateId = ETS_SELECTED; - XPThemeData theme(widget, painter, - QWindowsXPStylePrivate::EditTheme, - EP_EDITBORDER_NOSCROLL, stateId, option->rect); - theme.noContent = true; - painter->save(); - QRegion clipRegion = option->rect; - clipRegion -= option->rect.adjusted(2, 2, -2, -2); - painter->setClipRegion(clipRegion); - d->drawBackground(theme); - painter->restore(); - } - break; - - case PE_IndicatorToolBarHandle: - { - XPThemeData theme; - QRect rect; - if (option->state & State_Horizontal) { - theme = XPThemeData(widget, painter, - QWindowsXPStylePrivate::RebarTheme, - RP_GRIPPER, ETS_NORMAL, option->rect.adjusted(0, 1, -2, -2)); - rect = option->rect.adjusted(0, 1, 0, -2); - rect.setWidth(4); - } else { - theme = XPThemeData(widget, painter, QWindowsXPStylePrivate::RebarTheme, - RP_GRIPPERVERT, ETS_NORMAL, option->rect.adjusted(0, 1, -2, -2)); - rect = option->rect.adjusted(1, 0, -1, 0); - rect.setHeight(4); - } - theme.rect = rect; - d->drawBackground(theme); - } - break; - - case PE_IndicatorToolBarSeparator: - { - QPen pen = painter->pen(); - int margin = 3; - painter->setPen(option->palette.window().color().darker(114)); - if (option->state & State_Horizontal) { - int x1 = option->rect.center().x(); - painter->drawLine(QPoint(x1, option->rect.top() + margin), QPoint(x1, option->rect.bottom() - margin)); - } else { - int y1 = option->rect.center().y(); - painter->drawLine(QPoint(option->rect.left() + margin, y1), QPoint(option->rect.right() - margin, y1)); - } - painter->setPen(pen); - } - break; - - case PE_PanelTipLabel: { - XPThemeData theme(widget, painter, - QWindowsXPStylePrivate::ToolTipTheme, - TTP_STANDARD, TTSS_NORMAL, option->rect); - d->drawBackground(theme); - break; - } - - case PE_PanelItemViewItem: - { - const QStyleOptionViewItem *vopt; - bool newStyle = true; - QAbstractItemView::SelectionBehavior selectionBehavior = QAbstractItemView::SelectRows; - QAbstractItemView::SelectionMode selectionMode = QAbstractItemView::NoSelection; - if (const QAbstractItemView *view = qobject_cast(widget)) { - newStyle = !qobject_cast(view); - selectionBehavior = view->selectionBehavior(); - selectionMode = view->selectionMode(); -#ifndef QT_NO_ACCESSIBILITY - } else if (!widget) { - newStyle = !QStyleHelper::hasAncestor(option->styleObject, QAccessible::MenuItem) ; -#endif - } - - if (newStyle && (vopt = qstyleoption_cast(option))) { - bool selected = vopt->state & QStyle::State_Selected; - const bool hover = selectionMode != QAbstractItemView::NoSelection && (vopt->state & QStyle::State_MouseOver); - bool active = vopt->state & QStyle::State_Active; - - if (vopt->features & QStyleOptionViewItem::Alternate) - painter->fillRect(vopt->rect, vopt->palette.alternateBase()); - - QPalette::ColorGroup cg = vopt->state & QStyle::State_Enabled - ? QPalette::Normal : QPalette::Disabled; - if (cg == QPalette::Normal && !(vopt->state & QStyle::State_Active)) - cg = QPalette::Inactive; - - QRect itemRect = subElementRect(QStyle::SE_ItemViewItemFocusRect, option, widget).adjusted(-1, 0, 1, 0); - itemRect.setTop(vopt->rect.top()); - itemRect.setBottom(vopt->rect.bottom()); - - QSize sectionSize = itemRect.size(); - if (vopt->showDecorationSelected) - sectionSize = vopt->rect.size(); - - if (selectionBehavior == QAbstractItemView::SelectRows) - sectionSize.setWidth(vopt->rect.width()); - QPixmap pixmap; - - if (vopt->backgroundBrush.style() != Qt::NoBrush) { - const QPointF oldBrushOrigin = painter->brushOrigin(); - painter->setBrushOrigin(vopt->rect.topLeft()); - painter->fillRect(vopt->rect, vopt->backgroundBrush); - painter->setBrushOrigin(oldBrushOrigin); - } - - if (hover || selected) { - if (sectionSize.width() > 0 && sectionSize.height() > 0) { - QString key = QString::fromLatin1("qvdelegate-%1-%2-%3-%4-%5").arg(sectionSize.width()) - .arg(sectionSize.height()).arg(selected).arg(active).arg(hover); - if (!QPixmapCache::find(key, &pixmap)) { - pixmap = QPixmap(sectionSize); - pixmap.fill(Qt::transparent); - - int state; - if (selected && hover) - state = LISS_HOTSELECTED; - else if (selected && !active) - state = LISS_SELECTEDNOTFOCUS; - else if (selected) - state = LISS_SELECTED; - else - state = LISS_HOT; - - QPainter pixmapPainter(&pixmap); - XPThemeData theme(widget, &pixmapPainter, - QWindowsXPStylePrivate::VistaTreeViewTheme, - LVP_LISTITEM, state, QRect(0, 0, sectionSize.width(), sectionSize.height())); - if (theme.isValid()) { - d->drawBackground(theme); - } else { - QWindowsXPStyle::drawPrimitive(PE_PanelItemViewItem, option, painter, widget); - break; - } - QPixmapCache::insert(key, pixmap); - } - } - - if (vopt->showDecorationSelected) { - const int frame = 2; //Assumes a 2 pixel pixmap border - QRect srcRect = QRect(0, 0, sectionSize.width(), sectionSize.height()); - QRect pixmapRect = vopt->rect; - bool reverse = vopt->direction == Qt::RightToLeft; - bool leftSection = vopt->viewItemPosition == QStyleOptionViewItem::Beginning; - bool rightSection = vopt->viewItemPosition == QStyleOptionViewItem::End; - if (vopt->viewItemPosition == QStyleOptionViewItem::OnlyOne - || vopt->viewItemPosition == QStyleOptionViewItem::Invalid) - painter->drawPixmap(pixmapRect.topLeft(), pixmap); - else if (reverse ? rightSection : leftSection){ - painter->drawPixmap(QRect(pixmapRect.topLeft(), - QSize(frame, pixmapRect.height())), pixmap, - QRect(QPoint(0, 0), QSize(frame, pixmapRect.height()))); - painter->drawPixmap(pixmapRect.adjusted(frame, 0, 0, 0), - pixmap, srcRect.adjusted(frame, 0, -frame, 0)); - } else if (reverse ? leftSection : rightSection) { - painter->drawPixmap(QRect(pixmapRect.topRight() - QPoint(frame - 1, 0), - QSize(frame, pixmapRect.height())), pixmap, - QRect(QPoint(pixmapRect.width() - frame, 0), - QSize(frame, pixmapRect.height()))); - painter->drawPixmap(pixmapRect.adjusted(0, 0, -frame, 0), - pixmap, srcRect.adjusted(frame, 0, -frame, 0)); - } else if (vopt->viewItemPosition == QStyleOptionViewItem::Middle) - painter->drawPixmap(pixmapRect, pixmap, - srcRect.adjusted(frame, 0, -frame, 0)); - } else { - if (vopt->text.isEmpty() && vopt->icon.isNull()) - break; - painter->drawPixmap(itemRect.topLeft(), pixmap); - } - } - } else { - QWindowsXPStyle::drawPrimitive(element, option, painter, widget); - } - break; - } - case PE_Widget: - { -#if QT_CONFIG(dialogbuttonbox) - const QDialogButtonBox *buttonBox = nullptr; - - if (qobject_cast (widget)) - buttonBox = widget->findChild(QLatin1String("qt_msgbox_buttonbox")); -#if QT_CONFIG(inputdialog) - else if (qobject_cast (widget)) - buttonBox = widget->findChild(QLatin1String("qt_inputdlg_buttonbox")); -#endif // QT_CONFIG(inputdialog) - - if (buttonBox) { - //draw white panel part - XPThemeData theme(widget, painter, - QWindowsXPStylePrivate::TaskDialogTheme, - TDLG_PRIMARYPANEL, 0, option->rect); - QRect toprect = option->rect; - toprect.setBottom(buttonBox->geometry().top()); - theme.rect = toprect; - d->drawBackground(theme); - - //draw bottom panel part - QRect buttonRect = option->rect; - buttonRect.setTop(buttonBox->geometry().top()); - theme.rect = buttonRect; - theme.partId = TDLG_SECONDARYPANEL; - d->drawBackground(theme); - } -#endif - } - break; - default: - QWindowsXPStyle::drawPrimitive(element, option, painter, widget); - break; - } -} - - -/*! - \internal - - see drawPrimitive for comments on the animation support - */ -void QWindowsVistaStyle::drawControl(ControlElement element, const QStyleOption *option, - QPainter *painter, const QWidget *widget) const -{ - QWindowsVistaStylePrivate *d = const_cast(d_func()); - - if (!QWindowsVistaStylePrivate::useVista()) { - QWindowsStyle::drawControl(element, option, painter, widget); - return; - } - - bool selected = option->state & State_Selected; - bool pressed = option->state & State_Sunken; - bool disabled = !(option->state & State_Enabled); - - int state = option->state; - int themeNumber = -1; - - QRect rect(option->rect); - State flags = option->state; - int partId = 0; - int stateId = 0; - - if (d->transitionsEnabled() && canAnimate(option)) - { - if (element == CE_PushButtonBevel) { - QRect oldRect; - QRect newRect; - - QObject *styleObject = option->styleObject; - - int oldState = styleObject->property("_q_stylestate").toInt(); - oldRect = styleObject->property("_q_stylerect").toRect(); - newRect = option->rect; - styleObject->setProperty("_q_stylestate", int(option->state)); - styleObject->setProperty("_q_stylerect", option->rect); - - bool wasDefault = false; - bool isDefault = false; - if (const QStyleOptionButton *button = qstyleoption_cast(option)) { - wasDefault = styleObject->property("_q_isdefault").toBool(); - isDefault = button->features & QStyleOptionButton::DefaultButton; - styleObject->setProperty("_q_isdefault", isDefault); - } - - bool doTransition = ((state & State_Sunken) != (oldState & State_Sunken) || - (state & State_On) != (oldState & State_On) || - (state & State_MouseOver) != (oldState & State_MouseOver)); - - if (oldRect != newRect || (wasDefault && !isDefault)) { - doTransition = false; - d->stopAnimation(styleObject); - } - - if (doTransition) { - styleObject->setProperty("_q_no_animation", true); - - QWindowsVistaTransition *t = new QWindowsVistaTransition(styleObject); - QWindowsVistaAnimation *anim = qobject_cast(d->animation(styleObject)); - QStyleOption *styleOption = clonedAnimationStyleOption(option); - styleOption->state = QStyle::State(oldState); - - QImage startImage = createAnimationBuffer(option, widget); - QPainter startPainter(&startImage); - - // Use current state of existing animation if already one is running - if (!anim) { - proxy()->drawControl(element, styleOption, &startPainter, widget); - } else { - anim->paint(&startPainter, styleOption); - d->stopAnimation(styleObject); - } - - t->setStartImage(startImage); - QImage endImage = createAnimationBuffer(option, widget); - QPainter endPainter(&endImage); - styleOption->state = option->state; - proxy()->drawControl(element, styleOption, &endPainter, widget); - t->setEndImage(endImage); - - - DWORD duration = 0; - const HTHEME theme = OpenThemeData(nullptr, L"Button"); - - int fromState = buttonStateId(oldState, BP_PUSHBUTTON); - int toState = buttonStateId(option->state, BP_PUSHBUTTON); - if (GetThemeTransitionDuration(theme, BP_PUSHBUTTON, fromState, toState, TMT_TRANSITIONDURATIONS, &duration) == S_OK) - t->setDuration(int(duration)); - else - t->setDuration(0); - t->setStartTime(QTime::currentTime()); - styleObject->setProperty("_q_no_animation", false); - - deleteClonedAnimationStyleOption(styleOption); - d->startAnimation(t); - } - - QWindowsVistaAnimation *anim = qobject_cast(d->animation(styleObject)); - if (anim) { - anim->paint(painter, option); - return; - } - - } - } - switch (element) { - case CE_PushButtonBevel: - if (const QStyleOptionButton *btn = qstyleoption_cast(option)) - { - themeNumber = QWindowsXPStylePrivate::ButtonTheme; - partId = BP_PUSHBUTTON; - if (btn->features & QStyleOptionButton::CommandLinkButton) - partId = BP_COMMANDLINK; - bool justFlat = (btn->features & QStyleOptionButton::Flat) && !(flags & (State_On|State_Sunken)); - if (!(flags & State_Enabled) && !(btn->features & QStyleOptionButton::Flat)) - stateId = PBS_DISABLED; - else if (justFlat) - ; - else if (flags & (State_Sunken | State_On)) - stateId = PBS_PRESSED; - else if (flags & State_MouseOver) - stateId = PBS_HOT; - else if (btn->features & QStyleOptionButton::DefaultButton && (state & State_Active)) - stateId = PBS_DEFAULTED; - else - stateId = PBS_NORMAL; - - if (!justFlat) { - - if (d->transitionsEnabled() && (btn->features & QStyleOptionButton::DefaultButton) && - !(state & (State_Sunken | State_On)) && !(state & State_MouseOver) && - (state & State_Enabled) && (state & State_Active)) - { - QWindowsVistaAnimation *anim = qobject_cast(d->animation(styleObject(option))); - - if (!anim) { - QImage startImage = createAnimationBuffer(option, widget); - QImage alternateImage = createAnimationBuffer(option, widget); - - QWindowsVistaPulse *pulse = new QWindowsVistaPulse(styleObject(option)); - - QPainter startPainter(&startImage); - stateId = PBS_DEFAULTED; - XPThemeData theme(widget, &startPainter, themeNumber, partId, stateId, rect); - d->drawBackground(theme); - - QPainter alternatePainter(&alternateImage); - theme.stateId = PBS_DEFAULTED_ANIMATING; - theme.painter = &alternatePainter; - d->drawBackground(theme); - pulse->setStartImage(startImage); - pulse->setEndImage(alternateImage); - pulse->setStartTime(QTime::currentTime()); - pulse->setDuration(2000); - d->startAnimation(pulse); - anim = pulse; - } - - if (anim) - anim->paint(painter, option); - else { - XPThemeData theme(widget, painter, themeNumber, partId, stateId, rect); - d->drawBackground(theme); - } - } - else { - XPThemeData theme(widget, painter, themeNumber, partId, stateId, rect); - d->drawBackground(theme); - } - } - - if (btn->features & QStyleOptionButton::HasMenu) { - int mbiw = 0, mbih = 0; - XPThemeData theme(widget, nullptr, QWindowsXPStylePrivate::ToolBarTheme, - TP_DROPDOWNBUTTON); - if (theme.isValid()) { - const QSizeF size = theme.size() * QStyleHelper::dpiScaled(1, option); - if (!size.isEmpty()) { - mbiw = qRound(size.width()); - mbih = qRound(size.height()); - } - } - QRect ir = subElementRect(SE_PushButtonContents, option, nullptr); - QStyleOptionButton newBtn = *btn; - newBtn.rect = QStyle::visualRect(option->direction, option->rect, - QRect(ir.right() - mbiw - 2, - option->rect.top() + (option->rect.height()/2) - (mbih/2), - mbiw + 1, mbih + 1)); - proxy()->drawPrimitive(PE_IndicatorArrowDown, &newBtn, painter, widget); - } - return; - } - break; - - case CE_ProgressBarContents: - if (const QStyleOptionProgressBar *bar - = qstyleoption_cast(option)) { - bool isIndeterminate = (bar->minimum == 0 && bar->maximum == 0); - const bool vertical = bar->orientation == Qt::Vertical; - const bool inverted = bar->invertedAppearance; - - if (isIndeterminate || (bar->progress > 0 && (bar->progress < bar->maximum) && d->transitionsEnabled())) { - if (!d->animation(styleObject(option))) - d->startAnimation(new QProgressStyleAnimation(d->animationFps, styleObject(option))); - } else { - d->stopAnimation(styleObject(option)); - } - - XPThemeData theme(widget, painter, - QWindowsXPStylePrivate::ProgressTheme, - vertical ? PP_FILLVERT : PP_FILL); - theme.rect = option->rect; - bool reverse = (bar->direction == Qt::LeftToRight && inverted) || (bar->direction == Qt::RightToLeft && !inverted); - QTime current = QTime::currentTime(); - - if (isIndeterminate) { - if (QProgressStyleAnimation *a = qobject_cast(d->animation(styleObject(option)))) { - int glowSize = 120; - int animationWidth = glowSize * 2 + (vertical ? theme.rect.height() : theme.rect.width()); - int animOffset = a->startTime().msecsTo(current) / 4; - if (animOffset > animationWidth) - a->setStartTime(QTime::currentTime()); - painter->save(); - painter->setClipRect(theme.rect); - QRect animRect; - QSize pixmapSize(14, 14); - if (vertical) { - animRect = QRect(theme.rect.left(), - inverted ? rect.top() - glowSize + animOffset : - rect.bottom() + glowSize - animOffset, - rect.width(), glowSize); - pixmapSize.setHeight(animRect.height()); - } else { - animRect = QRect(rect.left() - glowSize + animOffset, - rect.top(), glowSize, rect.height()); - animRect = QStyle::visualRect(reverse ? Qt::RightToLeft : Qt::LeftToRight, - option->rect, animRect); - pixmapSize.setWidth(animRect.width()); - } - QString name = QString::fromLatin1("qiprogress-%1-%2").arg(pixmapSize.width()).arg(pixmapSize.height()); - QPixmap pixmap; - if (!QPixmapCache::find(name, &pixmap)) { - QImage image(pixmapSize, QImage::Format_ARGB32); - image.fill(Qt::transparent); - QPainter imagePainter(&image); - theme.painter = &imagePainter; - theme.partId = vertical ? PP_FILLVERT : PP_FILL; - theme.rect = QRect(QPoint(0,0), animRect.size()); - QLinearGradient alphaGradient(0, 0, vertical ? 0 : image.width(), - vertical ? image.height() : 0); - alphaGradient.setColorAt(0, QColor(0, 0, 0, 0)); - alphaGradient.setColorAt(0.5, QColor(0, 0, 0, 220)); - alphaGradient.setColorAt(1, QColor(0, 0, 0, 0)); - imagePainter.fillRect(image.rect(), alphaGradient); - imagePainter.setCompositionMode(QPainter::CompositionMode_SourceIn); - d->drawBackground(theme); - imagePainter.end(); - pixmap = QPixmap::fromImage(image); - QPixmapCache::insert(name, pixmap); - } - painter->drawPixmap(animRect, pixmap); - painter->restore(); - } - } - else { - qint64 progress = qMax(bar->progress, bar->minimum); // workaround for bug in QProgressBar - - if (vertical) { - int maxHeight = option->rect.height(); - int minHeight = 0; - double vc6_workaround = ((progress - qint64(bar->minimum)) / qMax(double(1.0), double(qint64(bar->maximum) - qint64(bar->minimum))) * maxHeight); - int height = isIndeterminate ? maxHeight: qMax(int(vc6_workaround), minHeight); - theme.rect.setHeight(height); - if (!inverted) - theme.rect.moveTop(rect.height() - theme.rect.height()); - } else { - int maxWidth = option->rect.width(); - int minWidth = 0; - double vc6_workaround = ((progress - qint64(bar->minimum)) / qMax(double(1.0), double(qint64(bar->maximum) - qint64(bar->minimum))) * maxWidth); - int width = isIndeterminate ? maxWidth : qMax(int(vc6_workaround), minWidth); - theme.rect.setWidth(width); - theme.rect = QStyle::visualRect(reverse ? Qt::RightToLeft : Qt::LeftToRight, - option->rect, theme.rect); - } - d->drawBackground(theme); - - if (QProgressStyleAnimation *a = qobject_cast(d->animation(styleObject(option)))) { - int glowSize = 140; - int animationWidth = glowSize * 2 + (vertical ? theme.rect.height() : theme.rect.width()); - int animOffset = a->startTime().msecsTo(current) / 4; - theme.partId = vertical ? PP_MOVEOVERLAYVERT : PP_MOVEOVERLAY; - if (animOffset > animationWidth) { - if (bar->progress < bar->maximum) - a->setStartTime(QTime::currentTime()); - else - d->stopAnimation(styleObject(option)); //we stop the glow motion only after it has - //moved out of view - } - painter->save(); - painter->setClipRect(theme.rect); - if (vertical) { - theme.rect = QRect(theme.rect.left(), - inverted ? rect.top() - glowSize + animOffset : - rect.bottom() + glowSize - animOffset, - rect.width(), glowSize); - } else { - theme.rect = QRect(rect.left() - glowSize + animOffset,rect.top(), glowSize, rect.height()); - theme.rect = QStyle::visualRect(reverse ? Qt::RightToLeft : Qt::LeftToRight, option->rect, theme.rect); - } - d->drawBackground(theme); - painter->restore(); - } - } - } - break; - - case CE_MenuBarItem: - { - - if (const QStyleOptionMenuItem *mbi = qstyleoption_cast(option)) - { - if (mbi->menuItemType == QStyleOptionMenuItem::DefaultItem) - break; - - QPalette::ColorRole textRole = disabled ? QPalette::Text : QPalette::ButtonText; - QPixmap pix = mbi->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option, widget), QIcon::Normal); - - int alignment = Qt::AlignCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine; - if (!proxy()->styleHint(SH_UnderlineShortcut, mbi, widget)) - alignment |= Qt::TextHideMnemonic; - - if (widget && mbi->palette.color(QPalette::Window) != Qt::transparent) { // Not needed for QtQuick Controls - //The rect adjustment is a workaround for the menu not really filling its background. - XPThemeData theme(widget, painter, - QWindowsXPStylePrivate::MenuTheme, - MENU_BARBACKGROUND, 0, option->rect.adjusted(-1, 0, 2, 1)); - d->drawBackground(theme); - } - - int stateId = MBI_NORMAL; - if (disabled) - stateId = MBI_DISABLED; - else if (pressed) - stateId = MBI_PUSHED; - else if (selected) - stateId = MBI_HOT; - - XPThemeData theme2(widget, painter, - QWindowsXPStylePrivate::MenuTheme, - MENU_BARITEM, stateId, option->rect); - d->drawBackground(theme2); - - if (!pix.isNull()) - drawItemPixmap(painter, mbi->rect, alignment, pix); - else - drawItemText(painter, mbi->rect, alignment, mbi->palette, mbi->state & State_Enabled, mbi->text, textRole); - } - } - break; -#if QT_CONFIG(menu) - case CE_MenuItem: - if (const QStyleOptionMenuItem *menuitem = qstyleoption_cast(option)) { - // windows always has a check column, regardless whether we have an icon or not - const qreal factor = QWindowsXPStylePrivate::nativeMetricScaleFactor(widget); - int checkcol = qRound(qreal(25) * factor); - const int gutterWidth = qRound(qreal(3) * factor); - { - XPThemeData theme(widget, nullptr, QWindowsXPStylePrivate::MenuTheme, - MENU_POPUPCHECKBACKGROUND, MBI_HOT); - XPThemeData themeSize = theme; - themeSize.partId = MENU_POPUPCHECK; - themeSize.stateId = 0; - const QSizeF size = themeSize.size() * QWindowsStylePrivate::nativeMetricScaleFactor(widget); - const QMarginsF margins = themeSize.margins() * QWindowsStylePrivate::nativeMetricScaleFactor(widget); - checkcol = qMax(menuitem->maxIconWidth, qRound(gutterWidth + size.width() + margins.left() + margins.right())); - } - QRect rect = option->rect; - - //draw vertical menu line - if (option->direction == Qt::LeftToRight) - checkcol += rect.x(); - QPoint p1 = QStyle::visualPos(option->direction, menuitem->rect, QPoint(checkcol, rect.top())); - QPoint p2 = QStyle::visualPos(option->direction, menuitem->rect, QPoint(checkcol, rect.bottom())); - QRect gutterRect(p1.x(), p1.y(), gutterWidth, p2.y() - p1.y() + 1); - XPThemeData theme2(widget, painter, QWindowsXPStylePrivate::MenuTheme, - MENU_POPUPGUTTER, stateId, gutterRect); - d->drawBackground(theme2); - - int x, y, w, h; - menuitem->rect.getRect(&x, &y, &w, &h); - int tab = menuitem->tabWidth; - bool dis = !(menuitem->state & State_Enabled); - bool checked = menuitem->checkType != QStyleOptionMenuItem::NotCheckable - ? menuitem->checked : false; - bool act = menuitem->state & State_Selected; - - if (menuitem->menuItemType == QStyleOptionMenuItem::Separator) { - int yoff = y-2 + h / 2; - const int separatorSize = qRound(qreal(6) * QWindowsStylePrivate::nativeMetricScaleFactor(widget)); - QPoint p1 = QPoint(x + checkcol, yoff); - QPoint p2 = QPoint(x + w + separatorSize, yoff); - stateId = MBI_HOT; - QRect subRect(p1.x() + (gutterWidth - menuitem->rect.x()), p1.y(), - p2.x() - p1.x(), separatorSize); - subRect = QStyle::visualRect(option->direction, option->rect, subRect ); - XPThemeData theme2(widget, painter, - QWindowsXPStylePrivate::MenuTheme, - MENU_POPUPSEPARATOR, stateId, subRect); - d->drawBackground(theme2); - return; - } - - QRect vCheckRect = visualRect(option->direction, menuitem->rect, QRect(menuitem->rect.x(), - menuitem->rect.y(), checkcol - (gutterWidth + menuitem->rect.x()), menuitem->rect.height())); - - if (act) { - stateId = dis ? MBI_DISABLED : MBI_HOT; - XPThemeData theme2(widget, painter, - QWindowsXPStylePrivate::MenuTheme, - MENU_POPUPITEM, stateId, option->rect); - d->drawBackground(theme2); - } - - if (checked) { - XPThemeData theme(widget, painter, - QWindowsXPStylePrivate::MenuTheme, - MENU_POPUPCHECKBACKGROUND, - menuitem->icon.isNull() ? MBI_HOT : MBI_PUSHED, vCheckRect); - XPThemeData themeSize = theme; - themeSize.partId = MENU_POPUPCHECK; - themeSize.stateId = 0; - const QSizeF size = themeSize.size() * QWindowsStylePrivate::nativeMetricScaleFactor(widget); - const QMarginsF margins = themeSize.margins() * QWindowsStylePrivate::nativeMetricScaleFactor(widget); - QRect checkRect(0, 0, qRound(size.width() + margins.left() + margins.right()), - qRound(size.height() + margins.bottom() + margins.top())); - checkRect.moveCenter(vCheckRect.center()); - theme.rect = checkRect; - - d->drawBackground(theme); - - if (menuitem->icon.isNull()) { - checkRect = QRect(QPoint(0, 0), size.toSize()); - checkRect.moveCenter(theme.rect.center()); - theme.rect = checkRect; - - theme.partId = MENU_POPUPCHECK; - bool bullet = menuitem->checkType & QStyleOptionMenuItem::Exclusive; - if (dis) - theme.stateId = bullet ? MC_BULLETDISABLED: MC_CHECKMARKDISABLED; - else - theme.stateId = bullet ? MC_BULLETNORMAL: MC_CHECKMARKNORMAL; - d->drawBackground(theme); - } - } - - if (!menuitem->icon.isNull()) { - QIcon::Mode mode = dis ? QIcon::Disabled : QIcon::Normal; - if (act && !dis) - mode = QIcon::Active; - QPixmap pixmap; - if (checked) - pixmap = menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option, widget), mode, QIcon::On); - else - pixmap = menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option, widget), mode); - const int pixw = pixmap.width() / pixmap.devicePixelRatio(); - const int pixh = pixmap.height() / pixmap.devicePixelRatio(); - QRect pmr(0, 0, pixw, pixh); - pmr.moveCenter(vCheckRect.center()); - painter->setPen(menuitem->palette.text().color()); - painter->drawPixmap(pmr.topLeft(), pixmap); - } - - painter->setPen(menuitem->palette.buttonText().color()); - - const QColor textColor = menuitem->palette.text().color(); - if (dis) - painter->setPen(textColor); - - int xm = windowsItemFrame + checkcol + windowsItemHMargin + (gutterWidth - menuitem->rect.x()) - 1; - int xpos = menuitem->rect.x() + xm; - QRect textRect(xpos, y + windowsItemVMargin, w - xm - windowsRightBorder - tab + 1, h - 2 * windowsItemVMargin); - QRect vTextRect = visualRect(option->direction, menuitem->rect, textRect); - QString s = menuitem->text; - if (!s.isEmpty()) { // draw text - painter->save(); - int t = s.indexOf(QLatin1Char('\t')); - int text_flags = Qt::AlignVCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine; - if (!proxy()->styleHint(SH_UnderlineShortcut, menuitem, widget)) - text_flags |= Qt::TextHideMnemonic; - text_flags |= Qt::AlignLeft; - if (t >= 0) { - QRect vShortcutRect = visualRect(option->direction, menuitem->rect, - QRect(textRect.topRight(), QPoint(menuitem->rect.right(), textRect.bottom()))); - painter->drawText(vShortcutRect, text_flags, s.mid(t + 1)); - s = s.left(t); - } - QFont font = menuitem->font; - if (menuitem->menuItemType == QStyleOptionMenuItem::DefaultItem) - font.setBold(true); - painter->setFont(font); - painter->setPen(textColor); - painter->drawText(vTextRect, text_flags, s.left(t)); - painter->restore(); - } - if (menuitem->menuItemType == QStyleOptionMenuItem::SubMenu) {// draw sub menu arrow - int dim = (h - 2 * windowsItemFrame) / 2; - PrimitiveElement arrow; - arrow = (option->direction == Qt::RightToLeft) ? PE_IndicatorArrowLeft : PE_IndicatorArrowRight; - xpos = x + w - windowsArrowHMargin - windowsItemFrame - dim; - QRect vSubMenuRect = visualRect(option->direction, menuitem->rect, QRect(xpos, y + h / 2 - dim / 2, dim, dim)); - QStyleOptionMenuItem newMI = *menuitem; - newMI.rect = vSubMenuRect; - newMI.state = dis ? State_None : State_Enabled; - proxy()->drawPrimitive(arrow, &newMI, painter, widget); - } - } - break; -#endif // QT_CONFIG(menu) - case CE_HeaderSection: - if (const QStyleOptionHeader *header = qstyleoption_cast(option)) { - partId = HP_HEADERITEM; - if (flags & State_Sunken) - stateId = HIS_PRESSED; - else if (flags & State_MouseOver) - stateId = HIS_HOT; - else - stateId = HIS_NORMAL; - - if (header->sortIndicator != QStyleOptionHeader::None) - stateId += 3; - - XPThemeData theme(widget, painter, - QWindowsXPStylePrivate::HeaderTheme, - partId, stateId, option->rect); - d->drawBackground(theme); - } - break; - case CE_MenuBarEmptyArea: - { - stateId = MBI_NORMAL; - if (!(state & State_Enabled)) - stateId = MBI_DISABLED; - XPThemeData theme(widget, painter, - QWindowsXPStylePrivate::MenuTheme, - MENU_BARBACKGROUND, stateId, option->rect); - d->drawBackground(theme); - } - break; - case CE_ToolBar: - if (const QStyleOptionToolBar *toolbar = qstyleoption_cast(option)) { - QPalette pal = option->palette; - pal.setColor(QPalette::Dark, option->palette.window().color().darker(130)); - QStyleOptionToolBar copyOpt = *toolbar; - copyOpt.palette = pal; - QWindowsStyle::drawControl(element, ©Opt, painter, widget); - } - break; -#if QT_CONFIG(dockwidget) - case CE_DockWidgetTitle: - if (const QStyleOptionDockWidget *dwOpt = qstyleoption_cast(option)) { - const QDockWidget *dockWidget = qobject_cast(widget); - QRect rect = option->rect; - if (dockWidget && dockWidget->isFloating()) { - QWindowsXPStyle::drawControl(element, option, painter, widget); - break; //otherwise fall through - } - - const bool verticalTitleBar = dwOpt->verticalTitleBar; - - if (verticalTitleBar) { - rect = rect.transposed(); - - painter->translate(rect.left() - 1, rect.top() + rect.width()); - painter->rotate(-90); - painter->translate(-rect.left() + 1, -rect.top()); - } - - painter->setBrush(option->palette.window().color().darker(110)); - painter->setPen(option->palette.window().color().darker(130)); - painter->drawRect(rect.adjusted(0, 1, -1, -3)); - - int buttonMargin = 4; - int mw = proxy()->pixelMetric(QStyle::PM_DockWidgetTitleMargin, dwOpt, widget); - int fw = proxy()->pixelMetric(PM_DockWidgetFrameWidth, dwOpt, widget); - const QDockWidget *dw = qobject_cast(widget); - bool isFloating = dw && dw->isFloating(); - - QRect r = option->rect.adjusted(0, 2, -1, -3); - QRect titleRect = r; - - if (dwOpt->closable) { - QSize sz = proxy()->standardIcon(QStyle::SP_TitleBarCloseButton, dwOpt, widget).actualSize(QSize(10, 10)); - titleRect.adjust(0, 0, -sz.width() - mw - buttonMargin, 0); - } - - if (dwOpt->floatable) { - QSize sz = proxy()->standardIcon(QStyle::SP_TitleBarMaxButton, dwOpt, widget).actualSize(QSize(10, 10)); - titleRect.adjust(0, 0, -sz.width() - mw - buttonMargin, 0); - } - - if (isFloating) { - titleRect.adjust(0, -fw, 0, 0); - if (widget && widget->windowIcon().cacheKey() != QApplication::windowIcon().cacheKey()) - titleRect.adjust(titleRect.height() + mw, 0, 0, 0); - } else { - titleRect.adjust(mw, 0, 0, 0); - if (!dwOpt->floatable && !dwOpt->closable) - titleRect.adjust(0, 0, -mw, 0); - } - if (!verticalTitleBar) - titleRect = visualRect(dwOpt->direction, r, titleRect); - - if (!dwOpt->title.isEmpty()) { - QString titleText = painter->fontMetrics().elidedText(dwOpt->title, Qt::ElideRight, - verticalTitleBar ? titleRect.height() : titleRect.width()); - const int indent = 4; - drawItemText(painter, rect.adjusted(indent + 1, 1, -indent - 1, -1), - Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic, - dwOpt->palette, - dwOpt->state & State_Enabled, titleText, - QPalette::WindowText); - } - } - break; -#endif // QT_CONFIG(dockwidget) -#if QT_CONFIG(itemviews) - case CE_ItemViewItem: - { - const QStyleOptionViewItem *vopt; - - const QAbstractItemView *view = qobject_cast(widget); - bool newStyle = true; - - if (qobject_cast(widget)) - newStyle = false; - - if (newStyle && view && (vopt = qstyleoption_cast(option))) { - /* - // We cannot currently get the correct selection color for "explorer style" views - COLORREF cref = 0; - XPThemeData theme(d->treeViewHelper(), 0, QLatin1String("LISTVIEW"), 0, 0); - unsigned int res = GetThemeColor(theme.handle(), LVP_LISTITEM, LISS_SELECTED, TMT_TEXTCOLOR, &cref); - QColor textColor(GetRValue(cref), GetGValue(cref), GetBValue(cref)); - */ - QPalette palette = vopt->palette; - palette.setColor(QPalette::All, QPalette::HighlightedText, palette.color(QPalette::Active, QPalette::Text)); - // Note that setting a saturated color here results in ugly XOR colors in the focus rect - palette.setColor(QPalette::All, QPalette::Highlight, palette.base().color().darker(108)); - QStyleOptionViewItem adjustedOption = *vopt; - adjustedOption.palette = palette; - // We hide the focusrect in singleselection as it is not required - if ((view->selectionMode() == QAbstractItemView::SingleSelection) - && !(vopt->state & State_KeyboardFocusChange)) - adjustedOption.state &= ~State_HasFocus; - QWindowsXPStyle::drawControl(element, &adjustedOption, painter, widget); - } else { - QWindowsXPStyle::drawControl(element, option, painter, widget); - } - break; - } -#endif // QT_CONFIG(itemviews) -#if QT_CONFIG(combobox) - case CE_ComboBoxLabel: - QCommonStyle::drawControl(element, option, painter, widget); - break; -#endif // QT_CONFIG(combobox) - default: - QWindowsXPStyle::drawControl(element, option, painter, widget); - break; - } -} - -/*! - \internal - - see drawPrimitive for comments on the animation support - - */ -void QWindowsVistaStyle::drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, - QPainter *painter, const QWidget *widget) const -{ - QWindowsVistaStylePrivate *d = const_cast(d_func()); - if (!QWindowsVistaStylePrivate::useVista()) { - QWindowsStyle::drawComplexControl(control, option, painter, widget); - return; - } - - State state = option->state; - SubControls sub = option->subControls; - QRect r = option->rect; - - int partId = 0; - int stateId = 0; - - State flags = option->state; - if (widget && widget->testAttribute(Qt::WA_UnderMouse) && widget->isActiveWindow()) - flags |= State_MouseOver; - - if (d->transitionsEnabled() && canAnimate(option)) - { - - if (control == CC_ScrollBar || control == CC_SpinBox || control == CC_ComboBox) { - - QObject *styleObject = option->styleObject; // Can be widget or qquickitem - - int oldState = styleObject->property("_q_stylestate").toInt(); - int oldActiveControls = styleObject->property("_q_stylecontrols").toInt(); - - QRect oldRect = styleObject->property("_q_stylerect").toRect(); - styleObject->setProperty("_q_stylestate", int(option->state)); - styleObject->setProperty("_q_stylecontrols", int(option->activeSubControls)); - styleObject->setProperty("_q_stylerect", option->rect); - - bool doTransition = ((state & State_Sunken) != (oldState & State_Sunken) || - (state & State_On) != (oldState & State_On) || - (state & State_MouseOver) != (oldState & State_MouseOver) || - oldActiveControls != int(option->activeSubControls)); - - if (qstyleoption_cast(option)) { - QRect oldSliderPos = styleObject->property("_q_stylesliderpos").toRect(); - QRect currentPos = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget); - styleObject->setProperty("_q_stylesliderpos", currentPos); - if (oldSliderPos != currentPos) { - doTransition = false; - d->stopAnimation(styleObject); - } - } else if (control == CC_SpinBox) { - //spinboxes have a transition when focus changes - if (!doTransition) - doTransition = (state & State_HasFocus) != (oldState & State_HasFocus); - } - - if (oldRect != option->rect) { - doTransition = false; - d->stopAnimation(styleObject); - } - - if (doTransition) { - QImage startImage = createAnimationBuffer(option, widget); - QPainter startPainter(&startImage); - - QImage endImage = createAnimationBuffer(option, widget); - QPainter endPainter(&endImage); - - QWindowsVistaAnimation *anim = qobject_cast(d->animation(styleObject)); - QWindowsVistaTransition *t = new QWindowsVistaTransition(styleObject); - - // Draw the image that ends the animation by using the current styleoption - QStyleOptionComplex *styleOption = qstyleoption_cast(clonedAnimationStyleOption(option)); - - styleObject->setProperty("_q_no_animation", true); - - // Draw transition source - if (!anim) { - styleOption->state = QStyle::State(oldState); - styleOption->activeSubControls = QStyle::SubControl(oldActiveControls); - proxy()->drawComplexControl(control, styleOption, &startPainter, widget); - } else { - anim->paint(&startPainter, option); - } - t->setStartImage(startImage); - - // Draw transition target - styleOption->state = option->state; - styleOption->activeSubControls = option->activeSubControls; - proxy()->drawComplexControl(control, styleOption, &endPainter, widget); - - styleObject->setProperty("_q_no_animation", false); - - t->setEndImage(endImage); - t->setStartTime(QTime::currentTime()); - - if (option->state & State_MouseOver || option->state & State_Sunken) - t->setDuration(150); - else - t->setDuration(500); - - deleteClonedAnimationStyleOption(styleOption); - d->startAnimation(t); - } - if (QWindowsVistaAnimation *anim = qobject_cast(d->animation(styleObject))) { - anim->paint(painter, option); - return; - } - } - } - - switch (control) { - case CC_ComboBox: - if (const QStyleOptionComboBox *cmb = qstyleoption_cast(option)) - { - if (cmb->editable) { - if (sub & SC_ComboBoxEditField) { - partId = EP_EDITBORDER_NOSCROLL; - if (!(flags & State_Enabled)) - stateId = ETS_DISABLED; - else if (flags & State_MouseOver) - stateId = ETS_HOT; - else if (flags & State_HasFocus) - stateId = ETS_FOCUSED; - else - stateId = ETS_NORMAL; - - XPThemeData theme(widget, painter, - QWindowsXPStylePrivate::EditTheme, - partId, stateId, r); - - d->drawBackground(theme); - } - if (sub & SC_ComboBoxArrow) { - QRect subRect = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxArrow, widget); - XPThemeData theme(widget, painter, QWindowsXPStylePrivate::ComboboxTheme); - theme.rect = subRect; - partId = option->direction == Qt::RightToLeft ? CP_DROPDOWNBUTTONLEFT : CP_DROPDOWNBUTTONRIGHT; - - if (!(cmb->state & State_Enabled)) - stateId = CBXS_DISABLED; - else if (cmb->state & State_Sunken || cmb->state & State_On) - stateId = CBXS_PRESSED; - else if (cmb->state & State_MouseOver && option->activeSubControls & SC_ComboBoxArrow) - stateId = CBXS_HOT; - else - stateId = CBXS_NORMAL; - - theme.partId = partId; - theme.stateId = stateId; - d->drawBackground(theme); - } - - } else { - if (sub & SC_ComboBoxFrame) { - XPThemeData theme(widget, painter, QWindowsXPStylePrivate::ComboboxTheme); - theme.rect = option->rect; - theme.partId = CP_READONLY; - if (!(cmb->state & State_Enabled)) - theme.stateId = CBXS_DISABLED; - else if (cmb->state & State_Sunken || cmb->state & State_On) - theme.stateId = CBXS_PRESSED; - else if (cmb->state & State_MouseOver) - theme.stateId = CBXS_HOT; - else - theme.stateId = CBXS_NORMAL; - d->drawBackground(theme); - } - if (sub & SC_ComboBoxArrow) { - XPThemeData theme(widget, painter, QWindowsXPStylePrivate::ComboboxTheme); - theme.rect = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxArrow, widget); - theme.partId = option->direction == Qt::RightToLeft ? CP_DROPDOWNBUTTONLEFT : CP_DROPDOWNBUTTONRIGHT; - if (!(cmb->state & State_Enabled)) - theme.stateId = CBXS_DISABLED; - else - theme.stateId = CBXS_NORMAL; - d->drawBackground(theme); - } - if ((sub & SC_ComboBoxEditField) && (flags & State_HasFocus)) { - QStyleOptionFocusRect fropt; - fropt.QStyleOption::operator=(*cmb); - fropt.rect = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxEditField, widget); - proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, painter, widget); - } - } - } - break; - case CC_ScrollBar: - if (const QStyleOptionSlider *scrollbar = qstyleoption_cast(option)) - { - XPThemeData theme(widget, painter, QWindowsXPStylePrivate::ScrollBarTheme); - bool maxedOut = (scrollbar->maximum == scrollbar->minimum); - if (maxedOut) - flags &= ~State_Enabled; - - bool isHorz = flags & State_Horizontal; - bool isRTL = option->direction == Qt::RightToLeft; - if (sub & SC_ScrollBarAddLine) { - theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarAddLine, widget); - partId = SBP_ARROWBTN; - if (!(flags & State_Enabled)) - stateId = (isHorz ? (isRTL ? ABS_LEFTDISABLED : ABS_RIGHTDISABLED) : ABS_DOWNDISABLED); - else if (scrollbar->activeSubControls & SC_ScrollBarAddLine && (scrollbar->state & State_Sunken)) - stateId = (isHorz ? (isRTL ? ABS_LEFTPRESSED : ABS_RIGHTPRESSED) : ABS_DOWNPRESSED); - else if (scrollbar->activeSubControls & SC_ScrollBarAddLine && (scrollbar->state & State_MouseOver)) - stateId = (isHorz ? (isRTL ? ABS_LEFTHOT : ABS_RIGHTHOT) : ABS_DOWNHOT); - else if (scrollbar->state & State_MouseOver) - stateId = (isHorz ? (isRTL ? ABS_LEFTHOVER : ABS_RIGHTHOVER) : ABS_DOWNHOVER); - else - stateId = (isHorz ? (isRTL ? ABS_LEFTNORMAL : ABS_RIGHTNORMAL) : ABS_DOWNNORMAL); - theme.partId = partId; - theme.stateId = stateId; - d->drawBackground(theme); - } - if (sub & SC_ScrollBarSubLine) { - theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSubLine, widget); - partId = SBP_ARROWBTN; - if (!(flags & State_Enabled)) - stateId = (isHorz ? (isRTL ? ABS_RIGHTDISABLED : ABS_LEFTDISABLED) : ABS_UPDISABLED); - else if (scrollbar->activeSubControls & SC_ScrollBarSubLine && (scrollbar->state & State_Sunken)) - stateId = (isHorz ? (isRTL ? ABS_RIGHTPRESSED : ABS_LEFTPRESSED) : ABS_UPPRESSED); - else if (scrollbar->activeSubControls & SC_ScrollBarSubLine && (scrollbar->state & State_MouseOver)) - stateId = (isHorz ? (isRTL ? ABS_RIGHTHOT : ABS_LEFTHOT) : ABS_UPHOT); - else if (scrollbar->state & State_MouseOver) - stateId = (isHorz ? (isRTL ? ABS_RIGHTHOVER : ABS_LEFTHOVER) : ABS_UPHOVER); - else - stateId = (isHorz ? (isRTL ? ABS_RIGHTNORMAL : ABS_LEFTNORMAL) : ABS_UPNORMAL); - theme.partId = partId; - theme.stateId = stateId; - d->drawBackground(theme); - } - if (maxedOut) { - theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget); - theme.rect = theme.rect.united(proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSubPage, widget)); - theme.rect = theme.rect.united(proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarAddPage, widget)); - partId = flags & State_Horizontal ? SBP_LOWERTRACKHORZ : SBP_LOWERTRACKVERT; - stateId = SCRBS_DISABLED; - theme.partId = partId; - theme.stateId = stateId; - d->drawBackground(theme); - } else { - if (sub & SC_ScrollBarSubPage) { - theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSubPage, widget); - partId = flags & State_Horizontal ? SBP_UPPERTRACKHORZ : SBP_UPPERTRACKVERT; - if (!(flags & State_Enabled)) - stateId = SCRBS_DISABLED; - else if (scrollbar->activeSubControls & SC_ScrollBarSubPage && (scrollbar->state & State_Sunken)) - stateId = SCRBS_PRESSED; - else if (scrollbar->activeSubControls & SC_ScrollBarSubPage && (scrollbar->state & State_MouseOver)) - stateId = SCRBS_HOT; - else - stateId = SCRBS_NORMAL; - theme.partId = partId; - theme.stateId = stateId; - d->drawBackground(theme); - } - if (sub & SC_ScrollBarAddPage) { - theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarAddPage, widget); - partId = flags & State_Horizontal ? SBP_LOWERTRACKHORZ : SBP_LOWERTRACKVERT; - if (!(flags & State_Enabled)) - stateId = SCRBS_DISABLED; - else if (scrollbar->activeSubControls & SC_ScrollBarAddPage && (scrollbar->state & State_Sunken)) - stateId = SCRBS_PRESSED; - else if (scrollbar->activeSubControls & SC_ScrollBarAddPage && (scrollbar->state & State_MouseOver)) - stateId = SCRBS_HOT; - else - stateId = SCRBS_NORMAL; - theme.partId = partId; - theme.stateId = stateId; - d->drawBackground(theme); - } - if (sub & SC_ScrollBarSlider) { - theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget); - if (!(flags & State_Enabled)) - stateId = SCRBS_DISABLED; - else if (scrollbar->activeSubControls & SC_ScrollBarSlider && (scrollbar->state & State_Sunken)) - stateId = SCRBS_PRESSED; - else if (scrollbar->activeSubControls & SC_ScrollBarSlider && (scrollbar->state & State_MouseOver)) - stateId = SCRBS_HOT; - else if (option->state & State_MouseOver) - stateId = SCRBS_HOVER; - else - stateId = SCRBS_NORMAL; - - // Draw handle - theme.partId = flags & State_Horizontal ? SBP_THUMBBTNHORZ : SBP_THUMBBTNVERT; - theme.stateId = stateId; - d->drawBackground(theme); - - if (QOperatingSystemVersion::current() < QOperatingSystemVersion::Windows8) { - const QRect gripperBounds = QWindowsXPStylePrivate::scrollBarGripperBounds(flags, widget, &theme); - // Draw gripper if there is enough space - if (!gripperBounds.isEmpty() && flags & State_Enabled) { - painter->save(); - XPThemeData grippBackground = theme; - grippBackground.partId = flags & State_Horizontal ? SBP_LOWERTRACKHORZ : SBP_LOWERTRACKVERT; - theme.rect = gripperBounds; - painter->setClipRegion(d->region(theme));// Only change inside the region of the gripper - d->drawBackground(grippBackground);// The gutter is the grippers background - d->drawBackground(theme); // Transparent gripper ontop of background - painter->restore(); - } - } - } - } - } - break; -#if QT_CONFIG(spinbox) - case CC_SpinBox: - if (const QStyleOptionSpinBox *sb = qstyleoption_cast(option)) - { - XPThemeData theme(widget, painter, QWindowsXPStylePrivate::SpinTheme); - if (sb->frame && (sub & SC_SpinBoxFrame)) { - partId = EP_EDITBORDER_NOSCROLL; - if (!(flags & State_Enabled)) - stateId = ETS_DISABLED; - else if (flags & State_MouseOver) - stateId = ETS_HOT; - else if (flags & State_HasFocus) - stateId = ETS_SELECTED; - else - stateId = ETS_NORMAL; - - XPThemeData ftheme(widget, painter, - QWindowsXPStylePrivate::EditTheme, - partId, stateId, r); - // The spinbox in Windows QStyle is drawn with frameless QLineEdit inside it - // That however breaks with QtQuickControls where this results in transparent - // spinbox background, so if there's no "widget" passed (QtQuickControls case), - // let ftheme.noContent be false, which fixes the spinbox rendering in QQC - ftheme.noContent = (widget != nullptr); - d->drawBackground(ftheme); - } - if (sub & SC_SpinBoxUp) { - theme.rect = proxy()->subControlRect(CC_SpinBox, option, SC_SpinBoxUp, widget).adjusted(0, 0, 0, 1); - partId = SPNP_UP; - if (!(sb->stepEnabled & QAbstractSpinBox::StepUpEnabled) || !(flags & State_Enabled)) - stateId = UPS_DISABLED; - else if (sb->activeSubControls == SC_SpinBoxUp && (sb->state & State_Sunken)) - stateId = UPS_PRESSED; - else if (sb->activeSubControls == SC_SpinBoxUp && (sb->state & State_MouseOver)) - stateId = UPS_HOT; - else - stateId = UPS_NORMAL; - theme.partId = partId; - theme.stateId = stateId; - d->drawBackground(theme); - } - if (sub & SC_SpinBoxDown) { - theme.rect = proxy()->subControlRect(CC_SpinBox, option, SC_SpinBoxDown, widget); - partId = SPNP_DOWN; - if (!(sb->stepEnabled & QAbstractSpinBox::StepDownEnabled) || !(flags & State_Enabled)) - stateId = DNS_DISABLED; - else if (sb->activeSubControls == SC_SpinBoxDown && (sb->state & State_Sunken)) - stateId = DNS_PRESSED; - else if (sb->activeSubControls == SC_SpinBoxDown && (sb->state & State_MouseOver)) - stateId = DNS_HOT; - else - stateId = DNS_NORMAL; - theme.partId = partId; - theme.stateId = stateId; - d->drawBackground(theme); - } - } - break; -#endif // QT_CONFIG(spinbox) - default: - QWindowsXPStyle::drawComplexControl(control, option, painter, widget); - break; - } -} - -/*! - \internal - */ -QSize QWindowsVistaStyle::sizeFromContents(ContentsType type, const QStyleOption *option, - const QSize &size, const QWidget *widget) const -{ - if (!QWindowsVistaStylePrivate::useVista()) - return QWindowsStyle::sizeFromContents(type, option, size, widget); - - QSize sz(size); - switch (type) { - case CT_MenuItem: - sz = QWindowsXPStyle::sizeFromContents(type, option, size, widget); - int minimumHeight; - { - XPThemeData theme(widget, nullptr, - QWindowsXPStylePrivate::MenuTheme, - MENU_POPUPCHECKBACKGROUND, MBI_HOT); - XPThemeData themeSize = theme; - themeSize.partId = MENU_POPUPCHECK; - themeSize.stateId = 0; - const QSizeF size = themeSize.size() * QWindowsStylePrivate::nativeMetricScaleFactor(widget); - const QMarginsF margins = themeSize.margins() * QWindowsStylePrivate::nativeMetricScaleFactor(widget); - minimumHeight = qMax(qRound(size.height() + margins.bottom() + margins.top()), sz.height()); - sz.rwidth() += qRound(size.width() + margins.left() + margins.right()); - } - - if (const QStyleOptionMenuItem *menuitem = qstyleoption_cast(option)) { - if (menuitem->menuItemType != QStyleOptionMenuItem::Separator) - sz.setHeight(minimumHeight); - } - return sz; -#if QT_CONFIG(menubar) - case CT_MenuBarItem: - if (!sz.isEmpty()) - sz += QSize(windowsItemHMargin * 5 + 1, 5); - return sz; -#endif - case CT_ItemViewItem: - sz = QWindowsXPStyle::sizeFromContents(type, option, size, widget); - sz.rheight() += 2; - return sz; - case CT_SpinBox: - { - //Spinbox adds frame twice - sz = QWindowsStyle::sizeFromContents(type, option, size, widget); - int border = proxy()->pixelMetric(PM_SpinBoxFrameWidth, option, widget); - sz -= QSize(2*border, 2*border); - } - return sz; - case CT_HeaderSection: - { - // When there is a sort indicator it adds to the width but it is shown - // above the text natively and not on the side - if (QStyleOptionHeader *hdr = qstyleoption_cast(const_cast(option))) { - QStyleOptionHeader::SortIndicator sortInd = hdr->sortIndicator; - hdr->sortIndicator = QStyleOptionHeader::None; - sz = QWindowsXPStyle::sizeFromContents(type, hdr, size, widget); - hdr->sortIndicator = sortInd; - return sz; - } - break; - } - default: - break; - } - return QWindowsXPStyle::sizeFromContents(type, option, size, widget); -} - -/*! - \internal - */ -QRect QWindowsVistaStyle::subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const -{ - if (!QWindowsVistaStylePrivate::useVista()) - return QWindowsStyle::subElementRect(element, option, widget); - - QRect rect = QWindowsXPStyle::subElementRect(element, option, widget); - switch (element) { - - case SE_PushButtonContents: - if (const QStyleOptionButton *btn = qstyleoption_cast(option)) { - MARGINS borderSize; - const HTHEME theme = OpenThemeData(widget ? QWindowsVistaStylePrivate::winId(widget) : nullptr, L"Button"); - if (theme) { - int stateId = PBS_NORMAL; - if (!(option->state & State_Enabled)) - stateId = PBS_DISABLED; - else if (option->state & State_Sunken) - stateId = PBS_PRESSED; - else if (option->state & State_MouseOver) - stateId = PBS_HOT; - else if (btn->features & QStyleOptionButton::DefaultButton) - stateId = PBS_DEFAULTED; - - int border = proxy()->pixelMetric(PM_DefaultFrameWidth, btn, widget); - rect = option->rect.adjusted(border, border, -border, -border); - - if (SUCCEEDED(GetThemeMargins(theme, nullptr, BP_PUSHBUTTON, stateId, TMT_CONTENTMARGINS, nullptr, &borderSize))) { - rect.adjust(borderSize.cxLeftWidth, borderSize.cyTopHeight, - -borderSize.cxRightWidth, -borderSize.cyBottomHeight); - rect = visualRect(option->direction, option->rect, rect); - } - } - } - break; - - case SE_HeaderArrow: - { - QRect r = rect; - int h = option->rect.height(); - int w = option->rect.width(); - int x = option->rect.x(); - int y = option->rect.y(); - int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, option, widget); - - XPThemeData theme(widget, nullptr, - QWindowsXPStylePrivate::HeaderTheme, - HP_HEADERSORTARROW, HSAS_SORTEDDOWN, option->rect); - - int arrowWidth = 13; - int arrowHeight = 5; - if (theme.isValid()) { - const QSizeF size = theme.size() * QWindowsStylePrivate::nativeMetricScaleFactor(widget); - if (!size.isEmpty()) { - arrowWidth = qRound(size.width()); - arrowHeight = qRound(size.height()); - } - } - if (option->state & State_Horizontal) { - r.setRect(x + w/2 - arrowWidth/2, y , arrowWidth, arrowHeight); - } else { - int vert_size = w / 2; - r.setRect(x + 5, y + h - margin * 2 - vert_size, - w - margin * 2 - 5, vert_size); - } - rect = visualRect(option->direction, option->rect, r); - } - break; - - case SE_HeaderLabel: - { - int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, option, widget); - QRect r = option->rect; - r.setRect(option->rect.x() + margin, option->rect.y() + margin, - option->rect.width() - margin * 2, option->rect.height() - margin * 2); - if (const QStyleOptionHeader *header = qstyleoption_cast(option)) { - // Subtract width needed for arrow, if there is one - if (header->sortIndicator != QStyleOptionHeader::None) { - if (!(option->state & State_Horizontal)) //horizontal arrows are positioned on top - r.setHeight(r.height() - (option->rect.width() / 2) - (margin * 2)); - } - } - rect = visualRect(option->direction, option->rect, r); - } - break; - case SE_ProgressBarContents: - rect = QCommonStyle::subElementRect(SE_ProgressBarGroove, option, widget); - break; - case SE_ItemViewItemDecoration: - if (qstyleoption_cast(option)) - rect.adjust(-2, 0, 2, 0); - break; - case SE_ItemViewItemFocusRect: - if (const QStyleOptionViewItem *vopt = qstyleoption_cast(option)) { - QRect textRect = subElementRect(QStyle::SE_ItemViewItemText, option, widget); - QRect displayRect = subElementRect(QStyle::SE_ItemViewItemDecoration, option, widget); - if (!vopt->icon.isNull()) - rect = textRect.united(displayRect); - else - rect = textRect; - rect = rect.adjusted(1, 0, -1, 0); - } - break; - default: - break; - } - return rect; -} - - -/* - This function is used by subControlRect to check if a button - should be drawn for the given subControl given a set of window flags. -*/ -static bool buttonVisible(const QStyle::SubControl sc, const QStyleOptionTitleBar *tb){ - - bool isMinimized = tb->titleBarState & Qt::WindowMinimized; - bool isMaximized = tb->titleBarState & Qt::WindowMaximized; - const auto flags = tb->titleBarFlags; - bool retVal = false; - switch (sc) { - case QStyle::SC_TitleBarContextHelpButton: - if (flags & Qt::WindowContextHelpButtonHint) - retVal = true; - break; - case QStyle::SC_TitleBarMinButton: - if (!isMinimized && (flags & Qt::WindowMinimizeButtonHint)) - retVal = true; - break; - case QStyle::SC_TitleBarNormalButton: - if (isMinimized && (flags & Qt::WindowMinimizeButtonHint)) - retVal = true; - else if (isMaximized && (flags & Qt::WindowMaximizeButtonHint)) - retVal = true; - break; - case QStyle::SC_TitleBarMaxButton: - if (!isMaximized && (flags & Qt::WindowMaximizeButtonHint)) - retVal = true; - break; - case QStyle::SC_TitleBarShadeButton: - if (!isMinimized && flags & Qt::WindowShadeButtonHint) - retVal = true; - break; - case QStyle::SC_TitleBarUnshadeButton: - if (isMinimized && flags & Qt::WindowShadeButtonHint) - retVal = true; - break; - case QStyle::SC_TitleBarCloseButton: - if (flags & Qt::WindowSystemMenuHint) - retVal = true; - break; - case QStyle::SC_TitleBarSysMenu: - if (flags & Qt::WindowSystemMenuHint) - retVal = true; - break; - default : - retVal = true; - } - return retVal; -} - - -/*! \internal */ -int QWindowsVistaStyle::styleHint(StyleHint hint, const QStyleOption *option, const QWidget *widget, - QStyleHintReturn *returnData) const -{ - QWindowsVistaStylePrivate *d = const_cast(d_func()); - int ret = 0; - switch (hint) { - case SH_MessageBox_CenterButtons: - ret = false; - break; - case SH_ToolTip_Mask: - if (option) { - if (QStyleHintReturnMask *mask = qstyleoption_cast(returnData)) { - ret = true; - XPThemeData themeData(widget, nullptr, - QWindowsXPStylePrivate::ToolTipTheme, - TTP_STANDARD, TTSS_NORMAL, option->rect); - mask->region = d->region(themeData); - } - } - break; - case SH_Table_GridLineColor: - if (option) - ret = int(option->palette.color(QPalette::Base).darker(118).rgba()); - else - ret = -1; - break; - case SH_Header_ArrowAlignment: - ret = Qt::AlignTop | Qt::AlignHCenter; - break; - default: - ret = QWindowsXPStyle::styleHint(hint, option, widget, returnData); - break; - } - return ret; -} - - -/*! - \internal - */ -QRect QWindowsVistaStyle::subControlRect(ComplexControl control, const QStyleOptionComplex *option, - SubControl subControl, const QWidget *widget) const -{ - if (!QWindowsVistaStylePrivate::useVista()) - return QWindowsStyle::subControlRect(control, option, subControl, widget); - - QRect rect = QWindowsXPStyle::subControlRect(control, option, subControl, widget); - switch (control) { -#if QT_CONFIG(combobox) - case CC_ComboBox: - if (const QStyleOptionComboBox *cb = qstyleoption_cast(option)) { - const int x = cb->rect.x(), y = cb->rect.y(), wi = cb->rect.width(), he = cb->rect.height(); - const int margin = cb->frame ? 3 : 0; - const int bmarg = cb->frame ? 2 : 0; - const int arrowWidth = qRound(QStyleHelper::dpiScaled(16, option)); - const int arrowButtonWidth = bmarg + arrowWidth; - const int xpos = x + wi - arrowButtonWidth; - - switch (subControl) { - case SC_ComboBoxFrame: - rect = cb->rect; - break; - case SC_ComboBoxArrow: - rect.setRect(xpos, y , arrowButtonWidth, he); - break; - case SC_ComboBoxEditField: - rect.setRect(x + margin, y + margin, wi - 2 * margin - arrowWidth, he - 2 * margin); - break; - case SC_ComboBoxListBoxPopup: - rect = cb->rect; - break; - default: - break; - } - rect = visualRect(cb->direction, cb->rect, rect); - return rect; - } - break; -#endif // QT_CONFIG(combobox) - case CC_TitleBar: - if (const QStyleOptionTitleBar *tb = qstyleoption_cast(option)) { - if (!buttonVisible(subControl, tb)) - return rect; - const qreal factor = QWindowsStylePrivate::nativeMetricScaleFactor(widget); - const bool isToolTitle = false; - const int height = tb->rect.height(); - const int width = tb->rect.width(); - const int buttonWidth = - qRound(qreal(GetSystemMetrics(SM_CXSIZE)) * factor - QStyleHelper::dpiScaled(4, option)); - - const int frameWidth = proxy()->pixelMetric(PM_MdiSubWindowFrameWidth, option, widget); - const bool sysmenuHint = (tb->titleBarFlags & Qt::WindowSystemMenuHint) != 0; - const bool minimizeHint = (tb->titleBarFlags & Qt::WindowMinimizeButtonHint) != 0; - const bool maximizeHint = (tb->titleBarFlags & Qt::WindowMaximizeButtonHint) != 0; - const bool contextHint = (tb->titleBarFlags & Qt::WindowContextHelpButtonHint) != 0; - const bool shadeHint = (tb->titleBarFlags & Qt::WindowShadeButtonHint) != 0; - - switch (subControl) { - case SC_TitleBarLabel: - rect = QRect(frameWidth, 0, width - (buttonWidth + frameWidth + 10), height); - if (isToolTitle) { - if (sysmenuHint) { - rect.adjust(0, 0, int(-buttonWidth - 3 * factor), 0); - } - if (minimizeHint || maximizeHint) - rect.adjust(0, 0, int(-buttonWidth - 2 * factor), 0); - } else { - if (sysmenuHint) { - const int leftOffset = int(height - 8 * factor); - rect.adjust(leftOffset, 0, 0, int(4 * factor)); - } - if (minimizeHint) - rect.adjust(0, 0, int(-buttonWidth - 2 * factor), 0); - if (maximizeHint) - rect.adjust(0, 0, int(-buttonWidth - 2 * factor), 0); - if (contextHint) - rect.adjust(0, 0, int(-buttonWidth - 2 * factor), 0); - if (shadeHint) - rect.adjust(0, 0, int(-buttonWidth - 2 * factor), 0); - } - rect.translate(0, int(2 * factor)); - rect = visualRect(option->direction, option->rect, rect); - break; - case SC_TitleBarSysMenu: - { - const int controlTop = int(6 * factor); - const int controlHeight = int(height - controlTop - 3 * factor); - int iconExtent = proxy()->pixelMetric(PM_SmallIconSize, option); - QSize iconSize = tb->icon.actualSize(QSize(iconExtent, iconExtent)); - if (tb->icon.isNull()) - iconSize = QSize(controlHeight, controlHeight); - int hPad = (controlHeight - iconSize.height())/2; - int vPad = (controlHeight - iconSize.width())/2; - rect = QRect(frameWidth + hPad, controlTop + vPad, iconSize.width(), iconSize.height()); - rect.translate(0, int(3 * factor)); - rect = visualRect(option->direction, option->rect, rect); - } - break; - default: - break; - } - } - break; - default: - break; - } - return rect; -} - -/*! - \internal - */ -QStyle::SubControl QWindowsVistaStyle::hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option, - const QPoint &pos, const QWidget *widget) const -{ - if (!QWindowsVistaStylePrivate::useVista()) { - return QWindowsStyle::hitTestComplexControl(control, option, pos, widget); - } - return QWindowsXPStyle::hitTestComplexControl(control, option, pos, widget); -} - -int QWindowsVistaStylePrivate::fixedPixelMetric(QStyle::PixelMetric pm) -{ - switch (pm) { - case QStyle::PM_DockWidgetTitleBarButtonMargin: - return 5; - case QStyle::PM_ScrollBarSliderMin: - return 18; - case QStyle::PM_MenuHMargin: - case QStyle::PM_MenuVMargin: - return 0; - case QStyle::PM_MenuPanelWidth: - return 3; - default: - break; - } - return QWindowsVistaStylePrivate::InvalidMetric; -} - -/*! - \internal - */ -int QWindowsVistaStyle::pixelMetric(PixelMetric metric, const QStyleOption *option, const QWidget *widget) const -{ - if (!QWindowsVistaStylePrivate::useVista()) - return QWindowsStyle::pixelMetric(metric, option, widget); - - int ret = QWindowsVistaStylePrivate::fixedPixelMetric(metric); - if (ret != QWindowsStylePrivate::InvalidMetric) - return int(QStyleHelper::dpiScaled(ret, option)); - - return QWindowsXPStyle::pixelMetric(metric, option, widget); -} - -/*! - \internal - */ -QPalette QWindowsVistaStyle::standardPalette() const -{ - return QWindowsXPStyle::standardPalette(); -} - -/*! - \internal - */ -void QWindowsVistaStyle::polish(QApplication *app) -{ - QWindowsXPStyle::polish(app); -} - -/*! - \internal - */ -void QWindowsVistaStyle::polish(QWidget *widget) -{ - QWindowsXPStyle::polish(widget); -#if QT_CONFIG(lineedit) - if (qobject_cast(widget)) - widget->setAttribute(Qt::WA_Hover); - else -#endif // QT_CONFIG(lineedit) - if (qobject_cast(widget)) - widget->setAttribute(Qt::WA_Hover); -#if QT_CONFIG(commandlinkbutton) - else if (qobject_cast(widget)) { - QFont buttonFont = widget->font(); - buttonFont.setFamilies(QStringList{QLatin1String("Segoe UI")}); - widget->setFont(buttonFont); - } -#endif // QT_CONFIG(commandlinkbutton) - else if (widget->inherits("QTipLabel")){ - //note that since tooltips are not reused - //we do not have to care about unpolishing - widget->setContentsMargins(3, 0, 4, 0); - COLORREF bgRef; - HTHEME theme = OpenThemeData(widget ? QWindowsVistaStylePrivate::winId(widget) : nullptr, L"TOOLTIP"); - if (theme && SUCCEEDED(GetThemeColor(theme, TTP_STANDARD, TTSS_NORMAL, TMT_TEXTCOLOR, &bgRef))) { - QColor textColor = QColor::fromRgb(bgRef); - QPalette pal; - pal.setColor(QPalette::All, QPalette::ToolTipText, textColor); - widget->setPalette(pal); - } - } else if (qobject_cast (widget)) { - widget->setAttribute(Qt::WA_StyledBackground); -#if QT_CONFIG(dialogbuttonbox) - QDialogButtonBox *buttonBox = widget->findChild(QLatin1String("qt_msgbox_buttonbox")); - if (buttonBox) - buttonBox->setContentsMargins(0, 9, 0, 0); -#endif - } -#if QT_CONFIG(inputdialog) - else if (qobject_cast (widget)) { - widget->setAttribute(Qt::WA_StyledBackground); -#if QT_CONFIG(dialogbuttonbox) - QDialogButtonBox *buttonBox = widget->findChild(QLatin1String("qt_inputdlg_buttonbox")); - if (buttonBox) - buttonBox->setContentsMargins(0, 9, 0, 0); -#endif - } -#endif // QT_CONFIG(inputdialog) - else if (QTreeView *tree = qobject_cast (widget)) { - tree->viewport()->setAttribute(Qt::WA_Hover); - } - else if (QListView *list = qobject_cast (widget)) { - list->viewport()->setAttribute(Qt::WA_Hover); - } -} - -/*! - \internal - */ -void QWindowsVistaStyle::unpolish(QWidget *widget) -{ - QWindowsXPStyle::unpolish(widget); - - QWindowsVistaStylePrivate *d = d_func(); - - d->stopAnimation(widget); - -#if QT_CONFIG(lineedit) - if (qobject_cast(widget)) - widget->setAttribute(Qt::WA_Hover, false); - else -#endif // QT_CONFIG(lineedit) - if (qobject_cast(widget)) - widget->setAttribute(Qt::WA_Hover, false); - else if (qobject_cast (widget)) { - widget->setAttribute(Qt::WA_StyledBackground, false); -#if QT_CONFIG(dialogbuttonbox) - QDialogButtonBox *buttonBox = widget->findChild(QLatin1String("qt_msgbox_buttonbox")); - if (buttonBox) - buttonBox->setContentsMargins(0, 0, 0, 0); -#endif - } -#if QT_CONFIG(inputdialog) - else if (qobject_cast (widget)) { - widget->setAttribute(Qt::WA_StyledBackground, false); -#if QT_CONFIG(dialogbuttonbox) - QDialogButtonBox *buttonBox = widget->findChild(QLatin1String("qt_inputdlg_buttonbox")); - if (buttonBox) - buttonBox->setContentsMargins(0, 0, 0, 0); -#endif - } -#endif // QT_CONFIG(inputdialog) - else if (QTreeView *tree = qobject_cast (widget)) { - tree->viewport()->setAttribute(Qt::WA_Hover, false); - } -#if QT_CONFIG(commandlinkbutton) - else if (qobject_cast(widget)) { - QFont font = QApplication::font("QCommandLinkButton"); - QFont widgetFont = widget->font(); - widgetFont.setFamilies(font.families()); //Only family set by polish - widget->setFont(widgetFont); - } -#endif // QT_CONFIG(commandlinkbutton) -} - - -/*! - \internal - */ -void QWindowsVistaStyle::unpolish(QApplication *app) -{ - QWindowsXPStyle::unpolish(app); -} - -/*! - \internal - */ -void QWindowsVistaStyle::polish(QPalette &pal) -{ - QWindowsStyle::polish(pal); - pal.setBrush(QPalette::AlternateBase, pal.base().color().darker(104)); -} - -/*! - \internal - */ -QPixmap QWindowsVistaStyle::standardPixmap(StandardPixmap standardPixmap, const QStyleOption *option, - const QWidget *widget) const -{ - if (!QWindowsVistaStylePrivate::useVista()) { - return QWindowsStyle::standardPixmap(standardPixmap, option, widget); - } - return QWindowsXPStyle::standardPixmap(standardPixmap, option, widget); -} - -QWindowsVistaStylePrivate::QWindowsVistaStylePrivate() : - QWindowsXPStylePrivate() -{ -} - -bool QWindowsVistaStylePrivate::transitionsEnabled() const -{ - BOOL animEnabled = false; - if (SystemParametersInfo(SPI_GETCLIENTAREAANIMATION, 0, &animEnabled, 0)) - { - if (animEnabled) - return true; - } - return false; -} - -/*! -\reimp -*/ -QIcon QWindowsVistaStyle::standardIcon(StandardPixmap standardIcon, - const QStyleOption *option, - const QWidget *widget) const -{ - if (!QWindowsVistaStylePrivate::useVista()) { - return QWindowsStyle::standardIcon(standardIcon, option, widget); - } - - QWindowsVistaStylePrivate *d = const_cast(d_func()); - switch (standardIcon) { - case SP_CommandLink: - { - XPThemeData theme(nullptr, nullptr, - QWindowsXPStylePrivate::ButtonTheme, - BP_COMMANDLINKGLYPH, CMDLGS_NORMAL); - if (theme.isValid()) { - const QSize size = (theme.size() * QWindowsStylePrivate::nativeMetricScaleFactor(widget)).toSize(); - QIcon linkGlyph; - QPixmap pm(size); - pm.fill(Qt::transparent); - QPainter p(&pm); - theme.painter = &p; - theme.rect = QRect(QPoint(0, 0), size); - d->drawBackground(theme); - linkGlyph.addPixmap(pm, QIcon::Normal, QIcon::Off); // Normal - pm.fill(Qt::transparent); - - theme.stateId = CMDLGS_PRESSED; - d->drawBackground(theme); - linkGlyph.addPixmap(pm, QIcon::Normal, QIcon::On); // Pressed - pm.fill(Qt::transparent); - - theme.stateId = CMDLGS_HOT; - d->drawBackground(theme); - linkGlyph.addPixmap(pm, QIcon::Active, QIcon::Off); // Hover - pm.fill(Qt::transparent); - - theme.stateId = CMDLGS_DISABLED; - d->drawBackground(theme); - linkGlyph.addPixmap(pm, QIcon::Disabled, QIcon::Off); // Disabled - return linkGlyph; - } - } - break; - default: - break; - } - return QWindowsXPStyle::standardIcon(standardIcon, option, widget); -} - -QT_END_NAMESPACE diff --git a/src/imports/nativestyle/qstyle/windows/qquickwindowsvistastyle_p.h b/src/imports/nativestyle/qstyle/windows/qquickwindowsvistastyle_p.h deleted file mode 100644 index 07cd2b8a..00000000 --- a/src/imports/nativestyle/qstyle/windows/qquickwindowsvistastyle_p.h +++ /dev/null @@ -1,109 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWidgets module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINDOWSVISTASTYLE_P_H -#define QWINDOWSVISTASTYLE_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 -#include "qquickwindowsxpstyle_p.h" - -QT_BEGIN_NAMESPACE - -class QWindowsVistaStylePrivate; -class QWindowsVistaStyle : public QWindowsXPStyle -{ - Q_OBJECT -public: - QWindowsVistaStyle(); - ~QWindowsVistaStyle() override; - - void drawPrimitive(PrimitiveElement element, const QStyleOption *option, - QPainter *painter, - const QWidget *widget = nullptr) const override; - void drawControl(ControlElement element, const QStyleOption *option, - QPainter *painter, const QWidget *widget) const override; - void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, - QPainter *painter, const QWidget *widget) const override; - QSize sizeFromContents(ContentsType type, const QStyleOption *option, - const QSize &size, const QWidget *widget) const override; - - QRect subElementRect(SubElement element, const QStyleOption *option, - const QWidget *widget) const override; - QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, - SubControl sc, const QWidget *widget) const override; - - SubControl hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option, - const QPoint &pos, const QWidget *widget = nullptr) const override; - - QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = nullptr, - const QWidget *widget = nullptr) const override; - QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt, - const QWidget *widget = nullptr) const override; - int pixelMetric(PixelMetric metric, const QStyleOption *option = nullptr, - const QWidget *widget = nullptr) const override; - int styleHint(StyleHint hint, const QStyleOption *opt = nullptr, - const QWidget *widget = nullptr, QStyleHintReturn *returnData = nullptr) const override; - - void polish(QWidget *widget) override; - void unpolish(QWidget *widget) override; - void polish(QPalette &pal) override; - void polish(QApplication *app) override; - void unpolish(QApplication *app) override; - QPalette standardPalette() const override; - -private: - Q_DISABLE_COPY_MOVE(QWindowsVistaStyle) - Q_DECLARE_PRIVATE(QWindowsVistaStyle) - friend class QStyleFactory; -}; - -QT_END_NAMESPACE - -#endif // QWINDOWSVISTASTYLE_P_H diff --git a/src/imports/nativestyle/qstyle/windows/qquickwindowsvistastyle_p_p.h b/src/imports/nativestyle/qstyle/windows/qquickwindowsvistastyle_p_p.h deleted file mode 100644 index a5383175..00000000 --- a/src/imports/nativestyle/qstyle/windows/qquickwindowsvistastyle_p_p.h +++ /dev/null @@ -1,204 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWidgets module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINDOWSVISTASTYLE_P_P_H -#define QWINDOWSVISTASTYLE_P_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of qapplication_*.cpp, qwidget*.cpp and qfiledialog.cpp. This header -// file may change from version to version without notice, or even be removed. -// -// We mean it. -// - -#include -#include "qquickwindowsvistastyle_p.h" -#include "qquickwindowsxpstyle_p_p.h" -#include -#include -#include -#include -#include -#include -#include -#if QT_CONFIG(pushbutton) -#include -#endif -#include -#if QT_CONFIG(lineedit) -#include -#endif -#include -#if QT_CONFIG(toolbutton) -#include -#endif -#if QT_CONFIG(spinbox) -#include -#endif -#if QT_CONFIG(toolbar) -#include -#endif -#if QT_CONFIG(combobox) -#include -#endif -#if QT_CONFIG(scrollbar) -#include -#endif -#if QT_CONFIG(progressbar) -#include -#endif -#if QT_CONFIG(dockwidget) -#include -#endif -#if QT_CONFIG(listview) -#include -#endif -#if QT_CONFIG(treeview) -#include -#endif -#include -#include -#if QT_CONFIG(dialogbuttonbox) -#include -#endif -#include -#if QT_CONFIG(tableview) -#include -#endif -#include -#if QT_CONFIG(commandlinkbutton) -#include -#endif - -QT_BEGIN_NAMESPACE - -#if !defined(SCHEMA_VERIFY_VSSYM32) -#define TMT_ANIMATIONDURATION 5006 -#define TMT_TRANSITIONDURATIONS 6000 -#define EP_EDITBORDER_NOSCROLL 6 -#define EP_EDITBORDER_HVSCROLL 9 -#define EP_BACKGROUND 3 -#define EBS_NORMAL 1 -#define EBS_HOT 2 -#define EBS_DISABLED 3 -#define EBS_READONLY 5 -#define PBS_DEFAULTED_ANIMATING 6 -#define MBI_NORMAL 1 -#define MBI_HOT 2 -#define MBI_PUSHED 3 -#define MBI_DISABLED 4 -#define MB_ACTIVE 1 -#define MB_INACTIVE 2 -#define PP_FILL 5 -#define PP_FILLVERT 6 -#define PP_MOVEOVERLAY 8 -#define PP_MOVEOVERLAYVERT 10 -#define MENU_BARBACKGROUND 7 -#define MENU_BARITEM 8 -#define MENU_POPUPCHECK 11 -#define MENU_POPUPCHECKBACKGROUND 12 -#define MENU_POPUPGUTTER 13 -#define MENU_POPUPITEM 14 -#define MENU_POPUPBORDERS 10 -#define MENU_POPUPSEPARATOR 15 -#define MC_CHECKMARKNORMAL 1 -#define MC_CHECKMARKDISABLED 2 -#define MC_BULLETNORMAL 3 -#define MC_BULLETDISABLED 4 -#define ABS_UPHOVER 17 -#define ABS_DOWNHOVER 18 -#define ABS_LEFTHOVER 19 -#define ABS_RIGHTHOVER 20 -#define CP_DROPDOWNBUTTONRIGHT 6 -#define CP_DROPDOWNBUTTONLEFT 7 -#define SCRBS_HOVER 5 -#define TVP_HOTGLYPH 4 -#define SPI_GETCLIENTAREAANIMATION 0x1042 -#define TDLG_PRIMARYPANEL 1 -#define TDLG_SECONDARYPANEL 8 -#endif - -class QWindowsVistaAnimation : public QBlendStyleAnimation -{ - Q_OBJECT -public: - QWindowsVistaAnimation(Type type, QObject *target) : QBlendStyleAnimation(type, target) { } - - bool isUpdateNeeded() const override; - void paint(QPainter *painter, const QStyleOption *option); -}; - - -// Handles state transition animations -class QWindowsVistaTransition : public QWindowsVistaAnimation -{ - Q_OBJECT -public: - QWindowsVistaTransition(QObject *target) : QWindowsVistaAnimation(Transition, target) {} -}; - - -// Handles pulse animations (default buttons) -class QWindowsVistaPulse: public QWindowsVistaAnimation -{ - Q_OBJECT -public: - QWindowsVistaPulse(QObject *target) : QWindowsVistaAnimation(Pulse, target) {} -}; - - -class QWindowsVistaStylePrivate : public QWindowsXPStylePrivate -{ - Q_DECLARE_PUBLIC(QWindowsVistaStyle) - -public: - QWindowsVistaStylePrivate(); - - static int fixedPixelMetric(QStyle::PixelMetric pm); - static inline bool useVista(); - bool transitionsEnabled() const; -}; - -QT_END_NAMESPACE - -#endif // QWINDOWSVISTASTYLE_P_P_H diff --git a/src/imports/nativestyle/qstyle/windows/qquickwindowsxpstyle.cpp b/src/imports/nativestyle/qstyle/windows/qquickwindowsxpstyle.cpp deleted file mode 100644 index a3e8ef20..00000000 --- a/src/imports/nativestyle/qstyle/windows/qquickwindowsxpstyle.cpp +++ /dev/null @@ -1,4149 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWidgets module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "qquickstylehelper_p.h" -#include "qquickwindowsxpstyle_p.h" -#include "qquickwindowsxpstyle_p_p.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -QT_BEGIN_NAMESPACE - -namespace QQC2 { - -// General const values -static const int windowsItemFrame = 2; // menu item frame width -static const int windowsItemHMargin = 3; // menu item hor text margin -static const int windowsItemVMargin = 0; // menu item ver text margin -static const int windowsArrowHMargin = 6; // arrow horizontal margin -static const int windowsRightBorder = 12; // right border on windows - -// Theme names matching the QWindowsXPStylePrivate::Theme enumeration. -static const wchar_t *themeNames[QWindowsXPStylePrivate::NThemes] = -{ - L"BUTTON", L"COMBOBOX", L"EDIT", L"HEADER", L"LISTVIEW", - L"MENU", L"PROGRESS", L"REBAR", L"SCROLLBAR", L"SPIN", - L"TAB", L"TASKDIALOG", L"TOOLBAR", L"TOOLTIP", L"TRACKBAR", - L"TREEVIEW", L"WINDOW", L"STATUS", L"TREEVIEW" -}; - -// Theme data helper ------------------------------------------------------------------------------ -/* \internal - Returns \c true if the themedata is valid for use. -*/ -bool XPThemeData::isValid() -{ - return QWindowsXPStylePrivate::useXP() && theme >= 0 && handle(); -} - - -/* \internal - Returns the theme engine handle to the specific class. - If the handle hasn't been opened before, it opens the data, and - adds it to a static map, for caching. -*/ -HTHEME XPThemeData::handle() -{ - if (!QWindowsXPStylePrivate::useXP()) - return nullptr; - - if (!htheme) - htheme = QWindowsXPStylePrivate::createTheme(theme, QWindowsXPStylePrivate::winId(window)); - return htheme; -} - -/* \internal - Converts a QRect to the native RECT structure. -*/ -RECT XPThemeData::toRECT(const QRect &qr) -{ - RECT r; - r.left = qr.x(); - r.right = qr.x() + qr.width(); - r.top = qr.y(); - r.bottom = qr.y() + qr.height(); - return r; -} - -/* \internal - Returns the native region of a part, if the part is considered - transparent. The region is scaled to the parts size (rect). -*/ - -// QWindowsXPStylePrivate ------------------------------------------------------------------------- -// Static initializations -HWND QWindowsXPStylePrivate::m_vistaTreeViewHelper = nullptr; -HTHEME QWindowsXPStylePrivate::m_themes[NThemes]; -bool QWindowsXPStylePrivate::use_xp = false; -QBasicAtomicInt QWindowsXPStylePrivate::ref = Q_BASIC_ATOMIC_INITIALIZER(-1); // -1 based refcounting - -static void qt_add_rect(HRGN &winRegion, QRect r) -{ - HRGN rgn = CreateRectRgn(r.left(), r.top(), r.x() + r.width(), r.y() + r.height()); - if (rgn) { - HRGN dest = CreateRectRgn(0,0,0,0); - int result = CombineRgn(dest, winRegion, rgn, RGN_OR); - if (result) { - DeleteObject(winRegion); - winRegion = dest; - } - DeleteObject(rgn); - } -} - -static HRGN qt_hrgn_from_qregion(const QRegion ®ion) -{ - HRGN hRegion = CreateRectRgn(0,0,0,0); - if (region.rectCount() == 1) { - qt_add_rect(hRegion, region.boundingRect()); - return hRegion; - } - for (const QRect &rect : region) - qt_add_rect(hRegion, rect); - return hRegion; -} - -/* \internal - Checks if the theme engine can/should be used, or if we should - fall back to Windows style. -*/ -bool QWindowsXPStylePrivate::useXP(bool update) -{ - if (update) { - use_xp = IsThemeActive() && (IsAppThemed() || !QCoreApplication::instance()) - && !QWindowsStylePrivate::isDarkMode(); - } - return use_xp; -} - -/* \internal - Handles refcounting, and queries the theme engine for usage. -*/ -void QWindowsXPStylePrivate::init(bool force) -{ - if (ref.ref() && !force) - return; - if (!force) // -1 based atomic refcounting - ref.ref(); - - useXP(true); - std::fill(m_themes, m_themes + NThemes, nullptr); -} - -/* \internal - Cleans up all static data. -*/ -void QWindowsXPStylePrivate::cleanup(bool force) -{ - if (bufferBitmap) { - if (bufferDC && nullBitmap) - SelectObject(bufferDC, nullBitmap); - DeleteObject(bufferBitmap); - bufferBitmap = nullptr; - } - - if (bufferDC) - DeleteDC(bufferDC); - bufferDC = nullptr; - - if (ref.deref() && !force) - return; - if (!force) // -1 based atomic refcounting - ref.deref(); - - use_xp = false; - cleanupHandleMap(); -} - -/* In order to obtain the correct VistaTreeViewTheme (arrows for PE_IndicatorBranch), - * we need to set the windows "explorer" theme explicitly on a native - * window and open the "TREEVIEW" theme handle passing its window handle - * in order to get Vista-style item view themes (particulary drawBackground() - * for selected items needs this). - * We invoke a service of the native Windows interface to create - * a non-visible window handle, open the theme on it and insert it into - * the cache so that it is found by XPThemeData::handle() first. - */ - -static inline HWND createTreeViewHelperWindow() -{ - if (QPlatformNativeInterface *ni = QGuiApplication::platformNativeInterface()) { - void *hwnd = nullptr; - void *wndProc = reinterpret_cast(DefWindowProc); - if (QMetaObject::invokeMethod(ni, "createMessageWindow", Qt::DirectConnection, - Q_RETURN_ARG(void*, hwnd), - Q_ARG(QString, QStringLiteral("QTreeViewThemeHelperWindowClass")), - Q_ARG(QString, QStringLiteral("QTreeViewThemeHelperWindow")), - Q_ARG(void*, wndProc)) && hwnd) { - return reinterpret_cast(hwnd); - } - } - return nullptr; -} - -bool QWindowsXPStylePrivate::initVistaTreeViewTheming() -{ - if (m_vistaTreeViewHelper) - return true; - - m_vistaTreeViewHelper = createTreeViewHelperWindow(); - if (!m_vistaTreeViewHelper) { - qWarning("Unable to create the treeview helper window."); - return false; - } - if (FAILED(SetWindowTheme(m_vistaTreeViewHelper, L"explorer", nullptr))) { - qErrnoWarning("SetWindowTheme() failed."); - cleanupVistaTreeViewTheming(); - return false; - } - return true; -} - -void QWindowsXPStylePrivate::cleanupVistaTreeViewTheming() -{ - if (m_vistaTreeViewHelper) { - DestroyWindow(m_vistaTreeViewHelper); - m_vistaTreeViewHelper = nullptr; - } -} - -/* \internal - Closes all open theme data handles to ensure that we don't leak - resources, and that we don't refere to old handles when for - example the user changes the theme style. -*/ -void QWindowsXPStylePrivate::cleanupHandleMap() -{ - for (auto &theme : m_themes) { - if (theme) { - CloseThemeData(theme); - theme = nullptr; - } - } - QWindowsXPStylePrivate::cleanupVistaTreeViewTheming(); -} - -HTHEME QWindowsXPStylePrivate::createTheme(int theme, HWND hwnd) -{ - if (Q_UNLIKELY(theme < 0 || theme >= NThemes || !hwnd)) { - qWarning("Invalid parameters #%d, %p", theme, hwnd); - return nullptr; - } - if (!m_themes[theme]) { - const wchar_t *name = themeNames[theme]; - if (theme == VistaTreeViewTheme && QWindowsXPStylePrivate::initVistaTreeViewTheming()) - hwnd = QWindowsXPStylePrivate::m_vistaTreeViewHelper; - m_themes[theme] = OpenThemeData(hwnd, name); - if (Q_UNLIKELY(!m_themes[theme])) - qErrnoWarning("OpenThemeData() failed for theme %d (%s).", - theme, qPrintable(themeName(theme))); - } - return m_themes[theme]; -} - -QString QWindowsXPStylePrivate::themeName(int theme) -{ - return theme >= 0 && theme < NThemes ? - QString::fromWCharArray(themeNames[theme]) : - QString(); -} - -/* -bool QWindowsXPStylePrivate::isItemViewDelegateLineEdit(const QWidget *widget) -{ - if (!widget) - return false; - const QWidget *parent1 = widget->parentWidget(); - // Exlude dialogs or other toplevels parented on item views. - if (!parent1 || parent1->isWindow()) - return false; - const QWidget *parent2 = parent1->parentWidget(); - return parent2 && widget->inherits("QLineEdit") - && parent2->inherits("QAbstractItemView"); -} -*/ - -/* -// Returns whether base color is set for this widget -bool QWindowsXPStylePrivate::isLineEditBaseColorSet(const QStyleOption *option, const QWidget *widget) -{ - uint resolveMask = option->palette.resolve(); - if (widget) { - // Since spin box includes a line edit we need to resolve the palette mask also from - // the parent, as while the color is always correct on the palette supplied by panel, - // the mask can still be empty. If either mask specifies custom base color, use that. -#if QT_CONFIG(spinbox) - if (const QAbstractSpinBox *spinbox = qobject_cast(widget->parentWidget())) - resolveMask |= spinbox->palette().resolve(); -#endif // QT_CONFIG(spinbox) - } - return (resolveMask & (1 << QPalette::Base)) != 0; -} -*/ - -/*! \internal - This function will always return a valid window handle, and might - create a limbo widget to do so. - We often need a window handle to for example open theme data, so - this function ensures that we get one. -*/ -HWND QWindowsXPStylePrivate::winId(const QWindow *window) -{ - if (window) - if (const HWND hwnd = reinterpret_cast(window->winId())) - return hwnd; - - // Find top level with native window (there might be dialogs that do not have one). - const auto allWindows = QGuiApplication::allWindows(); - for (const QWindow *window : allWindows) { - if (window->isTopLevel() && window->type() != Qt::Desktop && window->handle() != nullptr) - return reinterpret_cast(window->winId()); - } - - return GetDesktopWindow(); -} - -/*! \internal - Returns a native buffer (DIB section) of at least the size of - ( \a x , \a y ). The buffer has a 32 bit depth, to not lose - the alpha values on proper alpha-pixmaps. -*/ -HBITMAP QWindowsXPStylePrivate::buffer(int w, int h) -{ - // If we already have a HBITMAP which is of adequate size, just return that - if (bufferBitmap) { - if (bufferW >= w && bufferH >= h) - return bufferBitmap; - // Not big enough, discard the old one - if (bufferDC && nullBitmap) - SelectObject(bufferDC, nullBitmap); - DeleteObject(bufferBitmap); - bufferBitmap = nullptr; - } - - w = qMax(bufferW, w); - h = qMax(bufferH, h); - - if (!bufferDC) { - HDC displayDC = GetDC(nullptr); - bufferDC = CreateCompatibleDC(displayDC); - ReleaseDC(nullptr, displayDC); - } - - // Define the header - BITMAPINFO bmi; - memset(&bmi, 0, sizeof(bmi)); - bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - bmi.bmiHeader.biWidth = w; - bmi.bmiHeader.biHeight = -h; - bmi.bmiHeader.biPlanes = 1; - bmi.bmiHeader.biBitCount = 32; - bmi.bmiHeader.biCompression = BI_RGB; - - // Create the pixmap - bufferPixels = nullptr; - bufferBitmap = CreateDIBSection(bufferDC, &bmi, DIB_RGB_COLORS, reinterpret_cast(&bufferPixels), nullptr, 0); - GdiFlush(); - nullBitmap = static_cast(SelectObject(bufferDC, bufferBitmap)); - - if (Q_UNLIKELY(!bufferBitmap)) { - qErrnoWarning("QWindowsXPStylePrivate::buffer(%dx%d), CreateDIBSection() failed.", w, h); - bufferW = 0; - bufferH = 0; - return nullptr; - } - if (Q_UNLIKELY(!bufferPixels)) { - qErrnoWarning("QWindowsXPStylePrivate::buffer(%dx%d), CreateDIBSection() did not allocate pixel data.", w, h); - bufferW = 0; - bufferH = 0; - return nullptr; - } - bufferW = w; - bufferH = h; -#ifdef DEBUG_XP_STYLE - qDebug("Creating new dib section (%d, %d)", w, h); -#endif - return bufferBitmap; -} - -/*! \internal - Returns \c true if the part contains any transparency at all. This does - not indicate what kind of transparency we're dealing with. It can be - - Alpha transparency - - Masked transparency -*/ -bool QWindowsXPStylePrivate::isTransparent(XPThemeData &themeData) -{ - return IsThemeBackgroundPartiallyTransparent(themeData.handle(), themeData.partId, - themeData.stateId); -} - - -/*! \internal - Returns a QRegion of the region of the part -*/ -QRegion QWindowsXPStylePrivate::region(XPThemeData &themeData) -{ - HRGN hRgn = nullptr; - const qreal factor = QWindowsStylePrivate::nativeMetricScaleFactor(themeData.window); - RECT rect = themeData.toRECT(QRect(themeData.rect.topLeft() / factor, themeData.rect.size() / factor)); - if (!SUCCEEDED(GetThemeBackgroundRegion(themeData.handle(), bufferHDC(), themeData.partId, - themeData.stateId, &rect, &hRgn))) { - return QRegion(); - } - - HRGN dest = CreateRectRgn(0, 0, 0, 0); - const bool success = CombineRgn(dest, hRgn, nullptr, RGN_COPY) != ERROR; - - QRegion region; - - if (success) { - const auto numBytes = GetRegionData(dest, 0, nullptr); - if (numBytes == 0) - return QRegion(); - - char *buf = new (std::nothrow) char[numBytes]; - if (!buf) - return QRegion(); - - RGNDATA *rd = reinterpret_cast(buf); - if (GetRegionData(dest, numBytes, rd) == 0) { - delete [] buf; - return QRegion(); - } - - RECT *r = reinterpret_cast(rd->Buffer); - for (uint i = 0; i < rd->rdh.nCount; ++i) { - QRect rect; - rect.setCoords(int(r->left * factor), int(r->top * factor), int((r->right - 1) * factor), int((r->bottom - 1) * factor)); - ++r; - region |= rect; - } - - delete [] buf; - } - - DeleteObject(hRgn); - DeleteObject(dest); - - return region; -} - -/*! \internal - Returns \c true if the native doublebuffer contains pixels with - varying alpha value. -*/ -bool QWindowsXPStylePrivate::hasAlphaChannel(const QRect &rect) -{ - const int startX = rect.left(); - const int startY = rect.top(); - const int w = rect.width(); - const int h = rect.height(); - - int firstAlpha = -1; - for (int y = startY; y < h/2; ++y) { - auto buffer = reinterpret_cast(bufferPixels) + (y * bufferW); - for (int x = startX; x < w; ++x, ++buffer) { - int alpha = (*buffer) >> 24; - if (firstAlpha == -1) - firstAlpha = alpha; - else if (alpha != firstAlpha) - return true; - } - } - return false; -} - -/*! \internal - When the theme engine paints both a true alpha pixmap and a glyph - into our buffer, the glyph might not contain a proper alpha value. - The rule of thumb for premultiplied pixmaps is that the color - values of a pixel can never be higher than the alpha values, so - we use this to our advantage here, and fix all instances where - this occures. -*/ -bool QWindowsXPStylePrivate::fixAlphaChannel(const QRect &rect) -{ - const int startX = rect.left(); - const int startY = rect.top(); - const int w = rect.width(); - const int h = rect.height(); - bool hasFixedAlphaValue = false; - - for (int y = startY; y < h; ++y) { - auto buffer = reinterpret_cast(bufferPixels) + (y * bufferW); - for (int x = startX; x < w; ++x, ++buffer) { - uint pixel = *buffer; - int alpha = qAlpha(pixel); - if (qRed(pixel) > alpha || qGreen(pixel) > alpha || qBlue(pixel) > alpha) { - *buffer |= 0xff000000; - hasFixedAlphaValue = true; - } - } - } - return hasFixedAlphaValue; -} - -/*! \internal - Swaps the alpha values on certain pixels: - 0xFF?????? -> 0x00?????? - 0x00?????? -> 0xFF?????? - Used to determin the mask of a non-alpha transparent pixmap in - the native doublebuffer, and swap the alphas so we may paint - the image as a Premultiplied QImage with drawImage(), and obtain - the mask transparency. -*/ -bool QWindowsXPStylePrivate::swapAlphaChannel(const QRect &rect, bool allPixels) -{ - const int startX = rect.left(); - const int startY = rect.top(); - const int w = rect.width(); - const int h = rect.height(); - bool valueChange = false; - - // Flip the alphas, so that 255-alpha pixels are 0, and 0-alpha are 255. - for (int y = startY; y < h; ++y) { - auto buffer = reinterpret_cast(bufferPixels) + (y * bufferW); - for (int x = startX; x < w; ++x, ++buffer) { - if (allPixels) { - *buffer |= 0xFF000000; - continue; - } - unsigned int alphaValue = (*buffer) & 0xFF000000; - if (alphaValue == 0xFF000000) { - *buffer = 0; - valueChange = true; - } else if (alphaValue == 0) { - *buffer |= 0xFF000000; - valueChange = true; - } - } - } - return valueChange; -} - -enum TransformType { SimpleTransform, HighDpiScalingTransform, ComplexTransform }; - -static inline TransformType transformType(const QTransform &transform, qreal devicePixelRatio) -{ - if (transform.type() <= QTransform::TxTranslate) - return SimpleTransform; - if (transform.type() > QTransform::TxScale) - return ComplexTransform; - return qFuzzyCompare(transform.m11(), devicePixelRatio) - && qFuzzyCompare(transform.m22(), devicePixelRatio) - ? HighDpiScalingTransform : ComplexTransform; -} - -// QTBUG-60571: Exclude known fully opaque theme parts which produce values -// invalid in ARGB32_Premultiplied (for example, 0x00ffffff). -static inline bool isFullyOpaque(const XPThemeData &themeData) -{ - return themeData.theme == QWindowsXPStylePrivate::TaskDialogTheme && themeData.partId == TDLG_PRIMARYPANEL; -} - -/*! \internal - Main theme drawing function. - Determines the correct lowlevel drawing method depending on several - factors. - Use drawBackgroundThruNativeBuffer() if: - - Painter does not have an HDC - - Theme part is flipped (mirrored horizontally) - else use drawBackgroundDirectly(). - \note drawBackgroundThruNativeBuffer() can return false for large - sizes due to buffer()/CreateDIBSection() failing. -*/ -bool QWindowsXPStylePrivate::drawBackground(XPThemeData &themeData, qreal correctionFactor) -{ - if (themeData.rect.isEmpty()) - return true; - - QPainter *painter = themeData.painter; - Q_ASSERT_X(painter != nullptr, "QWindowsXPStylePrivate::drawBackground()", "Trying to draw a theme part without a painter"); - if (!painter || !painter->isActive()) - return false; - - painter->save(); - - // Access paintDevice via engine since the painter may - // return the clip device which can still be a widget device in case of grabWidget(). - - //bool translucentToplevel = false; - //const QPaintDevice *paintDevice = painter->device(); - const qreal additionalDevicePixelRatio = themeData.window ? themeData.window->devicePixelRatio() : qreal(1); - Q_ASSERT(painter->device()->devType() != QInternal::Widget); -/* - if (paintDevice->devType() == QInternal::Widget) { - const QWidget *window = static_cast(paintDevice)->window(); - translucentToplevel = window->testAttribute(Qt::WA_TranslucentBackground); - } - - const TransformType tt = transformType(painter->deviceTransform(), aditionalDevicePixelRatio); - - bool canDrawDirectly = false; - if (themeData.widget && painter->opacity() == 1.0 && !themeData.rotate - && !isFullyOpaque(themeData) - && tt != ComplexTransform && !themeData.mirrorVertically - && !translucentToplevel) { - // Draw on backing store DC only for real widgets or backing store images. - const QPaintDevice *enginePaintDevice = painter->paintEngine()->paintDevice(); - switch (enginePaintDevice->devType()) { - case QInternal::Widget: - canDrawDirectly = true; - break; - case QInternal::Image: - // Ensure the backing store has received as resize and is initialized. - if (QBackingStore *bs = backingStoreForWidget(themeData.widget)) - if (bs->size().isValid() && bs->paintDevice() == enginePaintDevice) - canDrawDirectly = true; - } - } - - const HDC dc = canDrawDirectly ? hdcForWidgetBackingStore(themeData.widget) : nullptr; - const bool result = dc && qFuzzyCompare(correctionFactor, qreal(1)) - ? drawBackgroundDirectly(dc, themeData, aditionalDevicePixelRatio) - : drawBackgroundThruNativeBuffer(themeData, aditionalDevicePixelRatio, correctionFactor); - */ - const bool result = drawBackgroundThruNativeBuffer(themeData, additionalDevicePixelRatio, correctionFactor); - painter->restore(); - return result; -} - -static inline QRectF scaleRect(const QRectF &r, qreal factor) -{ - return r.isValid() && factor > 1 - ? QRectF(r.topLeft() * factor, r.size() * factor) - : r; -} - -static QRegion scaleRegion(const QRegion ®ion, qreal factor) -{ - if (region.isEmpty() || qFuzzyCompare(factor, qreal(1))) - return region; - QRegion result; - for (const QRect &rect : region) - result += QRectF(QPointF(rect.topLeft()) * factor, QSizeF(rect.size() * factor)).toRect(); - return result; -} - -/*! \internal - This function draws the theme parts directly to the paintengines HDC. - Do not use this if you need to perform other transformations on the - resulting data. -*/ -bool QWindowsXPStylePrivate::drawBackgroundDirectly(HDC dc, XPThemeData &themeData, qreal additionalDevicePixelRatio) -{ - QPainter *painter = themeData.painter; - - const auto &deviceTransform = painter->deviceTransform(); - const QPointF redirectionDelta(deviceTransform.dx(), deviceTransform.dy()); - const QRect area = scaleRect(QRectF(themeData.rect), additionalDevicePixelRatio).translated(redirectionDelta).toRect(); - - QRegion sysRgn = painter->paintEngine()->systemClip(); - if (sysRgn.isEmpty()) - sysRgn = area; - else - sysRgn &= area; - if (painter->hasClipping()) - sysRgn &= scaleRegion(painter->clipRegion(), additionalDevicePixelRatio).translated(redirectionDelta.toPoint()); - HRGN hrgn = qt_hrgn_from_qregion(sysRgn); - SelectClipRgn(dc, hrgn); - -#ifdef DEBUG_XP_STYLE - printf("---[ DIRECT PAINTING ]------------------> Name(%-10s) Part(%d) State(%d)\n", - qPrintable(themeData.name), themeData.partId, themeData.stateId); - showProperties(themeData); -#endif - - RECT drawRECT = themeData.toRECT(area); - DTBGOPTS drawOptions; - memset(&drawOptions, 0, sizeof(drawOptions)); - drawOptions.dwSize = sizeof(drawOptions); - drawOptions.rcClip = themeData.toRECT(sysRgn.boundingRect()); - drawOptions.dwFlags = DTBG_CLIPRECT - | (themeData.noBorder ? DTBG_OMITBORDER : 0) - | (themeData.noContent ? DTBG_OMITCONTENT : 0) - | (themeData.mirrorHorizontally ? DTBG_MIRRORDC : 0); - - const HRESULT result = DrawThemeBackgroundEx(themeData.handle(), dc, themeData.partId, themeData.stateId, &(drawRECT), &drawOptions); - SelectClipRgn(dc, nullptr); - DeleteObject(hrgn); - return SUCCEEDED(result); -} - -/*! \internal - This function uses a secondary Native doublebuffer for painting parts. - It should only be used when the painteengine doesn't provide a proper - HDC for direct painting (e.g. when doing a grabWidget(), painting to - other pixmaps etc), or when special transformations are needed (e.g. - flips (horizonal mirroring only, vertical are handled by the theme - engine). - - \a correctionFactor is an additional factor used to scale up controls - that are too small on High DPI screens, as has been observed for - WP_MDICLOSEBUTTON, WP_MDIRESTOREBUTTON, WP_MDIMINBUTTON (QTBUG-75927). -*/ -bool QWindowsXPStylePrivate::drawBackgroundThruNativeBuffer(XPThemeData &themeData, - qreal additionalDevicePixelRatio, - qreal correctionFactor) -{ - QPainter *painter = themeData.painter; - QRectF rectF = scaleRect(QRectF(themeData.rect), additionalDevicePixelRatio); - - if ((themeData.rotate + 90) % 180 == 0) { // Catch 90,270,etc.. degree flips. - rectF = QRectF(0, 0, rectF.height(), rectF.width()); - } - rectF.moveTo(0, 0); - - const bool hasCorrectionFactor = !qFuzzyCompare(correctionFactor, qreal(1)); - QRect rect = rectF.toRect(); - QRect drawRect = hasCorrectionFactor - ? QRectF(rectF.topLeft() / correctionFactor, rectF.size() / correctionFactor).toRect() : rect; - int partId = themeData.partId; - int stateId = themeData.stateId; - int w = rect.width(); - int h = rect.height(); - - // Values initialized later, either from cached values, or from function calls - AlphaChannelType alphaType = UnknownAlpha; - bool stateHasData = true; // We assume so; - bool hasAlpha = false; - bool partIsTransparent; - bool potentialInvalidAlpha; - - QString pixmapCacheKey = QStringLiteral("$qt_xp_"); - pixmapCacheKey.append(themeName(themeData.theme)); - pixmapCacheKey.append(QLatin1Char('p')); - pixmapCacheKey.append(QString::number(partId)); - pixmapCacheKey.append(QLatin1Char('s')); - pixmapCacheKey.append(QString::number(stateId)); - pixmapCacheKey.append(QLatin1Char('s')); - pixmapCacheKey.append(themeData.noBorder ? QLatin1Char('0') : QLatin1Char('1')); - pixmapCacheKey.append(QLatin1Char('b')); - pixmapCacheKey.append(themeData.noContent ? QLatin1Char('0') : QLatin1Char('1')); - pixmapCacheKey.append(QString::number(w)); - pixmapCacheKey.append(QLatin1Char('w')); - pixmapCacheKey.append(QString::number(h)); - pixmapCacheKey.append(QLatin1Char('h')); - pixmapCacheKey.append(QString::number(additionalDevicePixelRatio)); - pixmapCacheKey.append(QLatin1Char('d')); - if (hasCorrectionFactor) { - pixmapCacheKey.append(QLatin1Char('c')); - pixmapCacheKey.append(QString::number(correctionFactor)); - } - - QPixmap cachedPixmap; - ThemeMapKey key(themeData); - ThemeMapData data = alphaCache.value(key); - - bool haveCachedPixmap = false; - bool isCached = data.dataValid; - if (isCached) { - partIsTransparent = data.partIsTransparent; - hasAlpha = data.hasAlphaChannel; - alphaType = data.alphaType; - potentialInvalidAlpha = data.hadInvalidAlpha; - - haveCachedPixmap = QPixmapCache::find(pixmapCacheKey, &cachedPixmap); - -#ifdef DEBUG_XP_STYLE - char buf[25]; - ::sprintf(buf, "+ Pixmap(%3d, %3d) ]", w, h); - printf("---[ CACHED %s--------> Name(%-10s) Part(%d) State(%d)\n", - haveCachedPixmap ? buf : "]-------------------", - qPrintable(themeData.name), themeData.partId, themeData.stateId); -#endif - } else { - // Not cached, so get values from Theme Engine - BOOL tmt_borderonly = false; - COLORREF tmt_transparentcolor = 0x0; - PROPERTYORIGIN proporigin = PO_NOTFOUND; - GetThemeBool(themeData.handle(), themeData.partId, themeData.stateId, TMT_BORDERONLY, &tmt_borderonly); - GetThemeColor(themeData.handle(), themeData.partId, themeData.stateId, TMT_TRANSPARENTCOLOR, &tmt_transparentcolor); - GetThemePropertyOrigin(themeData.handle(), themeData.partId, themeData.stateId, TMT_CAPTIONMARGINS, &proporigin); - - partIsTransparent = isTransparent(themeData); - - potentialInvalidAlpha = false; - GetThemePropertyOrigin(themeData.handle(), themeData.partId, themeData.stateId, TMT_GLYPHTYPE, &proporigin); - if (proporigin == PO_PART || proporigin == PO_STATE) { - int tmt_glyphtype = GT_NONE; - GetThemeEnumValue(themeData.handle(), themeData.partId, themeData.stateId, TMT_GLYPHTYPE, &tmt_glyphtype); - potentialInvalidAlpha = partIsTransparent && tmt_glyphtype == GT_IMAGEGLYPH; - } - -#ifdef DEBUG_XP_STYLE - printf("---[ NOT CACHED ]-----------------------> Name(%-10s) Part(%d) State(%d)\n", - qPrintable(themeData.name), themeData.partId, themeData.stateId); - printf("-->partIsTransparen = %d\n", partIsTransparent); - printf("-->potentialInvalidAlpha = %d\n", potentialInvalidAlpha); - showProperties(themeData); -#endif - } - bool wasAlphaSwapped = false; - bool wasAlphaFixed = false; - - // OLD PSDK Workaround ------------------------------------------------------------------------ - // See if we need extra clipping for the older PSDK, which does - // not have a DrawThemeBackgroundEx function for DTGB_OMITBORDER - // and DTGB_OMITCONTENT - bool addBorderContentClipping = false; - QRegion extraClip; - QRect area = drawRect; - if (themeData.noBorder || themeData.noContent) { - extraClip = area; - // We are running on a system where the uxtheme.dll does not have - // the DrawThemeBackgroundEx function, so we need to clip away - // borders or contents manually. - - int borderSize = 0; - PROPERTYORIGIN origin = PO_NOTFOUND; - GetThemePropertyOrigin(themeData.handle(), themeData.partId, themeData.stateId, TMT_BORDERSIZE, &origin); - GetThemeInt(themeData.handle(), themeData.partId, themeData.stateId, TMT_BORDERSIZE, &borderSize); - borderSize *= additionalDevicePixelRatio; - - // Clip away border region - if ((origin == PO_CLASS || origin == PO_PART || origin == PO_STATE) && borderSize > 0) { - if (themeData.noBorder) { - extraClip &= area; - area = area.adjusted(-borderSize, -borderSize, borderSize, borderSize); - } - - // Clip away content region - if (themeData.noContent) { - QRegion content = area.adjusted(borderSize, borderSize, -borderSize, -borderSize); - extraClip ^= content; - } - } - addBorderContentClipping = (themeData.noBorder | themeData.noContent); - } - - QImage img; - if (!haveCachedPixmap) { // If the pixmap is not cached, generate it! ------------------------- - if (!buffer(drawRect.width(), drawRect.height())) // Ensure a buffer of at least (w, h) in size - return false; - HDC dc = bufferHDC(); - - // Clear the buffer - if (alphaType != NoAlpha) { - // Consider have separate "memset" function for small chunks for more speedup - memset(bufferPixels, 0x00, bufferW * drawRect.height() * 4); - } - - // Difference between area and rect - int dx = area.x() - drawRect.x(); - int dy = area.y() - drawRect.y(); - - // Adjust so painting rect starts from Origo - rect.moveTo(0,0); - area.moveTo(dx,dy); - DTBGOPTS drawOptions; - drawOptions.dwSize = sizeof(drawOptions); - drawOptions.rcClip = themeData.toRECT(rect); - drawOptions.dwFlags = DTBG_CLIPRECT - | (themeData.noBorder ? DTBG_OMITBORDER : 0) - | (themeData.noContent ? DTBG_OMITCONTENT : 0); - - // Drawing the part into the backing store - RECT wRect(themeData.toRECT(area)); - DrawThemeBackgroundEx(themeData.handle(), dc, themeData.partId, themeData.stateId, &wRect, &drawOptions); - - // If not cached, analyze the buffer data to figure - // out alpha type, and if it contains data - if (!isCached) { - // SHORTCUT: If the part's state has no data, cache it for NOOP later - if (!stateHasData) { - memset(static_cast(&data), 0, sizeof(data)); - data.dataValid = true; - alphaCache.insert(key, data); - return true; - } - hasAlpha = hasAlphaChannel(rect); - if (!hasAlpha && partIsTransparent) - potentialInvalidAlpha = true; -#if defined(DEBUG_XP_STYLE) && 1 - dumpNativeDIB(drawRect.width(), drawRect.height()); -#endif - } - - // Fix alpha values, if needed - if (potentialInvalidAlpha) - wasAlphaFixed = fixAlphaChannel(drawRect); - - QImage::Format format; - if ((partIsTransparent && !wasAlphaSwapped) || (!partIsTransparent && hasAlpha)) { - format = QImage::Format_ARGB32_Premultiplied; - alphaType = RealAlpha; - } else if (wasAlphaSwapped) { - format = QImage::Format_ARGB32_Premultiplied; - alphaType = MaskAlpha; - } else { - format = QImage::Format_RGB32; - // The image data we got from the theme engine does not have any transparency, - // thus the alpha channel is set to 0. - // However, Format_RGB32 requires the alpha part to be set to 0xff, thus - // we must flip it from 0x00 to 0xff - swapAlphaChannel(rect, true); - alphaType = NoAlpha; - } -#if defined(DEBUG_XP_STYLE) && 1 - printf("Image format is: %s\n", alphaType == RealAlpha ? "Real Alpha" : alphaType == MaskAlpha ? "Masked Alpha" : "No Alpha"); -#endif - img = QImage(bufferPixels, bufferW, bufferH, format); - if (hasCorrectionFactor) - img = img.scaled(w, h, Qt::KeepAspectRatio, Qt::SmoothTransformation); - img.setDevicePixelRatio(additionalDevicePixelRatio); - } - - // Blitting backing store - bool useRegion = partIsTransparent && !hasAlpha && !wasAlphaSwapped; - - QRegion newRegion; - QRegion oldRegion; - if (useRegion) { - newRegion = region(themeData); - oldRegion = painter->clipRegion(); - painter->setClipRegion(newRegion); -#if defined(DEBUG_XP_STYLE) && 0 - printf("Using region:\n"); - for (const QRect &r : newRegion) - printf(" (%d, %d, %d, %d)\n", r.x(), r.y(), r.right(), r.bottom()); -#endif - } - - if (addBorderContentClipping) - painter->setClipRegion(scaleRegion(extraClip, 1.0 / additionalDevicePixelRatio), Qt::IntersectClip); - - if (!themeData.mirrorHorizontally && !themeData.mirrorVertically && !themeData.rotate) { - if (!haveCachedPixmap) - painter->drawImage(themeData.rect, img, rect); - else - painter->drawPixmap(themeData.rect, cachedPixmap); - } else { - // This is _slow_! - // Make a copy containing only the necessary data, and mirror - // on all wanted axes. Then draw the copy. - // If cached, the normal pixmap is cached, instead of caching - // all possible orientations for each part and state. - QImage imgCopy; - if (!haveCachedPixmap) - imgCopy = img.copy(rect); - else - imgCopy = cachedPixmap.toImage(); - - if (themeData.rotate) { - QTransform rotMatrix; - rotMatrix.rotate(themeData.rotate); - imgCopy = imgCopy.transformed(rotMatrix); - } - if (themeData.mirrorHorizontally || themeData.mirrorVertically) { - imgCopy = imgCopy.mirrored(themeData.mirrorHorizontally, themeData.mirrorVertically); - } - painter->drawImage(themeData.rect, - imgCopy); - } - - if (useRegion || addBorderContentClipping) { - if (oldRegion.isEmpty()) - painter->setClipping(false); - else - painter->setClipRegion(oldRegion); - } - - // Cache the pixmap to avoid expensive swapAlphaChannel() calls - if (!haveCachedPixmap && w && h) { - QPixmap pix = QPixmap::fromImage(img).copy(rect); - QPixmapCache::insert(pixmapCacheKey, pix); -#ifdef DEBUG_XP_STYLE - printf("+++Adding pixmap to cache, size(%d, %d), wasAlphaSwapped(%d), wasAlphaFixed(%d), name(%s)\n", - w, h, wasAlphaSwapped, wasAlphaFixed, qPrintable(pixmapCacheKey)); -#endif - } - - // Add to theme part cache - if (!isCached) { - memset(static_cast(&data), 0, sizeof(data)); - data.dataValid = true; - data.partIsTransparent = partIsTransparent; - data.alphaType = alphaType; - data.hasAlphaChannel = hasAlpha; - data.wasAlphaSwapped = wasAlphaSwapped; - data.hadInvalidAlpha = wasAlphaFixed; - alphaCache.insert(key, data); - } - return true; -} - - -// ------------------------------------------------------------------------------------------------ - -/*! - \class QWindowsXPStyle - \brief The QWindowsXPStyle class provides a Microsoft Windows XP-like look and feel. - - \ingroup appearance - \inmodule QtWidgets - \internal - - \warning This style is only available on the Windows XP platform - because it makes use of Windows XP's style engine. - - Most of the functions are documented in the base classes - QWindowsStyle, QCommonStyle, and QStyle, but the - QWindowsXPStyle overloads of drawComplexControl(), drawControl(), - drawControlMask(), drawPrimitive(), proxy()->subControlRect(), and - sizeFromContents(), are documented here. - - \image qwindowsxpstyle.png - \sa QMacStyle, QWindowsStyle, QFusionStyle -*/ - -/*! - Constructs a QWindowsStyle -*/ -QWindowsXPStyle::QWindowsXPStyle() - : QWindowsStyle(*new QWindowsXPStylePrivate) -{ -} - -/*! - Destroys the style. -*/ -QWindowsXPStyle::~QWindowsXPStyle() = default; - -/*! \reimp */ -QRect QWindowsXPStyle::subElementRect(SubElement sr, const QStyleOption *option) const -{ - if (!QWindowsXPStylePrivate::useXP()) { - return QWindowsStyle::subElementRect(sr, option); - } - - QRect rect(option->rect); - switch (sr) { - case SE_DockWidgetCloseButton: - case SE_DockWidgetFloatButton: - rect = QWindowsStyle::subElementRect(sr, option); - return rect.translated(0, 1); - break; -#if 0 - case SE_TabWidgetTabContents: - if (qstyleoption_cast(option)) - { - rect = QWindowsStyle::subElementRect(sr, option); - if (sr == SE_TabWidgetTabContents) { - if (const QTabWidget *tabWidget = qobject_cast(widget)) { - if (tabWidget->documentMode()) - break; - } - - rect.adjust(0, 0, -2, -2); - } - } - break; - case SE_TabWidgetTabBar: { - rect = QWindowsStyle::subElementRect(sr, option); - const QStyleOptionTabWidgetFrame *twfOption = - qstyleoption_cast(option); - if (twfOption && twfOption->direction == Qt::RightToLeft - && (twfOption->shape == QTabBar::RoundedNorth - || twfOption->shape == QTabBar::RoundedSouth)) - { - QStyleOptionTab otherOption; - otherOption.shape = (twfOption->shape == QTabBar::RoundedNorth - ? QTabBar::RoundedEast : QTabBar::RoundedSouth); - int overlap = proxy()->pixelMetric(PM_TabBarBaseOverlap, &otherOption); - int borderThickness = proxy()->pixelMetric(PM_DefaultFrameWidth, option); - rect.adjust(-overlap + borderThickness, 0, -overlap + borderThickness, 0); - } - break;} -#endif - case SE_PushButtonContents: - if (const QStyleOptionButton *btn = qstyleoption_cast(option)) { - MARGINS borderSize; - if (option->window) { - XPThemeData buttontheme(option->window, nullptr, QWindowsXPStylePrivate::ButtonTheme); - HTHEME theme = buttontheme.handle(); - if (theme) { - int stateId; - if (!(option->state & State_Enabled)) - stateId = PBS_DISABLED; - else if (option->state & State_Sunken) - stateId = PBS_PRESSED; - else if (option->state & State_MouseOver) - stateId = PBS_HOT; - else if (btn->features & QStyleOptionButton::DefaultButton) - stateId = PBS_DEFAULTED; - else - stateId = PBS_NORMAL; - - int border = proxy()->pixelMetric(PM_DefaultFrameWidth, btn); - rect = option->rect.adjusted(border, border, -border, -border); - - if (SUCCEEDED(GetThemeMargins(theme, nullptr, BP_PUSHBUTTON, stateId, TMT_CONTENTMARGINS, nullptr, &borderSize))) { - rect.adjust(borderSize.cxLeftWidth, borderSize.cyTopHeight, - -borderSize.cxRightWidth, -borderSize.cyBottomHeight); - rect = visualRect(option->direction, option->rect, rect); - } - } - } - } - break; - case SE_ProgressBarContents: - rect = QCommonStyle::subElementRect(SE_ProgressBarGroove, option); - if (option->state & QStyle::State_Horizontal) - rect.adjust(4, 3, -4, -3); - else - rect.adjust(3, 2, -3, -2); - break; - default: - rect = QWindowsStyle::subElementRect(sr, option); - } - return rect; -} - -/*! - \reimp -*/ -void QWindowsXPStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *option, QPainter *p) const -{ - QWindowsXPStylePrivate *d = const_cast(d_func()); - - if (!QWindowsXPStylePrivate::useXP()) { - QWindowsStyle::drawPrimitive(pe, option, p); - return; - } - - int themeNumber = -1; - int partId = 0; - int stateId = 0; - QRect rect = option->rect; - State flags = option->state; - bool hMirrored = false; - bool vMirrored = false; - bool noBorder = false; - bool noContent = false; - int rotate = 0; - - switch (pe) { -#if 0 - case PE_FrameTabBarBase: - if (const QStyleOptionTabBarBase *tbb - = qstyleoption_cast(option)) { - p->save(); - switch (tbb->shape) { - case QTabBar::RoundedNorth: - p->setPen(QPen(tbb->palette.dark(), 0)); - p->drawLine(tbb->rect.topLeft(), tbb->rect.topRight()); - break; - case QTabBar::RoundedWest: - p->setPen(QPen(tbb->palette.dark(), 0)); - p->drawLine(tbb->rect.left(), tbb->rect.top(), tbb->rect.left(), tbb->rect.bottom()); - break; - case QTabBar::RoundedSouth: - p->setPen(QPen(tbb->palette.dark(), 0)); - p->drawLine(tbb->rect.left(), tbb->rect.top(), - tbb->rect.right(), tbb->rect.top()); - break; - case QTabBar::RoundedEast: - p->setPen(QPen(tbb->palette.dark(), 0)); - p->drawLine(tbb->rect.topLeft(), tbb->rect.bottomLeft()); - break; - case QTabBar::TriangularNorth: - case QTabBar::TriangularEast: - case QTabBar::TriangularWest: - case QTabBar::TriangularSouth: - p->restore(); - QWindowsStyle::drawPrimitive(pe, option, p); - return; - } - p->restore(); - } - return; -#endif - case PE_PanelButtonBevel: - themeNumber = QWindowsXPStylePrivate::ButtonTheme; - partId = BP_PUSHBUTTON; - if (!(flags & State_Enabled)) - stateId = PBS_DISABLED; - else if ((flags & State_Sunken) || (flags & State_On)) - stateId = PBS_PRESSED; - else if (flags & State_MouseOver) - stateId = PBS_HOT; - //else if (flags & State_ButtonDefault) - // stateId = PBS_DEFAULTED; - else - stateId = PBS_NORMAL; - break; - - case PE_PanelButtonTool: -// if (widget && widget->inherits("QDockWidgetTitleButton")) { -// if (const QWidget *dw = widget->parentWidget()) -// if (dw->isWindow()) -// return; -// } - themeNumber = QWindowsXPStylePrivate::ToolBarTheme; - partId = TP_BUTTON; - if (!(flags & State_Enabled)) - stateId = TS_DISABLED; - else if (flags & State_Sunken) - stateId = TS_PRESSED; - else if (flags & State_MouseOver) - stateId = flags & State_On ? TS_HOTCHECKED : TS_HOT; - else if (flags & State_On) - stateId = TS_CHECKED; - else if (!(flags & State_AutoRaise)) - stateId = TS_HOT; - else - stateId = TS_NORMAL; - break; - - case PE_IndicatorButtonDropDown: - themeNumber = QWindowsXPStylePrivate::ToolBarTheme; - partId = TP_SPLITBUTTONDROPDOWN; - if (!(flags & State_Enabled)) - stateId = TS_DISABLED; - else if (flags & State_Sunken) - stateId = TS_PRESSED; - else if (flags & State_MouseOver) - stateId = flags & State_On ? TS_HOTCHECKED : TS_HOT; - else if (flags & State_On) - stateId = TS_CHECKED; - else if (!(flags & State_AutoRaise)) - stateId = TS_HOT; - else - stateId = TS_NORMAL; - if (option->direction == Qt::RightToLeft) - hMirrored = true; - break; - - case PE_IndicatorCheckBox: - themeNumber = QWindowsXPStylePrivate::ButtonTheme; - partId = BP_CHECKBOX; - if (!(flags & State_Enabled)) - stateId = CBS_UNCHECKEDDISABLED; - else if (flags & State_Sunken) - stateId = CBS_UNCHECKEDPRESSED; - else if (flags & State_MouseOver) - stateId = CBS_UNCHECKEDHOT; - else - stateId = CBS_UNCHECKEDNORMAL; - - if (flags & State_On) - stateId += CBS_CHECKEDNORMAL-1; - else if (flags & State_NoChange) - stateId += CBS_MIXEDNORMAL-1; - - break; - - case PE_IndicatorRadioButton: - themeNumber = QWindowsXPStylePrivate::ButtonTheme; - partId = BP_RADIOBUTTON; - if (!(flags & State_Enabled)) - stateId = RBS_UNCHECKEDDISABLED; - else if (flags & State_Sunken) - stateId = RBS_UNCHECKEDPRESSED; - else if (flags & State_MouseOver) - stateId = RBS_UNCHECKEDHOT; - else - stateId = RBS_UNCHECKEDNORMAL; - - if (flags & State_On) - stateId += RBS_CHECKEDNORMAL-1; - break; - - case PE_IndicatorDockWidgetResizeHandle: - return; - -case PE_Frame: - { - if (flags & State_Raised) - return; - themeNumber = QWindowsXPStylePrivate::ListViewTheme; - partId = LVP_LISTGROUP; - XPThemeData theme(option->window, nullptr, themeNumber, partId); - - if (!(flags & State_Enabled)) - stateId = ETS_DISABLED; - else - stateId = ETS_NORMAL; - int fillType; - if (GetThemeEnumValue(theme.handle(), partId, stateId, TMT_BGTYPE, &fillType) == S_OK) { - if (fillType == BT_BORDERFILL) { - COLORREF bcRef; - GetThemeColor(theme.handle(), partId, stateId, TMT_BORDERCOLOR, &bcRef); - QColor bordercolor(qRgb(GetRValue(bcRef), GetGValue(bcRef), GetBValue(bcRef))); - QPen oldPen = p->pen(); - // int borderSize = 1; - // GetThemeInt(theme.handle(), partId, stateId, TMT_BORDERCOLOR, &borderSize); - - // Inner white border - p->setPen(QPen(option->palette.base().color(), 0)); - const qreal dpi = QStyleHelper::dpi(option); - const auto topLevelAdjustment = QStyleHelper::dpiScaled(0.5, dpi); - const auto bottomRightAdjustment = QStyleHelper::dpiScaled(-1, dpi); - p->drawRect(QRectF(option->rect).adjusted(topLevelAdjustment, topLevelAdjustment, - bottomRightAdjustment, bottomRightAdjustment)); - // Outer dark border - p->setPen(QPen(bordercolor, 0)); - p->drawRect(QRectF(option->rect).adjusted(0, 0, -topLevelAdjustment, -topLevelAdjustment)); - p->setPen(oldPen); - return; - } - if (fillType == BT_NONE) - return; - } - break; - } - case PE_FrameLineEdit: { - // we try to check if this lineedit is a delegate on a QAbstractItemView-derived class. - /* - if (QWindowsXPStylePrivate::isItemViewDelegateLineEdit(widget)) { - QPen oldPen = p->pen(); - // Inner white border - p->setPen(QPen(option->palette.base().color(), 1)); - p->drawRect(option->rect.adjusted(1, 1, -2, -2)); - // Outer dark border - p->setPen(QPen(option->palette.shadow().color(), 1)); - p->drawRect(option->rect.adjusted(0, 0, -1, -1)); - p->setPen(oldPen); - return; - } - */ - if (qstyleoption_cast(option)) { - themeNumber = QWindowsXPStylePrivate::EditTheme; - partId = EP_EDITTEXT; - noContent = true; - if (!(flags & State_Enabled)) - stateId = ETS_DISABLED; - else - stateId = ETS_NORMAL; - } - break; - } - - case PE_PanelLineEdit: - if (const QStyleOptionFrame *panel = qstyleoption_cast(option)) { - themeNumber = QWindowsXPStylePrivate::EditTheme; - partId = EP_EDITTEXT; - noBorder = true; - bool isEnabled = flags & State_Enabled; - - stateId = isEnabled ? ETS_NORMAL : ETS_DISABLED; - - /*if (QWindowsXPStylePrivate::isLineEditBaseColorSet(option, widget)) { - p->fillRect(panel->rect, panel->palette.brush(QPalette::Base)); - } else*/ { - XPThemeData theme(nullptr, p, themeNumber, partId, stateId, rect); - if (!theme.isValid()) { - QWindowsStyle::drawPrimitive(pe, option, p); - return; - } - int bgType; - GetThemeEnumValue(theme.handle(), partId, stateId, TMT_BGTYPE, &bgType); - if ( bgType == BT_IMAGEFILE ) { - theme.mirrorHorizontally = hMirrored; - theme.mirrorVertically = vMirrored; - theme.noBorder = noBorder; - theme.noContent = noContent; - theme.rotate = rotate; - d->drawBackground(theme); - } else { - QBrush fillColor = option->palette.brush(QPalette::Base); - - if (!isEnabled) { - PROPERTYORIGIN origin = PO_NOTFOUND; - GetThemePropertyOrigin(theme.handle(), theme.partId, theme.stateId, TMT_FILLCOLOR, &origin); - // Use only if the fill property comes from our part - if ((origin == PO_PART || origin == PO_STATE)) { - COLORREF bgRef; - GetThemeColor(theme.handle(), partId, stateId, TMT_FILLCOLOR, &bgRef); - fillColor = QBrush(qRgb(GetRValue(bgRef), GetGValue(bgRef), GetBValue(bgRef))); - } - } - p->fillRect(option->rect, fillColor); - } - } - - if (panel->lineWidth > 0) - proxy()->drawPrimitive(PE_FrameLineEdit, panel, p); - return; - } - break; -#if 0 - case PE_FrameTabWidget: - if (const QStyleOptionTabWidgetFrame *tab = qstyleoption_cast(option)) - { - themeNumber = QWindowsXPStylePrivate::TabTheme; - partId = TABP_PANE; - - if (option->window) { - bool useGradient = true; - const int maxlength = 256; - wchar_t themeFileName[maxlength]; - wchar_t themeColor[maxlength]; - // Due to a a scaling issue with the XP Silver theme, tab gradients are not used with it - if (GetCurrentThemeName(themeFileName, maxlength, themeColor, maxlength, nullptr, 0) == S_OK) { - wchar_t *offset = nullptr; - if ((offset = wcsrchr(themeFileName, QChar(QLatin1Char('\\')).unicode())) != nullptr) { - offset++; - if (!lstrcmp(offset, L"Luna.msstyles") && !lstrcmp(offset, L"Metallic")) { - useGradient = false; - } - } - } - // This should work, but currently there's an error in the ::drawBackgroundDirectly() - // code, when using the HDC directly.. - if (useGradient) { - QStyleOptionTabWidgetFrame frameOpt = *tab; - //frameOpt.rect = widget->rect(); - - QRect contentsRect = subElementRect(SE_TabWidgetTabContents, &frameOpt); - QRegion reg = option->rect; - reg -= contentsRect; - p->setClipRegion(reg); - XPThemeData theme(option->window, p, themeNumber, partId, stateId, rect); - theme.mirrorHorizontally = hMirrored; - theme.mirrorVertically = vMirrored; - d->drawBackground(theme); - p->setClipRect(contentsRect); - partId = TABP_BODY; - } - } - switch (tab->shape) { - case QTabBar::RoundedNorth: - case QTabBar::TriangularNorth: - break; - case QTabBar::RoundedSouth: - case QTabBar::TriangularSouth: - vMirrored = true; - break; - case QTabBar::RoundedEast: - case QTabBar::TriangularEast: - rotate = 90; - break; - case QTabBar::RoundedWest: - case QTabBar::TriangularWest: - rotate = 90; - hMirrored = true; - break; - default: - break; - } - } - break; -#endif - case PE_FrameMenu: - p->save(); - p->setPen(option->palette.dark().color()); - p->drawRect(rect.adjusted(0, 0, -1, -1)); - p->restore(); - return; - - case PE_PanelMenuBar: - break; - - case PE_FrameDockWidget: - if (const QStyleOptionFrame *frm = qstyleoption_cast(option)) - { - themeNumber = QWindowsXPStylePrivate::WindowTheme; - if (flags & State_Active) - stateId = FS_ACTIVE; - else - stateId = FS_INACTIVE; - - int fwidth = proxy()->pixelMetric(PM_DockWidgetFrameWidth, frm); - - XPThemeData theme(option->window, p, themeNumber, 0, stateId); - if (!theme.isValid()) - break; - theme.rect = QRect(frm->rect.x(), frm->rect.y(), frm->rect.x()+fwidth, frm->rect.height()-fwidth); theme.partId = WP_SMALLFRAMELEFT; - d->drawBackground(theme); - theme.rect = QRect(frm->rect.width()-fwidth, frm->rect.y(), fwidth, frm->rect.height()-fwidth); - theme.partId = WP_SMALLFRAMERIGHT; - d->drawBackground(theme); - theme.rect = QRect(frm->rect.x(), frm->rect.bottom()-fwidth+1, frm->rect.width(), fwidth); - theme.partId = WP_SMALLFRAMEBOTTOM; - d->drawBackground(theme); - return; - } - break; - - case PE_IndicatorHeaderArrow: - { -#if 0 // XP theme engine doesn't know about this :( - name = QWindowsXPStylePrivate::HeaderTheme; - partId = HP_HEADERSORTARROW; - if (flags & State_Down) - stateId = HSAS_SORTEDDOWN; - else - stateId = HSAS_SORTEDUP; -#else - if (const QStyleOptionHeader *header = qstyleoption_cast(option)) { - p->save(); - p->setPen(option->palette.dark().color()); - p->translate(0, option->rect.height()/2 - 4); - if (header->sortIndicator & QStyleOptionHeader::SortUp) { // invert logic to follow Windows style guide - p->drawLine(option->rect.x(), option->rect.y(), option->rect.x()+8, option->rect.y()); - p->drawLine(option->rect.x()+1, option->rect.y()+1, option->rect.x()+7, option->rect.y()+1); - p->drawLine(option->rect.x()+2, option->rect.y()+2, option->rect.x()+6, option->rect.y()+2); - p->drawLine(option->rect.x()+3, option->rect.y()+3, option->rect.x()+5, option->rect.y()+3); - p->drawPoint(option->rect.x()+4, option->rect.y()+4); - } else if (header->sortIndicator & QStyleOptionHeader::SortDown) { - p->drawLine(option->rect.x(), option->rect.y()+4, option->rect.x()+8, option->rect.y()+4); - p->drawLine(option->rect.x()+1, option->rect.y()+3, option->rect.x()+7, option->rect.y()+3); - p->drawLine(option->rect.x()+2, option->rect.y()+2, option->rect.x()+6, option->rect.y()+2); - p->drawLine(option->rect.x()+3, option->rect.y()+1, option->rect.x()+5, option->rect.y()+1); - p->drawPoint(option->rect.x()+4, option->rect.y()); - } - p->restore(); - return; - } -#endif - } - break; - - case PE_FrameStatusBarItem: - themeNumber = QWindowsXPStylePrivate::StatusTheme; - partId = SP_PANE; - break; - - case PE_FrameGroupBox: - themeNumber = QWindowsXPStylePrivate::ButtonTheme; - partId = BP_GROUPBOX; - if (!(flags & State_Enabled)) - stateId = GBS_DISABLED; - else - stateId = GBS_NORMAL; - if (const QStyleOptionFrame *frame = qstyleoption_cast(option)) { - if (frame->features & QStyleOptionFrame::Flat) { - // Windows XP does not have a theme part for a flat GroupBox, paint it with the windows style - QRect fr = frame->rect; - QPoint p1(fr.x(), fr.y() + 1); - QPoint p2(fr.x() + fr.width(), p1.y() + 1); - rect = QRect(p1, p2); - themeNumber = -1; - } - } - break; - - case PE_IndicatorProgressChunk: - { - Qt::Orientation orient = Qt::Horizontal; - bool inverted = false; - if (const QStyleOptionProgressBar *pb = qstyleoption_cast(option)) { - orient = pb->state & QStyle::State_Horizontal ? Qt::Horizontal : Qt::Vertical; - inverted = pb->invertedAppearance; - } - if (orient == Qt::Horizontal) { - partId = PP_CHUNK; - rect = QRect(option->rect.x(), option->rect.y(), option->rect.width(), option->rect.height() ); - if (inverted && option->direction == Qt::LeftToRight) - hMirrored = true; - } else { - partId = PP_CHUNKVERT; - rect = QRect(option->rect.x(), option->rect.y(), option->rect.width(), option->rect.height()); - } - themeNumber = QWindowsXPStylePrivate::ProgressTheme; - stateId = 1; - } - break; - - case PE_FrameWindow: - if (const QStyleOptionFrame *frm = qstyleoption_cast(option)) - { - themeNumber = QWindowsXPStylePrivate::WindowTheme; - if (flags & State_Active) - stateId = FS_ACTIVE; - else - stateId = FS_INACTIVE; - - int fwidth = int((frm->lineWidth + frm->midLineWidth) / QWindowsStylePrivate::nativeMetricScaleFactor(option)); - - XPThemeData theme(option->window, p, themeNumber, 0, stateId); - if (!theme.isValid()) - break; - - // May fail due to too-large buffers for large widgets, fall back to Windows style. - theme.rect = QRect(option->rect.x(), option->rect.y()+fwidth, option->rect.x()+fwidth, option->rect.height()-fwidth); - theme.partId = WP_FRAMELEFT; - if (!d->drawBackground(theme)) { - QWindowsStyle::drawPrimitive(pe, option, p); - return; - } - theme.rect = QRect(option->rect.width()-fwidth, option->rect.y()+fwidth, fwidth, option->rect.height()-fwidth); - theme.partId = WP_FRAMERIGHT; - if (!d->drawBackground(theme)) { - QWindowsStyle::drawPrimitive(pe, option, p); - return; - } - theme.rect = QRect(option->rect.x(), option->rect.height()-fwidth, option->rect.width(), fwidth); - theme.partId = WP_FRAMEBOTTOM; - if (!d->drawBackground(theme)) { - QWindowsStyle::drawPrimitive(pe, option, p); - return; - } - theme.rect = QRect(option->rect.x(), option->rect.y(), option->rect.width(), option->rect.y()+fwidth); - theme.partId = WP_CAPTION; - if (!d->drawBackground(theme)) - QWindowsStyle::drawPrimitive(pe, option, p); - return; - } - break; - - case PE_IndicatorBranch: - { - static const int decoration_size = 9; - int mid_h = option->rect.x() + option->rect.width() / 2; - int mid_v = option->rect.y() + option->rect.height() / 2; - int bef_h = mid_h; - int bef_v = mid_v; - int aft_h = mid_h; - int aft_v = mid_v; - QBrush brush(option->palette.dark().color(), Qt::Dense4Pattern); - if (option->state & State_Item) { - if (option->direction == Qt::RightToLeft) - p->fillRect(option->rect.left(), mid_v, bef_h - option->rect.left(), 1, brush); - else - p->fillRect(aft_h, mid_v, option->rect.right() - aft_h + 1, 1, brush); - } - if (option->state & State_Sibling) - p->fillRect(mid_h, aft_v, 1, option->rect.bottom() - aft_v + 1, brush); - if (option->state & (State_Open | State_Children | State_Item | State_Sibling)) - p->fillRect(mid_h, option->rect.y(), 1, bef_v - option->rect.y(), brush); - if (option->state & State_Children) { - int delta = decoration_size / 2; - bef_h -= delta; - bef_v -= delta; - aft_h += delta; - aft_v += delta; - XPThemeData theme(nullptr, p, QWindowsXPStylePrivate::XpTreeViewTheme); - theme.rect = QRect(bef_h, bef_v, decoration_size, decoration_size); - theme.partId = TVP_GLYPH; - theme.stateId = flags & QStyle::State_Open ? GLPS_OPENED : GLPS_CLOSED; - d->drawBackground(theme); - } - } - return; - - case PE_IndicatorToolBarSeparator: - if (option->rect.height() < 3) { - // XP style requires a few pixels for the separator - // to be visible. - QWindowsStyle::drawPrimitive(pe, option, p); - return; - } - themeNumber = QWindowsXPStylePrivate::ToolBarTheme; - partId = TP_SEPARATOR; - - if (option->state & State_Horizontal) - partId = TP_SEPARATOR; - else - partId = TP_SEPARATORVERT; - - break; - - case PE_IndicatorToolBarHandle: - - themeNumber = QWindowsXPStylePrivate::RebarTheme; - partId = RP_GRIPPER; - if (option->state & State_Horizontal) { - partId = RP_GRIPPER; - rect.adjust(0, 0, -2, 0); - } - else { - partId = RP_GRIPPERVERT; - rect.adjust(0, 0, 0, -2); - } - break; - - case PE_IndicatorItemViewItemCheck: { - QStyleOptionButton button; - button.QStyleOption::operator=(*option); - button.state &= ~State_MouseOver; - proxy()->drawPrimitive(PE_IndicatorCheckBox, &button, p); - return; - } - - default: - break; - } - - XPThemeData theme(option->window, p, themeNumber, partId, stateId, rect); - if (!theme.isValid()) { - QWindowsStyle::drawPrimitive(pe, option, p); - return; - } - theme.mirrorHorizontally = hMirrored; - theme.mirrorVertically = vMirrored; - theme.noBorder = noBorder; - theme.noContent = noContent; - theme.rotate = rotate; - d->drawBackground(theme); -} - -/*! - \reimp -*/ -void QWindowsXPStyle::drawControl(ControlElement element, const QStyleOption *option, QPainter *p) const -{ - QWindowsXPStylePrivate *d = const_cast(d_func()); - if (!QWindowsXPStylePrivate::useXP()) { - QWindowsStyle::drawControl(element, option, p); - return; - } - - QRect rect(option->rect); - State flags = option->state; - - int rotate = 0; - bool hMirrored = false; - bool vMirrored = false; - - int themeNumber = -1; - int partId = 0; - int stateId = 0; - switch (element) { - case CE_SizeGrip: - { - themeNumber = QWindowsXPStylePrivate::StatusTheme; - partId = SP_GRIPPER; - XPThemeData theme(nullptr, p, themeNumber, partId); - QSize size = (theme.size() * QWindowsStylePrivate::nativeMetricScaleFactor(option)).toSize(); - size.rheight()--; - if (const QStyleOptionSizeGrip *sg = qstyleoption_cast(option)) { - switch (sg->corner) { - case Qt::BottomRightCorner: - rect = QRect(QPoint(rect.right() - size.width(), rect.bottom() - size.height()), size); - break; - case Qt::BottomLeftCorner: - rect = QRect(QPoint(rect.left() + 1, rect.bottom() - size.height()), size); - hMirrored = true; - break; - case Qt::TopRightCorner: - rect = QRect(QPoint(rect.right() - size.width(), rect.top() + 1), size); - vMirrored = true; - break; - case Qt::TopLeftCorner: - rect = QRect(rect.topLeft() + QPoint(1, 1), size); - hMirrored = vMirrored = true; - } - } - } - break; - - case CE_HeaderSection: - themeNumber = QWindowsXPStylePrivate::HeaderTheme; - partId = HP_HEADERITEM; - if (flags & State_Sunken) - stateId = HIS_PRESSED; - else if (flags & State_MouseOver) - stateId = HIS_HOT; - else - stateId = HIS_NORMAL; - break; - - case CE_Splitter: - p->eraseRect(option->rect); - return; - - case CE_PushButtonBevel: - if (const QStyleOptionButton *btn = qstyleoption_cast(option)) - { - themeNumber = QWindowsXPStylePrivate::ButtonTheme; - partId = BP_PUSHBUTTON; - bool justFlat = ((btn->features & QStyleOptionButton::Flat) && !(flags & (State_On|State_Sunken))) - || ((btn->features & QStyleOptionButton::CommandLinkButton) - && !(flags & State_MouseOver) - && !(btn->features & QStyleOptionButton::DefaultButton)); - if (!(flags & State_Enabled) && !(btn->features & QStyleOptionButton::Flat)) - stateId = PBS_DISABLED; - else if (justFlat) - ; - else if (flags & (State_Sunken | State_On)) - stateId = PBS_PRESSED; - else if (flags & State_MouseOver) - stateId = PBS_HOT; - else if (btn->features & QStyleOptionButton::DefaultButton) - stateId = PBS_DEFAULTED; - else - stateId = PBS_NORMAL; - - if (!justFlat) { - XPThemeData theme(option->window, p, themeNumber, partId, stateId, rect); - d->drawBackground(theme); - } - - if (btn->features & QStyleOptionButton::HasMenu) { - int mbiw = 0, mbih = 0; - XPThemeData theme(option->window, nullptr, - QWindowsXPStylePrivate::ToolBarTheme, - TP_SPLITBUTTONDROPDOWN); - if (theme.isValid()) { - const QSize size = (theme.size() * QWindowsStylePrivate::nativeMetricScaleFactor(option)).toSize(); - mbiw = size.width(); - mbih = size.height(); - } - - QRect ir = btn->rect; - QStyleOptionButton newBtn = *btn; - newBtn.rect = QRect(ir.right() - mbiw - 1, 1 + (ir.height()/2) - (mbih/2), mbiw, mbih); - proxy()->drawPrimitive(PE_IndicatorArrowDown, &newBtn, p); - } - return; - } - break; - case CE_TabBarTab: - if (const QStyleOptionTab *tab = qstyleoption_cast(option)) - { - stateId = tab->state & State_Enabled ? TIS_NORMAL : TIS_DISABLED; - } - break; -#if 0 - case CE_TabBarTabShape: - if (const QStyleOptionTab *tab = qstyleoption_cast(option)) - { - themeNumber = QWindowsXPStylePrivate::TabTheme; - bool isDisabled = !(tab->state & State_Enabled); - bool hasFocus = tab->state & State_HasFocus; - bool isHot = tab->state & State_MouseOver; - bool selected = tab->state & State_Selected; - bool lastTab = tab->position == QStyleOptionTab::End; - bool firstTab = tab->position == QStyleOptionTab::Beginning; - bool onlyOne = tab->position == QStyleOptionTab::OnlyOneTab; - bool leftAligned = proxy()->styleHint(SH_TabBar_Alignment, tab) == Qt::AlignLeft; - bool centerAligned = proxy()->styleHint(SH_TabBar_Alignment, tab) == Qt::AlignCenter; - int borderThickness = proxy()->pixelMetric(PM_DefaultFrameWidth, option); - int tabOverlap = proxy()->pixelMetric(PM_TabBarTabOverlap, option); - - if (isDisabled) - stateId = TIS_DISABLED; - else if (selected) - stateId = TIS_SELECTED; - else if (hasFocus) - stateId = TIS_FOCUSED; - else if (isHot) - stateId = TIS_HOT; - else - stateId = TIS_NORMAL; - - // Selecting proper part depending on position - if (firstTab || onlyOne) { - if (leftAligned) { - partId = TABP_TABITEMLEFTEDGE; - } else if (centerAligned) { - partId = TABP_TABITEM; - } else { // rightAligned - partId = TABP_TABITEMRIGHTEDGE; - } - } else { - partId = TABP_TABITEM; - } - - if (tab->direction == Qt::RightToLeft - && (tab->shape == QTabBar::RoundedNorth - || tab->shape == QTabBar::RoundedSouth)) { - bool temp = firstTab; - firstTab = lastTab; - lastTab = temp; - } - bool begin = firstTab || onlyOne; - bool end = lastTab || onlyOne; - switch (tab->shape) { - case QTabBar::RoundedNorth: - if (selected) - rect.adjust(begin ? 0 : -tabOverlap, 0, end ? 0 : tabOverlap, borderThickness); - else - rect.adjust(begin? tabOverlap : 0, tabOverlap, end ? -tabOverlap : 0, 0); - break; - case QTabBar::RoundedSouth: - //vMirrored = true; - rotate = 180; // Not 100% correct, but works - if (selected) - rect.adjust(begin ? 0 : -tabOverlap , -borderThickness, end ? 0 : tabOverlap, 0); - else - rect.adjust(begin ? tabOverlap : 0, 0, end ? -tabOverlap : 0 , -tabOverlap); - break; - case QTabBar::RoundedEast: - rotate = 90; - if (selected) { - rect.adjust(-borderThickness, begin ? 0 : -tabOverlap, 0, end ? 0 : tabOverlap); - }else{ - rect.adjust(0, begin ? tabOverlap : 0, -tabOverlap, end ? -tabOverlap : 0); - } - break; - case QTabBar::RoundedWest: - hMirrored = true; - rotate = 90; - if (selected) { - rect.adjust(0, begin ? 0 : -tabOverlap, borderThickness, end ? 0 : tabOverlap); - }else{ - rect.adjust(tabOverlap, begin ? tabOverlap : 0, 0, end ? -tabOverlap : 0); - } - break; - default: - themeNumber = -1; // Do our own painting for triangular - break; - } - - if (!selected) { - switch (tab->shape) { - case QTabBar::RoundedNorth: - rect.adjust(0,0, 0,-1); - break; - case QTabBar::RoundedSouth: - rect.adjust(0,1, 0,0); - break; - case QTabBar::RoundedEast: - rect.adjust( 1,0, 0,0); - break; - case QTabBar::RoundedWest: - rect.adjust(0,0, -1,0); - break; - default: - break; - } - } - } - break; -#endif - case CE_ProgressBarGroove: - { - Qt::Orientation orient = Qt::Horizontal; - if (const QStyleOptionProgressBar *pb = qstyleoption_cast(option)) - orient = pb->state & QStyle::State_Horizontal ? Qt::Horizontal : Qt::Vertical; - partId = (orient == Qt::Horizontal) ? PP_BAR : PP_BARVERT; - themeNumber = QWindowsXPStylePrivate::ProgressTheme; - stateId = 1; - } - break; - - case CE_MenuEmptyArea: - case CE_MenuItem: - if (const QStyleOptionMenuItem *menuitem = qstyleoption_cast(option)) - { - int tab = menuitem->tabWidth; - bool dis = !(menuitem->state & State_Enabled); - bool act = menuitem->state & State_Selected; - bool checkable = menuitem->menuHasCheckableItems; - bool checked = checkable ? menuitem->checked : false; - - // windows always has a check column, regardless whether we have an icon or not - int checkcol = qMax(menuitem->maxIconWidth, 12); - - int x, y, w, h; - rect.getRect(&x, &y, &w, &h); - - QBrush fill = menuitem->palette.brush(act ? QPalette::Highlight : QPalette::Button); - p->fillRect(rect, fill); - - if (element == CE_MenuEmptyArea) - break; - - // draw separator ------------------------------------------------- - if (menuitem->menuItemType == QStyleOptionMenuItem::Separator) { - int yoff = y-1 + h / 2; - p->setPen(menuitem->palette.dark().color()); - p->drawLine(x, yoff, x+w, yoff); - ++yoff; - p->setPen(menuitem->palette.light().color()); - p->drawLine(x, yoff, x+w, yoff); - return; - } - - int xpos = x; - - // draw icon ------------------------------------------------------ - if (!menuitem->icon.isNull()) { - QIcon::Mode mode = dis ? QIcon::Disabled : QIcon::Normal; - if (act && !dis) - mode = QIcon::Active; - QPixmap pixmap = checked ? - menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option), mode, QIcon::On) : - menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option), mode); - const int pixw = pixmap.width() / pixmap.devicePixelRatio(); - const int pixh = pixmap.height() / pixmap.devicePixelRatio(); - QRect iconRect(0, 0, pixw, pixh); - iconRect.moveCenter(QRect(xpos, y, checkcol, h).center()); - QRect vIconRect = visualRect(option->direction, option->rect, iconRect); - p->setPen(menuitem->palette.text().color()); - p->setBrush(Qt::NoBrush); - if (checked) - p->drawRect(vIconRect.adjusted(-1, -1, 0, 0)); - p->drawPixmap(vIconRect.topLeft(), pixmap); - - // draw checkmark ------------------------------------------------- - } else if (checked) { - QStyleOptionMenuItem newMi = *menuitem; - newMi.state = State_None; - if (!dis) - newMi.state |= State_Enabled; - if (act) - newMi.state |= State_On; - - QRect checkMarkRect = QRect(menuitem->rect.x() + windowsItemFrame, - menuitem->rect.y() + windowsItemFrame, - checkcol - 2 * windowsItemFrame, - menuitem->rect.height() - 2*windowsItemFrame); - newMi.rect = visualRect(option->direction, option->rect, checkMarkRect); - proxy()->drawPrimitive(PE_IndicatorMenuCheckMark, &newMi, p); - } - - QColor textColor = dis ? menuitem->palette.text().color() : - act ? menuitem->palette.highlightedText().color() : menuitem->palette.buttonText().color(); - p->setPen(textColor); - - // draw text ------------------------------------------------------ - int xm = windowsItemFrame + checkcol + windowsItemHMargin; - xpos = menuitem->rect.x() + xm; - QRect textRect(xpos, y + windowsItemVMargin, w - xm - windowsRightBorder - tab + 1, h - 2 * windowsItemVMargin); - QRect vTextRect = visualRect(option->direction, option->rect, textRect); - QString s = menuitem->text; - if (!s.isEmpty()) { - p->save(); - int t = s.indexOf(QLatin1Char('\t')); - int text_flags = Qt::AlignVCenter|Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine | Qt::AlignLeft; - if (!proxy()->styleHint(SH_UnderlineShortcut, menuitem)) - text_flags |= Qt::TextHideMnemonic; - // draw tab text ---------------- - if (t >= 0) { - QRect vShortcutRect = visualRect(option->direction, option->rect, QRect(textRect.topRight(), menuitem->rect.bottomRight())); - if (dis && !act && proxy()->styleHint(SH_EtchDisabledText, option)) { - p->setPen(menuitem->palette.light().color()); - p->drawText(vShortcutRect.adjusted(1,1,1,1), text_flags, s.mid(t + 1)); - p->setPen(textColor); - } - p->drawText(vShortcutRect, text_flags, s.mid(t + 1)); - s = s.left(t); - } - QFont font = menuitem->font; - if (menuitem->menuItemType == QStyleOptionMenuItem::DefaultItem) - font.setBold(true); - p->setFont(font); - if (dis && !act && proxy()->styleHint(SH_EtchDisabledText, option)) { - p->setPen(menuitem->palette.light().color()); - p->drawText(vTextRect.adjusted(1,1,1,1), text_flags, s.left(t)); - p->setPen(textColor); - } - p->drawText(vTextRect, text_flags, s); - p->restore(); - } - - // draw sub menu arrow -------------------------------------------- - if (menuitem->menuItemType == QStyleOptionMenuItem::SubMenu) { - int dim = (h - 2) / 2; - PrimitiveElement arrow; - arrow = (option->direction == Qt::RightToLeft) ? PE_IndicatorArrowLeft : PE_IndicatorArrowRight; - xpos = x + w - windowsArrowHMargin - windowsItemFrame - dim; - QRect vSubMenuRect = visualRect(option->direction, option->rect, QRect(xpos, y + h / 2 - dim / 2, dim, dim)); - QStyleOptionMenuItem newMI = *menuitem; - newMI.rect = vSubMenuRect; - newMI.state = dis ? State_None : State_Enabled; - if (act) - newMI.palette.setColor(QPalette::ButtonText, newMI.palette.highlightedText().color()); - proxy()->drawPrimitive(arrow, &newMI, p); - } - } - return; - - case CE_MenuBarItem: - if (const QStyleOptionMenuItem *mbi = qstyleoption_cast(option)) - { - if (mbi->menuItemType == QStyleOptionMenuItem::DefaultItem) - break; - - bool act = mbi->state & State_Selected; - bool dis = !(mbi->state & State_Enabled); - - QBrush fill = mbi->palette.brush(act ? QPalette::Highlight : QPalette::Button); - QPalette::ColorRole textRole = dis ? QPalette::Text: - act ? QPalette::HighlightedText : QPalette::ButtonText; - QPixmap pix = mbi->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option), QIcon::Normal); - - uint alignment = Qt::AlignCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine; - if (!proxy()->styleHint(SH_UnderlineShortcut, mbi)) - alignment |= Qt::TextHideMnemonic; - - p->fillRect(rect, fill); - if (!pix.isNull()) - drawItemPixmap(p, mbi->rect, alignment, pix); - else - drawItemText(p, mbi->rect, alignment, mbi->palette, mbi->state & State_Enabled, mbi->text, textRole); - } - return; -#if 0 && QT_CONFIG(dockwidget) - case CE_DockWidgetTitle: - if (const QStyleOptionDockWidget *dwOpt = qstyleoption_cast(option)) - { - int buttonMargin = 4; - int mw = proxy()->pixelMetric(QStyle::PM_DockWidgetTitleMargin, dwOpt); - int fw = proxy()->pixelMetric(PM_DockWidgetFrameWidth, dwOpt); - bool isFloating = false; // widget && widget->isWindow(); - bool isActive = dwOpt->state & State_Active; - - const bool verticalTitleBar = dwOpt->verticalTitleBar; - - if (verticalTitleBar) { - rect = rect.transposed(); - - p->translate(rect.left() - 1, rect.top() + rect.width()); - p->rotate(-90); - p->translate(-rect.left() + 1, -rect.top()); - } - QRect r = rect.adjusted(0, 2, -1, -3); - QRect titleRect = r; - - if (dwOpt->closable) { - QSize sz = proxy()->standardIcon(QStyle::SP_TitleBarCloseButton, dwOpt).actualSize(QSize(10, 10)); - titleRect.adjust(0, 0, -sz.width() - mw - buttonMargin, 0); - } - - if (dwOpt->floatable) { - QSize sz = proxy()->standardIcon(QStyle::SP_TitleBarMaxButton, dwOpt).actualSize(QSize(10, 10)); - titleRect.adjust(0, 0, -sz.width() - mw - buttonMargin, 0); - } - - if (isFloating) { - titleRect.adjust(0, -fw, 0, 0); - if (option->window && option->window->icon().cacheKey() != QApplication::windowIcon().cacheKey()) - titleRect.adjust(titleRect.height() + mw, 0, 0, 0); - } else { - titleRect.adjust(mw, 0, 0, 0); - if (!dwOpt->floatable && !dwOpt->closable) - titleRect.adjust(0, 0, -mw, 0); - } - - if (!verticalTitleBar) - titleRect = visualRect(dwOpt->direction, r, titleRect); - - if (!isFloating) { - QPen oldPen = p->pen(); - QString titleText = p->fontMetrics().elidedText(dwOpt->title, Qt::ElideRight, titleRect.width()); - p->setPen(dwOpt->palette.color(QPalette::Dark)); - p->drawRect(r); - - if (!titleText.isEmpty()) { - drawItemText(p, titleRect, - Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic, dwOpt->palette, - dwOpt->state & State_Enabled, titleText, - QPalette::WindowText); - } - - p->setPen(oldPen); - } else { - themeNumber = QWindowsXPStylePrivate::WindowTheme; - if (isActive) - stateId = CS_ACTIVE; - else - stateId = CS_INACTIVE; - - int titleHeight = rect.height() - 2; - rect = rect.adjusted(-fw, -fw, fw, 0); - - XPThemeData theme(option->window, p, themeNumber, 0, stateId); - if (!theme.isValid()) - break; - - // Draw small type title bar - theme.rect = rect; - theme.partId = WP_SMALLCAPTION; - d->drawBackground(theme); - - // Figure out maximal button space on title bar - - QIcon ico = option->window->icon(); - bool hasIcon = (ico.cacheKey() != QApplication::windowIcon().cacheKey()); - if (hasIcon) { - QPixmap pxIco = ico.pixmap(titleHeight); - if (!verticalTitleBar && dwOpt->direction == Qt::RightToLeft) - p->drawPixmap(rect.width() - titleHeight - pxIco.width(), rect.bottom() - titleHeight - 2, pxIco); - else - p->drawPixmap(fw, rect.bottom() - titleHeight - 2, pxIco); - } - if (!dwOpt->title.isEmpty()) { - QPen oldPen = p->pen(); - QFont oldFont = p->font(); - QFont titleFont = oldFont; - titleFont.setBold(true); - p->setFont(titleFont); - QString titleText - = p->fontMetrics().elidedText(dwOpt->title, Qt::ElideRight, titleRect.width()); - - int result = TST_NONE; - GetThemeEnumValue(theme.handle(), WP_SMALLCAPTION, isActive ? CS_ACTIVE : CS_INACTIVE, TMT_TEXTSHADOWTYPE, &result); - if (result != TST_NONE) { - COLORREF textShadowRef; - GetThemeColor(theme.handle(), WP_SMALLCAPTION, isActive ? CS_ACTIVE : CS_INACTIVE, TMT_TEXTSHADOWCOLOR, &textShadowRef); - QColor textShadow = qRgb(GetRValue(textShadowRef), GetGValue(textShadowRef), GetBValue(textShadowRef)); - p->setPen(textShadow); - drawItemText(p, titleRect.adjusted(1, 1, 1, 1), - Qt::AlignLeft | Qt::AlignBottom, dwOpt->palette, - dwOpt->state & State_Enabled, titleText); - } - - COLORREF captionText = GetSysColor(isActive ? COLOR_CAPTIONTEXT : COLOR_INACTIVECAPTIONTEXT); - QColor textColor = qRgb(GetRValue(captionText), GetGValue(captionText), GetBValue(captionText)); - p->setPen(textColor); - drawItemText(p, titleRect, - Qt::AlignLeft | Qt::AlignBottom, dwOpt->palette, - dwOpt->state & State_Enabled, titleText); - p->setFont(oldFont); - p->setPen(oldPen); - } - - } - - return; - } - break; -#endif // QT_CONFIG(dockwidget) -#if 0 && QT_CONFIG(rubberband) - case CE_RubberBand: - if (qstyleoption_cast(option)) { - QColor highlight = option->palette.color(QPalette::Active, QPalette::Highlight); - p->save(); - p->setPen(highlight.darker(120)); - QColor dimHighlight(qMin(highlight.red()/2 + 110, 255), - qMin(highlight.green()/2 + 110, 255), - qMin(highlight.blue()/2 + 110, 255), - 127); - //(widget && widget->isTopLevel())? 255 : 127); - p->setBrush(dimHighlight); - p->drawRect(option->rect.adjusted(0, 0, -1, -1)); - p->restore(); - return; - } - break; -#endif // QT_CONFIG(rubberband) - case CE_HeaderEmptyArea: - if (option->state & State_Horizontal) - { - themeNumber = QWindowsXPStylePrivate::HeaderTheme; - stateId = HIS_NORMAL; - } - else { - QWindowsStyle::drawControl(CE_HeaderEmptyArea, option, p); - return; - } - break; - default: - break; - } - - XPThemeData theme(option->window, p, themeNumber, partId, stateId, rect); - if (!theme.isValid()) { - QWindowsStyle::drawControl(element, option, p); - return; - } - - theme.rotate = rotate; - theme.mirrorHorizontally = hMirrored; - theme.mirrorVertically = vMirrored; - d->drawBackground(theme); -} - -QRect QWindowsXPStylePrivate::scrollBarGripperBounds(QStyle::State flags, XPThemeData *theme) -{ - const bool horizontal = flags & QStyle::State_Horizontal; - const qreal factor = QWindowsStylePrivate::nativeMetricScaleFactor(theme->window); - const QMargins contentsMargin = - (theme->margins(theme->rect, TMT_SIZINGMARGINS) * factor).toMargins(); - theme->partId = horizontal ? SBP_GRIPPERHORZ : SBP_GRIPPERVERT; - const QSize size = (theme->size() * factor).toSize(); - - const int hSpace = theme->rect.width() - size.width(); - const int vSpace = theme->rect.height() - size.height(); - const bool sufficientSpace = (horizontal && hSpace > (contentsMargin.left() + contentsMargin.right())) - || vSpace > contentsMargin.top() + contentsMargin.bottom(); - return sufficientSpace ? QRect(theme->rect.topLeft() + QPoint(hSpace, vSpace) / 2, size) : QRect(); -} - -#if 0 && QT_CONFIG(mdiarea) -// Helper for drawing MDI buttons into the corner widget of QMenuBar in case a -// QMdiSubWindow is maximized. -static void populateMdiButtonTheme(const QStyle *proxy, - const QStyleOptionComplex *option, - QStyle::SubControl subControl, int part, - XPThemeData *theme) -{ - theme->partId = part; - theme->rect = proxy->subControlRect(QStyle::CC_MdiControls, option, subControl); - if (!option->state.testFlag(QStyle::State_Enabled)) - theme->stateId = CBS_INACTIVE; - else if (option->state.testFlag(QStyle::State_Sunken) && option->activeSubControls.testFlag(subControl)) - theme->stateId = CBS_PUSHED; - else if (option->state.testFlag(QStyle::State_MouseOver) && option->activeSubControls.testFlag(subControl)) - theme->stateId = CBS_HOT; - else - theme->stateId = CBS_NORMAL; -} - -// Calculate an small (max 2), empirical correction factor for scaling up -// WP_MDICLOSEBUTTON, WP_MDIRESTOREBUTTON, WP_MDIMINBUTTON, which are too -// small on High DPI screens (QTBUG-75927). -qreal mdiButtonCorrectionFactor(XPThemeData &theme, const QPaintDevice *pd = nullptr) -{ - const auto dpr = pd ? pd->devicePixelRatioF() : qApp->devicePixelRatio(); - const QSizeF nativeSize = QSizeF(theme.size()) / dpr; - const QSizeF requestedSize(theme.rect.size()); - const auto rawFactor = qMin(requestedSize.width() / nativeSize.width(), - requestedSize.height() / nativeSize.height()); - const auto factor = rawFactor >= qreal(2) ? qreal(2) : qreal(1); - return factor; -} -#endif // QT_CONFIG(mdiarea) - -static void populateTitleBarButtonTheme(const QStyle *proxy, - const QStyleOptionComplex *option, - QStyle::SubControl subControl, - bool isTitleBarActive, int part, - XPThemeData *theme) -{ - theme->rect = proxy->subControlRect(QStyle::CC_TitleBar, option, subControl); - theme->partId = part; - if (!(option->state & QStyle::State_Enabled)) - theme->stateId = RBS_DISABLED; - else if (option->activeSubControls == subControl && option->state.testFlag(QStyle::State_Sunken)) - theme->stateId = RBS_PUSHED; - else if (option->activeSubControls == subControl && option->state.testFlag(QStyle::State_MouseOver)) - theme->stateId = RBS_HOT; - else if (!isTitleBarActive) - theme->stateId = RBS_INACTIVE; - else - theme->stateId = RBS_NORMAL; -} - -/*! - \reimp -*/ -void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex *option, - QPainter *p) const -{ - QWindowsXPStylePrivate *d = const_cast(d_func()); - - if (!QWindowsXPStylePrivate::useXP()) { - QWindowsStyle::drawComplexControl(cc, option, p); - return; - } - - State flags = option->state; - SubControls sub = option->subControls; - QRect r = option->rect; - - int partId = 0; - int stateId = 0; - if (option->window && option->window->isActive()) - flags |= State_MouseOver; - - switch (cc) { -//#if QT_CONFIG(spinbox) - case CC_SpinBox: - if (const QStyleOptionSpinBox *sb = qstyleoption_cast(option)) - { - XPThemeData theme(option->window, p, QWindowsXPStylePrivate::SpinTheme); - - if (sb->frame && (sub & SC_SpinBoxFrame)) { - partId = EP_EDITTEXT; - if (!(flags & State_Enabled)) - stateId = ETS_DISABLED; - else if (flags & State_HasFocus) - stateId = ETS_FOCUSED; - else - stateId = ETS_NORMAL; - - XPThemeData ftheme(option->window, p, QWindowsXPStylePrivate::EditTheme, - partId, stateId, r); - ftheme.noContent = true; - d->drawBackground(ftheme); - } - if (sub & SC_SpinBoxUp) { - theme.rect = proxy()->subControlRect(CC_SpinBox, option, SC_SpinBoxUp); - partId = SPNP_UP; - if (!(sb->stepEnabled & QStyleOptionSpinBox::StepUpEnabled) || !(flags & State_Enabled)) - stateId = UPS_DISABLED; - else if (sb->activeSubControls == SC_SpinBoxUp && (sb->state & State_Sunken)) - stateId = UPS_PRESSED; - else if (sb->activeSubControls == SC_SpinBoxUp && (sb->state & State_MouseOver)) - stateId = UPS_HOT; - else - stateId = UPS_NORMAL; - theme.partId = partId; - theme.stateId = stateId; - d->drawBackground(theme); - } - if (sub & SC_SpinBoxDown) { - theme.rect = proxy()->subControlRect(CC_SpinBox, option, SC_SpinBoxDown); - partId = SPNP_DOWN; - if (!(sb->stepEnabled & QStyleOptionSpinBox::StepDownEnabled) || !(flags & State_Enabled)) - stateId = DNS_DISABLED; - else if (sb->activeSubControls == SC_SpinBoxDown && (sb->state & State_Sunken)) - stateId = DNS_PRESSED; - else if (sb->activeSubControls == SC_SpinBoxDown && (sb->state & State_MouseOver)) - stateId = DNS_HOT; - else - stateId = DNS_NORMAL; - theme.partId = partId; - theme.stateId = stateId; - d->drawBackground(theme); - } - } - break; -//#endif // QT_CONFIG(spinbox) -//#if QT_CONFIG(combobox) - case CC_ComboBox: - if (const QStyleOptionComboBox *cmb = qstyleoption_cast(option)) - { - if (cmb->editable) { - if (sub & SC_ComboBoxEditField) { - partId = EP_EDITBORDER_NOSCROLL; - if (!(flags & State_Enabled)) - stateId = ETS_DISABLED; - else if (flags & State_MouseOver) - stateId = ETS_HOT; - else if (flags & State_HasFocus) - stateId = ETS_FOCUSED; - else - stateId = ETS_NORMAL; - - XPThemeData theme(option->window, p, - QWindowsXPStylePrivate::EditTheme, - partId, stateId, r); - - d->drawBackground(theme); - } - if (sub & SC_ComboBoxArrow) { - QRect subRect = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxArrow); - XPThemeData theme(option->window, p, QWindowsXPStylePrivate::ComboboxTheme); - theme.rect = subRect; - partId = option->direction == Qt::RightToLeft ? CP_DROPDOWNBUTTONLEFT : CP_DROPDOWNBUTTONRIGHT; - - if (!(cmb->state & State_Enabled)) - stateId = CBXS_DISABLED; - else if (cmb->state & State_Sunken || cmb->state & State_On) - stateId = CBXS_PRESSED; - else if (cmb->state & State_MouseOver && option->activeSubControls & SC_ComboBoxArrow) - stateId = CBXS_HOT; - else - stateId = CBXS_NORMAL; - - theme.partId = partId; - theme.stateId = stateId; - d->drawBackground(theme); - } - - } else { - if (sub & SC_ComboBoxFrame) { - XPThemeData theme(option->window, p, QWindowsXPStylePrivate::ComboboxTheme); - theme.rect = option->rect; - theme.partId = CP_READONLY; - if (!(cmb->state & State_Enabled)) - theme.stateId = CBXS_DISABLED; - else if (cmb->state & State_Sunken || cmb->state & State_On) - theme.stateId = CBXS_PRESSED; - else if (cmb->state & State_MouseOver) - theme.stateId = CBXS_HOT; - else - theme.stateId = CBXS_NORMAL; - d->drawBackground(theme); - } - if (sub & SC_ComboBoxArrow) { - XPThemeData theme(option->window, p, QWindowsXPStylePrivate::ComboboxTheme); - theme.rect = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxArrow); - theme.partId = option->direction == Qt::RightToLeft ? CP_DROPDOWNBUTTONLEFT : CP_DROPDOWNBUTTONRIGHT; - if (!(cmb->state & State_Enabled)) - theme.stateId = CBXS_DISABLED; - else - theme.stateId = CBXS_NORMAL; - d->drawBackground(theme); - } - if ((sub & SC_ComboBoxEditField) && (flags & State_HasFocus)) { - QStyleOptionFocusRect fropt; - fropt.QStyleOption::operator=(*cmb); - fropt.rect = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxEditField); - proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, p); - } - } - } - break; -//#endif // QT_CONFIG(combobox) - case CC_ScrollBar: - if (const QStyleOptionSlider *scrollbar = qstyleoption_cast(option)) - { - XPThemeData theme(option->window, p, QWindowsXPStylePrivate::ScrollBarTheme); - bool maxedOut = (scrollbar->maximum == scrollbar->minimum); - if (maxedOut) - flags &= ~State_Enabled; - - bool isHorz = flags & State_Horizontal; - bool isRTL = option->direction == Qt::RightToLeft; - if (sub & SC_ScrollBarAddLine) { - theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarAddLine); - partId = SBP_ARROWBTN; - if (!(flags & State_Enabled)) - stateId = (isHorz ? (isRTL ? ABS_LEFTDISABLED : ABS_RIGHTDISABLED) : ABS_DOWNDISABLED); - else if (scrollbar->activeSubControls & SC_ScrollBarAddLine && (scrollbar->state & State_Sunken)) - stateId = (isHorz ? (isRTL ? ABS_LEFTPRESSED : ABS_RIGHTPRESSED) : ABS_DOWNPRESSED); - else if (scrollbar->activeSubControls & SC_ScrollBarAddLine && (scrollbar->state & State_MouseOver)) - stateId = (isHorz ? (isRTL ? ABS_LEFTHOT : ABS_RIGHTHOT) : ABS_DOWNHOT); - else - stateId = (isHorz ? (isRTL ? ABS_LEFTNORMAL : ABS_RIGHTNORMAL) : ABS_DOWNNORMAL); - theme.partId = partId; - theme.stateId = stateId; - d->drawBackground(theme); - } - if (sub & SC_ScrollBarSubLine) { - theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSubLine); - partId = SBP_ARROWBTN; - if (!(flags & State_Enabled)) - stateId = (isHorz ? (isRTL ? ABS_RIGHTDISABLED : ABS_LEFTDISABLED) : ABS_UPDISABLED); - else if (scrollbar->activeSubControls & SC_ScrollBarSubLine && (scrollbar->state & State_Sunken)) - stateId = (isHorz ? (isRTL ? ABS_RIGHTPRESSED : ABS_LEFTPRESSED) : ABS_UPPRESSED); - else if (scrollbar->activeSubControls & SC_ScrollBarSubLine && (scrollbar->state & State_MouseOver)) - stateId = (isHorz ? (isRTL ? ABS_RIGHTHOT : ABS_LEFTHOT) : ABS_UPHOT); - else - stateId = (isHorz ? (isRTL ? ABS_RIGHTNORMAL : ABS_LEFTNORMAL) : ABS_UPNORMAL); - theme.partId = partId; - theme.stateId = stateId; - d->drawBackground(theme); - } - if (maxedOut) { - if (sub & SC_ScrollBarSlider) { - theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider); - theme.rect = theme.rect.united(proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSubPage)); - theme.rect = theme.rect.united(proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarAddPage)); - partId = scrollbar->orientation == Qt::Horizontal ? SBP_LOWERTRACKHORZ : SBP_LOWERTRACKVERT; - stateId = SCRBS_DISABLED; - theme.partId = partId; - theme.stateId = stateId; - d->drawBackground(theme); - } - } else { - if (sub & SC_ScrollBarSubPage) { - theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSubPage); - partId = flags & State_Horizontal ? SBP_UPPERTRACKHORZ : SBP_UPPERTRACKVERT; - if (!(flags & State_Enabled)) - stateId = SCRBS_DISABLED; - else if (scrollbar->activeSubControls & SC_ScrollBarSubPage && (scrollbar->state & State_Sunken)) - stateId = SCRBS_PRESSED; - else if (scrollbar->activeSubControls & SC_ScrollBarSubPage && (scrollbar->state & State_MouseOver)) - stateId = SCRBS_HOT; - else - stateId = SCRBS_NORMAL; - theme.partId = partId; - theme.stateId = stateId; - d->drawBackground(theme); - } - if (sub & SC_ScrollBarAddPage) { - theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarAddPage); - partId = flags & State_Horizontal ? SBP_LOWERTRACKHORZ : SBP_LOWERTRACKVERT; - if (!(flags & State_Enabled)) - stateId = SCRBS_DISABLED; - else if (scrollbar->activeSubControls & SC_ScrollBarAddPage && (scrollbar->state & State_Sunken)) - stateId = SCRBS_PRESSED; - else if (scrollbar->activeSubControls & SC_ScrollBarAddPage && (scrollbar->state & State_MouseOver)) - stateId = SCRBS_HOT; - else - stateId = SCRBS_NORMAL; - theme.partId = partId; - theme.stateId = stateId; - d->drawBackground(theme); - } - if (sub & SC_ScrollBarSlider) { - QRect rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider); - // The style paint the slider handle so that it is surrounded by transparent areas - // on each side. These areas have the same size as the Left/Right (or Top/Left) buttons. - // This is probaly done in order for the handle to travel all along the geometry - // of the slider, while the handle still not occluding the buttons. - // We do not want those transparent areas, so we clip them off here. - const QSize handleSize = proxy()->subControlRect(QStyle::CC_ScrollBar, scrollbar, QStyle::SC_ScrollBarAddLine).size(); - - if (scrollbar->orientation == Qt::Vertical) { - const int handleHeight = handleSize.height(); - rect.setBottom(rect.bottom() + 2 * handleHeight); - p->setClipRect(r.adjusted(0, 0, 0, handleHeight)); - p->translate(0, -handleHeight); - } else { - const int handleWidth = handleSize.width(); - rect.setRight(rect.right() + 2 * handleWidth); - p->setClipRect(r.adjusted(0, 0, handleWidth, 0)); - p->translate(-handleWidth, 0); - } - - theme.rect = rect; - if (!(flags & State_Enabled)) - stateId = SCRBS_DISABLED; - else if (scrollbar->activeSubControls & SC_ScrollBarSlider && (scrollbar->state & State_Sunken)) - stateId = SCRBS_PRESSED; - else if (scrollbar->activeSubControls & SC_ScrollBarSlider && (scrollbar->state & State_MouseOver)) - stateId = SCRBS_HOT; - else - stateId = SCRBS_NORMAL; - - // Draw handle - theme.partId = flags & State_Horizontal ? SBP_THUMBBTNHORZ : SBP_THUMBBTNVERT; - theme.stateId = stateId; - d->drawBackground(theme); - - const QRect gripperBounds = QWindowsXPStylePrivate::scrollBarGripperBounds(flags, &theme); - // Draw gripper if there is enough space - if (!gripperBounds.isEmpty()) { - p->save(); - theme.rect = gripperBounds; - p->setClipRegion(d->region(theme));// Only change inside the region of the gripper - d->drawBackground(theme); // Transparent gripper ontop of background - p->restore(); - } - } - } - } - break; - -//#if QT_CONFIG(slider) - case CC_Slider: - if (const QStyleOptionSlider *slider = qstyleoption_cast(option)) - { - XPThemeData theme(option->window, p, QWindowsXPStylePrivate::TrackBarTheme); - QRect slrect = slider->rect; - QRegion tickreg = slrect; - if (sub & SC_SliderGroove) { - theme.rect = proxy()->subControlRect(CC_Slider, option, SC_SliderGroove); - if (slider->orientation == Qt::Horizontal) { - partId = TKP_TRACK; - stateId = TRS_NORMAL; - theme.rect = QRect(slrect.left(), theme.rect.center().y() - 2, slrect.width(), 4); - } else { - partId = TKP_TRACKVERT; - stateId = TRVS_NORMAL; - theme.rect = QRect(theme.rect.center().x() - 2, slrect.top(), 4, slrect.height()); - } - theme.partId = partId; - theme.stateId = stateId; - d->drawBackground(theme); - tickreg -= theme.rect; - } - if (sub & SC_SliderTickmarks) { - int tickOffset = proxy()->pixelMetric(PM_SliderTickmarkOffset, slider); - int ticks = slider->tickPosition; - int thickness = proxy()->pixelMetric(PM_SliderControlThickness, slider); - int len = proxy()->pixelMetric(PM_SliderLength, slider); - int available = proxy()->pixelMetric(PM_SliderSpaceAvailable, slider); - int interval = slider->tickInterval; - if (interval <= 0) { - interval = slider->singleStep; - if (QStyle::sliderPositionFromValue(slider->minimum, slider->maximum, interval, - available) - - QStyle::sliderPositionFromValue(slider->minimum, slider->maximum, - 0, available) < 3) - interval = slider->pageStep; - } - if (!interval) - interval = 1; - int fudge = len / 2; - int pos; - int bothOffset = (ticks & QStyleOptionSlider::TicksAbove && ticks & QStyleOptionSlider::TicksBelow) ? 1 : 0; - p->setPen(d->sliderTickColor); - QVarLengthArray lines; - int v = slider->minimum; - while (v <= slider->maximum + 1) { - if (v == slider->maximum + 1 && interval == 1) - break; - const int v_ = qMin(v, slider->maximum); - int tickLength = (v_ == slider->minimum || v_ >= slider->maximum) ? 4 : 3; - pos = QStyle::sliderPositionFromValue(slider->minimum, slider->maximum, - v_, available) + fudge; - if (slider->orientation == Qt::Horizontal) { - if (ticks & QStyleOptionSlider::TicksAbove) - lines.append(QLine(pos, tickOffset - 1 - bothOffset, - pos, tickOffset - 1 - bothOffset - tickLength)); - - if (ticks & QStyleOptionSlider::TicksBelow) - lines.append(QLine(pos, tickOffset + thickness + bothOffset, - pos, tickOffset + thickness + bothOffset + tickLength)); - } else { - if (ticks & QStyleOptionSlider::TicksAbove) - lines.append(QLine(tickOffset - 1 - bothOffset, pos, - tickOffset - 1 - bothOffset - tickLength, pos)); - - if (ticks & QStyleOptionSlider::TicksBelow) - lines.append(QLine(tickOffset + thickness + bothOffset, pos, - tickOffset + thickness + bothOffset + tickLength, pos)); - } - // in the case where maximum is max int - int nextInterval = v + interval; - if (nextInterval < v) - break; - v = nextInterval; - } - if (!lines.isEmpty()) { - p->save(); - p->translate(slrect.topLeft()); - p->drawLines(lines.constData(), lines.size()); - p->restore(); - } - } - if (sub & SC_SliderHandle) { - theme.rect = proxy()->subControlRect(CC_Slider, option, SC_SliderHandle); - if (slider->orientation == Qt::Horizontal) { - if (slider->tickPosition == QStyleOptionSlider::TicksAbove) - partId = TKP_THUMBTOP; - else if (slider->tickPosition == QStyleOptionSlider::TicksBelow) - partId = TKP_THUMBBOTTOM; - else - partId = TKP_THUMB; - - if (!(slider->state & State_Enabled)) - stateId = TUS_DISABLED; - else if (slider->activeSubControls & SC_SliderHandle && (slider->state & State_Sunken)) - stateId = TUS_PRESSED; - else if (slider->activeSubControls & SC_SliderHandle && (slider->state & State_MouseOver)) - stateId = TUS_HOT; - else if (flags & State_HasFocus) - stateId = TUS_FOCUSED; - else - stateId = TUS_NORMAL; - } else { - if (slider->tickPosition == QStyleOptionSlider::TicksLeft) - partId = TKP_THUMBLEFT; - else if (slider->tickPosition == QStyleOptionSlider::TicksRight) - partId = TKP_THUMBRIGHT; - else - partId = TKP_THUMBVERT; - - if (!(slider->state & State_Enabled)) - stateId = TUVS_DISABLED; - else if (slider->activeSubControls & SC_SliderHandle && (slider->state & State_Sunken)) - stateId = TUVS_PRESSED; - else if (slider->activeSubControls & SC_SliderHandle && (slider->state & State_MouseOver)) - stateId = TUVS_HOT; - else if (flags & State_HasFocus) - stateId = TUVS_FOCUSED; - else - stateId = TUVS_NORMAL; - } - theme.partId = partId; - theme.stateId = stateId; - d->drawBackground(theme); - } - if (sub & SC_SliderGroove && slider->state & State_HasFocus) { - QStyleOptionFocusRect fropt; - fropt.QStyleOption::operator=(*slider); - fropt.rect = subElementRect(SE_SliderFocusRect, slider); - proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, p); - } - } - break; -//#endif -#if 0 && QT_CONFIG(toolbutton) - case CC_ToolButton: - if (const QStyleOptionToolButton *toolbutton - = qstyleoption_cast(option)) { - QRect button, menuarea; - button = proxy()->subControlRect(cc, toolbutton, SC_ToolButton); - menuarea = proxy()->subControlRect(cc, toolbutton, SC_ToolButtonMenu); - - State bflags = toolbutton->state & ~State_Sunken; - State mflags = bflags; - bool autoRaise = flags & State_AutoRaise; - if (autoRaise) { - if (!(bflags & State_MouseOver) || !(bflags & State_Enabled)) { - bflags &= ~State_Raised; - } - } - - if (toolbutton->state & State_Sunken) { - if (toolbutton->activeSubControls & SC_ToolButton) { - bflags |= State_Sunken; - mflags |= State_MouseOver | State_Sunken; - } else if (toolbutton->activeSubControls & SC_ToolButtonMenu) { - mflags |= State_Sunken; - bflags |= State_MouseOver; - } - } - - QStyleOption tool = *toolbutton; - if (toolbutton->subControls & SC_ToolButton) { - if (flags & (State_Sunken | State_On | State_Raised) || !autoRaise) { - if (toolbutton->features & QStyleOptionToolButton::MenuButtonPopup && autoRaise) { - XPThemeData theme(option->window, p, QWindowsXPStylePrivate::ToolBarTheme); - theme.partId = TP_SPLITBUTTON; - theme.rect = button; - if (!(bflags & State_Enabled)) - stateId = TS_DISABLED; - else if (bflags & State_Sunken) - stateId = TS_PRESSED; - else if (bflags & State_MouseOver || !(flags & State_AutoRaise)) - stateId = flags & State_On ? TS_HOTCHECKED : TS_HOT; - else if (bflags & State_On) - stateId = TS_CHECKED; - else - stateId = TS_NORMAL; - if (option->direction == Qt::RightToLeft) - theme.mirrorHorizontally = true; - theme.stateId = stateId; - d->drawBackground(theme); - } else { - tool.rect = option->rect; - tool.state = bflags; - if (autoRaise) // for tool bars - proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p); - else - proxy()->drawPrimitive(PE_PanelButtonBevel, &tool, p); - } - } - } - - if (toolbutton->state & State_HasFocus) { - QStyleOptionFocusRect fr; - fr.QStyleOption::operator=(*toolbutton); - fr.rect.adjust(3, 3, -3, -3); - if (toolbutton->features & QStyleOptionToolButton::MenuButtonPopup) - fr.rect.adjust(0, 0, -proxy()->pixelMetric(QStyle::PM_MenuButtonIndicator, - toolbutton), 0); - proxy()->drawPrimitive(PE_FrameFocusRect, &fr, p); - } - QStyleOptionToolButton label = *toolbutton; - label.state = bflags; - int fw = 2; - if (!autoRaise) - label.state &= ~State_Sunken; - label.rect = button.adjusted(fw, fw, -fw, -fw); - proxy()->drawControl(CE_ToolButtonLabel, &label, p); - - if (toolbutton->subControls & SC_ToolButtonMenu) { - tool.rect = menuarea; - tool.state = mflags; - if (autoRaise) { - proxy()->drawPrimitive(PE_IndicatorButtonDropDown, &tool, p); - } else { - tool.state = mflags; - menuarea.adjust(-2, 0, 0, 0); - // Draw menu button - if ((bflags & State_Sunken) != (mflags & State_Sunken)){ - p->save(); - p->setClipRect(menuarea); - tool.rect = option->rect; - proxy()->drawPrimitive(PE_PanelButtonBevel, &tool, p); - p->restore(); - } - // Draw arrow - p->save(); - p->setPen(option->palette.dark().color()); - p->drawLine(menuarea.left(), menuarea.top() + 3, - menuarea.left(), menuarea.bottom() - 3); - p->setPen(option->palette.light().color()); - p->drawLine(menuarea.left() - 1, menuarea.top() + 3, - menuarea.left() - 1, menuarea.bottom() - 3); - - tool.rect = menuarea.adjusted(2, 3, -2, -1); - proxy()->drawPrimitive(PE_IndicatorArrowDown, &tool, p); - p->restore(); - } - } else if (toolbutton->features & QStyleOptionToolButton::HasMenu) { - int mbi = proxy()->pixelMetric(PM_MenuButtonIndicator, toolbutton); - QRect ir = toolbutton->rect; - QStyleOptionToolButton newBtn = *toolbutton; - newBtn.rect = QRect(ir.right() + 4 - mbi, ir.height() - mbi + 4, mbi - 5, mbi - 5); - proxy()->drawPrimitive(PE_IndicatorArrowDown, &newBtn, p); - } - } - break; -#endif // QT_CONFIG(toolbutton) - - case CC_TitleBar: - { - if (const QStyleOptionTitleBar *tb = qstyleoption_cast(option)) - { - const qreal factor = QWindowsStylePrivate::nativeMetricScaleFactor(option); - bool isActive = tb->titleBarState & QStyle::State_Active; - XPThemeData theme(option->window, p, QWindowsXPStylePrivate::WindowTheme); - if (sub & SC_TitleBarLabel) { - - partId = (tb->titleBarState & Qt::WindowMinimized) ? WP_MINCAPTION : WP_CAPTION; - theme.rect = option->rect; - if (!(option->state & QStyle::State_Enabled)) - stateId = CS_DISABLED; - else if (isActive) - stateId = CS_ACTIVE; - else - stateId = CS_INACTIVE; - - theme.partId = partId; - theme.stateId = stateId; - d->drawBackground(theme); - - QRect ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarLabel); - - int result = TST_NONE; - GetThemeEnumValue(theme.handle(), WP_CAPTION, isActive ? CS_ACTIVE : CS_INACTIVE, TMT_TEXTSHADOWTYPE, &result); - if (result != TST_NONE) { - COLORREF textShadowRef; - GetThemeColor(theme.handle(), WP_CAPTION, isActive ? CS_ACTIVE : CS_INACTIVE, TMT_TEXTSHADOWCOLOR, &textShadowRef); - QColor textShadow = qRgb(GetRValue(textShadowRef), GetGValue(textShadowRef), GetBValue(textShadowRef)); - p->setPen(textShadow); - p->drawText(int(ir.x() + 3 * factor), int(ir.y() + 2 * factor), - int(ir.width() - 1 * factor), ir.height(), - Qt::AlignLeft | Qt::AlignVCenter | Qt::TextSingleLine, tb->text); - } - COLORREF captionText = GetSysColor(isActive ? COLOR_CAPTIONTEXT : COLOR_INACTIVECAPTIONTEXT); - QColor textColor = qRgb(GetRValue(captionText), GetGValue(captionText), GetBValue(captionText)); - p->setPen(textColor); - p->drawText(int(ir.x() + 2 * factor), int(ir.y() + 1 * factor), - int(ir.width() - 2 * factor), ir.height(), - Qt::AlignLeft | Qt::AlignVCenter | Qt::TextSingleLine, tb->text); - } - if (sub & SC_TitleBarSysMenu && tb->titleBarFlags & Qt::WindowSystemMenuHint) { - theme.rect = proxy()->subControlRect(CC_TitleBar, option, SC_TitleBarSysMenu); - partId = WP_SYSBUTTON; - if (!(option->state & QStyle::State_Enabled) || !isActive) - stateId = SBS_DISABLED; - else if (option->activeSubControls == SC_TitleBarSysMenu && (option->state & State_Sunken)) - stateId = SBS_PUSHED; - else if (option->activeSubControls == SC_TitleBarSysMenu && (option->state & State_MouseOver)) - stateId = SBS_HOT; - else - stateId = SBS_NORMAL; - if (!tb->icon.isNull()) { - tb->icon.paint(p, theme.rect); - } else { - theme.partId = partId; - theme.stateId = stateId; - if (theme.size().isEmpty()) { - int iconSize = proxy()->pixelMetric(PM_SmallIconSize, tb); - QPixmap pm = proxy()->standardIcon(SP_TitleBarMenuButton, tb).pixmap(iconSize, iconSize); - p->save(); - drawItemPixmap(p, theme.rect, Qt::AlignCenter, pm); - p->restore(); - } else { - d->drawBackground(theme); - } - } - } - - if (sub & SC_TitleBarMinButton && tb->titleBarFlags & Qt::WindowMinimizeButtonHint - && !(tb->titleBarState & Qt::WindowMinimized)) { - populateTitleBarButtonTheme(proxy(), option, SC_TitleBarMinButton, isActive, WP_MINBUTTON, &theme); - d->drawBackground(theme); - } - if (sub & SC_TitleBarMaxButton && tb->titleBarFlags & Qt::WindowMaximizeButtonHint - && !(tb->titleBarState & Qt::WindowMaximized)) { - populateTitleBarButtonTheme(proxy(), option, SC_TitleBarMaxButton, isActive, WP_MAXBUTTON, &theme); - d->drawBackground(theme); - } - if (sub & SC_TitleBarContextHelpButton - && tb->titleBarFlags & Qt::WindowContextHelpButtonHint) { - populateTitleBarButtonTheme(proxy(), option, SC_TitleBarContextHelpButton, isActive, WP_HELPBUTTON, &theme); - d->drawBackground(theme); - } - bool drawNormalButton = (sub & SC_TitleBarNormalButton) - && (((tb->titleBarFlags & Qt::WindowMinimizeButtonHint) - && (tb->titleBarState & Qt::WindowMinimized)) - || ((tb->titleBarFlags & Qt::WindowMaximizeButtonHint) - && (tb->titleBarState & Qt::WindowMaximized))); - if (drawNormalButton) { - populateTitleBarButtonTheme(proxy(), option, SC_TitleBarNormalButton, isActive, WP_RESTOREBUTTON, &theme); - d->drawBackground(theme); - } - if (sub & SC_TitleBarShadeButton && tb->titleBarFlags & Qt::WindowShadeButtonHint - && !(tb->titleBarState & Qt::WindowMinimized)) { - populateTitleBarButtonTheme(proxy(), option, SC_TitleBarShadeButton, isActive, WP_MINBUTTON, &theme); - d->drawBackground(theme); - } - if (sub & SC_TitleBarUnshadeButton && tb->titleBarFlags & Qt::WindowShadeButtonHint - && tb->titleBarState & Qt::WindowMinimized) { - populateTitleBarButtonTheme(proxy(), option, SC_TitleBarUnshadeButton, isActive, WP_RESTOREBUTTON, &theme); - d->drawBackground(theme); - } - if (sub & SC_TitleBarCloseButton && tb->titleBarFlags & Qt::WindowSystemMenuHint) { - populateTitleBarButtonTheme(proxy(), option, SC_TitleBarCloseButton, isActive, WP_CLOSEBUTTON, &theme); - d->drawBackground(theme); - } - } - } - break; - -#if 0 && QT_CONFIG(mdiarea) - case CC_MdiControls: - { - XPThemeData theme(option->window, p, QWindowsXPStylePrivate::WindowTheme, WP_MDICLOSEBUTTON, CBS_NORMAL); - if (Q_UNLIKELY(!theme.isValid())) - return; - - if (option->subControls.testFlag(SC_MdiCloseButton)) { - populateMdiButtonTheme(proxy(), option, SC_MdiCloseButton, WP_MDICLOSEBUTTON, &theme); - d->drawBackground(theme, mdiButtonCorrectionFactor(theme)); - } - if (option->subControls.testFlag(SC_MdiNormalButton)) { - populateMdiButtonTheme(proxy(), option, SC_MdiNormalButton, WP_MDIRESTOREBUTTON, &theme); - d->drawBackground(theme, mdiButtonCorrectionFactor(theme)); - } - if (option->subControls.testFlag(QStyle::SC_MdiMinButton)) { - populateMdiButtonTheme(proxy(), option, SC_MdiMinButton, WP_MDIMINBUTTON, &theme); - d->drawBackground(theme, mdiButtonCorrectionFactor(theme)); - } - } - break; -#endif // QT_CONFIG(mdiarea) -#if 0 && QT_CONFIG(dial) - case CC_Dial: - if (const QStyleOptionSlider *dial = qstyleoption_cast(option)) - QStyleHelper::drawDial(dial, p); - break; -#endif // QT_CONFIG(dial) - default: - QWindowsStyle::drawComplexControl(cc, option, p); - break; - } -} - -static inline Qt::Orientation progressBarOrientation(const QStyleOption *option = nullptr) -{ - if (const QStyleOptionProgressBar *pb = qstyleoption_cast(option)) - return pb->state & QStyle::State_Horizontal ? Qt::Horizontal : Qt::Vertical; - return Qt::Horizontal; -} - -int QWindowsXPStylePrivate::pixelMetricFromSystemDp(QStyle::PixelMetric pm, const QStyleOption *option) -{ - switch (pm) { - case QStyle::PM_IndicatorWidth: - return XPThemeData::themeSize(option->window, nullptr, QWindowsXPStylePrivate::ButtonTheme, BP_CHECKBOX, CBS_UNCHECKEDNORMAL).width(); - case QStyle::PM_IndicatorHeight: - return XPThemeData::themeSize(option->window, nullptr, QWindowsXPStylePrivate::ButtonTheme, BP_CHECKBOX, CBS_UNCHECKEDNORMAL).height(); - case QStyle::PM_ExclusiveIndicatorWidth: - return XPThemeData::themeSize(option->window, nullptr, QWindowsXPStylePrivate::ButtonTheme, BP_RADIOBUTTON, RBS_UNCHECKEDNORMAL).width(); - case QStyle::PM_ExclusiveIndicatorHeight: - return XPThemeData::themeSize(option->window, nullptr, QWindowsXPStylePrivate::ButtonTheme, BP_RADIOBUTTON, RBS_UNCHECKEDNORMAL).height(); - case QStyle::PM_ProgressBarChunkWidth: - return progressBarOrientation(option) == Qt::Horizontal - ? XPThemeData::themeSize(option->window, nullptr, QWindowsXPStylePrivate::ProgressTheme, PP_CHUNK).width() - : XPThemeData::themeSize(option->window, nullptr, QWindowsXPStylePrivate::ProgressTheme, PP_CHUNKVERT).height(); - case QStyle::PM_SliderThickness: - return XPThemeData::themeSize(option->window, nullptr, QWindowsXPStylePrivate::TrackBarTheme, TKP_THUMB).height(); - case QStyle::PM_TitleBarHeight: - return option->window && (option->window->type() == Qt::Tool) - ? GetSystemMetrics(SM_CYSMCAPTION) + GetSystemMetrics(SM_CXSIZEFRAME) - : GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CXSIZEFRAME); - case QStyle::PM_MdiSubWindowFrameWidth: - return XPThemeData::themeSize(option->window, nullptr, QWindowsXPStylePrivate::WindowTheme, WP_FRAMELEFT, FS_ACTIVE).width(); - case QStyle::PM_DockWidgetFrameWidth: - return XPThemeData::themeSize(option->window, nullptr, QWindowsXPStylePrivate::WindowTheme, WP_SMALLFRAMERIGHT, FS_ACTIVE).width(); - default: - break; - } - return QWindowsXPStylePrivate::InvalidMetric; -} - -/*! \reimp */ -int QWindowsXPStyle::pixelMetric(PixelMetric pm, const QStyleOption *option) const -{ - if (!QWindowsXPStylePrivate::useXP()) - return QWindowsStyle::pixelMetric(pm, option); - - int res = QWindowsXPStylePrivate::pixelMetricFromSystemDp(pm, option); - if (res != QWindowsStylePrivate::InvalidMetric) - return qRound(qreal(res) * QWindowsStylePrivate::nativeMetricScaleFactor(option)); - - res = 0; - switch (pm) { - case PM_MenuBarPanelWidth: - case PM_ButtonDefaultIndicator: - res = 0; - break; - - case PM_DefaultFrameWidth: - res = 1; - //res = qobject_cast(widget) ? 2 : 1; - break; - case PM_MenuPanelWidth: - case PM_SpinBoxFrameWidth: - res = 1; - break; - - case PM_TabBarTabOverlap: - case PM_MenuHMargin: - case PM_MenuVMargin: - res = 2; - break; -#if 0 - case PM_TabBarBaseOverlap: - if (const QStyleOptionTab *tab = qstyleoption_cast(option)) { - switch (tab->shape) { - case QTabBar::RoundedNorth: - case QTabBar::TriangularNorth: - case QTabBar::RoundedWest: - case QTabBar::TriangularWest: - res = 1; - break; - case QTabBar::RoundedSouth: - case QTabBar::TriangularSouth: - res = 2; - break; - case QTabBar::RoundedEast: - case QTabBar::TriangularEast: - res = 3; - break; - } - } - break; -#endif - case PM_SplitterWidth: - res = QStyleHelper::dpiScaled(5., option); - break; - - case PM_MdiSubWindowMinimizedWidth: - res = 160; - break; - -#if 0 && QT_CONFIG(toolbar) - case PM_ToolBarHandleExtent: - res = int(QStyleHelper::dpiScaled(8., option)); - break; - -#endif // QT_CONFIG(toolbar) - case PM_DockWidgetSeparatorExtent: - case PM_DockWidgetTitleMargin: - res = int(QStyleHelper::dpiScaled(4., option)); - break; - - case PM_ButtonShiftHorizontal: - case PM_ButtonShiftVertical: - res = qstyleoption_cast(option) ? 1 : 0; - break; - - default: - res = QWindowsStyle::pixelMetric(pm, option); - } - - return res; -} - -/* - This function is used by subControlRect to check if a button - should be drawn for the given subControl given a set of window flags. -*/ -static bool buttonVisible(const QStyle::SubControl sc, const QStyleOptionTitleBar *tb){ - - bool isMinimized = tb->titleBarState & Qt::WindowMinimized; - bool isMaximized = tb->titleBarState & Qt::WindowMaximized; - const uint flags = tb->titleBarFlags; - bool retVal = false; - switch (sc) { - case QStyle::SC_TitleBarContextHelpButton: - if (flags & Qt::WindowContextHelpButtonHint) - retVal = true; - break; - case QStyle::SC_TitleBarMinButton: - if (!isMinimized && (flags & Qt::WindowMinimizeButtonHint)) - retVal = true; - break; - case QStyle::SC_TitleBarNormalButton: - if (isMinimized && (flags & Qt::WindowMinimizeButtonHint)) - retVal = true; - else if (isMaximized && (flags & Qt::WindowMaximizeButtonHint)) - retVal = true; - break; - case QStyle::SC_TitleBarMaxButton: - if (!isMaximized && (flags & Qt::WindowMaximizeButtonHint)) - retVal = true; - break; - case QStyle::SC_TitleBarShadeButton: - if (!isMinimized && flags & Qt::WindowShadeButtonHint) - retVal = true; - break; - case QStyle::SC_TitleBarUnshadeButton: - if (isMinimized && flags & Qt::WindowShadeButtonHint) - retVal = true; - break; - case QStyle::SC_TitleBarCloseButton: - if (flags & Qt::WindowSystemMenuHint) - retVal = true; - break; - case QStyle::SC_TitleBarSysMenu: - if (flags & Qt::WindowSystemMenuHint) - retVal = true; - break; - default : - retVal = true; - } - return retVal; -} - -/*! - \reimp -*/ -QRect QWindowsXPStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *option, - SubControl subControl) const -{ - if (!QWindowsXPStylePrivate::useXP()) - return QWindowsStyle::subControlRect(cc, option, subControl); - - QRect rect; - - switch (cc) { - case CC_GroupBox: - rect = visualRect(option->direction, option->rect, - QWindowsStyle::subControlRect(cc, option, subControl)); - if (subControl == QStyle::SC_GroupBoxContents) { - // This will add the margins that was added by QLayouts in QtWidgets - // (default to 9 for layouts inside a QGroupBox) - rect.adjust(9, 9, -9, -9); - } - break; - case CC_TitleBar: - if (const QStyleOptionTitleBar *tb = qstyleoption_cast(option)) { - if (!buttonVisible(subControl, tb)) - return rect; - const bool isToolTitle = false; - const int height = tb->rect.height(); - const int width = tb->rect.width(); - const int buttonMargin = int(QStyleHelper::dpiScaled(4, option)); - const qreal factor = QWindowsStylePrivate::nativeMetricScaleFactor(option); - int buttonHeight = qRound(qreal(GetSystemMetrics(SM_CYSIZE)) * factor) - - buttonMargin; - int buttonWidth = qRound(qreal(GetSystemMetrics(SM_CXSIZE)) * factor) - - buttonMargin; - const int delta = buttonWidth + 2; - int controlTop = option->rect.bottom() - buttonHeight - 2; - const int frameWidth = proxy()->pixelMetric(PM_MdiSubWindowFrameWidth, option); - const bool sysmenuHint = (tb->titleBarFlags & Qt::WindowSystemMenuHint) != 0; - const bool minimizeHint = (tb->titleBarFlags & Qt::WindowMinimizeButtonHint) != 0; - const bool maximizeHint = (tb->titleBarFlags & Qt::WindowMaximizeButtonHint) != 0; - const bool contextHint = (tb->titleBarFlags & Qt::WindowContextHelpButtonHint) != 0; - const bool shadeHint = (tb->titleBarFlags & Qt::WindowShadeButtonHint) != 0; - bool isMinimized = tb->titleBarState & Qt::WindowMinimized; - bool isMaximized = tb->titleBarState & Qt::WindowMaximized; - int offset = 0; - - switch (subControl) { - case SC_TitleBarLabel: - rect = QRect(frameWidth, 0, width - (buttonWidth + frameWidth + 10), height); - if (isToolTitle) { - if (sysmenuHint) { - rect.adjust(0, 0, -buttonWidth - 3, 0); - } - if (minimizeHint || maximizeHint) - rect.adjust(0, 0, -buttonWidth - 2, 0); - } else { - if (sysmenuHint) { - const int leftOffset = height - 8; - rect.adjust(leftOffset, 0, 0, 0); - } - if (minimizeHint) - rect.adjust(0, 0, -buttonWidth - 2, 0); - if (maximizeHint) - rect.adjust(0, 0, -buttonWidth - 2, 0); - if (contextHint) - rect.adjust(0, 0, -buttonWidth - 2, 0); - if (shadeHint) - rect.adjust(0, 0, -buttonWidth - 2, 0); - } - break; - - case SC_TitleBarContextHelpButton: - if (tb->titleBarFlags & Qt::WindowContextHelpButtonHint) - offset += delta; - Q_FALLTHROUGH(); - case SC_TitleBarMinButton: - if (!isMinimized && (tb->titleBarFlags & Qt::WindowMinimizeButtonHint)) - offset += delta; - else if (subControl == SC_TitleBarMinButton) - break; - Q_FALLTHROUGH(); - case SC_TitleBarNormalButton: - if (isMinimized && (tb->titleBarFlags & Qt::WindowMinimizeButtonHint)) - offset += delta; - else if (isMaximized && (tb->titleBarFlags & Qt::WindowMaximizeButtonHint)) - offset += delta; - else if (subControl == SC_TitleBarNormalButton) - break; - Q_FALLTHROUGH(); - case SC_TitleBarMaxButton: - if (!isMaximized && (tb->titleBarFlags & Qt::WindowMaximizeButtonHint)) - offset += delta; - else if (subControl == SC_TitleBarMaxButton) - break; - Q_FALLTHROUGH(); - case SC_TitleBarShadeButton: - if (!isMinimized && (tb->titleBarFlags & Qt::WindowShadeButtonHint)) - offset += delta; - else if (subControl == SC_TitleBarShadeButton) - break; - Q_FALLTHROUGH(); - case SC_TitleBarUnshadeButton: - if (isMinimized && (tb->titleBarFlags & Qt::WindowShadeButtonHint)) - offset += delta; - else if (subControl == SC_TitleBarUnshadeButton) - break; - Q_FALLTHROUGH(); - case SC_TitleBarCloseButton: - if (tb->titleBarFlags & Qt::WindowSystemMenuHint) - offset += delta; - else if (subControl == SC_TitleBarCloseButton) - break; - - rect.setRect(width - offset - controlTop + 1, controlTop, - buttonWidth, buttonHeight); - break; - - case SC_TitleBarSysMenu: - { - const int controlTop = 6; - const int controlHeight = height - controlTop - 3; - const int iconExtent = proxy()->pixelMetric(PM_SmallIconSize, option); - QSize iconSize = tb->icon.actualSize(QSize(iconExtent, iconExtent)); - if (tb->icon.isNull()) - iconSize = QSize(controlHeight, controlHeight); - int hPad = (controlHeight - iconSize.height())/2; - int vPad = (controlHeight - iconSize.width())/2; - rect = QRect(frameWidth + hPad, controlTop + vPad, iconSize.width(), iconSize.height()); - } - break; - default: - break; - } - } - break; - - case CC_ComboBox: - if (const QStyleOptionComboBox *cmb = qstyleoption_cast(option)) { - const int x = cmb->rect.x(), y = cmb->rect.y(), wi = cmb->rect.width(), he = cmb->rect.height(); - const int xpos = x + wi - qRound(QStyleHelper::dpiScaled(1 + 16, option)); - - switch (subControl) { - case SC_ComboBoxFrame: - rect = cmb->rect; - break; - - case SC_ComboBoxArrow: { - const qreal dpi = QStyleHelper::dpi(option); - rect = QRect(xpos, y + qRound(QStyleHelper::dpiScaled(1, dpi)), - qRound(QStyleHelper::dpiScaled(16, dpi)), - he - qRound(QStyleHelper::dpiScaled(2, dpi))); - } - break; - - case SC_ComboBoxEditField: { - const qreal dpi = QStyleHelper::dpi(option); - const int frame = qRound(QStyleHelper::dpiScaled(2, dpi)); - rect = QRect(x + frame, y + frame, - wi - qRound(QStyleHelper::dpiScaled(3 + 16, dpi)), - he - qRound(QStyleHelper::dpiScaled(4, dpi))); - } - break; - - case SC_ComboBoxListBoxPopup: - rect = cmb->rect; - break; - - default: - break; - } - } - break; -#if 0 && QT_CONFIG(mdiarea) - case CC_MdiControls: - { - int numSubControls = 0; - if (option->subControls & SC_MdiCloseButton) - ++numSubControls; - if (option->subControls & SC_MdiMinButton) - ++numSubControls; - if (option->subControls & SC_MdiNormalButton) - ++numSubControls; - if (numSubControls == 0) - break; - - int buttonWidth = option->rect.width() / numSubControls; - int offset = 0; - switch (subControl) { - case SC_MdiCloseButton: - // Only one sub control, no offset needed. - if (numSubControls == 1) - break; - offset += buttonWidth; - Q_FALLTHROUGH(); - case SC_MdiNormalButton: - // No offset needed if - // 1) There's only one sub control - // 2) We have a close button and a normal button (offset already added in SC_MdiClose) - if (numSubControls == 1 || (numSubControls == 2 && !(option->subControls & SC_MdiMinButton))) - break; - if (option->subControls & SC_MdiNormalButton) - offset += buttonWidth; - break; - default: - break; - } - rect = QRect(offset, 0, buttonWidth, option->rect.height()); - break; - } -#endif // QT_CONFIG(mdiarea) - - default: - rect = visualRect(option->direction, option->rect, - QWindowsStyle::subControlRect(cc, option, subControl)); - break; - } - return visualRect(option->direction, option->rect, rect); -} - -/*! - \reimp -*/ -QSize QWindowsXPStyle::sizeFromContents(ContentsType ct, const QStyleOption *option, - const QSize &contentsSize) const -{ - if (!QWindowsXPStylePrivate::useXP()) - return QWindowsStyle::sizeFromContents(ct, option, contentsSize); - - QSize sz(contentsSize); - switch (ct) { - case CT_LineEdit: - case CT_ComboBox: - { - if (contentsSize.isEmpty()) { - // Minimum size - return QSize(20, 20); - } - XPThemeData buttontheme(option->window, nullptr, QWindowsXPStylePrivate::ButtonTheme, BP_PUSHBUTTON, PBS_NORMAL); - if (buttontheme.isValid()) { - const QMarginsF borderSize = buttontheme.margins(); - if (!borderSize.isNull()) { - const qreal margin = qreal(2); - sz.rwidth() += qRound(borderSize.left() + borderSize.right() - margin); - sz.rheight() += int(borderSize.bottom() + borderSize.top() - margin); - } - const int textMargins = 2*(proxy()->pixelMetric(PM_FocusFrameHMargin, option) + 1); - sz += QSize(qMax(pixelMetric(QStyle::PM_ScrollBarExtent, option) - + textMargins, 23), 0); //arrow button - } - } - break; - case CT_TabWidget: - sz += QSize(6, 6); - break; - case CT_Menu: - sz += QSize(1, 0); - break; -#if 0 && QT_CONFIG(menubar) - case CT_MenuBarItem: - if (!sz.isEmpty()) - sz += QSize(windowsItemHMargin * 5 + 1, 6); - break; -#endif - case CT_MenuItem: - if (const QStyleOptionMenuItem *menuitem = qstyleoption_cast(option)) - { - if (menuitem->menuItemType != QStyleOptionMenuItem::Separator) { - sz = QWindowsStyle::sizeFromContents(ct, option, sz); - sz.setHeight(sz.height() - 2); - return sz; - } - } - sz = QWindowsStyle::sizeFromContents(ct, option, sz); - break; - - case CT_MdiControls: { - sz.setHeight(int(QStyleHelper::dpiScaled(19, option))); - int width = 54; - if (const QStyleOptionComplex *styleOpt = qstyleoption_cast(option)) { - width = 0; - if (styleOpt->subControls & SC_MdiMinButton) - width += 17 + 1; - if (styleOpt->subControls & SC_MdiNormalButton) - width += 17 + 1; - if (styleOpt->subControls & SC_MdiCloseButton) - width += 17 + 1; - } - sz.setWidth(int(QStyleHelper::dpiScaled(width, option))); - } - break; - - case CT_Slider: - if (const QStyleOptionSlider *slider = qstyleoption_cast(option)) { - QStyle::SubControls sub = slider->subControls; - const int TickSpace = 5; - int thick = proxy()->pixelMetric(QStyle::PM_SliderThickness, slider); - - if (slider->tickPosition & QStyleOptionSlider::TicksAbove) - thick += TickSpace; - if (slider->tickPosition & QStyleOptionSlider::TicksBelow) - thick += TickSpace; - sz.setWidth(thick); - - if (sub & SC_SliderGroove) { - const int SliderLength = 84; - sz.setHeight(SliderLength); - } - if (slider->orientation == Qt::Horizontal) - sz.transpose(); - if (sub & SC_SliderHandle) { - const QSize s = proxy()->subControlRect(CC_Slider, slider, SC_SliderHandle).size(); - sz = sz.expandedTo(s); - } - } - break; - case CT_ScrollBar : - // Make sure that the scroll bar is large enough to display the thumb indicator. - if (const QStyleOptionSlider *slider = qstyleoption_cast(option)) { - const int scrollBarHeight = proxy()->pixelMetric(QStyle::PM_ScrollBarExtent, slider); - const int scrollBarSliderMin = proxy()->pixelMetric(QStyle::PM_ScrollBarSliderMin, slider); - int &szw = slider->orientation == Qt::Horizontal ? sz.rwidth() : sz.rheight(); - int &szh = slider->orientation == Qt::Horizontal ? sz.rheight() : sz.rwidth(); - if (slider->subControls & (SC_ScrollBarSlider | SC_ScrollBarGroove)) { - szw = qMax(szw, scrollBarSliderMin + 2 * scrollBarHeight); - szh = scrollBarHeight; - } else if (slider->subControls & (SC_ScrollBarAddLine| SC_ScrollBarSubLine)) { - // Assume that the AddLine and SubLine buttons have the same size, and just query - // for the size of AddLine - const QSize s = proxy()->subControlRect(CC_ScrollBar, slider, SC_ScrollBarAddLine).size(); - szw = qMax(szw, s.width()); - szh = scrollBarHeight; - } - } - break; - default: - sz = QWindowsStyle::sizeFromContents(ct, option, sz); - break; - } - - return sz; -} - - -/*! \reimp */ -int QWindowsXPStyle::styleHint(StyleHint hint, const QStyleOption *option, - QStyleHintReturn *returnData) const -{ - QWindowsXPStylePrivate *d = const_cast(d_func()); - if (!QWindowsXPStylePrivate::useXP()) - return QWindowsStyle::styleHint(hint, option, returnData); - - int res = 0; - switch (hint) { - - case SH_EtchDisabledText: - //res = (qobject_cast(widget) != 0); - res = 0; - break; - - case SH_SpinControls_DisableOnBounds: - res = 0; - break; - - case SH_TitleBar_AutoRaise: - case SH_TitleBar_NoBorder: - res = 1; - break; - - case SH_GroupBox_TextLabelColor: - if (option->state & QStyle::State_Enabled) - res = d->groupBoxTextColor; - else - res = d->groupBoxTextColorDisabled; - break; - - case SH_Table_GridLineColor: - res = 0xC0C0C0; - break; - - case SH_WindowFrame_Mask: - { - res = 1; - QStyleHintReturnMask *mask = qstyleoption_cast(returnData); - const QStyleOptionTitleBar *titlebar = qstyleoption_cast(option); - if (mask && titlebar) { - // Note certain themes will not return the whole window frame but only the titlebar part when - // queried This function needs to return the entire window mask, hence we will only fetch the mask for the - // titlebar itself and add the remaining part of the window rect at the bottom. - int tbHeight = proxy()->pixelMetric(PM_TitleBarHeight, option); - QRect titleBarRect = option->rect; - titleBarRect.setHeight(tbHeight); - XPThemeData themeData; - if (titlebar->titleBarState & Qt::WindowMinimized) { - themeData = XPThemeData(option->window, nullptr, - QWindowsXPStylePrivate::WindowTheme, - WP_MINCAPTION, CS_ACTIVE, titleBarRect); - } else { - themeData = XPThemeData(option->window, nullptr, - QWindowsXPStylePrivate::WindowTheme, - WP_CAPTION, CS_ACTIVE, titleBarRect); - } - mask->region = d->region(themeData) + - QRect(0, tbHeight, option->rect.width(), option->rect.height() - tbHeight); - } - } - break; -#if 0 && QT_CONFIG(rubberband) - case SH_RubberBand_Mask: - if (qstyleoption_cast(option)) - res = 0; - break; -#endif // QT_CONFIG(rubberband) - - case SH_ItemView_DrawDelegateFrame: - res = 1; - break; - - default: - res =QWindowsStyle::styleHint(hint, option, returnData); - } - - return res; -} - -QMargins QWindowsXPStyle::ninePatchMargins(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, const QSize &imageSize) const -{ - QMargins margins; - - switch (cc) { - case CC_ScrollBar: { - margins = QWindowsStyle::ninePatchMargins(cc, opt, imageSize); - if (const auto option = qstyleoption_cast(opt)) { - if (option->orientation == Qt::Horizontal) { - margins.setTop(-1); - margins.setBottom(-1); - } else { - margins.setLeft(-1); - margins.setRight(-1); - } - } - break; } - default: - margins = QWindowsStyle::ninePatchMargins(cc, opt, imageSize); - break; - } - - return margins; -} - - -/*! \reimp */ -QPalette QWindowsXPStyle::standardPalette() const -{ - return QWindowsXPStylePrivate::useXP() ? QPalette() : QWindowsStyle::standardPalette(); -} - -/*! - \reimp -*/ -QPixmap QWindowsXPStyle::standardPixmap(StandardPixmap standardPixmap, const QStyleOption *option) const -{ - if (!QWindowsXPStylePrivate::useXP()) - return QWindowsStyle::standardPixmap(standardPixmap, option); - -#if 0 - switch (standardPixmap) { - case SP_TitleBarMaxButton: - case SP_TitleBarCloseButton: - if (qstyleoption_cast(option)) - { - if (widget && widget->isWindow()) { - XPThemeData theme(widget, nullptr, QWindowsXPStylePrivate::WindowTheme, WP_SMALLCLOSEBUTTON, CBS_NORMAL); - if (theme.isValid()) { - const QSize size = (theme.size() * QWindowsStylePrivate::nativeMetricScaleFactor(option)).toSize(); - return QIcon(QWindowsStyle::standardPixmap(standardPixmap, option, widget)).pixmap(size); - } - } - } - break; - default: - break; - } -#endif - return QWindowsStyle::standardPixmap(standardPixmap, option); -} - -/*! - \reimp -*/ -QIcon QWindowsXPStyle::standardIcon(StandardPixmap standardIcon, - const QStyleOption *option) const -{ - if (!QWindowsXPStylePrivate::useXP()) { - return QWindowsStyle::standardIcon(standardIcon, option); - } -#if 0 - QWindowsXPStylePrivate *d = const_cast(d_func()); - switch (standardIcon) { - case SP_TitleBarMaxButton: - if (qstyleoption_cast(option)) - { - if (d->dockFloat.isNull()) { - XPThemeData themeSize(nullptr, nullptr, QWindowsXPStylePrivate::WindowTheme, - WP_SMALLCLOSEBUTTON, CBS_NORMAL); - XPThemeData theme(nullptr, nullptr, QWindowsXPStylePrivate::WindowTheme, - WP_MAXBUTTON, MAXBS_NORMAL); - if (theme.isValid()) { - const QSize size = (themeSize.size() * QWindowsStylePrivate::nativeMetricScaleFactor(option)).toSize(); - QPixmap pm(size); - pm.fill(Qt::transparent); - QPainter p(&pm); - theme.painter = &p; - theme.rect = QRect(QPoint(0, 0), size); - d->drawBackground(theme); - d->dockFloat.addPixmap(pm, QIcon::Normal, QIcon::Off); // Normal - pm.fill(Qt::transparent); - theme.stateId = MAXBS_PUSHED; - d->drawBackground(theme); - d->dockFloat.addPixmap(pm, QIcon::Normal, QIcon::On); // Pressed - pm.fill(Qt::transparent); - theme.stateId = MAXBS_HOT; - d->drawBackground(theme); - d->dockFloat.addPixmap(pm, QIcon::Active, QIcon::Off); // Hover - pm.fill(Qt::transparent); - theme.stateId = MAXBS_INACTIVE; - d->drawBackground(theme); - d->dockFloat.addPixmap(pm, QIcon::Disabled, QIcon::Off); // Disabled - } - } - if (widget && widget->isWindow()) - return d->dockFloat; - - } - break; - case SP_TitleBarCloseButton: - if (qstyleoption_cast(option)) - { - if (d->dockClose.isNull()) { - XPThemeData theme(nullptr, nullptr, QWindowsXPStylePrivate::WindowTheme, - WP_SMALLCLOSEBUTTON, CBS_NORMAL); - if (theme.isValid()) { - const QSize size = (theme.size() * QWindowsStylePrivate::nativeMetricScaleFactor(option)).toSize(); - QPixmap pm(size); - pm.fill(Qt::transparent); - QPainter p(&pm); - theme.painter = &p; - theme.partId = WP_CLOSEBUTTON; // #### - theme.rect = QRect(QPoint(0, 0), size); - d->drawBackground(theme); - d->dockClose.addPixmap(pm, QIcon::Normal, QIcon::Off); // Normal - pm.fill(Qt::transparent); - theme.stateId = CBS_PUSHED; - d->drawBackground(theme); - d->dockClose.addPixmap(pm, QIcon::Normal, QIcon::On); // Pressed - pm.fill(Qt::transparent); - theme.stateId = CBS_HOT; - d->drawBackground(theme); - d->dockClose.addPixmap(pm, QIcon::Active, QIcon::Off); // Hover - pm.fill(Qt::transparent); - theme.stateId = CBS_INACTIVE; - d->drawBackground(theme); - d->dockClose.addPixmap(pm, QIcon::Disabled, QIcon::Off); // Disabled - } - } - if (widget && widget->isWindow()) - return d->dockClose; - } - break; - case SP_TitleBarNormalButton: - if (qstyleoption_cast(option)) - { - if (d->dockFloat.isNull()) { - XPThemeData themeSize(nullptr, nullptr, QWindowsXPStylePrivate::WindowTheme, - WP_SMALLCLOSEBUTTON, CBS_NORMAL); - XPThemeData theme(nullptr, nullptr, QWindowsXPStylePrivate::WindowTheme, - WP_RESTOREBUTTON, RBS_NORMAL); - if (theme.isValid()) { - const QSize size = (themeSize.size() * QWindowsStylePrivate::nativeMetricScaleFactor(option)).toSize(); - QPixmap pm(size); - pm.fill(Qt::transparent); - QPainter p(&pm); - theme.painter = &p; - theme.rect = QRect(QPoint(0, 0), size); - d->drawBackground(theme); - d->dockFloat.addPixmap(pm, QIcon::Normal, QIcon::Off); // Normal - pm.fill(Qt::transparent); - theme.stateId = RBS_PUSHED; - d->drawBackground(theme); - d->dockFloat.addPixmap(pm, QIcon::Normal, QIcon::On); // Pressed - pm.fill(Qt::transparent); - theme.stateId = RBS_HOT; - d->drawBackground(theme); - d->dockFloat.addPixmap(pm, QIcon::Active, QIcon::Off); // Hover - pm.fill(Qt::transparent); - theme.stateId = RBS_INACTIVE; - d->drawBackground(theme); - d->dockFloat.addPixmap(pm, QIcon::Disabled, QIcon::Off); // Disabled - } - } - if (widget && widget->isWindow()) - return d->dockFloat; - - } - break; - default: - break; - } -#endif - return QWindowsStyle::standardIcon(standardIcon, option); -} - -/*! - \internal - - Constructs a QWindowsXPStyle object. -*/ -QWindowsXPStyle::QWindowsXPStyle(QWindowsXPStylePrivate &dd) : QWindowsStyle(dd) -{ -} - -#ifndef QT_NO_DEBUG_STREAM -QDebug operator<<(QDebug d, const XPThemeData &t) -{ - QDebugStateSaver saver(d); - d.nospace(); - d << "XPThemeData(" << t.window << ", theme=#" << t.theme << ", " << t.htheme - << ", partId=" << t.partId << ", stateId=" << t.stateId << ", rect=" << t.rect - << ", mirrorHorizontally=" << t.mirrorHorizontally << ", mirrorVertically=" - << t.mirrorVertically << ", noBorder=" << t.noBorder << ", noContent=" << t.noContent - << ", rotate=" << t.rotate << ')'; - return d; -} - -QDebug operator<<(QDebug d, const ThemeMapKey &k) -{ - QDebugStateSaver saver(d); - d.nospace(); - d << "ThemeMapKey(theme=#" << k.theme - << ", partId=" << k.partId << ", stateId=" << k.stateId - << ", noBorder=" << k.noBorder << ", noContent=" << k.noContent << ')'; - return d; -} - -QDebug operator<<(QDebug d, const ThemeMapData &td) -{ - QDebugStateSaver saver(d); - d.nospace(); - d << "ThemeMapData(alphaType=" << td.alphaType - << ", dataValid=" << td.dataValid << ", partIsTransparent=" << td.partIsTransparent - << ", hasAlphaChannel=" << td.hasAlphaChannel << ", wasAlphaSwapped=" << td.wasAlphaSwapped - << ", hadInvalidAlpha=" << td.hadInvalidAlpha << ')'; - return d; -} -#endif // QT_NO_DEBUG_STREAM - -// Debugging code ---------------------------------------------------------------------[ START ]--- -// The code for this point on is not compiled by default, but only used as assisting -// debugging code when you uncomment the DEBUG_XP_STYLE define at the top of the file. - -#ifdef DEBUG_XP_STYLE -// The schema file expects these to be defined by the user. -#define TMT_ENUMDEF 8 -#define TMT_ENUMVAL TEXT('A') -#define TMT_ENUM TEXT('B') -#define SCHEMA_STRINGS // For 2nd pass on schema file -QT_BEGIN_INCLUDE_NAMESPACE -#include -QT_END_INCLUDE_NAMESPACE - -// A property's value, type and name combo -struct PropPair { - int propValue; - int propType; - LPCWSTR propName; -}; - -// Operator for sorting of PropPairs -bool operator<(PropPair a, PropPair b) { - return wcscmp(a.propName, b.propName) < 0; -} - -// Our list of all possible properties -static QList all_props; - - -/*! \internal - Dumps a portion of the full native DIB section double buffer. - The DIB section double buffer is only used when doing special - transformations to the theme part, or when the real double - buffer in the paintengine does not have an HDC we may use - directly. - Since we cannot rely on the pixel data we get from Microsoft - when drawing into the DIB section, we use this function to - see the actual data we got, and can determin the appropriate - action. -*/ -void QWindowsXPStylePrivate::dumpNativeDIB(int w, int h) -{ - if (w && h) { - static int pCount = 0; - DWORD *bufPix = (DWORD*)bufferPixels; - - char *bufferDump = new char[bufferH * bufferW * 16]; - char *bufferPos = bufferDump; - - memset(bufferDump, 0, sizeof(bufferDump)); - bufferPos += sprintf(bufferPos, "const int pixelBufferW%d = %d;\n", pCount, w); - bufferPos += sprintf(bufferPos, "const int pixelBufferH%d = %d;\n", pCount, h); - bufferPos += sprintf(bufferPos, "const unsigned DWORD pixelBuffer%d[] = {", pCount); - for (int iy = 0; iy < h; ++iy) { - bufferPos += sprintf(bufferPos, "\n "); - bufPix = (DWORD*)(bufferPixels + (iy * bufferW * 4)); - for (int ix = 0; ix < w; ++ix) { - bufferPos += sprintf(bufferPos, "0x%08x, ", *bufPix); - ++bufPix; - } - } - bufferPos += sprintf(bufferPos, "\n};\n\n"); - printf(bufferDump); - - delete[] bufferDump; - ++pCount; - } -} - -/*! \internal - Shows the value of a given property for a part. -*/ -static void showProperty(XPThemeData &themeData, const PropPair &prop) -{ - PROPERTYORIGIN origin = PO_NOTFOUND; - GetThemePropertyOrigin(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, &origin); - const char *originStr; - switch (origin) { - case PO_STATE: - originStr = "State "; - break; - case PO_PART: - originStr = "Part "; - break; - case PO_CLASS: - originStr = "Class "; - break; - case PO_GLOBAL: - originStr = "Globl "; - break; - case PO_NOTFOUND: - default: - originStr = "Unkwn "; - break; - } - - switch (prop.propType) { - case TMT_STRING: - { - wchar_t buffer[512]; - GetThemeString(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, buffer, 512); - printf(" (%sString) %-20S: %S\n", originStr, prop.propName, buffer); - } - break; - case TMT_ENUM: - { - int result = -1; - GetThemeEnumValue(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, &result); - printf(" (%sEnum) %-20S: %d\n", originStr, prop.propName, result); - } - break; - case TMT_INT: - { - int result = -1; - GetThemeInt(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, &result); - printf(" (%sint) %-20S: %d\n", originStr, prop.propName, result); - } - break; - case TMT_BOOL: - { - BOOL result = false; - GetThemeBool(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, &result); - printf(" (%sbool) %-20S: %d\n", originStr, prop.propName, result); - } - break; - case TMT_COLOR: - { - COLORREF result = 0; - GetThemeColor(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, &result); - printf(" (%scolor) %-20S: 0x%08X\n", originStr, prop.propName, result); - } - break; - case TMT_MARGINS: - { - MARGINS result; - memset(&result, 0, sizeof(result)); - GetThemeMargins(themeData.handle(), 0, themeData.partId, themeData.stateId, prop.propValue, 0, &result); - printf(" (%smargins) %-20S: (%d, %d, %d, %d)\n", originStr, - prop.propName, result.cxLeftWidth, result.cyTopHeight, result.cxRightWidth, result.cyBottomHeight); - } - break; - case TMT_FILENAME: - { - wchar_t buffer[512]; - GetThemeFilename(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, buffer, 512); - printf(" (%sfilename)%-20S: %S\n", originStr, prop.propName, buffer); - } - break; - case TMT_SIZE: - { - SIZE result1; - SIZE result2; - SIZE result3; - memset(&result1, 0, sizeof(result1)); - memset(&result2, 0, sizeof(result2)); - memset(&result3, 0, sizeof(result3)); - GetThemePartSize(themeData.handle(), 0, themeData.partId, themeData.stateId, 0, TS_MIN, &result1); - GetThemePartSize(themeData.handle(), 0, themeData.partId, themeData.stateId, 0, TS_TRUE, &result2); - GetThemePartSize(themeData.handle(), 0, themeData.partId, themeData.stateId, 0, TS_DRAW, &result3); - printf(" (%ssize) %-20S: Min (%d, %d), True(%d, %d), Draw(%d, %d)\n", originStr, prop.propName, - result1.cx, result1.cy, result2.cx, result2.cy, result3.cx, result3.cy); - } - break; - case TMT_POSITION: - { - POINT result; - memset(&result, 0, sizeof(result)); - GetThemePosition(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, &result); - printf(" (%sPosition)%-20S: (%d, %d)\n", originStr, prop.propName, result.x, result.y); - } - break; - case TMT_RECT: - { - RECT result; - memset(&result, 0, sizeof(result)); - GetThemeRect(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, &result); - printf(" (%sRect) %-20S: (%d, %d, %d, %d)\n", originStr, prop.propName, result.left, result.top, result.right, result.bottom); - } - break; - case TMT_FONT: - { - LOGFONT result; - memset(&result, 0, sizeof(result)); - GetThemeFont(themeData.handle(), 0, themeData.partId, themeData.stateId, prop.propValue, &result); - printf(" (%sFont) %-20S: %S height(%d) width(%d) weight(%d)\n", originStr, prop.propName, - result.lfFaceName, result.lfHeight, result.lfWidth, result.lfWeight); - } - break; - case TMT_INTLIST: - { - INTLIST result; - memset(&result, 0, sizeof(result)); - GetThemeIntList(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, &result); - printf(" (%sInt list)%-20S: { ", originStr, prop.propName); - for (int i = 0; i < result.iValueCount; ++i) - printf("%d ", result.iValues[i]); - printf("}\n"); - } - break; - default: - printf(" %s%S : Unknown property type (%d)!\n", originStr, prop.propName, prop.propType); - } -} - -/*! \internal - Dump all valid properties for a part. - If it's the first time this function is called, then the name, - enum value and documentation of all properties are shown, as - well as all global properties. -*/ -void QWindowsXPStylePrivate::showProperties(XPThemeData &themeData) -{ - if (!all_props.count()) { - const TMSCHEMAINFO *infoTable = GetSchemaInfo(); - for (int i = 0; i < infoTable->iPropCount; ++i) { - int propType = infoTable->pPropTable[i].bPrimVal; - int propValue = infoTable->pPropTable[i].sEnumVal; - LPCWSTR propName = infoTable->pPropTable[i].pszName; - - switch (propType) { - case TMT_ENUMDEF: - case TMT_ENUMVAL: - continue; - default: - if (propType != propValue) { - PropPair prop; - prop.propValue = propValue; - prop.propName = propName; - prop.propType = propType; - all_props.append(prop); - } - } - } - std::sort(all_props.begin(), all_props.end()); - - {// List all properties - printf("part properties count = %d:\n", all_props.count()); - printf(" Enum Property Name Description\n"); - printf("-----------------------------------------------------------\n"); - wchar_t themeName[256]; - pGetCurrentThemeName(themeName, 256, 0, 0, 0, 0); - for (int j = 0; j < all_props.count(); ++j) { - PropPair prop = all_props.at(j); - wchar_t buf[500]; - GetThemeDocumentationProperty(themeName, prop.propName, buf, 500); - printf("%3d: (%4d) %-20S %S\n", j, prop.propValue, prop.propName, buf); - } - } - - {// Show Global values - printf("Global Properties:\n"); - for (int j = 0; j < all_props.count(); ++j) { - PropPair prop = all_props.at(j); - PROPERTYORIGIN origin = PO_NOTFOUND; - GetThemePropertyOrigin(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, &origin); - if (origin == PO_GLOBAL) { - showProperty(themeData, prop); - } - } - } - } - - for (int j = 0; j < all_props.count(); ++j) { - PropPair prop = all_props.at(j); - PROPERTYORIGIN origin = PO_NOTFOUND; - GetThemePropertyOrigin(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, &origin); - if (origin != PO_NOTFOUND) - { - showProperty(themeData, prop); - } - } -} -#endif -// Debugging code -----------------------------------------------------------------------[ END ]--- - -} //namespace QQC2 - -QT_END_NAMESPACE diff --git a/src/imports/nativestyle/qstyle/windows/qquickwindowsxpstyle_p.h b/src/imports/nativestyle/qstyle/windows/qquickwindowsxpstyle_p.h deleted file mode 100644 index 5d8d5e20..00000000 --- a/src/imports/nativestyle/qstyle/windows/qquickwindowsxpstyle_p.h +++ /dev/null @@ -1,102 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWidgets module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKWINDOWSXPSTYLE_P_H -#define QQUICKWINDOWSXPSTYLE_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 "qquickwindowsstyle_p.h" - -QT_BEGIN_NAMESPACE - -namespace QQC2 { - -class QWindowsXPStylePrivate; -class QWindowsXPStyle : public QWindowsStyle -{ - Q_OBJECT -public: - QWindowsXPStyle(); - QWindowsXPStyle(QWindowsXPStylePrivate &dd); - ~QWindowsXPStyle() override; - -/* - void polish(QApplication*) override; - void unpolish(QApplication*) override; - void polish(QWidget*) override; - void unpolish(QWidget*) override; - void polish(QPalette&) override; -*/ - void drawPrimitive(PrimitiveElement pe, const QStyleOption *option, QPainter *p) const override; - void drawControl(ControlElement element, const QStyleOption *option, QPainter *p) const override; - QRect subElementRect(SubElement r, const QStyleOption *option) const override; - QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *option, SubControl sc) const override; - void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *option, QPainter *p) const override; - QSize sizeFromContents(ContentsType ct, const QStyleOption *option, const QSize &contentsSize) const override; - int pixelMetric(PixelMetric pm, const QStyleOption *option = nullptr) const override; - int styleHint(StyleHint hint, const QStyleOption *option = nullptr, - QStyleHintReturn *returnData = nullptr) const override; - - QPalette standardPalette() const override; - QPixmap standardPixmap(StandardPixmap standardIcon, const QStyleOption *option) const override; - QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = nullptr) const override; - - QMargins ninePatchMargins(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, const QSize &imageSize) const; - -private: - Q_DISABLE_COPY_MOVE(QWindowsXPStyle) - Q_DECLARE_PRIVATE(QWindowsXPStyle) - friend class QStyleFactory; -}; - -} // namespace QQC2 - -QT_END_NAMESPACE - -#endif // QQUICKWINDOWSXPSTYLE_P_H diff --git a/src/imports/nativestyle/qstyle/windows/qquickwindowsxpstyle_p_p.h b/src/imports/nativestyle/qstyle/windows/qquickwindowsxpstyle_p_p.h deleted file mode 100644 index a449ecdd..00000000 --- a/src/imports/nativestyle/qstyle/windows/qquickwindowsxpstyle_p_p.h +++ /dev/null @@ -1,348 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWidgets module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKWINDOWSXPSTYLE_P_P_H -#define QQUICKWINDOWSXPSTYLE_P_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 -#include "qquickwindowsxpstyle_p.h" -#include "qquickwindowsstyle_p_p.h" -#include -#include - -#include -#include - -#include - -QT_BEGIN_NAMESPACE - -class QDebug; - -namespace QQC2 { - -// TMT_TEXTSHADOWCOLOR is wrongly defined in mingw -#if TMT_TEXTSHADOWCOLOR != 3818 -#undef TMT_TEXTSHADOWCOLOR -#define TMT_TEXTSHADOWCOLOR 3818 -#endif -#ifndef TST_NONE -# define TST_NONE 0 -#endif - -// These defines are missing from the tmschema, but still exist as -// states for their parts -#ifndef MINBS_INACTIVE -#define MINBS_INACTIVE 5 -#endif -#ifndef MAXBS_INACTIVE -#define MAXBS_INACTIVE 5 -#endif -#ifndef RBS_INACTIVE -#define RBS_INACTIVE 5 -#endif -#ifndef HBS_INACTIVE -#define HBS_INACTIVE 5 -#endif -#ifndef CBS_INACTIVE -#define CBS_INACTIVE 5 -#endif - -// Uncomment define below to build debug assisting code, and output -// #define DEBUG_XP_STYLE - -// Declarations ----------------------------------------------------------------------------------- -class XPThemeData -{ -public: - explicit XPThemeData(const QWindow *w = nullptr, QPainter *p = nullptr, int themeIn = -1, - int part = 0, int state = 0, const QRect &r = QRect()) - : window(w), painter(p), theme(themeIn), partId(part), stateId(state), - mirrorHorizontally(false), mirrorVertically(false), noBorder(false), - noContent(false), rect(r) - {} - - HTHEME handle(); - - static RECT toRECT(const QRect &qr); - bool isValid(); - - QSizeF size(); - QMarginsF margins(const QRect &rect, int propId = TMT_CONTENTMARGINS); - QMarginsF margins(int propId = TMT_CONTENTMARGINS); - - static QSizeF themeSize(const QWindow *w = nullptr, QPainter *p = nullptr, int themeIn = -1, int part = 0, int state = 0); - static QMarginsF themeMargins(const QRect &rect, const QWindow *w = nullptr, QPainter *p = nullptr, int themeIn = -1, - int part = 0, int state = 0, int propId = TMT_CONTENTMARGINS); - static QMarginsF themeMargins(const QWindow *w = nullptr, QPainter *p = nullptr, int themeIn = -1, - int part = 0, int state = 0, int propId = TMT_CONTENTMARGINS); - - const QWindow *window; - QPainter *painter; - - int theme; - HTHEME htheme = nullptr; - int partId; - int stateId; - - uint mirrorHorizontally : 1; - uint mirrorVertically : 1; - uint noBorder : 1; - uint noContent : 1; - uint rotate = 0; - QRect rect; -}; - -struct ThemeMapKey { - int theme = 0; - int partId = -1; - int stateId = -1; - bool noBorder = false; - bool noContent = false; - - ThemeMapKey() = default; - ThemeMapKey(const XPThemeData &data) - : theme(data.theme), partId(data.partId), stateId(data.stateId), - noBorder(data.noBorder), noContent(data.noContent) {} - -}; - -inline size_t qHash(const ThemeMapKey &key) -{ return key.theme ^ key.partId ^ key.stateId; } - -inline bool operator==(const ThemeMapKey &k1, const ThemeMapKey &k2) -{ - return k1.theme == k2.theme - && k1.partId == k2.partId - && k1.stateId == k2.stateId; -} - -enum AlphaChannelType { - UnknownAlpha = -1, // Alpha of part & state not yet known - NoAlpha, // Totally opaque, no need to touch alpha (RGB) - MaskAlpha, // Alpha channel must be fixed (ARGB) - RealAlpha // Proper alpha values from Windows (ARGB_Premultiplied) -}; - -struct ThemeMapData { - AlphaChannelType alphaType = UnknownAlpha; // Which type of alpha on part & state - - bool dataValid : 1; // Only used to detect if hash value is ok - bool partIsTransparent : 1; - bool hasAlphaChannel : 1; // True = part & state has real Alpha - bool wasAlphaSwapped : 1; // True = alpha channel needs to be swapped - bool hadInvalidAlpha : 1; // True = alpha channel contained invalid alpha values - - ThemeMapData() : dataValid(false), partIsTransparent(false), - hasAlphaChannel(false), wasAlphaSwapped(false), hadInvalidAlpha(false) {} -}; - -#ifndef QT_NO_DEBUG_STREAM -QDebug operator<<(QDebug d, const XPThemeData &t); -QDebug operator<<(QDebug d, const ThemeMapKey &k); -QDebug operator<<(QDebug d, const ThemeMapData &td); -#endif - -class QWindowsXPStylePrivate : public QWindowsStylePrivate -{ - Q_DECLARE_PUBLIC(QWindowsXPStyle) -public: - enum Theme { - ButtonTheme, - ComboboxTheme, - EditTheme, - HeaderTheme, - ListViewTheme, - MenuTheme, - ProgressTheme, - RebarTheme, - ScrollBarTheme, - SpinTheme, - TabTheme, - TaskDialogTheme, - ToolBarTheme, - ToolTipTheme, - TrackBarTheme, - XpTreeViewTheme, // '+'/'-' shape treeview indicators (XP) - WindowTheme, - StatusTheme, - VistaTreeViewTheme, // arrow shape treeview indicators (Vista) obtained from "explorer" theme. - NThemes - }; - - QWindowsXPStylePrivate() - { init(); } - - ~QWindowsXPStylePrivate() - { cleanup(); } - - static int pixelMetricFromSystemDp(QStyle::PixelMetric pm, const QStyleOption *option = nullptr); - static int fixedPixelMetric(QStyle::PixelMetric pm, const QStyleOption *option = nullptr, const QWidget *widget = nullptr); - - static HWND winId(const QWindow *window); - - void init(bool force = false); - void cleanup(bool force = false); - void cleanupHandleMap(); - - HBITMAP buffer(int w = 0, int h = 0); - HDC bufferHDC() - { return bufferDC;} - - static bool useXP(bool update = false); - static QRect scrollBarGripperBounds(QStyle::State flags, XPThemeData *theme); - - bool isTransparent(XPThemeData &themeData); - QRegion region(XPThemeData &themeData); - - bool drawBackground(XPThemeData &themeData, qreal correctionFactor = 1); - bool drawBackgroundThruNativeBuffer(XPThemeData &themeData, qreal aditionalDevicePixelRatio, qreal correctionFactor); - bool drawBackgroundDirectly(HDC dc, XPThemeData &themeData, qreal aditionalDevicePixelRatio); - - bool hasAlphaChannel(const QRect &rect); - bool fixAlphaChannel(const QRect &rect); - bool swapAlphaChannel(const QRect &rect, bool allPixels = false); - - QRgb groupBoxTextColor = 0; - QRgb groupBoxTextColorDisabled = 0; - QRgb sliderTickColor = 0; - bool hasInitColors = false; - - static HTHEME createTheme(int theme, HWND hwnd); - static QString themeName(int theme); - static inline bool hasTheme(int theme) { return theme >= 0 && theme < NThemes && m_themes[theme]; } - static bool isItemViewDelegateLineEdit(const QWidget *widget); - static bool isLineEditBaseColorSet(const QStyleOption *option, const QWidget *widget); - - QIcon dockFloat, dockClose; - -private: -#ifdef DEBUG_XP_STYLE - void dumpNativeDIB(int w, int h); - void showProperties(XPThemeData &themeData); -#endif - - static bool initVistaTreeViewTheming(); - static void cleanupVistaTreeViewTheming(); - - static QBasicAtomicInt ref; - static bool use_xp; - - QHash alphaCache; - HDC bufferDC = nullptr; - HBITMAP bufferBitmap = nullptr; - HBITMAP nullBitmap = nullptr; - uchar *bufferPixels = nullptr; - int bufferW = 0; - int bufferH = 0; - - static HWND m_vistaTreeViewHelper; - static HTHEME m_themes[NThemes]; -}; - -inline QSizeF XPThemeData::size() -{ - QSizeF result(0, 0); - if (isValid()) { - SIZE size; - if (SUCCEEDED(GetThemePartSize(handle(), nullptr, partId, stateId, nullptr, TS_TRUE, &size))) - result = QSize(size.cx, size.cy); - } - return result; -} - -inline QMarginsF XPThemeData::margins(const QRect &qRect, int propId) -{ - QMarginsF result(0, 0, 0 ,0); - if (isValid()) { - MARGINS margins; - RECT rect = XPThemeData::toRECT(qRect); - if (SUCCEEDED(GetThemeMargins(handle(), nullptr, partId, stateId, propId, &rect, &margins))) - result = QMargins(margins.cxLeftWidth, margins.cyTopHeight, margins.cxRightWidth, margins.cyBottomHeight); - } - return result; -} - -inline QMarginsF XPThemeData::margins(int propId) -{ - QMarginsF result(0, 0, 0 ,0); - if (isValid()) { - MARGINS margins; - if (SUCCEEDED(GetThemeMargins(handle(), nullptr, partId, stateId, propId, nullptr, &margins))) - result = QMargins(margins.cxLeftWidth, margins.cyTopHeight, margins.cxRightWidth, margins.cyBottomHeight); - } - return result; -} - -inline QSizeF XPThemeData::themeSize(const QWindow *w, QPainter *p, int themeIn, int part, int state) -{ - XPThemeData theme(w, p, themeIn, part, state); - return theme.size(); -} - -inline QMarginsF XPThemeData::themeMargins(const QRect &rect, const QWindow *w, QPainter *p, int themeIn, - int part, int state, int propId) -{ - XPThemeData theme(w, p, themeIn, part, state); - return theme.margins(rect, propId); -} - -inline QMarginsF XPThemeData::themeMargins(const QWindow *w, QPainter *p, int themeIn, - int part, int state, int propId) -{ - XPThemeData theme(w, p, themeIn, part, state); - return theme.margins(propId); -} - -} //namespace QQC2 - -QT_END_NAMESPACE - -#endif //QQUICKWINDOWSXPSTYLE_P_P_H diff --git a/src/imports/nativestyle/qstyle/windows/windows.pri b/src/imports/nativestyle/qstyle/windows/windows.pri deleted file mode 100644 index beb50a5b..00000000 --- a/src/imports/nativestyle/qstyle/windows/windows.pri +++ /dev/null @@ -1,18 +0,0 @@ - -INCLUDEPATH += $$PWD - -HEADERS += \ - $$PWD/qquickwindowsstyle_p.h \ - $$PWD/qquickwindowsstyle_p_p.h \ -# $$PWD/qquickwindowsvistastyle_p.h \ -# $$PWD/qquickwindowsvistastyle_p_p.h \ - $$PWD/qquickwindowsxpstyle_p.h \ - $$PWD/qquickwindowsxpstyle_p_p.h - -SOURCES += \ - $$PWD/qquickwindowsstyle.cpp \ -# $$PWD/qquickwindowsvistastyle.cpp \ - $$PWD/qquickwindowsxpstyle.cpp - -QMAKE_USE_PRIVATE += user32 gdi32 -LIBS_PRIVATE *= -luxtheme diff --git a/src/imports/nativestyle/qtquickcontrols2nativestyleplugin.cpp b/src/imports/nativestyle/qtquickcontrols2nativestyleplugin.cpp deleted file mode 100644 index 7b638704..00000000 --- a/src/imports/nativestyle/qtquickcontrols2nativestyleplugin.cpp +++ /dev/null @@ -1,164 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include - -#include - -#include "qquicknativestyle.h" -#include "qquickcommonstyle.h" - -#if defined(Q_OS_MACOS) -#include "qquickmacstyle_mac_p.h" -#include "qquickmacfocusframe.h" -#elif defined(Q_OS_WINDOWS) -# include "qquickwindowsxpstyle_p.h" -#endif - -extern void qml_register_types_QtQuick_NativeStyle(); - -QT_BEGIN_NAMESPACE - -using namespace QQC2; - -class QtQuickControls2NativeStylePlugin : public QQuickStylePlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) - -public: - QtQuickControls2NativeStylePlugin(QObject *parent = nullptr); - ~QtQuickControls2NativeStylePlugin() override; - - void initializeEngine(QQmlEngine *engine, const char *uri) override; - void initializeTheme(QQuickTheme *theme) override; - QString name() const override; - -#if defined(Q_OS_MACOS) - QScopedPointer m_focusFrame; -#endif -}; - -static void deleteQStyle() -{ - // When we delete QStyle, it will free up it's own internal resources. Especially - // on macOS, this means releasing a lot of NSViews and NSCells from the QMacStyle - // destructor. If we did this from ~QtQuickControls2NativeStylePlugin, it would - // happen when the plugin was unloaded from a Q_DESTRUCTOR_FUNCTION in QLibrary, - // which is very late in the tear-down process, and after qGuiApp has been set to - // nullptr, NSApplication has stopped running, and perhaps also other static platform - // variables (e.g in AppKit?) has been deleted. And to our best guess, this is also why - // we see a crash in AppKit from the destructor in QMacStyle. So for this reason, we - // delete QStyle from a post routine rather than from the destructor. - QQuickNativeStyle::setStyle(nullptr); -} - -QtQuickControls2NativeStylePlugin::QtQuickControls2NativeStylePlugin(QObject *parent): - QQuickStylePlugin(parent) -{ - volatile auto registration = &qml_register_types_QtQuick_NativeStyle; - Q_UNUSED(registration); -} - -QtQuickControls2NativeStylePlugin::~QtQuickControls2NativeStylePlugin() -{ - if (!qGuiApp) - return; - - // QGuiApplication is still running, so we need to remove the post - // routine to not be called after we have been unloaded. - qRemovePostRoutine(deleteQStyle); - QQuickNativeStyle::setStyle(nullptr); -} - -QString QtQuickControls2NativeStylePlugin::name() const -{ - return QStringLiteral("NativeStyle"); -} - -void QtQuickControls2NativeStylePlugin::initializeEngine(QQmlEngine *engine, const char *uri) -{ - Q_UNUSED(engine); - Q_UNUSED(uri); - // Enable commonstyle as a reference style while - // the native styles are under development. - QStyle *style = nullptr; - if (qEnvironmentVariable("QQC2_COMMONSTYLE") == QStringLiteral("true")) { - style = new QCommonStyle; - } else { - const QString envStyle = qEnvironmentVariable("QQC2_STYLE"); - if (!envStyle.isNull()) { - if (envStyle == QLatin1String("common")) - style = new QCommonStyle; -#if defined(Q_OS_MACOS) - else if (envStyle == QLatin1String("mac")) - style = new QMacStyle; -#endif -#if defined(Q_OS_WINDOWS) - else if (envStyle == QLatin1String("windows")) - style = new QWindowsStyle; - else if (envStyle == QLatin1String("windowsxp")) - style = new QWindowsXPStyle; -#endif - } - if (!style) { -#if defined(Q_OS_MACOS) - style = new QMacStyle; -#elif defined(Q_OS_WINDOWS) - style = new QWindowsXPStyle; -#else - style = new QCommonStyle; -#endif - } - } - -#if defined(Q_OS_MACOS) - m_focusFrame.reset(new QQuickMacFocusFrame()); -#endif - - qAddPostRoutine(deleteQStyle); - QQuickNativeStyle::setStyle(style); -} - -void QtQuickControls2NativeStylePlugin::initializeTheme(QQuickTheme */*theme*/) -{ -} - -QT_END_NAMESPACE - -#include "qtquickcontrols2nativestyleplugin.moc" diff --git a/src/imports/nativestyle/util/FocusFrame.qml b/src/imports/nativestyle/util/FocusFrame.qml deleted file mode 100644 index b3f3a80e..00000000 --- a/src/imports/nativestyle/util/FocusFrame.qml +++ /dev/null @@ -1,118 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -import QtQuick -import QtQuick.Controls -import QtQuick.Layouts - -Item { - id: root - - // It's important that this item has a zero size. Otherwise, if the parent of the - // targetItem is e.g a layout, we will change the layout if we parent this item inside it. - width: 0 - height: 0 - // Stack on top of all siblings of the targetItem - z: 100 - - function moveToItem(item, margins, radius) { - parent = item.parent - targetItem = item - leftOffset = margins.left - rightOffset = margins.right - topOffset = margins.top - bottomOffset = margins.bottom - frameRadius = radius - animation.restart() - } - - property Item targetItem - property real leftOffset: 0 - property real rightOffset: 0 - property real topOffset: 0 - property real bottomOffset: 0 - property real frameOpacity: 0 - property real frameSize: 0 - property real frameRadius: 0 - - property point targetItemPos: { - if (!targetItem) - return Qt.point(0, 0) - // Force a reevaluation if - // the target item moves - targetItem.x - targetItem.y - mapFromItem(targetItem, Qt.point(0, 0)) - } - - // systemFrameColor is set to NSColor.keyboardFocusIndicatorColor from cpp - property color systemFrameColor - - Rectangle { - id: focusFrame - z: 10 - x: targetItemPos.x + leftOffset - frameSize - y: targetItemPos.y + topOffset - frameSize - width: targetItem ? targetItem.width - leftOffset - rightOffset + (frameSize * 2) : 0 - height: targetItem ? targetItem.height - topOffset - bottomOffset + (frameSize * 2) : 0 - radius: frameRadius - visible: targetItem && targetItem.visible - color: "transparent" - - border.color: systemFrameColor - border.width: frameSize - } - - ParallelAnimation { - id: animation - NumberAnimation { - target: root - property: "frameSize" - duration: 300 - from: 15 - to: 2.5 - easing.type: Easing.OutCubic - } - NumberAnimation { - target: focusFrame - property: "opacity" - duration: 300 - from: 0 - to: 0.55 - easing.type: Easing.OutCubic - } - } -} diff --git a/src/imports/nativestyle/util/qquickmacfocusframe.h b/src/imports/nativestyle/util/qquickmacfocusframe.h deleted file mode 100644 index 425b2a68..00000000 --- a/src/imports/nativestyle/util/qquickmacfocusframe.h +++ /dev/null @@ -1,73 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKMACFOCUSFRAME_H -#define QQUICKMACFOCUSFRAME_H - -#include -#include -#include "qquickstyleitem.h" - -QT_BEGIN_NAMESPACE - -Q_DECLARE_LOGGING_CATEGORY(lcFocusFrame) - -struct QQuickFocusFrameDescription { - QQuickItem *target; - QQuickStyleMargins margins; - const qreal radius = 3; - bool isValid() const { return target != nullptr; } - static QQuickFocusFrameDescription Invalid; -}; - -class QQuickMacFocusFrame : public QObject -{ - Q_OBJECT - -public: - QQuickMacFocusFrame(); - -private: - static QScopedPointer m_focusFrame; - - void createFocusFrame(QQmlContext *context); - void moveToItem(QQuickItem *item); - QQuickFocusFrameDescription getDescriptionForItem(QQuickItem *focusItem) const; -}; - -QT_END_NAMESPACE - -#endif // QQUICKMACFOCUSFRAME_H diff --git a/src/imports/nativestyle/util/qquickmacfocusframe.mm b/src/imports/nativestyle/util/qquickmacfocusframe.mm deleted file mode 100644 index 14b5de60..00000000 --- a/src/imports/nativestyle/util/qquickmacfocusframe.mm +++ /dev/null @@ -1,178 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickmacfocusframe.h" - -#include - -#include - -#include -#include - -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "items/qquickstyleitem.h" -#include "qquicknativestyle.h" - -QT_BEGIN_NAMESPACE - -Q_LOGGING_CATEGORY(lcFocusFrame, "qt.quick.controls.focusframe") - -QQuickFocusFrameDescription QQuickFocusFrameDescription::Invalid = { nullptr, QQuickStyleMargins(), 0 }; -QScopedPointer QQuickMacFocusFrame::m_focusFrame; - -QQuickMacFocusFrame::QQuickMacFocusFrame() -{ - connect(qGuiApp, &QGuiApplication::focusObjectChanged, [=]{ - if (auto item = qobject_cast(qGuiApp->focusObject())) - moveToItem(item); - }); -} - -void QQuickMacFocusFrame::moveToItem(QQuickItem *item) -{ - if (!m_focusFrame) { - const auto context = QQmlEngine::contextForObject(item); - if (!context) - return; - createFocusFrame(context); - } - - const QQuickFocusFrameDescription &config = getDescriptionForItem(item); - if (!config.isValid()) { - m_focusFrame->setParentItem(nullptr); - m_focusFrame->setVisible(false); - return; - } - - m_focusFrame->setVisible(true); - QMetaObject::invokeMethod(m_focusFrame.data(), "moveToItem", - Q_ARG(QVariant, QVariant::fromValue(config.target)), - Q_ARG(QVariant, QVariant::fromValue(config.margins)), - Q_ARG(QVariant, QVariant::fromValue(config.radius))); -} - -void QQuickMacFocusFrame::createFocusFrame(QQmlContext *context) -{ - QQmlComponent component(context->engine(), QUrl(QStringLiteral("qrc:/util/FocusFrame.qml"))); - m_focusFrame.reset(qobject_cast(component.create())); - - auto indicatorColor = qt_mac_toQColor(NSColor.keyboardFocusIndicatorColor.CGColor); - indicatorColor.setAlpha(255); - m_focusFrame->setProperty("systemFrameColor", indicatorColor); -} - -QQuickFocusFrameDescription QQuickMacFocusFrame::getDescriptionForItem(QQuickItem *focusItem) const -{ - qCDebug(lcFocusFrame) << "new focusobject:" << focusItem; - const auto parentItem = focusItem->parentItem(); - if (!parentItem) - return QQuickFocusFrameDescription::Invalid; - - // The item that gets active focus can be a child of the control (e.g - // editable ComboBox). In that case, resolve the actual control first. - const auto proxy = focusItem->property("__focusFrameControl").value(); - const auto control = proxy ? proxy : focusItem; - auto target = control->property("__focusFrameTarget").value(); - qCDebug(lcFocusFrame) << "target:" << target; - qCDebug(lcFocusFrame) << "control:" << control; - - if (!target) { - // __focusFrameTarget points to the item in the control that should - // get the focus frame. This is usually the control itself, but can - // sometimes be a child (CheckBox). We anyway require - // this property to be set if we are to show the focus frame around - // the control in the first place. So for controls that don't want - // a frame (ProgressBar), we simply skip setting it. - // Also, we should never show a focus frame around custom controls. - // None of the built-in styles do that, so to be consistent, we - // shouldn't either. Besides, drawing a focus frame around an unknown - // item without any way to turn it off can easily be unwanted. A better - // way for custom controls to get a native focus frame is for us to offer - // a FocusFrame control (QTBUG-86818). - return QQuickFocusFrameDescription::Invalid; - } - - // If the control gives us a QQuickStyleItem, we use that to configure the focus frame. - // By default we assume that the background delegate is a QQuickStyleItem, but the - // control can override this by setting __focusFrameStyleItem. - const auto styleItemProperty = control->property("__focusFrameStyleItem"); - auto item = styleItemProperty.value(); - if (!item) { - const auto styleItemProperty = control->property("background"); - item = styleItemProperty.value(); - } - qCDebug(lcFocusFrame) << "styleItem:" << item; - if (!item) - return QQuickFocusFrameDescription::Invalid; - if (QQuickStyleItem *styleItem = qobject_cast(item)) - return { target, QQuickStyleMargins(styleItem->layoutMargins()), styleItem->focusFrameRadius() }; - - // Some controls don't have a QQuickStyleItem. But if the __focusFrameStyleItem - // has a "__isDefaultDelegate" property set, we show a default focus frame instead. - if (item->property("__isDefaultDelegate").toBool() == true) { - qCDebug(lcFocusFrame) << "'__isDefaultDelegate' property found, showing a default focus frame"; - const QStyleOption opt; - const qreal radius = QQuickNativeStyle::style()->pixelMetric(QStyle::PM_TextFieldFocusFrameRadius, &opt); - return { target, QQuickStyleMargins(), radius }; - } - - // The application has set a custom delegate on the control. In that - // case, it's the delegates responsibility to draw a focus frame. - qCDebug(lcFocusFrame) << "custom delegates in use, skip showing focus frame"; - return QQuickFocusFrameDescription::Invalid; -} - -QT_END_NAMESPACE diff --git a/src/imports/nativestyle/util/util.pri b/src/imports/nativestyle/util/util.pri deleted file mode 100644 index 96786eac..00000000 --- a/src/imports/nativestyle/util/util.pri +++ /dev/null @@ -1,11 +0,0 @@ -INCLUDEPATH += $$PWD - -macos { - HEADERS += \ - $$PWD/qquickmacfocusframe.h \ - - SOURCES += \ - $$PWD/qquickmacfocusframe.mm \ - - RESOURCES += $$PWD/FocusFrame.qml -} diff --git a/src/imports/platform/CMakeLists.txt b/src/imports/platform/CMakeLists.txt deleted file mode 100644 index 07c99156..00000000 --- a/src/imports/platform/CMakeLists.txt +++ /dev/null @@ -1,103 +0,0 @@ -# Generated from platform.pro. - -##################################################################### -## qtlabsplatformplugin Plugin: -##################################################################### - -qt_internal_add_qml_module(qtlabsplatformplugin - URI "Qt.labs.platform" - VERSION "1.1" - CLASSNAME QtLabsPlatformPlugin - GENERATE_QMLTYPES - INSTALL_QMLTYPES - SOURCES - qquickplatformcolordialog.cpp qquickplatformcolordialog_p.h - qquickplatformdialog.cpp qquickplatformdialog_p.h - qquickplatformfiledialog.cpp qquickplatformfiledialog_p.h - qquickplatformfolderdialog.cpp qquickplatformfolderdialog_p.h - qquickplatformfontdialog.cpp qquickplatformfontdialog_p.h - qquickplatformicon.cpp qquickplatformicon_p.h - qquickplatformiconloader.cpp qquickplatformiconloader_p.h - qquickplatformmenu.cpp qquickplatformmenu_p.h - qquickplatformmenubar.cpp qquickplatformmenubar_p.h - qquickplatformmenuitem.cpp qquickplatformmenuitem_p.h - qquickplatformmenuitemgroup.cpp qquickplatformmenuitemgroup_p.h - qquickplatformmenuseparator.cpp qquickplatformmenuseparator_p.h - qquickplatformmessagedialog.cpp qquickplatformmessagedialog_p.h - qquickplatformstandardpaths.cpp qquickplatformstandardpaths_p.h - qtlabsplatformplugin.cpp - DEFINES - QT_NO_CAST_FROM_ASCII - QT_NO_CAST_TO_ASCII - LIBRARIES - Qt::CorePrivate - Qt::GuiPrivate - Qt::QmlPrivate - Qt::QuickPrivate - Qt::QuickTemplates2Private - PUBLIC_LIBRARIES - Qt::Core - Qt::Gui - Qt::Qml - Qt::Quick -) - -#### Keys ignored in scope 1:.:.:platform.pro:: -# IMPORT_VERSION = "1.1" -# OTHER_FILES = "qmldir" -# TARGETPATH = "Qt/labs/platform" - -## Scopes: -##################################################################### - -qt_internal_extend_target(qtlabsplatformplugin CONDITION TARGET Qt::Widgets - SOURCES - widgets/qwidgetplatform_p.h - PUBLIC_LIBRARIES - Qt::Widgets -) - -qt_internal_extend_target(qtlabsplatformplugin CONDITION TARGET Qt::Widgets AND QT_FEATURE_systemtrayicon AND TARGET Qt::Widgets # special case - SOURCES - widgets/qwidgetplatformsystemtrayicon.cpp widgets/qwidgetplatformsystemtrayicon_p.h -) - -qt_internal_extend_target(qtlabsplatformplugin CONDITION TARGET Qt::Widgets AND (QT_FEATURE_colordialog OR QT_FEATURE_filedialog OR QT_FEATURE_fontdialog OR QT_FEATURE_messagebox) - SOURCES - widgets/qwidgetplatformdialog.cpp widgets/qwidgetplatformdialog_p.h -) - -qt_internal_extend_target(qtlabsplatformplugin CONDITION TARGET Qt::Widgets AND QT_FEATURE_colordialog AND TARGET Qt::Widgets # special case - SOURCES - widgets/qwidgetplatformcolordialog.cpp widgets/qwidgetplatformcolordialog_p.h -) - -qt_internal_extend_target(qtlabsplatformplugin CONDITION TARGET Qt::Widgets AND QT_FEATURE_filedialog AND TARGET Qt::Widgets # special case - SOURCES - widgets/qwidgetplatformfiledialog.cpp widgets/qwidgetplatformfiledialog_p.h -) - -qt_internal_extend_target(qtlabsplatformplugin CONDITION TARGET Qt::Widgets AND QT_FEATURE_fontdialog AND TARGET Qt::Widgets # special case - SOURCES - widgets/qwidgetplatformfontdialog.cpp widgets/qwidgetplatformfontdialog_p.h -) - -qt_internal_extend_target(qtlabsplatformplugin CONDITION TARGET Qt::Widgets AND QT_FEATURE_menu AND TARGET Qt::Widgets # special case - SOURCES - widgets/qwidgetplatformmenu.cpp widgets/qwidgetplatformmenu_p.h - widgets/qwidgetplatformmenuitem.cpp widgets/qwidgetplatformmenuitem_p.h -) - -qt_internal_extend_target(qtlabsplatformplugin CONDITION TARGET Qt::Widgets AND QT_FEATURE_messagebox AND TARGET Qt::Widgets # special case - SOURCES - widgets/qwidgetplatformmessagedialog.cpp widgets/qwidgetplatformmessagedialog_p.h -) - -qt_internal_extend_target(qtlabsplatformplugin CONDITION QT_FEATURE_systemtrayicon - SOURCES - qquickplatformsystemtrayicon.cpp qquickplatformsystemtrayicon_p.h -) -qt_internal_add_docs(qtlabsplatformplugin - doc/qtlabsplatform.qdocconf -) - diff --git a/src/imports/platform/doc/images/qtlabsplatform-colordialog-gtk.png b/src/imports/platform/doc/images/qtlabsplatform-colordialog-gtk.png deleted file mode 100644 index 12197f7f..00000000 Binary files a/src/imports/platform/doc/images/qtlabsplatform-colordialog-gtk.png and /dev/null differ diff --git a/src/imports/platform/doc/images/qtlabsplatform-filedialog-gtk.png b/src/imports/platform/doc/images/qtlabsplatform-filedialog-gtk.png deleted file mode 100644 index 9360d747..00000000 Binary files a/src/imports/platform/doc/images/qtlabsplatform-filedialog-gtk.png and /dev/null differ diff --git a/src/imports/platform/doc/images/qtlabsplatform-folderdialog-gtk.png b/src/imports/platform/doc/images/qtlabsplatform-folderdialog-gtk.png deleted file mode 100644 index 45f0585c..00000000 Binary files a/src/imports/platform/doc/images/qtlabsplatform-folderdialog-gtk.png and /dev/null differ diff --git a/src/imports/platform/doc/images/qtlabsplatform-fontdialog-gtk.png b/src/imports/platform/doc/images/qtlabsplatform-fontdialog-gtk.png deleted file mode 100644 index 0c6217bd..00000000 Binary files a/src/imports/platform/doc/images/qtlabsplatform-fontdialog-gtk.png and /dev/null differ diff --git a/src/imports/platform/doc/images/qtlabsplatform-menu.png b/src/imports/platform/doc/images/qtlabsplatform-menu.png deleted file mode 100644 index 7945b45f..00000000 Binary files a/src/imports/platform/doc/images/qtlabsplatform-menu.png and /dev/null differ diff --git a/src/imports/platform/doc/images/qtlabsplatform-menubar.png b/src/imports/platform/doc/images/qtlabsplatform-menubar.png deleted file mode 100644 index 7faa8141..00000000 Binary files a/src/imports/platform/doc/images/qtlabsplatform-menubar.png and /dev/null differ diff --git a/src/imports/platform/doc/images/qtlabsplatform-messagedialog-android.png b/src/imports/platform/doc/images/qtlabsplatform-messagedialog-android.png deleted file mode 100644 index 3986694f..00000000 Binary files a/src/imports/platform/doc/images/qtlabsplatform-messagedialog-android.png and /dev/null differ diff --git a/src/imports/platform/doc/images/qtlabsplatform-messagedialog-informative-android.png b/src/imports/platform/doc/images/qtlabsplatform-messagedialog-informative-android.png deleted file mode 100644 index b2d3cd37..00000000 Binary files a/src/imports/platform/doc/images/qtlabsplatform-messagedialog-informative-android.png and /dev/null differ diff --git a/src/imports/platform/doc/images/qtlabsplatform-systemtrayicon-menu.png b/src/imports/platform/doc/images/qtlabsplatform-systemtrayicon-menu.png deleted file mode 100644 index 670df8ed..00000000 Binary files a/src/imports/platform/doc/images/qtlabsplatform-systemtrayicon-menu.png and /dev/null differ diff --git a/src/imports/platform/doc/images/qtlabsplatform-systemtrayicon-message.png b/src/imports/platform/doc/images/qtlabsplatform-systemtrayicon-message.png deleted file mode 100644 index beaeed92..00000000 Binary files a/src/imports/platform/doc/images/qtlabsplatform-systemtrayicon-message.png and /dev/null differ diff --git a/src/imports/platform/doc/images/qtlabsplatform-systemtrayicon.png b/src/imports/platform/doc/images/qtlabsplatform-systemtrayicon.png deleted file mode 100644 index 2f7a851c..00000000 Binary files a/src/imports/platform/doc/images/qtlabsplatform-systemtrayicon.png and /dev/null differ diff --git a/src/imports/platform/doc/qtlabsplatform.qdocconf b/src/imports/platform/doc/qtlabsplatform.qdocconf deleted file mode 100644 index 54ed8204..00000000 --- a/src/imports/platform/doc/qtlabsplatform.qdocconf +++ /dev/null @@ -1,41 +0,0 @@ -include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf) -include($QT_INSTALL_DOCS/config/exampleurl-qtquickcontrols2.qdocconf) - -project = QtLabsPlatform -description = Qt Labs Platform Reference Documentation -version = $QT_VERSION - -qhp.projects = QtLabsPlatform - -qhp.QtLabsPlatform.file = qtlabsplatform.qhp -qhp.QtLabsPlatform.namespace = org.qt-project.qtlabsplatform.$QT_VERSION_TAG -qhp.QtLabsPlatform.virtualFolder = qtlabsplatform -qhp.QtLabsPlatform.indexTitle = Qt Labs Platform -qhp.QtLabsPlatform.indexRoot = - -qhp.QtLabsPlatform.filterAttributes = qtlabsplatform $QT_VERSION qtrefdoc -qhp.QtLabsPlatform.customFilters.Qt.name = QtLabsPlatform $QT_VERSION -qhp.QtLabsPlatform.customFilters.Qt.filterAttributes = qtlabsplatform $QT_VERSION - -qhp.QtLabsPlatform.subprojects = qmltypes -qhp.QtLabsPlatform.subprojects.qmltypes.title = QML Types -qhp.QtLabsPlatform.subprojects.qmltypes.indexTitle = Qt Labs Platform QML Types -qhp.QtLabsPlatform.subprojects.qmltypes.selectors = qmlclass -qhp.QtLabsPlatform.subprojects.qmltypes.sortPages = true - -depends = qtcore qtgui qtdoc qtqml qtqmlmodels qtquick qtquickcontrols qtwidgets - -# This module has no documented C++ types, clear the module header -moduleheader = - -headerdirs += ../ -sourcedirs += ../ - -imagedirs += images - -navigation.landingpage = "Qt Labs Platform" -navigation.qmltypespage = "Qt Labs Platform QML Types" - -tagfile = qtlabsplatform.tags - -macro.labs = "\\note \\e{Types in Qt.labs modules are not guaranteed to remain compatible in future versions.}" diff --git a/src/imports/platform/doc/src/includes/widgets.qdocinc b/src/imports/platform/doc/src/includes/widgets.qdocinc deleted file mode 100644 index 44ebba6d..00000000 --- a/src/imports/platform/doc/src/includes/widgets.qdocinc +++ /dev/null @@ -1,28 +0,0 @@ -//! [1] -The Qt Labs Platform module uses Qt Widgets as a fallback on platforms that -do not have a native implementation available. Therefore, applications that -use types from the Qt Labs Platform module should link to QtWidgets and use -\l QApplication instead of \l QGuiApplication. - -To link against the QtWidgets library, add the following to your qmake project -file: - -\code -QT += widgets -\endcode - -Create an instance of \l QApplication in \c main(): - -\code -#include -#include - -int main(int argc, char *argv[]) -{ - QApplication app(argc, argv); - QQmlApplicationEngine engine; - engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); - return app.exec(); -} -\endcode -//! [1] diff --git a/src/imports/platform/doc/src/qt6-changes.qdoc b/src/imports/platform/doc/src/qt6-changes.qdoc deleted file mode 100644 index de1c7a29..00000000 --- a/src/imports/platform/doc/src/qt6-changes.qdoc +++ /dev/null @@ -1,57 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquicklabsplatform-changes-qt6.html - \title Changes to Qt Quick Labs Platform - \ingroup changes-qt-5-to-6 - \brief Migrate Qt Quick Labs Platform to Qt 6. - - Qt 6 is a result of the conscious effort to make the framework more - efficient and easy to use. - - We try to maintain compatibility for all the public APIs in each release. - Some changes were inevitable in an effort to make Qt a better framework. - - In this topic we summarize those changes in Qt Quick Labs Platform, and - provide guidance to handle them. - - \section1 The Menu type - - The deprecated \c iconName and \c iconSource properties were removed. Use - the \l {Menu::}{icon} property instead. - - \section1 The MenuItem type - - The deprecated \c iconName and \c iconSource properties were removed. Use - the \l {MenuItem::}{icon} property instead. - - \section1 The SystemTrayIcon type - - The deprecated \c iconName and \c iconSource properties were removed. Use - the \l {SystemTrayIcon::}{icon} property instead. -*/ diff --git a/src/imports/platform/doc/src/qtlabsplatform-index.qdoc b/src/imports/platform/doc/src/qtlabsplatform-index.qdoc deleted file mode 100644 index c6eff0ba..00000000 --- a/src/imports/platform/doc/src/qtlabsplatform-index.qdoc +++ /dev/null @@ -1,54 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtlabsplatform-index.html - \title Qt Labs Platform - - \brief The experimental Qt Labs Platform module provides QML types for - native platform extensions. - - The experimental Qt Labs Platform module provides QML types for native - platform extensions. The module was introduced in Qt 5.8. - - \section1 QML Types - - \generatelist {qmltypesbymodule Qt.labs.platform} - - \labs - - \section1 Module Evolution - \l{Changes to Qt Quick Labs Platform} lists important changes in the - module API and functionality that were done for the Qt 6 series of Qt. - - \section1 Related Information - - \list - \li \l{Qt Quick} - \li \l{Qt Quick Controls} - \endlist -*/ diff --git a/src/imports/platform/doc/src/qtlabsplatform-qmltypes.qdoc b/src/imports/platform/doc/src/qtlabsplatform-qmltypes.qdoc deleted file mode 100644 index 51b7601a..00000000 --- a/src/imports/platform/doc/src/qtlabsplatform-qmltypes.qdoc +++ /dev/null @@ -1,58 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \qmlmodule Qt.labs.platform 1.1 - \title Qt Labs Platform QML Types - \ingroup qmlmodules - \brief Provides QML types for native platform extensions. - - The experimental \l{Qt Labs Platform} module provides QML types for native - platform extensions. These QML types work in conjunction with \l{Qt Quick} - and \l{Qt Quick Controls}. - - The QML types can be imported into your application using the - following import statement in your .qml file: - - \qml - import Qt.labs.platform - \endqml - - \section1 QML Types - - \generatelist {qmltypesbymodule Qt.labs.platform} - - \labs - - \section1 Related Information - - \list - \li \l {Qt Quick Controls QML Types} - \endlist - - \noautolist -*/ diff --git a/src/imports/platform/platform.pri b/src/imports/platform/platform.pri deleted file mode 100644 index ec6e8616..00000000 --- a/src/imports/platform/platform.pri +++ /dev/null @@ -1,39 +0,0 @@ -HEADERS += \ - $$PWD/qquickplatformcolordialog_p.h \ - $$PWD/qquickplatformdialog_p.h \ - $$PWD/qquickplatformfiledialog_p.h \ - $$PWD/qquickplatformfolderdialog_p.h \ - $$PWD/qquickplatformfontdialog_p.h \ - $$PWD/qquickplatformicon_p.h \ - $$PWD/qquickplatformiconloader_p.h \ - $$PWD/qquickplatformmenu_p.h \ - $$PWD/qquickplatformmenubar_p.h \ - $$PWD/qquickplatformmenuitem_p.h \ - $$PWD/qquickplatformmenuitemgroup_p.h \ - $$PWD/qquickplatformmenuseparator_p.h \ - $$PWD/qquickplatformmessagedialog_p.h \ - $$PWD/qquickplatformstandardpaths_p.h - -SOURCES += \ - $$PWD/qquickplatformcolordialog.cpp \ - $$PWD/qquickplatformdialog.cpp \ - $$PWD/qquickplatformfiledialog.cpp \ - $$PWD/qquickplatformfolderdialog.cpp \ - $$PWD/qquickplatformfontdialog.cpp \ - $$PWD/qquickplatformicon.cpp \ - $$PWD/qquickplatformiconloader.cpp \ - $$PWD/qquickplatformmenu.cpp \ - $$PWD/qquickplatformmenubar.cpp \ - $$PWD/qquickplatformmenuitem.cpp \ - $$PWD/qquickplatformmenuitemgroup.cpp \ - $$PWD/qquickplatformmenuseparator.cpp \ - $$PWD/qquickplatformmessagedialog.cpp \ - $$PWD/qquickplatformstandardpaths.cpp - - -qtConfig(systemtrayicon) { - HEADERS += \ - $$PWD/qquickplatformsystemtrayicon_p.h - SOURCES += \ - $$PWD/qquickplatformsystemtrayicon.cpp -} diff --git a/src/imports/platform/qquickplatformcolordialog.cpp b/src/imports/platform/qquickplatformcolordialog.cpp deleted file mode 100644 index 04a5e079..00000000 --- a/src/imports/platform/qquickplatformcolordialog.cpp +++ /dev/null @@ -1,206 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickplatformcolordialog_p.h" - -QT_BEGIN_NAMESPACE - -/*! - \qmltype ColorDialog - \inherits Dialog -//! \instantiates QQuickPlatformColorDialog - \inqmlmodule Qt.labs.platform - \since 5.8 - \brief A native color dialog. - - The ColorDialog type provides a QML API for native platform color dialogs. - - \image qtlabsplatform-colordialog-gtk.png - - To show a color dialog, construct an instance of ColorDialog, set the - desired properties, and call \l {Dialog::}{open()}. The \l currentColor - property can be used to determine the currently selected color in the - dialog. The \l color property is updated only after the final selection - has been made by accepting the dialog. - - \code - MenuItem { - text: "Color" - onTriggered: colorDialog.open() - } - - ColorDialog { - id: colorDialog - currentColor: document.color - } - - MyDocument { - id: document - color: colorDialog.color - } - \endcode - - \section2 Availability - - A native platform color dialog is currently available on the following platforms: - - \list - \li macOS - \li Linux (when running with the GTK+ platform theme) - \endlist - - \input includes/widgets.qdocinc 1 - - \labs -*/ - -QQuickPlatformColorDialog::QQuickPlatformColorDialog(QObject *parent) - : QQuickPlatformDialog(QPlatformTheme::ColorDialog, parent), - m_options(QColorDialogOptions::create()) -{ -} - -/*! - \qmlproperty color Qt.labs.platform::ColorDialog::color - - This property holds the final accepted color. - - Unlike the \l currentColor property, the \c color property is not updated - while the user is selecting colors in the dialog, but only after the final - selection has been made. That is, when the user has clicked \uicontrol OK - to accept a color. Alternatively, the \l {Dialog::}{accepted()} signal - can be handled to get the final selection. - - \sa currentColor, {Dialog::}{accepted()} -*/ -QColor QQuickPlatformColorDialog::color() const -{ - return m_color; -} - -void QQuickPlatformColorDialog::setColor(const QColor &color) -{ - if (m_color == color) - return; - - m_color = color; - setCurrentColor(color); - emit colorChanged(); -} - -/*! - \qmlproperty color Qt.labs.platform::ColorDialog::currentColor - - This property holds the currently selected color in the dialog. - - Unlike the \l color property, the \c currentColor property is updated - while the user is selecting colors in the dialog, even before the final - selection has been made. - - \sa color -*/ -QColor QQuickPlatformColorDialog::currentColor() const -{ - if (QPlatformColorDialogHelper *colorDialog = qobject_cast(handle())) - return colorDialog->currentColor(); - return m_currentColor; -} - -void QQuickPlatformColorDialog::setCurrentColor(const QColor &color) -{ - if (QPlatformColorDialogHelper *colorDialog = qobject_cast(handle())) - colorDialog->setCurrentColor(color); - m_currentColor = color; -} - -/*! - \qmlproperty flags Qt.labs.platform::ColorDialog::options - - This property holds the various options that affect the look and feel of the dialog. - - By default, all options are disabled. - - Options should be set before showing the dialog. Setting them while the dialog is - visible is not guaranteed to have an immediate effect on the dialog (depending on - the option and on the platform). - - Available options: - \value ColorDialog.ShowAlphaChannel Allow the user to select the alpha component of a color. - \value ColorDialog.NoButtons Don't display \uicontrol OK and \uicontrol Cancel buttons (useful for "live dialogs"). -*/ -QColorDialogOptions::ColorDialogOptions QQuickPlatformColorDialog::options() const -{ - return m_options->options(); -} - -void QQuickPlatformColorDialog::setOptions(QColorDialogOptions::ColorDialogOptions options) -{ - if (options == m_options->options()) - return; - - m_options->setOptions(options); - emit optionsChanged(); -} - -bool QQuickPlatformColorDialog::useNativeDialog() const -{ - return QQuickPlatformDialog::useNativeDialog() - && !m_options->testOption(QColorDialogOptions::DontUseNativeDialog); -} - -void QQuickPlatformColorDialog::onCreate(QPlatformDialogHelper *dialog) -{ - if (QPlatformColorDialogHelper *colorDialog = qobject_cast(dialog)) { - connect(colorDialog, &QPlatformColorDialogHelper::currentColorChanged, this, &QQuickPlatformColorDialog::currentColorChanged); - colorDialog->setOptions(m_options); - colorDialog->setCurrentColor(m_currentColor); - } -} - -void QQuickPlatformColorDialog::onShow(QPlatformDialogHelper *dialog) -{ - m_options->setWindowTitle(title()); - if (QPlatformColorDialogHelper *colorDialog = qobject_cast(dialog)) - colorDialog->setOptions(m_options); -} - -void QQuickPlatformColorDialog::accept() -{ - setColor(currentColor()); - QQuickPlatformDialog::accept(); -} - -QT_END_NAMESPACE diff --git a/src/imports/platform/qquickplatformcolordialog_p.h b/src/imports/platform/qquickplatformcolordialog_p.h deleted file mode 100644 index 1df047d9..00000000 --- a/src/imports/platform/qquickplatformcolordialog_p.h +++ /dev/null @@ -1,98 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKPLATFORMCOLORDIALOG_P_H -#define QQUICKPLATFORMCOLORDIALOG_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 "qquickplatformdialog_p.h" -#include -#include - -QT_BEGIN_NAMESPACE - -class QQuickPlatformColorDialog : public QQuickPlatformDialog -{ - Q_OBJECT - Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged FINAL) - Q_PROPERTY(QColor currentColor READ currentColor WRITE setCurrentColor NOTIFY currentColorChanged FINAL) - Q_PROPERTY(QColorDialogOptions::ColorDialogOptions options READ options WRITE setOptions NOTIFY optionsChanged FINAL) - Q_FLAGS(QColorDialogOptions::ColorDialogOptions) - -public: - explicit QQuickPlatformColorDialog(QObject *parent = nullptr); - - QColor color() const; - void setColor(const QColor &color); - - QColor currentColor() const; - void setCurrentColor(const QColor &color); - - QColorDialogOptions::ColorDialogOptions options() const; - void setOptions(QColorDialogOptions::ColorDialogOptions options); - -Q_SIGNALS: - void colorChanged(); - void currentColorChanged(); - void optionsChanged(); - -protected: - bool useNativeDialog() const override; - void onCreate(QPlatformDialogHelper *dialog) override; - void onShow(QPlatformDialogHelper *dialog) override; - void accept() override; - -private: - QColor m_color; - QColor m_currentColor; // TODO: QColorDialogOptions::initialColor - QSharedPointer m_options; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickPlatformColorDialog) - -#endif // QQUICKPLATFORMCOLORDIALOG_P_H diff --git a/src/imports/platform/qquickplatformdialog.cpp b/src/imports/platform/qquickplatformdialog.cpp deleted file mode 100644 index 06a26237..00000000 --- a/src/imports/platform/qquickplatformdialog.cpp +++ /dev/null @@ -1,411 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickplatformdialog_p.h" - -#include -#include -#include -#include - -#include "widgets/qwidgetplatform_p.h" - -QT_BEGIN_NAMESPACE - -/*! - \qmltype Dialog - \inherits QtObject -//! \instantiates QQuickPlatformDialog - \inqmlmodule Qt.labs.platform - \since 5.8 - \brief The base class of native dialogs. - - The Dialog type provides common QML API for native platform dialogs. - - To show a native dialog, construct an instance of one of the concrete - Dialog implementations, set the desired properties, and call \l open(). - Dialog emits \l accepted() or \l rejected() when the user is done with - the dialog. - - \labs -*/ - -/*! - \qmlsignal void Qt.labs.platform::Dialog::accepted() - - This signal is emitted when the dialog has been accepted either - interactively or by calling \l accept(). - - \note This signal is \e not emitted when closing the dialog with \l close(). - - \sa rejected() -*/ - -/*! - \qmlsignal void Qt.labs.platform::Dialog::rejected() - - This signal is emitted when the dialog has been rejected either - interactively or by calling \l reject(). - - \note This signal is \e not emitted when closing the dialog with \l close(). - - \sa accepted() -*/ - -Q_DECLARE_LOGGING_CATEGORY(qtLabsPlatformDialogs) - -QQuickPlatformDialog::QQuickPlatformDialog(QPlatformTheme::DialogType type, QObject *parent) - : QObject(parent), - m_visible(false), - m_complete(false), - m_result(0), - m_parentWindow(nullptr), - m_flags(Qt::Dialog), - m_modality(Qt::WindowModal), - m_type(type), - m_handle(nullptr) -{ -} - -QQuickPlatformDialog::~QQuickPlatformDialog() -{ - destroy(); -} - -QPlatformDialogHelper *QQuickPlatformDialog::handle() const -{ - return m_handle; -} - -/*! - \qmldefault - \qmlproperty list Qt.labs.platform::Dialog::data - - This default property holds the list of all objects declared as children of - the dialog. -*/ -QQmlListProperty QQuickPlatformDialog::data() -{ - return QQmlListProperty(this, &m_data); -} - -/*! - \qmlproperty Window Qt.labs.platform::Dialog::parentWindow - - This property holds the parent window of the dialog. - - Unless explicitly set, the window is automatically resolved by iterating - the QML parent objects until a \l Window or an \l Item that has a window - is found. -*/ -QWindow *QQuickPlatformDialog::parentWindow() const -{ - return m_parentWindow; -} - -void QQuickPlatformDialog::setParentWindow(QWindow *window) -{ - if (m_parentWindow == window) - return; - - m_parentWindow = window; - emit parentWindowChanged(); -} - -/*! - \qmlproperty string Qt.labs.platform::Dialog::title - - This property holds the title of the dialog. -*/ -QString QQuickPlatformDialog::title() const -{ - return m_title; -} - -void QQuickPlatformDialog::setTitle(const QString &title) -{ - if (m_title == title) - return; - - m_title = title; - emit titleChanged(); -} - -/*! - \qmlproperty Qt::WindowFlags Qt.labs.platform::Dialog::flags - - This property holds the window flags of the dialog. The default value is \c Qt.Dialog. -*/ -Qt::WindowFlags QQuickPlatformDialog::flags() const -{ - return m_flags; -} - -void QQuickPlatformDialog::setFlags(Qt::WindowFlags flags) -{ - if (m_flags == flags) - return; - - m_flags = flags; - emit flagsChanged(); -} - -/*! - \qmlproperty Qt::WindowModality Qt.labs.platform::Dialog::modality - - This property holds the modality of the dialog. The default value is \c Qt.WindowModal. - - Available values: - \value Qt.NonModal The dialog is not modal and does not block input to other windows. - \value Qt.WindowModal The dialog is modal to a single window hierarchy and blocks input to its parent window, all grandparent windows, and all siblings of its parent and grandparent windows. - \value Qt.ApplicationModal The dialog is modal to the application and blocks input to all windows. -*/ -Qt::WindowModality QQuickPlatformDialog::modality() const -{ - return m_modality; -} - -void QQuickPlatformDialog::setModality(Qt::WindowModality modality) -{ - if (m_modality == modality) - return; - - m_modality = modality; - emit modalityChanged(); -} - -/*! - \qmlproperty bool Qt.labs.platform::Dialog::visible - - This property holds the visibility of the dialog. The default value is \c false. - - \sa open(), close() -*/ -bool QQuickPlatformDialog::isVisible() const -{ - return m_handle && m_visible; -} - -void QQuickPlatformDialog::setVisible(bool visible) -{ - if (visible) - open(); - else - close(); -} - -/*! - \qmlproperty int Qt.labs.platform::Dialog::result - - This property holds the result code. - - Standard result codes: - \value Dialog.Accepted - \value Dialog.Rejected - - \note MessageDialog sets the result to the value of the clicked standard - button instead of using the standard result codes. -*/ -int QQuickPlatformDialog::result() const -{ - return m_result; -} - -void QQuickPlatformDialog::setResult(int result) -{ - if (m_result == result) - return; - - m_result = result; - emit resultChanged(); -} - -/*! - \qmlmethod void Qt.labs.platform::Dialog::open() - - Opens the dialog. - - \sa visible, close() -*/ -void QQuickPlatformDialog::open() -{ - if (m_visible || !create()) - return; - - onShow(m_handle); - m_visible = m_handle->show(m_flags, m_modality, m_parentWindow); - if (m_visible) - emit visibleChanged(); -} - -/*! - \qmlmethod void Qt.labs.platform::Dialog::close() - - Closes the dialog. - - \sa visible, open() -*/ -void QQuickPlatformDialog::close() -{ - if (!m_handle || !m_visible) - return; - - onHide(m_handle); - m_handle->hide(); - m_visible = false; - emit visibleChanged(); -} - -/*! - \qmlmethod void Qt.labs.platform::Dialog::accept() - - Closes the dialog and emits the \l accepted() signal. - - \sa reject() -*/ -void QQuickPlatformDialog::accept() -{ - done(Accepted); -} - -/*! - \qmlmethod void Qt.labs.platform::Dialog::reject() - - Closes the dialog and emits the \l rejected() signal. - - \sa accept() -*/ -void QQuickPlatformDialog::reject() -{ - done(Rejected); -} - -/*! - \qmlmethod void Qt.labs.platform::Dialog::done(int result) - - Closes the dialog and sets the \a result. - - \sa accept(), reject(), result -*/ -void QQuickPlatformDialog::done(int result) -{ - close(); - setResult(result); - - if (result == Accepted) - emit accepted(); - else if (result == Rejected) - emit rejected(); -} - -void QQuickPlatformDialog::classBegin() -{ -} - -void QQuickPlatformDialog::componentComplete() -{ - m_complete = true; - if (!m_parentWindow) - setParentWindow(findParentWindow()); -} - -static const char *qmlTypeName(const QObject *object) -{ - return object->metaObject()->className() + qstrlen("QQuickPlatform"); -} - -bool QQuickPlatformDialog::create() -{ - if (!m_handle) { - if (useNativeDialog()) - m_handle = QGuiApplicationPrivate::platformTheme()->createPlatformDialogHelper(m_type); - if (!m_handle) - m_handle = QWidgetPlatform::createDialog(m_type, this); - qCDebug(qtLabsPlatformDialogs) << qmlTypeName(this) << "->" << m_handle; - if (m_handle) { - onCreate(m_handle); - connect(m_handle, &QPlatformDialogHelper::accept, this, &QQuickPlatformDialog::accept); - connect(m_handle, &QPlatformDialogHelper::reject, this, &QQuickPlatformDialog::reject); - } - } - return m_handle; -} - -void QQuickPlatformDialog::destroy() -{ - delete m_handle; - m_handle = nullptr; -} - -bool QQuickPlatformDialog::useNativeDialog() const -{ - return !QCoreApplication::testAttribute(Qt::AA_DontUseNativeDialogs) - && QGuiApplicationPrivate::platformTheme()->usePlatformNativeDialog(m_type); -} - -void QQuickPlatformDialog::onCreate(QPlatformDialogHelper *dialog) -{ - Q_UNUSED(dialog); -} - -void QQuickPlatformDialog::onShow(QPlatformDialogHelper *dialog) -{ - Q_UNUSED(dialog); -} - -void QQuickPlatformDialog::onHide(QPlatformDialogHelper *dialog) -{ - Q_UNUSED(dialog); -} - -QWindow *QQuickPlatformDialog::findParentWindow() const -{ - QObject *obj = parent(); - while (obj) { - QWindow *window = qobject_cast(obj); - if (window) - return window; - QQuickItem *item = qobject_cast(obj); - if (item && item->window()) - return item->window(); - obj = obj->parent(); - } - return nullptr; -} - -QT_END_NAMESPACE - -#include "moc_qquickplatformdialog_p.cpp" diff --git a/src/imports/platform/qquickplatformdialog_p.h b/src/imports/platform/qquickplatformdialog_p.h deleted file mode 100644 index 55a54937..00000000 --- a/src/imports/platform/qquickplatformdialog_p.h +++ /dev/null @@ -1,153 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKPLATFORMDIALOG_P_H -#define QQUICKPLATFORMDIALOG_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 -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class QWindow; -class QPlatformDialogHelper; - -class QQuickPlatformDialog : public QObject, public QQmlParserStatus -{ - Q_OBJECT - Q_INTERFACES(QQmlParserStatus) - Q_PROPERTY(QQmlListProperty data READ data FINAL) - Q_PROPERTY(QWindow *parentWindow READ parentWindow WRITE setParentWindow NOTIFY parentWindowChanged FINAL) - Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged FINAL) - Q_PROPERTY(Qt::WindowFlags flags READ flags WRITE setFlags NOTIFY flagsChanged FINAL) - Q_PROPERTY(Qt::WindowModality modality READ modality WRITE setModality NOTIFY modalityChanged FINAL) - Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL) - Q_PROPERTY(int result READ result WRITE setResult NOTIFY resultChanged FINAL) - Q_CLASSINFO("DefaultProperty", "data") - -public: - explicit QQuickPlatformDialog(QPlatformTheme::DialogType type, QObject *parent = nullptr); - ~QQuickPlatformDialog(); - - QPlatformDialogHelper *handle() const; - - QQmlListProperty data(); - - QWindow *parentWindow() const; - void setParentWindow(QWindow *window); - - QString title() const; - void setTitle(const QString &title); - - Qt::WindowFlags flags() const; - void setFlags(Qt::WindowFlags flags); - - Qt::WindowModality modality() const; - void setModality(Qt::WindowModality modality); - - bool isVisible() const; - void setVisible(bool visible); - - enum StandardCode { Rejected, Accepted }; - Q_ENUM(StandardCode) - - int result() const; - void setResult(int result); - -public Q_SLOTS: - void open(); - void close(); - virtual void accept(); - virtual void reject(); - virtual void done(int result); - -Q_SIGNALS: - void accepted(); - void rejected(); - void parentWindowChanged(); - void titleChanged(); - void flagsChanged(); - void modalityChanged(); - void visibleChanged(); - void resultChanged(); - -protected: - void classBegin() override; - void componentComplete() override; - - bool create(); - void destroy(); - - virtual bool useNativeDialog() const; - virtual void onCreate(QPlatformDialogHelper *dialog); - virtual void onShow(QPlatformDialogHelper *dialog); - virtual void onHide(QPlatformDialogHelper *dialog); - - QWindow *findParentWindow() const; - -private: - bool m_visible; - bool m_complete; - int m_result; - QWindow *m_parentWindow; - QString m_title; - Qt::WindowFlags m_flags; - Qt::WindowModality m_modality; - QPlatformTheme::DialogType m_type; - QList m_data; - QPlatformDialogHelper *m_handle; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickPlatformDialog) - -#endif // QQUICKPLATFORMDIALOG_P_H diff --git a/src/imports/platform/qquickplatformfiledialog.cpp b/src/imports/platform/qquickplatformfiledialog.cpp deleted file mode 100644 index 8bfcfc93..00000000 --- a/src/imports/platform/qquickplatformfiledialog.cpp +++ /dev/null @@ -1,662 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickplatformfiledialog_p.h" - -#include - -QT_BEGIN_NAMESPACE - -/*! - \qmltype FileDialog - \inherits Dialog -//! \instantiates QQuickPlatformFileDialog - \inqmlmodule Qt.labs.platform - \since 5.8 - \brief A native file dialog. - - The FileDialog type provides a QML API for native platform file dialogs. - - \image qtlabsplatform-filedialog-gtk.png - - To show a file dialog, construct an instance of FileDialog, set the - desired properties, and call \l {Dialog::}{open()}. The \l currentFile - or \l currentFiles properties can be used to determine the currently - selected file(s) in the dialog. The \l file and \l files properties - are updated only after the final selection has been made by accepting - the dialog. - - \code - MenuItem { - text: "Open..." - onTriggered: fileDialog.open() - } - - FileDialog { - id: fileDialog - currentFile: document.source - folder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation) - } - - MyDocument { - id: document - source: fileDialog.file - } - \endcode - - \section2 Availability - - A native platform file dialog is currently available on the following platforms: - - \list - \li iOS - \li Linux (when running with the GTK+ platform theme) - \li macOS - \li Windows - \endlist - - \input includes/widgets.qdocinc 1 - - \labs - - \sa FolderDialog, StandardPaths -*/ - -QQuickPlatformFileDialog::QQuickPlatformFileDialog(QObject *parent) - : QQuickPlatformDialog(QPlatformTheme::FileDialog, parent), - m_fileMode(OpenFile), - m_options(QFileDialogOptions::create()), - m_selectedNameFilter(nullptr) -{ - m_options->setFileMode(QFileDialogOptions::ExistingFile); - m_options->setAcceptMode(QFileDialogOptions::AcceptOpen); -} - -/*! - \qmlproperty enumeration Qt.labs.platform::FileDialog::fileMode - - This property holds the mode of the dialog. - - Available values: - \value FileDialog.OpenFile The dialog is used to select an existing file (default). - \value FileDialog.OpenFiles The dialog is used to select multiple existing files. - \value FileDialog.SaveFile The dialog is used to select any file. The file does not have to exist. -*/ -QQuickPlatformFileDialog::FileMode QQuickPlatformFileDialog::fileMode() const -{ - return m_fileMode; -} - -void QQuickPlatformFileDialog::setFileMode(FileMode mode) -{ - if (mode == m_fileMode) - return; - - switch (mode) { - case OpenFile: - m_options->setFileMode(QFileDialogOptions::ExistingFile); - m_options->setAcceptMode(QFileDialogOptions::AcceptOpen); - break; - case OpenFiles: - m_options->setFileMode(QFileDialogOptions::ExistingFiles); - m_options->setAcceptMode(QFileDialogOptions::AcceptOpen); - break; - case SaveFile: - m_options->setFileMode(QFileDialogOptions::AnyFile); - m_options->setAcceptMode(QFileDialogOptions::AcceptSave); - break; - default: - break; - } - - m_fileMode = mode; - emit fileModeChanged(); -} - -/*! - \qmlproperty url Qt.labs.platform::FileDialog::file - - This property holds the final accepted file. - - Unlike the \l currentFile property, the \c file property is not updated - while the user is selecting files in the dialog, but only after the final - selection has been made. That is, when the user has clicked \uicontrol OK - to accept a file. Alternatively, the \l {Dialog::}{accepted()} signal - can be handled to get the final selection. - - \sa currentFile, {Dialog::}{accepted()} -*/ -QUrl QQuickPlatformFileDialog::file() const -{ - return addDefaultSuffix(m_files.value(0)); -} - -void QQuickPlatformFileDialog::setFile(const QUrl &file) -{ - setFiles(QList() << file); -} - -/*! - \qmlproperty list Qt.labs.platform::FileDialog::files - - This property holds the final accepted files. - - Unlike the \l currentFiles property, the \c files property is not updated - while the user is selecting files in the dialog, but only after the final - selection has been made. That is, when the user has clicked \uicontrol OK - to accept files. Alternatively, the \l {Dialog::}{accepted()} signal - can be handled to get the final selection. - - \sa currentFiles, {Dialog::}{accepted()} -*/ -QList QQuickPlatformFileDialog::files() const -{ - return addDefaultSuffixes(m_files); -} - -void QQuickPlatformFileDialog::setFiles(const QList &files) -{ - if (m_files == files) - return; - - bool firstChanged = m_files.value(0) != files.value(0); - m_files = files; - if (firstChanged) - emit fileChanged(); - emit filesChanged(); -} - -/*! - \qmlproperty url Qt.labs.platform::FileDialog::currentFile - - This property holds the currently selected file in the dialog. - - Unlike the \l file property, the \c currentFile property is updated - while the user is selecting files in the dialog, even before the final - selection has been made. - - \sa file, currentFiles -*/ -QUrl QQuickPlatformFileDialog::currentFile() const -{ - return currentFiles().value(0); -} - -void QQuickPlatformFileDialog::setCurrentFile(const QUrl &file) -{ - setCurrentFiles(QList() << file); -} - -/*! - \qmlproperty list Qt.labs.platform::FileDialog::currentFiles - - This property holds the currently selected files in the dialog. - - Unlike the \l files property, the \c currentFiles property is updated - while the user is selecting files in the dialog, even before the final - selection has been made. - - \sa files, currentFile -*/ -QList QQuickPlatformFileDialog::currentFiles() const -{ - if (QPlatformFileDialogHelper *fileDialog = qobject_cast(handle())) - return fileDialog->selectedFiles(); - return m_options->initiallySelectedFiles(); -} - -void QQuickPlatformFileDialog::setCurrentFiles(const QList &files) -{ - if (QPlatformFileDialogHelper *fileDialog = qobject_cast(handle())) { - for (const QUrl &file : files) - fileDialog->selectFile(file); - } - m_options->setInitiallySelectedFiles(files); -} - -/*! - \qmlproperty url Qt.labs.platform::FileDialog::folder - - This property holds the folder where files are selected. - For selecting a folder, use FolderDialog instead. - - \sa FolderDialog -*/ -QUrl QQuickPlatformFileDialog::folder() const -{ - if (QPlatformFileDialogHelper *fileDialog = qobject_cast(handle())) - return fileDialog->directory(); - return m_options->initialDirectory(); -} - -void QQuickPlatformFileDialog::setFolder(const QUrl &folder) -{ - if (QPlatformFileDialogHelper *fileDialog = qobject_cast(handle())) - fileDialog->setDirectory(folder); - m_options->setInitialDirectory(folder); -} - -/*! - \qmlproperty flags Qt.labs.platform::FileDialog::options - - This property holds the various options that affect the look and feel of the dialog. - - By default, all options are disabled. - - Options should be set before showing the dialog. Setting them while the dialog is - visible is not guaranteed to have an immediate effect on the dialog (depending on - the option and on the platform). - - Available options: - \value FileDialog.DontResolveSymlinks Don't resolve symlinks in the file dialog. By default symlinks are resolved. - \value FileDialog.DontConfirmOverwrite Don't ask for confirmation if an existing file is selected. By default confirmation is requested. - \value FileDialog.ReadOnly Indicates that the dialog doesn't allow creating directories. - \value FileDialog.HideNameFilterDetails Indicates if the file name filter details are hidden or not. -*/ -QFileDialogOptions::FileDialogOptions QQuickPlatformFileDialog::options() const -{ - return m_options->options(); -} - -void QQuickPlatformFileDialog::setOptions(QFileDialogOptions::FileDialogOptions options) -{ - if (options == m_options->options()) - return; - - m_options->setOptions(options); - emit optionsChanged(); -} - -void QQuickPlatformFileDialog::resetOptions() -{ - setOptions({}); -} - -/*! - \qmlproperty list Qt.labs.platform::FileDialog::nameFilters - - This property holds the filters that restrict the types of files that - can be selected. - - \code - FileDialog { - nameFilters: ["Text files (*.txt)", "HTML files (*.html *.htm)"] - } - \endcode - - \note \b{*.*} is not a portable filter, because the historical assumption - that the file extension determines the file type is not consistent on every - operating system. It is possible to have a file with no dot in its name (for - example, \c Makefile). In a native Windows file dialog, \b{*.*} will match - such files, while in other types of file dialogs it may not. So it is better - to use \b{*} if you mean to select any file. - - \sa selectedNameFilter -*/ -QStringList QQuickPlatformFileDialog::nameFilters() const -{ - return m_options->nameFilters(); -} - -void QQuickPlatformFileDialog::setNameFilters(const QStringList &filters) -{ - if (filters == m_options->nameFilters()) - return; - - m_options->setNameFilters(filters); - if (m_selectedNameFilter) { - int index = m_selectedNameFilter->index(); - if (index < 0 || index >= filters.count()) - index = 0; - m_selectedNameFilter->update(filters.value(index)); - } - emit nameFiltersChanged(); -} - -void QQuickPlatformFileDialog::resetNameFilters() -{ - setNameFilters(QStringList()); -} - -/*! - \qmlproperty int Qt.labs.platform::FileDialog::selectedNameFilter.index - \qmlproperty string Qt.labs.platform::FileDialog::selectedNameFilter.name - \qmlproperty list Qt.labs.platform::FileDialog::selectedNameFilter.extensions - - These properties hold the currently selected name filter. - - \table - \header - \li Name - \li Description - \row - \li \b index : int - \li This property determines which \l {nameFilters}{name filter} is selected. - The specified filter is selected when the dialog is opened. The value is - updated when the user selects another filter. - \row - \li [read-only] \b name : string - \li This property holds the name of the selected filter. In the - example below, the name of the first filter is \c {"Text files"} - and the second is \c {"HTML files"}. - \row - \li [read-only] \b extensions : list - \li This property holds the list of extensions of the selected filter. - In the example below, the list of extensions of the first filter is - \c {["txt"]} and the second is \c {["html", "htm"]}. - \endtable - - \code - FileDialog { - id: fileDialog - selectedNameFilter.index: 1 - nameFilters: ["Text files (*.txt)", "HTML files (*.html *.htm)"] - } - - MyDocument { - id: document - fileType: fileDialog.selectedNameFilter.extensions[0] - } - \endcode - - \sa nameFilters -*/ -QQuickPlatformFileNameFilter *QQuickPlatformFileDialog::selectedNameFilter() const -{ - if (!m_selectedNameFilter) { - QQuickPlatformFileDialog *that = const_cast(this); - m_selectedNameFilter = new QQuickPlatformFileNameFilter(that); - m_selectedNameFilter->setOptions(m_options); - } - return m_selectedNameFilter; -} - -/*! - \qmlproperty string Qt.labs.platform::FileDialog::defaultSuffix - - This property holds a suffix that is added to selected files that have - no suffix specified. The suffix is typically used to indicate the file - type (e.g. "txt" indicates a text file). - - If the first character is a dot ('.'), it is removed. -*/ -QString QQuickPlatformFileDialog::defaultSuffix() const -{ - return m_options->defaultSuffix(); -} - -void QQuickPlatformFileDialog::setDefaultSuffix(const QString &suffix) -{ - if (suffix == m_options->defaultSuffix()) - return; - - m_options->setDefaultSuffix(suffix); - emit defaultSuffixChanged(); -} - -void QQuickPlatformFileDialog::resetDefaultSuffix() -{ - setDefaultSuffix(QString()); -} - -/*! - \qmlproperty string Qt.labs.platform::FileDialog::acceptLabel - - This property holds the label text shown on the button that accepts the dialog. - - When set to an empty string, the default label of the underlying platform is used. - The default label is typically \uicontrol Open or \uicontrol Save depending on which - \l fileMode the dialog is used in. - - The default value is an empty string. - - \sa rejectLabel -*/ -QString QQuickPlatformFileDialog::acceptLabel() const -{ - return m_options->labelText(QFileDialogOptions::Accept); -} - -void QQuickPlatformFileDialog::setAcceptLabel(const QString &label) -{ - if (label == m_options->labelText(QFileDialogOptions::Accept)) - return; - - m_options->setLabelText(QFileDialogOptions::Accept, label); - emit acceptLabelChanged(); -} - -void QQuickPlatformFileDialog::resetAcceptLabel() -{ - setAcceptLabel(QString()); -} - -/*! - \qmlproperty string Qt.labs.platform::FileDialog::rejectLabel - - This property holds the label text shown on the button that rejects the dialog. - - When set to an empty string, the default label of the underlying platform is used. - The default label is typically \uicontrol Cancel. - - The default value is an empty string. - - \sa acceptLabel -*/ -QString QQuickPlatformFileDialog::rejectLabel() const -{ - return m_options->labelText(QFileDialogOptions::Reject); -} - -void QQuickPlatformFileDialog::setRejectLabel(const QString &label) -{ - if (label == m_options->labelText(QFileDialogOptions::Reject)) - return; - - m_options->setLabelText(QFileDialogOptions::Reject, label); - emit rejectLabelChanged(); -} - -void QQuickPlatformFileDialog::resetRejectLabel() -{ - setRejectLabel(QString()); -} - -bool QQuickPlatformFileDialog::useNativeDialog() const -{ - return QQuickPlatformDialog::useNativeDialog() - && !m_options->testOption(QFileDialogOptions::DontUseNativeDialog); -} - -void QQuickPlatformFileDialog::onCreate(QPlatformDialogHelper *dialog) -{ - if (QPlatformFileDialogHelper *fileDialog = qobject_cast(dialog)) { - // TODO: emit currentFileChanged only when the first entry in currentFiles changes - connect(fileDialog, &QPlatformFileDialogHelper::currentChanged, this, &QQuickPlatformFileDialog::currentFileChanged); - connect(fileDialog, &QPlatformFileDialogHelper::currentChanged, this, &QQuickPlatformFileDialog::currentFilesChanged); - connect(fileDialog, &QPlatformFileDialogHelper::directoryEntered, this, &QQuickPlatformFileDialog::folderChanged); - fileDialog->setOptions(m_options); - } -} - -void QQuickPlatformFileDialog::onShow(QPlatformDialogHelper *dialog) -{ - m_options->setWindowTitle(title()); - if (QPlatformFileDialogHelper *fileDialog = qobject_cast(dialog)) { - fileDialog->setOptions(m_options); // setOptions only assigns a member and isn't virtual - if (m_firstShow && m_options->initialDirectory().isValid()) - fileDialog->setDirectory(m_options->initialDirectory()); - if (m_selectedNameFilter) { - const int index = m_selectedNameFilter->index(); - const QString filter = m_options->nameFilters().value(index); - m_options->setInitiallySelectedNameFilter(filter); - fileDialog->selectNameFilter(filter); - connect(fileDialog, &QPlatformFileDialogHelper::filterSelected, m_selectedNameFilter, &QQuickPlatformFileNameFilter::update); - } - } - if (m_firstShow) - m_firstShow = false; -} - -void QQuickPlatformFileDialog::onHide(QPlatformDialogHelper *dialog) -{ - if (QPlatformFileDialogHelper *fileDialog = qobject_cast(dialog)) { - if (m_selectedNameFilter) - disconnect(fileDialog, &QPlatformFileDialogHelper::filterSelected, m_selectedNameFilter, &QQuickPlatformFileNameFilter::update); - } -} - -void QQuickPlatformFileDialog::accept() -{ - if (QPlatformFileDialogHelper *fileDialog = qobject_cast(handle())) - setFiles(fileDialog->selectedFiles()); - QQuickPlatformDialog::accept(); -} - -QUrl QQuickPlatformFileDialog::addDefaultSuffix(const QUrl &file) const -{ - QUrl url = file; - const QString path = url.path(); - const QString suffix = m_options->defaultSuffix(); - if (!suffix.isEmpty() && !path.endsWith(QLatin1Char('/')) && path.lastIndexOf(QLatin1Char('.')) == -1) - url.setPath(path + QLatin1Char('.') + suffix); - return url; -} - -QList QQuickPlatformFileDialog::addDefaultSuffixes(const QList &files) const -{ - QList urls; - urls.reserve(files.size()); - for (const QUrl &file : files) - urls += addDefaultSuffix(file); - return urls; -} - -QQuickPlatformFileNameFilter::QQuickPlatformFileNameFilter(QObject *parent) - : QObject(parent), m_index(-1) -{ -} - -int QQuickPlatformFileNameFilter::index() const -{ - return m_index; -} - -void QQuickPlatformFileNameFilter::setIndex(int index) -{ - if (m_index == index) - return; - - m_index = index; - emit indexChanged(index); -} - -QString QQuickPlatformFileNameFilter::name() const -{ - return m_name; -} - -QStringList QQuickPlatformFileNameFilter::extensions() const -{ - return m_extensions; -} - -QSharedPointer QQuickPlatformFileNameFilter::options() const -{ - return m_options; -} - -void QQuickPlatformFileNameFilter::setOptions(const QSharedPointer &options) -{ - m_options = options; -} - -static QString extractName(const QString &filter) -{ - return filter.left(filter.indexOf(QLatin1Char('(')) - 1); -} - -static QString extractExtension(QStringView filter) -{ - return filter.mid(filter.indexOf(QLatin1Char('.')) + 1).toString(); -} - -static QStringList extractExtensions(QStringView filter) -{ - QStringList extensions; - const int from = filter.indexOf(QLatin1Char('(')); - const int to = filter.lastIndexOf(QLatin1Char(')')) - 1; - if (from >= 0 && from < to) { - const QStringView ref = filter.mid(from + 1, to - from); - const QList exts = ref.split(QLatin1Char(' '), Qt::SkipEmptyParts); - for (const QStringView &ref : exts) - extensions += extractExtension(ref); - } - - return extensions; -} - -void QQuickPlatformFileNameFilter::update(const QString &filter) -{ - const QStringList filters = nameFilters(); - - const int oldIndex = m_index; - const QString oldName = m_name; - const QStringList oldExtensions = m_extensions; - - m_index = filters.indexOf(filter); - m_name = extractName(filter); - m_extensions = extractExtensions(filter); - - if (oldIndex != m_index) - emit indexChanged(m_index); - if (oldName != m_name) - emit nameChanged(m_name); - if (oldExtensions != m_extensions) - emit extensionsChanged(m_extensions); -} - -QStringList QQuickPlatformFileNameFilter::nameFilters() const -{ - return m_options ? m_options->nameFilters() : QStringList(); -} - -QString QQuickPlatformFileNameFilter::nameFilter(int index) const -{ - return m_options ? m_options->nameFilters().value(index) : QString(); -} - -QT_END_NAMESPACE diff --git a/src/imports/platform/qquickplatformfiledialog_p.h b/src/imports/platform/qquickplatformfiledialog_p.h deleted file mode 100644 index b867f3c8..00000000 --- a/src/imports/platform/qquickplatformfiledialog_p.h +++ /dev/null @@ -1,197 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKPLATFORMFILEDIALOG_P_H -#define QQUICKPLATFORMFILEDIALOG_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 "qquickplatformdialog_p.h" -#include -#include - -QT_BEGIN_NAMESPACE - -class QQuickPlatformFileNameFilter; - -class QQuickPlatformFileDialog : public QQuickPlatformDialog -{ - Q_OBJECT - Q_PROPERTY(FileMode fileMode READ fileMode WRITE setFileMode NOTIFY fileModeChanged FINAL) - Q_PROPERTY(QUrl file READ file WRITE setFile NOTIFY fileChanged FINAL) - Q_PROPERTY(QList files READ files WRITE setFiles NOTIFY filesChanged FINAL) - Q_PROPERTY(QUrl currentFile READ currentFile WRITE setCurrentFile NOTIFY currentFileChanged FINAL) - Q_PROPERTY(QList currentFiles READ currentFiles WRITE setCurrentFiles NOTIFY currentFilesChanged FINAL) - Q_PROPERTY(QUrl folder READ folder WRITE setFolder NOTIFY folderChanged FINAL) - Q_PROPERTY(QFileDialogOptions::FileDialogOptions options READ options WRITE setOptions RESET resetOptions NOTIFY optionsChanged FINAL) - Q_PROPERTY(QStringList nameFilters READ nameFilters WRITE setNameFilters RESET resetNameFilters NOTIFY nameFiltersChanged FINAL) - Q_PROPERTY(QQuickPlatformFileNameFilter *selectedNameFilter READ selectedNameFilter CONSTANT) - Q_PROPERTY(QString defaultSuffix READ defaultSuffix WRITE setDefaultSuffix RESET resetDefaultSuffix NOTIFY defaultSuffixChanged FINAL) - Q_PROPERTY(QString acceptLabel READ acceptLabel WRITE setAcceptLabel RESET resetAcceptLabel NOTIFY acceptLabelChanged FINAL) - Q_PROPERTY(QString rejectLabel READ rejectLabel WRITE setRejectLabel RESET resetRejectLabel NOTIFY rejectLabelChanged FINAL) - Q_FLAGS(QFileDialogOptions::FileDialogOptions) - -public: - explicit QQuickPlatformFileDialog(QObject *parent = nullptr); - - enum FileMode { - OpenFile, - OpenFiles, - SaveFile - }; - Q_ENUM(FileMode) - - FileMode fileMode() const; - void setFileMode(FileMode fileMode); - - QUrl file() const; - void setFile(const QUrl &file); - - QList files() const; - void setFiles(const QList &files); - - QUrl currentFile() const; - void setCurrentFile(const QUrl &file); - - QList currentFiles() const; - void setCurrentFiles(const QList &files); - - QUrl folder() const; - void setFolder(const QUrl &folder); - - QFileDialogOptions::FileDialogOptions options() const; - void setOptions(QFileDialogOptions::FileDialogOptions options); - void resetOptions(); - - QStringList nameFilters() const; - void setNameFilters(const QStringList &filters); - void resetNameFilters(); - - QQuickPlatformFileNameFilter *selectedNameFilter() const; - - QString defaultSuffix() const; - void setDefaultSuffix(const QString &suffix); - void resetDefaultSuffix(); - - QString acceptLabel() const; - void setAcceptLabel(const QString &label); - void resetAcceptLabel(); - - QString rejectLabel() const; - void setRejectLabel(const QString &label); - void resetRejectLabel(); - -Q_SIGNALS: - void fileModeChanged(); - void fileChanged(); - void filesChanged(); - void currentFileChanged(); - void currentFilesChanged(); - void folderChanged(); - void optionsChanged(); - void nameFiltersChanged(); - void defaultSuffixChanged(); - void acceptLabelChanged(); - void rejectLabelChanged(); - -protected: - bool useNativeDialog() const override; - void onCreate(QPlatformDialogHelper *dialog) override; - void onShow(QPlatformDialogHelper *dialog) override; - void onHide(QPlatformDialogHelper *dialog) override; - void accept() override; - -private: - QUrl addDefaultSuffix(const QUrl &file) const; - QList addDefaultSuffixes(const QList &files) const; - - FileMode m_fileMode; - QList m_files; - bool m_firstShow = true; - QSharedPointer m_options; - mutable QQuickPlatformFileNameFilter *m_selectedNameFilter; -}; - -class QQuickPlatformFileNameFilter : public QObject -{ - Q_OBJECT - Q_PROPERTY(int index READ index WRITE setIndex NOTIFY indexChanged FINAL) - Q_PROPERTY(QString name READ name NOTIFY nameChanged FINAL) - Q_PROPERTY(QStringList extensions READ extensions NOTIFY extensionsChanged FINAL) - -public: - explicit QQuickPlatformFileNameFilter(QObject *parent = nullptr); - - int index() const; - void setIndex(int index); - - QString name() const; - QStringList extensions() const; - - QSharedPointer options() const; - void setOptions(const QSharedPointer &options); - - void update(const QString &filter); - -Q_SIGNALS: - void indexChanged(int index); - void nameChanged(const QString &name); - void extensionsChanged(const QStringList &extensions); - -private: - QStringList nameFilters() const; - QString nameFilter(int index) const; - - int m_index; - QString m_name; - QStringList m_extensions; - QSharedPointer m_options; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickPlatformFileDialog) - -#endif // QQUICKPLATFORMFILEDIALOG_P_H diff --git a/src/imports/platform/qquickplatformfolderdialog.cpp b/src/imports/platform/qquickplatformfolderdialog.cpp deleted file mode 100644 index a28dc828..00000000 --- a/src/imports/platform/qquickplatformfolderdialog.cpp +++ /dev/null @@ -1,280 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickplatformfolderdialog_p.h" - -QT_BEGIN_NAMESPACE - -/*! - \qmltype FolderDialog - \inherits Dialog -//! \instantiates QQuickPlatformFolderDialog - \inqmlmodule Qt.labs.platform - \since 5.8 - \brief A native folder dialog. - - The FolderDialog type provides a QML API for native platform folder dialogs. - - \image qtlabsplatform-folderdialog-gtk.png - - To show a folder dialog, construct an instance of FolderDialog, set the - desired properties, and call \l {Dialog::}{open()}. The \l currentFolder - property can be used to determine the currently selected folder in the - dialog. The \l folder property is updated only after the final selection - has been made by accepting the dialog. - - \code - MenuItem { - text: "Open..." - onTriggered: folderDialog.open() - } - - FolderDialog { - id: folderDialog - currentFolder: viewer.folder - folder: StandardPaths.standardLocations(StandardPaths.PicturesLocation)[0] - } - - MyViewer { - id: viewer - folder: folderDialog.folder - } - \endcode - - \section2 Availability - - A native platform folder dialog is currently available on the following platforms: - - \list - \li iOS - \li Linux (when running with the GTK+ platform theme) - \li macOS - \li Windows - \endlist - - \input includes/widgets.qdocinc 1 - - \labs - - \sa FileDialog, StandardPaths -*/ - -QQuickPlatformFolderDialog::QQuickPlatformFolderDialog(QObject *parent) - : QQuickPlatformDialog(QPlatformTheme::FileDialog, parent), - m_options(QFileDialogOptions::create()) -{ - m_options->setFileMode(QFileDialogOptions::Directory); - m_options->setAcceptMode(QFileDialogOptions::AcceptOpen); -} - -/*! - \qmlproperty url Qt.labs.platform::FolderDialog::folder - - This property holds the final accepted folder. - - Unlike the \l currentFolder property, the \c folder property is not updated - while the user is selecting folders in the dialog, but only after the final - selection has been made. That is, when the user has clicked \uicontrol OK - to accept a folder. Alternatively, the \l {Dialog::}{accepted()} signal - can be handled to get the final selection. - - \sa currentFolder, {Dialog::}{accepted()} -*/ -QUrl QQuickPlatformFolderDialog::folder() const -{ - return m_folder; -} - -void QQuickPlatformFolderDialog::setFolder(const QUrl &folder) -{ - if (m_folder == folder) - return; - - m_folder = folder; - setCurrentFolder(folder); - emit folderChanged(); -} - -/*! - \qmlproperty url Qt.labs.platform::FolderDialog::currentFolder - - This property holds the currently selected folder in the dialog. - - Unlike the \l folder property, the \c currentFolder property is updated - while the user is selecting folders in the dialog, even before the final - selection has been made. - - \sa folder -*/ -QUrl QQuickPlatformFolderDialog::currentFolder() const -{ - if (QPlatformFileDialogHelper *fileDialog = qobject_cast(handle())) - return fileDialog->directory(); - return m_options->initialDirectory(); -} - -void QQuickPlatformFolderDialog::setCurrentFolder(const QUrl &folder) -{ - if (QPlatformFileDialogHelper *fileDialog = qobject_cast(handle())) - fileDialog->setDirectory(folder); - m_options->setInitialDirectory(folder); -} - -/*! - \qmlproperty flags Qt.labs.platform::FolderDialog::options - - This property holds the various options that affect the look and feel of the dialog. - - By default, all options are disabled. - - Options should be set before showing the dialog. Setting them while the dialog is - visible is not guaranteed to have an immediate effect on the dialog (depending on - the option and on the platform). - - Available options: - \value FolderDialog.ShowDirsOnly Only show directories in the folder dialog. By default both folders and directories are shown. - \value FolderDialog.DontResolveSymlinks Don't resolve symlinks in the folder dialog. By default symlinks are resolved. - \value FolderDialog.ReadOnly Indicates that the dialog doesn't allow creating directories. -*/ -QFileDialogOptions::FileDialogOptions QQuickPlatformFolderDialog::options() const -{ - return m_options->options(); -} - -void QQuickPlatformFolderDialog::setOptions(QFileDialogOptions::FileDialogOptions options) -{ - if (options == m_options->options()) - return; - - m_options->setOptions(options); - emit optionsChanged(); -} - -void QQuickPlatformFolderDialog::resetOptions() -{ - setOptions({}); -} - -/*! - \qmlproperty string Qt.labs.platform::FolderDialog::acceptLabel - - This property holds the label text shown on the button that accepts the dialog. - - When set to an empty string, the default label of the underlying platform is used. - The default label is typically \uicontrol Open. - - The default value is an empty string. - - \sa rejectLabel -*/ -QString QQuickPlatformFolderDialog::acceptLabel() const -{ - return m_options->labelText(QFileDialogOptions::Accept); -} - -void QQuickPlatformFolderDialog::setAcceptLabel(const QString &label) -{ - if (label == m_options->labelText(QFileDialogOptions::Accept)) - return; - - m_options->setLabelText(QFileDialogOptions::Accept, label); - emit acceptLabelChanged(); -} - -void QQuickPlatformFolderDialog::resetAcceptLabel() -{ - setAcceptLabel(QString()); -} - -/*! - \qmlproperty string Qt.labs.platform::FolderDialog::rejectLabel - - This property holds the label text shown on the button that rejects the dialog. - - When set to an empty string, the default label of the underlying platform is used. - The default label is typically \uicontrol Cancel. - - The default value is an empty string. - - \sa acceptLabel -*/ -QString QQuickPlatformFolderDialog::rejectLabel() const -{ - return m_options->labelText(QFileDialogOptions::Reject); -} - -void QQuickPlatformFolderDialog::setRejectLabel(const QString &label) -{ - if (label == m_options->labelText(QFileDialogOptions::Reject)) - return; - - m_options->setLabelText(QFileDialogOptions::Reject, label); - emit rejectLabelChanged(); -} - -void QQuickPlatformFolderDialog::resetRejectLabel() -{ - setRejectLabel(QString()); -} - -bool QQuickPlatformFolderDialog::useNativeDialog() const -{ - return QQuickPlatformDialog::useNativeDialog() - && !m_options->testOption(QFileDialogOptions::DontUseNativeDialog); -} - -void QQuickPlatformFolderDialog::onCreate(QPlatformDialogHelper *dialog) -{ - if (QPlatformFileDialogHelper *fileDialog = qobject_cast(dialog)) { - connect(fileDialog, &QPlatformFileDialogHelper::directoryEntered, this, &QQuickPlatformFolderDialog::currentFolderChanged); - fileDialog->setOptions(m_options); - } -} - -void QQuickPlatformFolderDialog::onShow(QPlatformDialogHelper *dialog) -{ - m_options->setWindowTitle(title()); - if (QPlatformFileDialogHelper *fileDialog = qobject_cast(dialog)) - fileDialog->setOptions(m_options); -} - -void QQuickPlatformFolderDialog::accept() -{ - setFolder(currentFolder()); - QQuickPlatformDialog::accept(); -} - -QT_END_NAMESPACE diff --git a/src/imports/platform/qquickplatformfolderdialog_p.h b/src/imports/platform/qquickplatformfolderdialog_p.h deleted file mode 100644 index 69878cb9..00000000 --- a/src/imports/platform/qquickplatformfolderdialog_p.h +++ /dev/null @@ -1,110 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKPLATFORMFOLDERDIALOG_P_H -#define QQUICKPLATFORMFOLDERDIALOG_P_H - -// -// W A R N I N G -// ------------- -// -// This folder is not part of the Qt API. It exists purely as an -// implementation detail. This header folder may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include "qquickplatformdialog_p.h" -#include -#include - -QT_BEGIN_NAMESPACE - -class QQuickPlatformFolderDialog : public QQuickPlatformDialog -{ - Q_OBJECT - Q_PROPERTY(QUrl folder READ folder WRITE setFolder NOTIFY folderChanged FINAL) - Q_PROPERTY(QUrl currentFolder READ currentFolder WRITE setCurrentFolder NOTIFY currentFolderChanged FINAL) - Q_PROPERTY(QFileDialogOptions::FileDialogOptions options READ options WRITE setOptions RESET resetOptions NOTIFY optionsChanged FINAL) - Q_PROPERTY(QString acceptLabel READ acceptLabel WRITE setAcceptLabel RESET resetAcceptLabel NOTIFY acceptLabelChanged FINAL) - Q_PROPERTY(QString rejectLabel READ rejectLabel WRITE setRejectLabel RESET resetRejectLabel NOTIFY rejectLabelChanged FINAL) - Q_FLAGS(QFileDialogOptions::FileDialogOptions) - -public: - explicit QQuickPlatformFolderDialog(QObject *parent = nullptr); - - QUrl folder() const; - void setFolder(const QUrl &folder); - - QUrl currentFolder() const; - void setCurrentFolder(const QUrl &folder); - - QFileDialogOptions::FileDialogOptions options() const; - void setOptions(QFileDialogOptions::FileDialogOptions options); - void resetOptions(); - - QString acceptLabel() const; - void setAcceptLabel(const QString &label); - void resetAcceptLabel(); - - QString rejectLabel() const; - void setRejectLabel(const QString &label); - void resetRejectLabel(); - -Q_SIGNALS: - void folderChanged(); - void currentFolderChanged(); - void optionsChanged(); - void acceptLabelChanged(); - void rejectLabelChanged(); - -protected: - bool useNativeDialog() const override; - void onCreate(QPlatformDialogHelper *dialog) override; - void onShow(QPlatformDialogHelper *dialog) override; - void accept() override; - -private: - QUrl m_folder; - QSharedPointer m_options; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickPlatformFolderDialog) - -#endif // QQUICKPLATFORMFOLDERDIALOG_P_H diff --git a/src/imports/platform/qquickplatformfontdialog.cpp b/src/imports/platform/qquickplatformfontdialog.cpp deleted file mode 100644 index f3eca2c3..00000000 --- a/src/imports/platform/qquickplatformfontdialog.cpp +++ /dev/null @@ -1,208 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickplatformfontdialog_p.h" - -QT_BEGIN_NAMESPACE - -/*! - \qmltype FontDialog - \inherits Dialog -//! \instantiates QQuickPlatformFontDialog - \inqmlmodule Qt.labs.platform - \since 5.8 - \brief A native font dialog. - - The FontDialog type provides a QML API for native platform font dialogs. - - \image qtlabsplatform-fontdialog-gtk.png - - To show a font dialog, construct an instance of FontDialog, set the - desired properties, and call \l {Dialog::}{open()}. The \l currentFont - property can be used to determine the currently selected font in the - dialog. The \l font property is updated only after the final selection - has been made by accepting the dialog. - - \code - MenuItem { - text: "Font" - onTriggered: fontDialog.open() - } - - FontDialog { - id: fontDialog - currentFont.family: document.font - } - - MyDocument { - id: document - font: fontDialog.font - } - \endcode - - \section2 Availability - - A native platform font dialog is currently available on the following platforms: - - \list - \li macOS - \li Linux (when running with the GTK+ platform theme) - \endlist - - \input includes/widgets.qdocinc 1 - - \labs -*/ - -QQuickPlatformFontDialog::QQuickPlatformFontDialog(QObject *parent) - : QQuickPlatformDialog(QPlatformTheme::FontDialog, parent), - m_options(QFontDialogOptions::create()) -{ -} - -/*! - \qmlproperty font Qt.labs.platform::FontDialog::font - - This property holds the final accepted font. - - Unlike the \l currentFont property, the \c font property is not updated - while the user is selecting fonts in the dialog, but only after the final - selection has been made. That is, when the user has clicked \uicontrol OK - to accept a font. Alternatively, the \l {Dialog::}{accepted()} signal - can be handled to get the final selection. - - \sa currentFont, {Dialog::}{accepted()} -*/ -QFont QQuickPlatformFontDialog::font() const -{ - return m_font; -} - -void QQuickPlatformFontDialog::setFont(const QFont &font) -{ - if (m_font == font) - return; - - m_font = font; - setCurrentFont(font); - emit fontChanged(); -} - -/*! - \qmlproperty font Qt.labs.platform::FontDialog::currentFont - - This property holds the currently selected font in the dialog. - - Unlike the \l font property, the \c currentFont property is updated - while the user is selecting fonts in the dialog, even before the final - selection has been made. - - \sa font -*/ -QFont QQuickPlatformFontDialog::currentFont() const -{ - if (QPlatformFontDialogHelper *fontDialog = qobject_cast(handle())) - return fontDialog->currentFont(); - return m_currentFont; -} - -void QQuickPlatformFontDialog::setCurrentFont(const QFont &font) -{ - if (QPlatformFontDialogHelper *fontDialog = qobject_cast(handle())) - fontDialog->setCurrentFont(font); - m_currentFont = font; -} - -/*! - \qmlproperty flags Qt.labs.platform::FontDialog::options - - This property holds the various options that affect the look and feel of the dialog. - - By default, all options are disabled. - - Options should be set before showing the dialog. Setting them while the dialog is - visible is not guaranteed to have an immediate effect on the dialog (depending on - the option and on the platform). - - Available options: - \value FontDialog.ScalableFonts Show scalable fonts. - \value FontDialog.NonScalableFonts Show non-scalable fonts. - \value FontDialog.MonospacedFonts Show monospaced fonts. - \value FontDialog.ProportionalFonts Show proportional fonts. - \value FontDialog.NoButtons Don't display \uicontrol OK and \uicontrol Cancel buttons (useful for "live dialogs"). -*/ -QFontDialogOptions::FontDialogOptions QQuickPlatformFontDialog::options() const -{ - return m_options->options(); -} - -void QQuickPlatformFontDialog::setOptions(QFontDialogOptions::FontDialogOptions options) -{ - if (options == m_options->options()) - return; - - m_options->setOptions(options); - emit optionsChanged(); -} - -bool QQuickPlatformFontDialog::useNativeDialog() const -{ - return QQuickPlatformDialog::useNativeDialog() - && !m_options->testOption(QFontDialogOptions::DontUseNativeDialog); -} - -void QQuickPlatformFontDialog::onCreate(QPlatformDialogHelper *dialog) -{ - if (QPlatformFontDialogHelper *fontDialog = qobject_cast(dialog)) { - connect(fontDialog, &QPlatformFontDialogHelper::currentFontChanged, this, &QQuickPlatformFontDialog::currentFontChanged); - fontDialog->setOptions(m_options); - } -} - -void QQuickPlatformFontDialog::onShow(QPlatformDialogHelper *dialog) -{ - m_options->setWindowTitle(title()); - if (QPlatformFontDialogHelper *fontDialog = qobject_cast(dialog)) - fontDialog->setOptions(m_options); -} - -void QQuickPlatformFontDialog::accept() -{ - setFont(currentFont()); - QQuickPlatformDialog::accept(); -} - -QT_END_NAMESPACE diff --git a/src/imports/platform/qquickplatformfontdialog_p.h b/src/imports/platform/qquickplatformfontdialog_p.h deleted file mode 100644 index e7946477..00000000 --- a/src/imports/platform/qquickplatformfontdialog_p.h +++ /dev/null @@ -1,98 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKPLATFORMFONTDIALOG_P_H -#define QQUICKPLATFORMFONTDIALOG_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 "qquickplatformdialog_p.h" -#include -#include - -QT_BEGIN_NAMESPACE - -class QQuickPlatformFontDialog : public QQuickPlatformDialog -{ - Q_OBJECT - Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged FINAL) - Q_PROPERTY(QFont currentFont READ currentFont WRITE setCurrentFont NOTIFY currentFontChanged FINAL) - Q_PROPERTY(QFontDialogOptions::FontDialogOptions options READ options WRITE setOptions NOTIFY optionsChanged FINAL) - Q_FLAGS(QFontDialogOptions::FontDialogOptions) - -public: - explicit QQuickPlatformFontDialog(QObject *parent = nullptr); - - QFont font() const; - void setFont(const QFont &font); - - QFont currentFont() const; - void setCurrentFont(const QFont &font); - - QFontDialogOptions::FontDialogOptions options() const; - void setOptions(QFontDialogOptions::FontDialogOptions options); - -Q_SIGNALS: - void fontChanged(); - void currentFontChanged(); - void optionsChanged(); - -protected: - bool useNativeDialog() const override; - void onCreate(QPlatformDialogHelper *dialog) override; - void onShow(QPlatformDialogHelper *dialog) override; - void accept() override; - -private: - QFont m_font; - QFont m_currentFont; // TODO: QFontDialogOptions::initialFont - QSharedPointer m_options; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickPlatformFontDialog) - -#endif // QQUICKPLATFORMFONTDIALOG_P_H diff --git a/src/imports/platform/qquickplatformicon.cpp b/src/imports/platform/qquickplatformicon.cpp deleted file mode 100644 index 7096ff8a..00000000 --- a/src/imports/platform/qquickplatformicon.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickplatformicon_p.h" - -QT_BEGIN_NAMESPACE - -QUrl QQuickPlatformIcon::source() const -{ - return m_source; -} - -void QQuickPlatformIcon::setSource(const QUrl& source) -{ - m_source = source; -} - -QString QQuickPlatformIcon::name() const -{ - return m_name; -} - -void QQuickPlatformIcon::setName(const QString& name) -{ - m_name = name; -} - -bool QQuickPlatformIcon::isMask() const -{ - return m_mask; -} - -void QQuickPlatformIcon::setMask(bool mask) -{ - m_mask = mask; -} - -bool QQuickPlatformIcon::operator==(const QQuickPlatformIcon &other) const -{ - return m_source == other.m_source && m_name == other.m_name && m_mask == other.m_mask; -} - -bool QQuickPlatformIcon::operator!=(const QQuickPlatformIcon &other) const -{ - return !(*this == other); -} - -QT_END_NAMESPACE diff --git a/src/imports/platform/qquickplatformicon_p.h b/src/imports/platform/qquickplatformicon_p.h deleted file mode 100644 index 9add9d6e..00000000 --- a/src/imports/platform/qquickplatformicon_p.h +++ /dev/null @@ -1,86 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKPLATFORMICON_P_H -#define QQUICKPLATFORMICON_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 -#include - -QT_BEGIN_NAMESPACE - -class QObject; - -class QQuickPlatformIcon -{ - Q_GADGET - Q_PROPERTY(QUrl source READ source WRITE setSource) - Q_PROPERTY(QString name READ name WRITE setName) - Q_PROPERTY(bool mask READ isMask WRITE setMask) - -public: - QUrl source() const; - void setSource(const QUrl &source); - - QString name() const; - void setName(const QString &name); - - bool isMask() const; - void setMask(bool mask); - - bool operator==(const QQuickPlatformIcon &other) const; - bool operator!=(const QQuickPlatformIcon &other) const; - -private: - bool m_mask = false; - QUrl m_source; - QString m_name; -}; - -QT_END_NAMESPACE - -#endif // QQUICKPLATFORMICON_P_H diff --git a/src/imports/platform/qquickplatformiconloader.cpp b/src/imports/platform/qquickplatformiconloader.cpp deleted file mode 100644 index c7b699b2..00000000 --- a/src/imports/platform/qquickplatformiconloader.cpp +++ /dev/null @@ -1,101 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickplatformiconloader_p.h" - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -QQuickPlatformIconLoader::QQuickPlatformIconLoader(int slot, QObject *parent) - : m_parent(parent), - m_slot(slot), - m_enabled(false) -{ - Q_ASSERT(slot != -1 && parent); -} - -bool QQuickPlatformIconLoader::isEnabled() const -{ - return m_enabled; -} - -void QQuickPlatformIconLoader::setEnabled(bool enabled) -{ - m_enabled = enabled; - if (m_enabled) - loadIcon(); -} - -QIcon QQuickPlatformIconLoader::toQIcon() const -{ - QIcon fallback = QPixmap::fromImage(image()); - QIcon icon = QIcon::fromTheme(m_icon.name(), fallback); - icon.setIsMask(m_icon.isMask()); - return icon; -} - -QQuickPlatformIcon QQuickPlatformIconLoader::icon() const -{ - return m_icon; -} - -void QQuickPlatformIconLoader::setIcon(const QQuickPlatformIcon& icon) -{ - m_icon = icon; - if (m_enabled) - loadIcon(); -} - -void QQuickPlatformIconLoader::loadIcon() -{ - if (m_icon.source().isEmpty()) { - clear(m_parent); - } else { - load(qmlEngine(m_parent), m_icon.source()); - if (m_slot != -1 && isLoading()) { - connectFinished(m_parent, m_slot); - m_slot = -1; - } - } - - if (!isLoading()) - m_parent->metaObject()->method(m_slot).invoke(m_parent); -} - -QT_END_NAMESPACE diff --git a/src/imports/platform/qquickplatformiconloader_p.h b/src/imports/platform/qquickplatformiconloader_p.h deleted file mode 100644 index d284a513..00000000 --- a/src/imports/platform/qquickplatformiconloader_p.h +++ /dev/null @@ -1,86 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKPLATFORMICONLOADER_P_H -#define QQUICKPLATFORMICONLOADER_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 -#include -#include -#include - -#include "qquickplatformicon_p.h" - -QT_BEGIN_NAMESPACE - -class QObject; - -class QQuickPlatformIconLoader : public QQuickPixmap -{ -public: - QQuickPlatformIconLoader(int slot, QObject *parent); - - bool isEnabled() const; - void setEnabled(bool enabled); - - QIcon toQIcon() const; - - QQuickPlatformIcon icon() const; - void setIcon(const QQuickPlatformIcon &icon); - -private: - void loadIcon(); - - QObject *m_parent; - int m_slot; - bool m_enabled; - QQuickPlatformIcon m_icon; -}; - -QT_END_NAMESPACE - -#endif // QQUICKPLATFORMICONLOADER_P_H diff --git a/src/imports/platform/qquickplatformmenu.cpp b/src/imports/platform/qquickplatformmenu.cpp deleted file mode 100644 index 16dffd5e..00000000 --- a/src/imports/platform/qquickplatformmenu.cpp +++ /dev/null @@ -1,895 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickplatformmenu_p.h" -#include "qquickplatformmenubar_p.h" -#include "qquickplatformmenuitem_p.h" -#include "qquickplatformiconloader_p.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "widgets/qwidgetplatform_p.h" - -#if QT_CONFIG(systemtrayicon) -#include "qquickplatformsystemtrayicon_p.h" -#endif - -QT_BEGIN_NAMESPACE - -/*! - \qmltype Menu - \inherits QtObject -//! \instantiates QQuickPlatformMenu - \inqmlmodule Qt.labs.platform - \since 5.8 - \brief A native menu. - - The Menu type provides a QML API for native platform menu popups. - - \image qtlabsplatform-menu.png - - Menu can be used in a \l MenuBar, or as a stand-alone context menu. - The following example shows how to open a context menu on right mouse - click: - - \code - MouseArea { - anchors.fill: parent - acceptedButtons: Qt.RightButton - onClicked: zoomMenu.open() - } - - Menu { - id: zoomMenu - - MenuItem { - text: qsTr("Zoom In") - shortcut: StandardKey.ZoomIn - onTriggered: zoomIn() - } - - MenuItem { - text: qsTr("Zoom Out") - shortcut: StandardKey.ZoomOut - onTriggered: zoomOut() - } - } - \endcode - - \section2 Submenus - - To create submenus, declare a Menu as a child of another Menu: - - \qml - Menu { - title: qsTr("Edit") - - Menu { - title: qsTr("Advanced") - - MenuItem { - text: qsTr("Auto-indent Selection") - onTriggered: autoIndentSelection() - } - - MenuItem { - text: qsTr("Rewrap Paragraph") - onTriggered: rewrapParagraph() - } - } - } - \endqml - - \section2 Dynamically Generating Menu Items - - It is possible to dynamically generate menu items. One of the easiest ways - to do so is with \l Instantiator. For example, to implement a - "Recent Files" submenu, where the items are based on a list of files stored - in settings, the following code could be used: - - \qml - Menu { - title: qsTr("File") - - Menu { - id: recentFilesSubMenu - title: qsTr("Recent Files") - enabled: recentFilesInstantiator.count > 0 - - Instantiator { - id: recentFilesInstantiator - model: settings.recentFiles - delegate: MenuItem { - text: settings.displayableFilePath(modelData) - onTriggered: loadFile(modelData) - } - - onObjectAdded: recentFilesSubMenu.insertItem(index, object) - onObjectRemoved: recentFilesSubMenu.removeItem(object) - } - - MenuSeparator {} - - MenuItem { - text: qsTr("Clear Recent Files") - onTriggered: settings.clearRecentFiles() - } - } - } - \endqml - - \section2 Availability - - A native platform menu is currently available on the following platforms: - - \list - \li macOS - \li iOS - \li Android - \li Linux (only available as a stand-alone context menu when running with the GTK+ platform theme) - \endlist - - \input includes/widgets.qdocinc 1 - - \labs - - \sa MenuItem, MenuSeparator, MenuBar -*/ - -/*! - \qmlsignal Qt.labs.platform::Menu::aboutToShow() - - This signal is emitted when the menu is about to be shown to the user. -*/ - -/*! - \qmlsignal Qt.labs.platform::Menu::aboutToHide() - - This signal is emitted when the menu is about to be hidden from the user. -*/ - -Q_DECLARE_LOGGING_CATEGORY(qtLabsPlatformMenus) - -QQuickPlatformMenu::QQuickPlatformMenu(QObject *parent) - : QObject(parent), - m_complete(false), - m_enabled(true), - m_visible(true), - m_minimumWidth(-1), - m_type(QPlatformMenu::DefaultMenu), - m_menuBar(nullptr), - m_parentMenu(nullptr), - m_systemTrayIcon(nullptr), - m_menuItem(nullptr), - m_iconLoader(nullptr), - m_handle(nullptr) -{ -} - -QQuickPlatformMenu::~QQuickPlatformMenu() -{ - if (m_menuBar) - m_menuBar->removeMenu(this); - if (m_parentMenu) - m_parentMenu->removeMenu(this); - - unparentSubmenus(); - - delete m_iconLoader; - m_iconLoader = nullptr; - delete m_handle; - m_handle = nullptr; -} - -void QQuickPlatformMenu::unparentSubmenus() -{ - for (QQuickPlatformMenuItem *item : qAsConst(m_items)) { - if (QQuickPlatformMenu *subMenu = item->subMenu()) - subMenu->setParentMenu(nullptr); - item->setMenu(nullptr); - } -} - -QPlatformMenu *QQuickPlatformMenu::handle() const -{ - return m_handle; -} - -QPlatformMenu * QQuickPlatformMenu::create() -{ - if (!m_handle) { - if (m_menuBar && m_menuBar->handle()) - m_handle = m_menuBar->handle()->createMenu(); - else if (m_parentMenu && m_parentMenu->handle()) - m_handle = m_parentMenu->handle()->createSubMenu(); -#if QT_CONFIG(systemtrayicon) - else if (m_systemTrayIcon && m_systemTrayIcon->handle()) - m_handle = m_systemTrayIcon->handle()->createMenu(); -#endif - - // TODO: implement ^ - // - QCocoaMenuBar::createMenu() - // - QCocoaMenu::createSubMenu() - // - QCocoaSystemTrayIcon::createMenu() - if (!m_handle) - m_handle = QGuiApplicationPrivate::platformTheme()->createPlatformMenu(); - - if (!m_handle) - m_handle = QWidgetPlatform::createMenu(); - - qCDebug(qtLabsPlatformMenus) << "Menu ->" << m_handle; - - if (m_handle) { - connect(m_handle, &QPlatformMenu::aboutToShow, this, &QQuickPlatformMenu::aboutToShow); - connect(m_handle, &QPlatformMenu::aboutToHide, this, &QQuickPlatformMenu::aboutToHide); - - for (QQuickPlatformMenuItem *item : qAsConst(m_items)) - m_handle->insertMenuItem(item->create(), nullptr); - - if (m_menuItem) { - if (QPlatformMenuItem *handle = m_menuItem->create()) - handle->setMenu(m_handle); - } - } - } - return m_handle; -} - -void QQuickPlatformMenu::destroy() -{ - if (!m_handle) - return; - - // Ensure that all submenus are unparented before we are destroyed, - // so that they don't try to access a destroyed menu. - unparentSubmenus(); - - delete m_handle; - m_handle = nullptr; -} - -void QQuickPlatformMenu::sync() -{ - if (!m_complete || !create()) - return; - - m_handle->setText(m_title); - m_handle->setEnabled(m_enabled); - m_handle->setVisible(m_visible); - m_handle->setMinimumWidth(m_minimumWidth); - m_handle->setMenuType(m_type); - m_handle->setFont(m_font); - - if (m_menuBar && m_menuBar->handle()) - m_menuBar->handle()->syncMenu(m_handle); -#if QT_CONFIG(systemtrayicon) - else if (m_systemTrayIcon && m_systemTrayIcon->handle()) - m_systemTrayIcon->handle()->updateMenu(m_handle); -#endif - - for (QQuickPlatformMenuItem *item : qAsConst(m_items)) - item->sync(); -} - -/*! - \qmldefault - \qmlproperty list Qt.labs.platform::Menu::data - - This default property holds the list of all objects declared as children of - the menu. The data property includes objects that are not \l MenuItem instances, - such as \l Timer and \l QtObject. - - \sa items -*/ -QQmlListProperty QQuickPlatformMenu::data() -{ - return QQmlListProperty(this, nullptr, data_append, data_count, data_at, data_clear); -} - -/*! - \qmlproperty list Qt.labs.platform::Menu::items - - This property holds the list of items in the menu. -*/ -QQmlListProperty QQuickPlatformMenu::items() -{ - return QQmlListProperty(this, nullptr, items_append, items_count, items_at, items_clear); -} - -/*! - \readonly - \qmlproperty MenuBar Qt.labs.platform::Menu::menuBar - - This property holds the menubar that the menu belongs to, or \c null if the - menu is not in a menubar. -*/ -QQuickPlatformMenuBar *QQuickPlatformMenu::menuBar() const -{ - return m_menuBar; -} - -void QQuickPlatformMenu::setMenuBar(QQuickPlatformMenuBar *menuBar) -{ - if (m_menuBar == menuBar) - return; - - m_menuBar = menuBar; - destroy(); - emit menuBarChanged(); -} - -/*! - \readonly - \qmlproperty Menu Qt.labs.platform::Menu::parentMenu - - This property holds the parent menu that the menu belongs to, or \c null if the - menu is not a sub-menu. -*/ -QQuickPlatformMenu *QQuickPlatformMenu::parentMenu() const -{ - return m_parentMenu; -} - -void QQuickPlatformMenu::setParentMenu(QQuickPlatformMenu *menu) -{ - if (m_parentMenu == menu) - return; - - m_parentMenu = menu; - destroy(); - emit parentMenuChanged(); -} - -/*! - \readonly - \qmlproperty SystemTrayIcon Qt.labs.platform::Menu::systemTrayIcon - - This property holds the system tray icon that the menu belongs to, or \c null - if the menu is not in a system tray icon. -*/ -QQuickPlatformSystemTrayIcon *QQuickPlatformMenu::systemTrayIcon() const -{ - return m_systemTrayIcon; -} - -void QQuickPlatformMenu::setSystemTrayIcon(QQuickPlatformSystemTrayIcon *icon) -{ - if (m_systemTrayIcon == icon) - return; - - m_systemTrayIcon = icon; - destroy(); - emit systemTrayIconChanged(); -} - -/*! - \readonly - \qmlproperty MenuItem Qt.labs.platform::Menu::menuItem - - This property holds the item that presents the menu (in a parent menu). -*/ -QQuickPlatformMenuItem *QQuickPlatformMenu::menuItem() const -{ - if (!m_menuItem) { - QQuickPlatformMenu *that = const_cast(this); - m_menuItem = new QQuickPlatformMenuItem(that); - m_menuItem->setSubMenu(that); - m_menuItem->setText(m_title); - m_menuItem->setIcon(icon()); - m_menuItem->setVisible(m_visible); - m_menuItem->setEnabled(m_enabled); - m_menuItem->componentComplete(); - } - return m_menuItem; -} - -/*! - \qmlproperty bool Qt.labs.platform::Menu::enabled - - This property holds whether the menu is enabled. The default value is \c true. -*/ -bool QQuickPlatformMenu::isEnabled() const -{ - return m_enabled; -} - -void QQuickPlatformMenu::setEnabled(bool enabled) -{ - if (m_enabled == enabled) - return; - - if (m_menuItem) - m_menuItem->setEnabled(enabled); - - m_enabled = enabled; - sync(); - emit enabledChanged(); -} - -/*! - \qmlproperty bool Qt.labs.platform::Menu::visible - - This property holds whether the menu is visible. The default value is \c true. -*/ -bool QQuickPlatformMenu::isVisible() const -{ - return m_visible; -} - -void QQuickPlatformMenu::setVisible(bool visible) -{ - if (m_visible == visible) - return; - - if (m_menuItem) - m_menuItem->setVisible(visible); - - m_visible = visible; - sync(); - emit visibleChanged(); -} - -/*! - \qmlproperty int Qt.labs.platform::Menu::minimumWidth - - This property holds the minimum width of the menu. The default value is \c -1 (no minimum width). -*/ -int QQuickPlatformMenu::minimumWidth() const -{ - return m_minimumWidth; -} - -void QQuickPlatformMenu::setMinimumWidth(int width) -{ - if (m_minimumWidth == width) - return; - - m_minimumWidth = width; - sync(); - emit minimumWidthChanged(); -} - -/*! - \qmlproperty enumeration Qt.labs.platform::Menu::type - - This property holds the type of the menu. - - Available values: - \value Menu.DefaultMenu A normal menu (default). - \value Menu.EditMenu An edit menu with pre-populated cut, copy and paste items. -*/ -QPlatformMenu::MenuType QQuickPlatformMenu::type() const -{ - return m_type; -} - -void QQuickPlatformMenu::setType(QPlatformMenu::MenuType type) -{ - if (m_type == type) - return; - - m_type = type; - sync(); - emit typeChanged(); -} - -/*! - \qmlproperty string Qt.labs.platform::Menu::title - - This property holds the menu's title. -*/ -QString QQuickPlatformMenu::title() const -{ - return m_title; -} - -void QQuickPlatformMenu::setTitle(const QString &title) -{ - if (m_title == title) - return; - - if (m_menuItem) - m_menuItem->setText(title); - - m_title = title; - sync(); - emit titleChanged(); -} - -/*! - \qmlproperty font Qt.labs.platform::Menu::font - - This property holds the menu's font. - - \sa text -*/ -QFont QQuickPlatformMenu::font() const -{ - return m_font; -} - -void QQuickPlatformMenu::setFont(const QFont& font) -{ - if (m_font == font) - return; - - m_font = font; - sync(); - emit fontChanged(); -} - -/*! - \since Qt.labs.platform 1.1 (Qt 5.12) - \qmlproperty url Qt.labs.platform::Menu::icon.source - \qmlproperty string Qt.labs.platform::Menu::icon.name - \qmlproperty bool Qt.labs.platform::Menu::icon.mask - - This property holds the menu item's icon. -*/ -QQuickPlatformIcon QQuickPlatformMenu::icon() const -{ - if (!m_iconLoader) - return QQuickPlatformIcon(); - - return iconLoader()->icon(); -} - -void QQuickPlatformMenu::setIcon(const QQuickPlatformIcon &icon) -{ - if (iconLoader()->icon() == icon) - return; - - if (m_menuItem) - m_menuItem->setIcon(icon); - - iconLoader()->setIcon(icon); - emit iconChanged(); -} - -/*! - \qmlmethod void Qt.labs.platform::Menu::addItem(MenuItem item) - - Adds an \a item to the end of the menu. -*/ -void QQuickPlatformMenu::addItem(QQuickPlatformMenuItem *item) -{ - insertItem(m_items.count(), item); -} - -/*! - \qmlmethod void Qt.labs.platform::Menu::insertItem(int index, MenuItem item) - - Inserts an \a item at the specified \a index in the menu. -*/ -void QQuickPlatformMenu::insertItem(int index, QQuickPlatformMenuItem *item) -{ - if (!item || m_items.contains(item)) - return; - - m_items.insert(index, item); - m_data.append(item); - item->setMenu(this); - if (m_handle && item->create()) { - QQuickPlatformMenuItem *before = m_items.value(index + 1); - m_handle->insertMenuItem(item->handle(), before ? before->create() : nullptr); - } - sync(); - emit itemsChanged(); -} - -/*! - \qmlmethod void Qt.labs.platform::Menu::removeItem(MenuItem item) - - Removes an \a item from the menu. -*/ -void QQuickPlatformMenu::removeItem(QQuickPlatformMenuItem *item) -{ - if (!item || !m_items.removeOne(item)) - return; - - m_data.removeOne(item); - if (m_handle) - m_handle->removeMenuItem(item->handle()); - item->setMenu(nullptr); - sync(); - emit itemsChanged(); -} - -/*! - \qmlmethod void Qt.labs.platform::Menu::addMenu(Menu submenu) - - Adds a \a submenu to the end of the menu. -*/ -void QQuickPlatformMenu::addMenu(QQuickPlatformMenu *menu) -{ - insertMenu(m_items.count(), menu); -} - -/*! - \qmlmethod void Qt.labs.platform::Menu::insertMenu(int index, Menu submenu) - - Inserts a \a submenu at the specified \a index in the menu. -*/ -void QQuickPlatformMenu::insertMenu(int index, QQuickPlatformMenu *menu) -{ - if (!menu) - return; - - menu->setParentMenu(this); - insertItem(index, menu->menuItem()); -} - -/*! - \qmlmethod void Qt.labs.platform::Menu::removeMenu(Menu submenu) - - Removes a \a submenu from the menu. -*/ -void QQuickPlatformMenu::removeMenu(QQuickPlatformMenu *menu) -{ - if (!menu) - return; - - menu->setParentMenu(nullptr); - removeItem(menu->menuItem()); -} - -/*! - \qmlmethod void Qt.labs.platform::Menu::clear() - - Removes all items from the menu. -*/ -void QQuickPlatformMenu::clear() -{ - if (m_items.isEmpty()) - return; - - for (QQuickPlatformMenuItem *item : qAsConst(m_items)) { - m_data.removeOne(item); - if (m_handle) - m_handle->removeMenuItem(item->handle()); - item->setMenu(nullptr); - delete item; - } - - m_items.clear(); - sync(); - emit itemsChanged(); -} - -/*! - \qmlmethod void Qt.labs.platform::Menu::open(MenuItem item) - - Opens the menu at the current mouse position, optionally aligned to a menu \a item. -*/ - -/*! - \qmlmethod void Qt.labs.platform::Menu::open(Item target, MenuItem item) - - Opens the menu at the specified \a target item, optionally aligned to a menu \a item. -*/ -void QQuickPlatformMenu::open(QQmlV4Function *args) -{ - if (!m_handle) - return; - - if (args->length() > 2) { - args->v4engine()->throwTypeError(); - return; - } - - QV4::ExecutionEngine *v4 = args->v4engine(); - QV4::Scope scope(v4); - - QQuickItem *targetItem = nullptr; - if (args->length() > 0) { - QV4::ScopedValue value(scope, (*args)[0]); - QV4::Scoped object(scope, value->as()); - if (object) - targetItem = qobject_cast(object->object()); - } - - QQuickPlatformMenuItem *menuItem = nullptr; - if (args->length() > 1) { - QV4::ScopedValue value(scope, (*args)[1]); - QV4::Scoped object(scope, value->as()); - if (object) - menuItem = qobject_cast(object->object()); - } - - QPoint offset; - QWindow *window = findWindow(targetItem, &offset); - - QRect targetRect; - if (targetItem) { - QRectF sceneBounds = targetItem->mapRectToScene(targetItem->boundingRect()); - targetRect = sceneBounds.toAlignedRect().translated(offset); - } else { -#if QT_CONFIG(cursor) - QPoint pos = QCursor::pos(); - if (window) - pos = window->mapFromGlobal(pos); - targetRect.moveTo(pos); -#endif - } - m_handle->showPopup(window, - QHighDpi::toNativePixels(targetRect, window), - menuItem ? menuItem->handle() : nullptr); -} - -/*! - \qmlmethod void Qt.labs.platform::Menu::close() - - Closes the menu. -*/ -void QQuickPlatformMenu::close() -{ - if (m_handle) - m_handle->dismiss(); -} - -void QQuickPlatformMenu::classBegin() -{ -} - -void QQuickPlatformMenu::componentComplete() -{ - m_complete = true; - if (m_handle && m_iconLoader) - m_iconLoader->setEnabled(true); - sync(); -} - -QQuickPlatformIconLoader *QQuickPlatformMenu::iconLoader() const -{ - if (!m_iconLoader) { - QQuickPlatformMenu *that = const_cast(this); - static int slot = staticMetaObject.indexOfSlot("updateIcon()"); - m_iconLoader = new QQuickPlatformIconLoader(slot, that); - m_iconLoader->setEnabled(m_complete); - } - return m_iconLoader; -} - -static QWindow *effectiveWindow(QWindow *window, QPoint *offset) -{ - QQuickWindow *quickWindow = qobject_cast(window); - if (quickWindow) { - QWindow *renderWindow = QQuickRenderControl::renderWindowFor(quickWindow, offset); - if (renderWindow) - return renderWindow; - } - return window; -} - -QWindow *QQuickPlatformMenu::findWindow(QQuickItem *target, QPoint *offset) const -{ - if (target) - return effectiveWindow(target->window(), offset); - - if (m_menuBar && m_menuBar->window()) - return effectiveWindow(m_menuBar->window(), offset); - - QObject *obj = parent(); - while (obj) { - QWindow *window = qobject_cast(obj); - if (window) - return effectiveWindow(window, offset); - - QQuickItem *item = qobject_cast(obj); - if (item && item->window()) - return effectiveWindow(item->window(), offset); - - obj = obj->parent(); - } - return nullptr; -} - -void QQuickPlatformMenu::data_append(QQmlListProperty *property, QObject *object) -{ - QQuickPlatformMenu *menu = static_cast(property->object); - if (QQuickPlatformMenuItem *item = qobject_cast(object)) - menu->addItem(item); - else if (QQuickPlatformMenu *subMenu = qobject_cast(object)) - menu->addMenu(subMenu); - else - menu->m_data.append(object); -} - -qsizetype QQuickPlatformMenu::data_count(QQmlListProperty *property) -{ - QQuickPlatformMenu *menu = static_cast(property->object); - return menu->m_data.count(); -} - -QObject *QQuickPlatformMenu::data_at(QQmlListProperty *property, qsizetype index) -{ - QQuickPlatformMenu *menu = static_cast(property->object); - return menu->m_data.value(index); -} - -void QQuickPlatformMenu::data_clear(QQmlListProperty *property) -{ - QQuickPlatformMenu *menu = static_cast(property->object); - menu->m_data.clear(); -} - -void QQuickPlatformMenu::items_append(QQmlListProperty *property, QQuickPlatformMenuItem *item) -{ - QQuickPlatformMenu *menu = static_cast(property->object); - menu->addItem(item); -} - -qsizetype QQuickPlatformMenu::items_count(QQmlListProperty *property) -{ - QQuickPlatformMenu *menu = static_cast(property->object); - return menu->m_items.count(); -} - -QQuickPlatformMenuItem *QQuickPlatformMenu::items_at(QQmlListProperty *property, qsizetype index) -{ - QQuickPlatformMenu *menu = static_cast(property->object); - return menu->m_items.value(index); -} - -void QQuickPlatformMenu::items_clear(QQmlListProperty *property) -{ - QQuickPlatformMenu *menu = static_cast(property->object); - menu->clear(); -} - -void QQuickPlatformMenu::updateIcon() -{ - if (!m_handle || !m_iconLoader) - return; - - m_handle->setIcon(m_iconLoader->toQIcon()); - sync(); -} - -QT_END_NAMESPACE - -#include "moc_qquickplatformmenu_p.cpp" diff --git a/src/imports/platform/qquickplatformmenu_p.h b/src/imports/platform/qquickplatformmenu_p.h deleted file mode 100644 index fc66b61b..00000000 --- a/src/imports/platform/qquickplatformmenu_p.h +++ /dev/null @@ -1,213 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKPLATFORMMENU_P_H -#define QQUICKPLATFORMMENU_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 -#include -#include -#include -#include -#include -#include - -#include "qquickplatformicon_p.h" - -QT_BEGIN_NAMESPACE - -class QIcon; -class QWindow; -class QQuickItem; -class QPlatformMenu; -class QQmlV4Function; -class QQuickPlatformMenuBar; -class QQuickPlatformMenuItem; -class QQuickPlatformIconLoader; -class QQuickPlatformSystemTrayIcon; - -class QQuickPlatformMenu : public QObject, public QQmlParserStatus -{ - Q_OBJECT - Q_INTERFACES(QQmlParserStatus) - Q_PROPERTY(QQmlListProperty data READ data FINAL) - Q_PROPERTY(QQmlListProperty items READ items NOTIFY itemsChanged FINAL) - Q_PROPERTY(QQuickPlatformMenuBar *menuBar READ menuBar NOTIFY menuBarChanged FINAL) - Q_PROPERTY(QQuickPlatformMenu *parentMenu READ parentMenu NOTIFY parentMenuChanged FINAL) - Q_PROPERTY(QQuickPlatformSystemTrayIcon *systemTrayIcon READ systemTrayIcon NOTIFY systemTrayIconChanged FINAL) - Q_PROPERTY(QQuickPlatformMenuItem *menuItem READ menuItem CONSTANT FINAL) - Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged FINAL) - Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL) - Q_PROPERTY(int minimumWidth READ minimumWidth WRITE setMinimumWidth NOTIFY minimumWidthChanged FINAL) - Q_PROPERTY(QPlatformMenu::MenuType type READ type WRITE setType NOTIFY typeChanged FINAL) - Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged FINAL) - Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged FINAL) - Q_PROPERTY(QQuickPlatformIcon icon READ icon WRITE setIcon NOTIFY iconChanged FINAL REVISION(1, 1)) - Q_ENUMS(QPlatformMenu::MenuType) - Q_CLASSINFO("DefaultProperty", "data") - -public: - explicit QQuickPlatformMenu(QObject *parent = nullptr); - ~QQuickPlatformMenu(); - - QPlatformMenu *handle() const; - QPlatformMenu *create(); - void destroy(); - void sync(); - - QQmlListProperty data(); - QQmlListProperty items(); - - QQuickPlatformMenuBar *menuBar() const; - void setMenuBar(QQuickPlatformMenuBar *menuBar); - - QQuickPlatformMenu *parentMenu() const; - void setParentMenu(QQuickPlatformMenu *menu); - - QQuickPlatformSystemTrayIcon *systemTrayIcon() const; - void setSystemTrayIcon(QQuickPlatformSystemTrayIcon *icon); - - QQuickPlatformMenuItem *menuItem() const; - - bool isEnabled() const; - void setEnabled(bool enabled); - - bool isVisible() const; - void setVisible(bool visible); - - int minimumWidth() const; - void setMinimumWidth(int width); - - QPlatformMenu::MenuType type() const; - void setType(QPlatformMenu::MenuType type); - - QString title() const; - void setTitle(const QString &title); - - QFont font() const; - void setFont(const QFont &font); - - QQuickPlatformIcon icon() const; - void setIcon(const QQuickPlatformIcon &icon); - - Q_INVOKABLE void addItem(QQuickPlatformMenuItem *item); - Q_INVOKABLE void insertItem(int index, QQuickPlatformMenuItem *item); - Q_INVOKABLE void removeItem(QQuickPlatformMenuItem *item); - - Q_INVOKABLE void addMenu(QQuickPlatformMenu *menu); - Q_INVOKABLE void insertMenu(int index, QQuickPlatformMenu *menu); - Q_INVOKABLE void removeMenu(QQuickPlatformMenu *menu); - - Q_INVOKABLE void clear(); - -public Q_SLOTS: - void open(QQmlV4Function *args); - void close(); - -Q_SIGNALS: - void aboutToShow(); - void aboutToHide(); - - void itemsChanged(); - void menuBarChanged(); - void parentMenuChanged(); - void systemTrayIconChanged(); - void titleChanged(); - void enabledChanged(); - void visibleChanged(); - void minimumWidthChanged(); - void fontChanged(); - void typeChanged(); - Q_REVISION(2, 1) void iconChanged(); - -protected: - void classBegin() override; - void componentComplete() override; - - QQuickPlatformIconLoader *iconLoader() const; - - QWindow *findWindow(QQuickItem *target, QPoint *offset) const; - - static void data_append(QQmlListProperty *property, QObject *object); - static qsizetype data_count(QQmlListProperty *property); - static QObject *data_at(QQmlListProperty *property, qsizetype index); - static void data_clear(QQmlListProperty *property); - - static void items_append(QQmlListProperty *property, QQuickPlatformMenuItem *item); - static qsizetype items_count(QQmlListProperty *property); - static QQuickPlatformMenuItem *items_at(QQmlListProperty *property, qsizetype index); - static void items_clear(QQmlListProperty *property); - -private Q_SLOTS: - void updateIcon(); - -private: - void unparentSubmenus(); - - bool m_complete; - bool m_enabled; - bool m_visible; - int m_minimumWidth; - QPlatformMenu::MenuType m_type; - QString m_title; - QFont m_font; - QList m_data; - QList m_items; - QQuickPlatformMenuBar *m_menuBar; - QQuickPlatformMenu *m_parentMenu; - QQuickPlatformSystemTrayIcon *m_systemTrayIcon; - mutable QQuickPlatformMenuItem *m_menuItem; - mutable QQuickPlatformIconLoader *m_iconLoader; - QPlatformMenu *m_handle; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickPlatformMenu) -Q_DECLARE_METATYPE(QPlatformMenu::MenuType) - -#endif // QQUICKPLATFORMMENU_P_H diff --git a/src/imports/platform/qquickplatformmenubar.cpp b/src/imports/platform/qquickplatformmenubar.cpp deleted file mode 100644 index 3b1f4b74..00000000 --- a/src/imports/platform/qquickplatformmenubar.cpp +++ /dev/null @@ -1,333 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickplatformmenubar_p.h" -#include "qquickplatformmenu_p.h" - -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -/*! - \qmltype MenuBar - \inherits QtObject -//! \instantiates QQuickPlatformMenuBar - \inqmlmodule Qt.labs.platform - \since 5.8 - \brief A native menubar. - - The MenuBar type provides a QML API for native platform menubars. - - \image qtlabsplatform-menubar.png - - A menubar consists of a list of drop-down menus. - - \code - MenuBar { - id: menuBar - - Menu { - id: fileMenu - title: qsTr("File") - // ... - } - - Menu { - id: editMenu - title: qsTr("&Edit") - // ... - } - - Menu { - id: viewMenu - title: qsTr("&View") - // ... - } - - Menu { - id: helpMenu - title: qsTr("&Help") - // ... - } - } - \endcode - - MenuBar is currently available on the following platforms: - - \list - \li macOS - \li Android - \li Linux (only available on desktop environments that provide a global D-Bus menu bar) - \endlist - - \labs - - \sa Menu -*/ - -Q_DECLARE_LOGGING_CATEGORY(qtLabsPlatformMenus) - -QQuickPlatformMenuBar::QQuickPlatformMenuBar(QObject *parent) - : QObject(parent), - m_complete(false), - m_window(nullptr), - m_handle(nullptr) -{ - m_handle = QGuiApplicationPrivate::platformTheme()->createPlatformMenuBar(); - qCDebug(qtLabsPlatformMenus) << "MenuBar ->" << m_handle; -} - -QQuickPlatformMenuBar::~QQuickPlatformMenuBar() -{ - for (QQuickPlatformMenu *menu : qAsConst(m_menus)) - menu->setMenuBar(nullptr); - delete m_handle; - m_handle = nullptr; -} - -QPlatformMenuBar *QQuickPlatformMenuBar::handle() const -{ - return m_handle; -} - -/*! - \qmldefault - \qmlproperty list Qt.labs.platform::MenuBar::data - - This default property holds the list of all objects declared as children of - the menubar. The data property includes objects that are not \l Menu instances, - such as \l Timer and \l QtObject. - - \sa menus -*/ -QQmlListProperty QQuickPlatformMenuBar::data() -{ - return QQmlListProperty(this, nullptr, data_append, data_count, data_at, data_clear); -} - -/*! - \qmlproperty list Qt.labs.platform::MenuBar::menus - - This property holds the list of menus in the menubar. -*/ -QQmlListProperty QQuickPlatformMenuBar::menus() -{ - return QQmlListProperty(this, nullptr, menus_append, menus_count, menus_at, menus_clear); -} - -/*! - \qmlproperty Window Qt.labs.platform::MenuBar::window - - This property holds the menubar's window. - - Unless explicitly set, the window is automatically resolved by iterating - the QML parent objects until a \l Window or an \l Item that has a window - is found. -*/ -QWindow *QQuickPlatformMenuBar::window() const -{ - return m_window; -} - -void QQuickPlatformMenuBar::setWindow(QWindow *window) -{ - if (m_window == window) - return; - - if (m_handle) - m_handle->handleReparent(window); - - m_window = window; - emit windowChanged(); -} - -/*! - \qmlmethod void Qt.labs.platform::MenuBar::addMenu(Menu menu) - - Adds a \a menu to end of the menubar. -*/ -void QQuickPlatformMenuBar::addMenu(QQuickPlatformMenu *menu) -{ - insertMenu(m_menus.count(), menu); -} - -/*! - \qmlmethod void Qt.labs.platform::MenuBar::insertMenu(int index, Menu menu) - - Inserts a \a menu at the specified \a index in the menubar. -*/ -void QQuickPlatformMenuBar::insertMenu(int index, QQuickPlatformMenu *menu) -{ - if (!menu || m_menus.contains(menu)) - return; - - QQuickPlatformMenu *before = m_menus.value(index); - m_menus.insert(index, menu); - m_data.append(menu); - menu->setMenuBar(this); - if (m_handle) - m_handle->insertMenu(menu->create(), before ? before->handle() : nullptr); - menu->sync(); - emit menusChanged(); -} - -/*! - \qmlmethod void Qt.labs.platform::MenuBar::removeMenu(Menu menu) - - Removes a \a menu from the menubar. -*/ -void QQuickPlatformMenuBar::removeMenu(QQuickPlatformMenu *menu) -{ - if (!menu || !m_menus.removeOne(menu)) - return; - - m_data.removeOne(menu); - if (m_handle) - m_handle->removeMenu(menu->handle()); - menu->setMenuBar(nullptr); - emit menusChanged(); -} - -/*! - \qmlmethod void Qt.labs.platform::MenuBar::clear() - - Removes all menus from the menubar. -*/ -void QQuickPlatformMenuBar::clear() -{ - if (m_menus.isEmpty()) - return; - - for (QQuickPlatformMenu *menu : qAsConst(m_menus)) { - m_data.removeOne(menu); - if (m_handle) - m_handle->removeMenu(menu->handle()); - menu->setMenuBar(nullptr); - delete menu; - } - - m_menus.clear(); - emit menusChanged(); -} - -void QQuickPlatformMenuBar::classBegin() -{ -} - -void QQuickPlatformMenuBar::componentComplete() -{ - m_complete = true; - for (QQuickPlatformMenu *menu : qAsConst(m_menus)) - menu->sync(); - if (!m_window) - setWindow(findWindow()); -} - -QWindow *QQuickPlatformMenuBar::findWindow() const -{ - QObject *obj = parent(); - while (obj) { - QWindow *window = qobject_cast(obj); - if (window) - return window; - QQuickItem *item = qobject_cast(obj); - if (item && item->window()) - return item->window(); - obj = obj->parent(); - } - return nullptr; -} - -void QQuickPlatformMenuBar::data_append(QQmlListProperty *property, QObject *object) -{ - QQuickPlatformMenuBar *menuBar = static_cast(property->object); - QQuickPlatformMenu *menu = qobject_cast(object); - if (menu) - menuBar->addMenu(menu); - else - menuBar->m_data.append(object); -} - -qsizetype QQuickPlatformMenuBar::data_count(QQmlListProperty *property) -{ - QQuickPlatformMenuBar *menuBar = static_cast(property->object); - return menuBar->m_data.count(); -} - -QObject *QQuickPlatformMenuBar::data_at(QQmlListProperty *property, qsizetype index) -{ - QQuickPlatformMenuBar *menuBar = static_cast(property->object); - return menuBar->m_data.value(index); -} - -void QQuickPlatformMenuBar::data_clear(QQmlListProperty *property) -{ - QQuickPlatformMenuBar *menuBar = static_cast(property->object); - menuBar->m_data.clear(); -} - -void QQuickPlatformMenuBar::menus_append(QQmlListProperty *property, QQuickPlatformMenu *menu) -{ - QQuickPlatformMenuBar *menuBar = static_cast(property->object); - menuBar->addMenu(menu); -} - -qsizetype QQuickPlatformMenuBar::menus_count(QQmlListProperty *property) -{ - QQuickPlatformMenuBar *menuBar = static_cast(property->object); - return menuBar->m_menus.count(); -} - -QQuickPlatformMenu *QQuickPlatformMenuBar::menus_at(QQmlListProperty *property, qsizetype index) -{ - QQuickPlatformMenuBar *menuBar = static_cast(property->object); - return menuBar->m_menus.value(index); -} - -void QQuickPlatformMenuBar::menus_clear(QQmlListProperty *property) -{ - QQuickPlatformMenuBar *menuBar = static_cast(property->object); - menuBar->clear(); -} - -QT_END_NAMESPACE - -#include "moc_qquickplatformmenubar_p.cpp" diff --git a/src/imports/platform/qquickplatformmenubar_p.h b/src/imports/platform/qquickplatformmenubar_p.h deleted file mode 100644 index e644c86c..00000000 --- a/src/imports/platform/qquickplatformmenubar_p.h +++ /dev/null @@ -1,120 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKPLATFORMMENUBAR_P_H -#define QQUICKPLATFORMMENUBAR_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 -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class QWindow; -class QPlatformMenuBar; -class QQuickPlatformMenu; - -class QQuickPlatformMenuBar : public QObject, public QQmlParserStatus -{ - Q_OBJECT - Q_INTERFACES(QQmlParserStatus) - Q_PROPERTY(QQmlListProperty data READ data FINAL) - Q_PROPERTY(QQmlListProperty menus READ menus NOTIFY menusChanged FINAL) - Q_PROPERTY(QWindow *window READ window WRITE setWindow NOTIFY windowChanged FINAL) - Q_CLASSINFO("DefaultProperty", "data") - -public: - explicit QQuickPlatformMenuBar(QObject *parent = nullptr); - ~QQuickPlatformMenuBar(); - - QPlatformMenuBar *handle() const; - - QQmlListProperty data(); - QQmlListProperty menus(); - - QWindow *window() const; - void setWindow(QWindow *window); - - Q_INVOKABLE void addMenu(QQuickPlatformMenu *menu); - Q_INVOKABLE void insertMenu(int index, QQuickPlatformMenu *menu); - Q_INVOKABLE void removeMenu(QQuickPlatformMenu *menu); - Q_INVOKABLE void clear(); - -Q_SIGNALS: - void menusChanged(); - void windowChanged(); - -protected: - void classBegin() override; - void componentComplete() override; - - QWindow *findWindow() const; - - static void data_append(QQmlListProperty *property, QObject *object); - static qsizetype data_count(QQmlListProperty *property); - static QObject *data_at(QQmlListProperty *property, qsizetype index); - static void data_clear(QQmlListProperty *property); - - static void menus_append(QQmlListProperty *property, QQuickPlatformMenu *menu); - static qsizetype menus_count(QQmlListProperty *property); - static QQuickPlatformMenu *menus_at(QQmlListProperty *property, qsizetype index); - static void menus_clear(QQmlListProperty *property); - -private: - bool m_complete; - QWindow *m_window; - QList m_data; - QList m_menus; - QPlatformMenuBar *m_handle; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickPlatformMenuBar) - -#endif // QQUICKPLATFORMMENUBAR_P_H diff --git a/src/imports/platform/qquickplatformmenuitem.cpp b/src/imports/platform/qquickplatformmenuitem.cpp deleted file mode 100644 index 4f61d423..00000000 --- a/src/imports/platform/qquickplatformmenuitem.cpp +++ /dev/null @@ -1,641 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickplatformmenuitem_p.h" -#include "qquickplatformmenu_p.h" -#include "qquickplatformmenuitemgroup_p.h" -#include "qquickplatformiconloader_p.h" - -#include -#if QT_CONFIG(shortcut) -#include -#endif -#include -#include -#include - -#include "widgets/qwidgetplatform_p.h" - -QT_BEGIN_NAMESPACE - -/*! - \qmltype MenuItem - \inherits QtObject -//! \instantiates QQuickPlatformMenuItem - \inqmlmodule Qt.labs.platform - \since 5.8 - \brief A native menu item. - - The MenuItem type provides a QML API for native platform menu items. - - \image qtlabsplatform-menu.png - - A menu item consists of an \l icon, \l text, and \l shortcut. - - \code - Menu { - id: zoomMenu - - MenuItem { - text: qsTr("Zoom In") - shortcut: StandardKey.ZoomIn - onTriggered: zoomIn() - } - - MenuItem { - text: qsTr("Zoom Out") - shortcut: StandardKey.ZoomOut - onTriggered: zoomOut() - } - } - \endcode - - \labs - - \sa Menu, MenuItemGroup -*/ - -/*! - \qmlsignal Qt.labs.platform::MenuItem::triggered() - - This signal is emitted when the menu item is triggered by the user. -*/ - -/*! - \qmlsignal Qt.labs.platform::MenuItem::hovered() - - This signal is emitted when the menu item is hovered by the user. -*/ - -QQuickPlatformMenuItem::QQuickPlatformMenuItem(QObject *parent) - : QObject(parent), - m_complete(false), - m_enabled(true), - m_visible(true), - m_separator(false), - m_checkable(false), - m_checked(false), - m_role(QPlatformMenuItem::TextHeuristicRole), - m_menu(nullptr), - m_subMenu(nullptr), - m_group(nullptr), - m_iconLoader(nullptr), - m_handle(nullptr) -{ -} - -QQuickPlatformMenuItem::~QQuickPlatformMenuItem() -{ - if (m_menu) - m_menu->removeItem(this); - if (m_group) - m_group->removeItem(this); -#if QT_CONFIG(shortcut) - if (m_shortcutId != -1) { - QKeySequence sequence; - if (m_shortcut.metaType().id() == QMetaType::Int) - sequence = QKeySequence(static_cast(m_shortcut.toInt())); - else - sequence = QKeySequence::fromString(m_shortcut.toString()); - QGuiApplicationPrivate::instance()->shortcutMap.removeShortcut(m_shortcutId, this, sequence); - } -#endif - delete m_iconLoader; - m_iconLoader = nullptr; - delete m_handle; - m_handle = nullptr; -} - -QPlatformMenuItem *QQuickPlatformMenuItem::handle() const -{ - return m_handle; -} - -QPlatformMenuItem *QQuickPlatformMenuItem::create() -{ - if (!m_handle && m_menu && m_menu->handle()) { - m_handle = m_menu->handle()->createMenuItem(); - - // TODO: implement QCocoaMenu::createMenuItem() - if (!m_handle) - m_handle = QGuiApplicationPrivate::platformTheme()->createPlatformMenuItem(); - - if (!m_handle) - m_handle = QWidgetPlatform::createMenuItem(); - - if (m_handle) { - connect(m_handle, &QPlatformMenuItem::activated, this, &QQuickPlatformMenuItem::activate); - connect(m_handle, &QPlatformMenuItem::hovered, this, &QQuickPlatformMenuItem::hovered); - } - } - return m_handle; -} - -void QQuickPlatformMenuItem::sync() -{ - if (!m_complete || !create()) - return; - - m_handle->setEnabled(isEnabled()); - m_handle->setVisible(isVisible()); - m_handle->setIsSeparator(m_separator); - m_handle->setCheckable(m_checkable); - m_handle->setChecked(m_checked); - m_handle->setRole(m_role); - m_handle->setText(m_text); - m_handle->setFont(m_font); - m_handle->setHasExclusiveGroup(m_group && m_group->isExclusive()); - if (m_subMenu) { - // Sync first as dynamically created menus may need to get the - // handle recreated - m_subMenu->sync(); - if (m_subMenu->handle()) - m_handle->setMenu(m_subMenu->handle()); - } - -#if QT_CONFIG(shortcut) - QKeySequence sequence; - if (m_shortcut.metaType().id() == QMetaType::Int) - sequence = QKeySequence(static_cast(m_shortcut.toInt())); - else - sequence = QKeySequence::fromString(m_shortcut.toString()); - m_handle->setShortcut(sequence.toString()); -#endif - - if (m_menu && m_menu->handle()) - m_menu->handle()->syncMenuItem(m_handle); -} - -/*! - \readonly - \qmlproperty Menu Qt.labs.platform::MenuItem::menu - - This property holds the menu that the item belongs to, or \c null if the - item is not in a menu. -*/ -QQuickPlatformMenu *QQuickPlatformMenuItem::menu() const -{ - return m_menu; -} - -void QQuickPlatformMenuItem::setMenu(QQuickPlatformMenu *menu) -{ - if (m_menu == menu) - return; - - m_menu = menu; - emit menuChanged(); -} - -/*! - \readonly - \qmlproperty Menu Qt.labs.platform::MenuItem::subMenu - - This property holds the sub-menu that the item contains, or \c null if - the item is not a sub-menu item. -*/ -QQuickPlatformMenu *QQuickPlatformMenuItem::subMenu() const -{ - return m_subMenu; -} - -void QQuickPlatformMenuItem::setSubMenu(QQuickPlatformMenu *menu) -{ - if (m_subMenu == menu) - return; - - m_subMenu = menu; - sync(); - emit subMenuChanged(); -} - -/*! - \qmlproperty MenuItemGroup Qt.labs.platform::MenuItem::group - - This property holds the group that the item belongs to, or \c null if the - item is not in a group. -*/ -QQuickPlatformMenuItemGroup *QQuickPlatformMenuItem::group() const -{ - return m_group; -} - -void QQuickPlatformMenuItem::setGroup(QQuickPlatformMenuItemGroup *group) -{ - if (m_group == group) - return; - - bool wasEnabled = isEnabled(); - bool wasVisible = isVisible(); - - if (group) - group->addItem(this); - - m_group = group; - sync(); - emit groupChanged(); - - if (isEnabled() != wasEnabled) - emit enabledChanged(); - if (isVisible() != wasVisible) - emit visibleChanged(); -} - -/*! - \qmlproperty bool Qt.labs.platform::MenuItem::enabled - - This property holds whether the item is enabled. The default value is \c true. - - Disabled items cannot be triggered by the user. They do not disappear from menus, - but they are displayed in a way which indicates that they are unavailable. For - example, they might be displayed using only shades of gray. - - When an item is disabled, it is not possible to trigger it through its \l shortcut. -*/ -bool QQuickPlatformMenuItem::isEnabled() const -{ - return m_enabled && (!m_group || m_group->isEnabled()); -} - -void QQuickPlatformMenuItem::setEnabled(bool enabled) -{ - if (m_enabled == enabled) - return; - - bool wasEnabled = isEnabled(); - m_enabled = enabled; - sync(); - if (isEnabled() != wasEnabled) - emit enabledChanged(); -} - -/*! - \qmlproperty bool Qt.labs.platform::MenuItem::visible - - This property holds whether the item is visible. The default value is \c true. -*/ -bool QQuickPlatformMenuItem::isVisible() const -{ - return m_visible && (!m_group || m_group->isVisible()); -} - -void QQuickPlatformMenuItem::setVisible(bool visible) -{ - if (m_visible == visible) - return; - - bool wasVisible = isVisible(); - m_visible = visible; - sync(); - if (isVisible() != wasVisible) - emit visibleChanged(); -} - -/*! - \qmlproperty bool Qt.labs.platform::MenuItem::separator - - This property holds whether the item is a separator line. The default value - is \c false. - - \sa MenuSeparator -*/ -bool QQuickPlatformMenuItem::isSeparator() const -{ - return m_separator; -} - -void QQuickPlatformMenuItem::setSeparator(bool separator) -{ - if (m_separator == separator) - return; - - m_separator = separator; - sync(); - emit separatorChanged(); -} - -/*! - \qmlproperty bool Qt.labs.platform::MenuItem::checkable - - This property holds whether the item is checkable. - - A checkable menu item has an on/off state. For example, in a word processor, - a "Bold" menu item may be either on or off. A menu item that is not checkable - is a command item that is simply executed, e.g. file save. - - The default value is \c false. - - \sa checked, MenuItemGroup -*/ -bool QQuickPlatformMenuItem::isCheckable() const -{ - return m_checkable; -} - -void QQuickPlatformMenuItem::setCheckable(bool checkable) -{ - if (m_checkable == checkable) - return; - - m_checkable = checkable; - sync(); - emit checkableChanged(); -} - -/*! - \qmlproperty bool Qt.labs.platform::MenuItem::checked - - This property holds whether the item is checked (on) or unchecked (off). - The default value is \c false. - - \sa checkable, MenuItemGroup -*/ -bool QQuickPlatformMenuItem::isChecked() const -{ - return m_checked; -} - -void QQuickPlatformMenuItem::setChecked(bool checked) -{ - if (m_checked == checked) - return; - - if (checked && !m_checkable) - setCheckable(true); - - m_checked = checked; - sync(); - emit checkedChanged(); -} - -/*! - \qmlproperty enumeration Qt.labs.platform::MenuItem::role - - This property holds the role of the item. The role determines whether - the item should be placed into the application menu on macOS. - - Available values: - \value MenuItem.NoRole The item should not be put into the application menu - \value MenuItem.TextHeuristicRole The item should be put in the application menu based on the action's text (default) - \value MenuItem.ApplicationSpecificRole The item should be put in the application menu with an application-specific role - \value MenuItem.AboutQtRole The item handles the "About Qt" menu item. - \value MenuItem.AboutRole The item should be placed where the "About" menu item is in the application menu. The text of - the menu item will be set to "About ". The application name is fetched from the - \c{Info.plist} file in the application's bundle (See \l{Qt for macOS - Deployment}). - \value MenuItem.PreferencesRole The item should be placed where the "Preferences..." menu item is in the application menu. - \value MenuItem.QuitRole The item should be placed where the Quit menu item is in the application menu. - - Specifying the role only has effect on items that are in the immediate - menus of a menubar, not in the submenus of those menus. For example, if - you have a "File" menu in your menubar and the "File" menu has a submenu, - specifying a role for the items in that submenu has no effect. They will - never be moved to the application menu. -*/ -QPlatformMenuItem::MenuRole QQuickPlatformMenuItem::role() const -{ - return m_role; -} - -void QQuickPlatformMenuItem::setRole(QPlatformMenuItem::MenuRole role) -{ - if (m_role == role) - return; - - m_role = role; - sync(); - emit roleChanged(); -} - -/*! - \qmlproperty string Qt.labs.platform::MenuItem::text - - This property holds the menu item's text. -*/ -QString QQuickPlatformMenuItem::text() const -{ - return m_text; -} - -void QQuickPlatformMenuItem::setText(const QString &text) -{ - if (m_text == text) - return; - - m_text = text; - sync(); - emit textChanged(); -} - -/*! - \qmlproperty keysequence Qt.labs.platform::MenuItem::shortcut - - This property holds the menu item's shortcut. - - The shortcut key sequence can be set to one of the - \l{QKeySequence::StandardKey}{standard keyboard shortcuts}, or it can be - specified by a string containing a sequence of up to four key presses - that are needed to \l{triggered}{trigger} the shortcut. - - The default value is an empty key sequence. - - \code - MenuItem { - shortcut: "Ctrl+E,Ctrl+W" - onTriggered: edit.wrapMode = TextEdit.Wrap - } - \endcode -*/ -QVariant QQuickPlatformMenuItem::shortcut() const -{ - return m_shortcut; -} - -bool QQuickPlatformMenuItem::event(QEvent *e) -{ -#if QT_CONFIG(shortcut) - if (e->type() == QEvent::Shortcut) { - QShortcutEvent *se = static_cast(e); - if (se->shortcutId() == m_shortcutId) { - activate(); - return true; - } - } -#endif - return QObject::event(e); -} - -void QQuickPlatformMenuItem::setShortcut(const QVariant& shortcut) -{ - if (m_shortcut == shortcut) - return; - -#if QT_CONFIG(shortcut) - if (m_shortcutId != -1) { - QKeySequence sequence; - if (m_shortcut.metaType().id() == QMetaType::Int) - sequence = QKeySequence(static_cast(m_shortcut.toInt())); - else - sequence = QKeySequence::fromString(m_shortcut.toString()); - QGuiApplicationPrivate::instance()->shortcutMap.removeShortcut(m_shortcutId, this, sequence); - } -#endif - m_shortcut = shortcut; - sync(); -#if QT_CONFIG(shortcut) - QKeySequence sequence; - if (m_shortcut.metaType().id() == QMetaType::Int) - sequence = QKeySequence(static_cast(m_shortcut.toInt())); - else - sequence = QKeySequence::fromString(m_shortcut.toString()); - if (!sequence.isEmpty()) { - m_shortcutId = QGuiApplicationPrivate::instance()->shortcutMap.addShortcut(this, sequence, - Qt::WindowShortcut, QQuickShortcutContext::matcher); - } else { - m_shortcutId = -1; - } -#endif - emit shortcutChanged(); -} - -/*! - \qmlproperty font Qt.labs.platform::MenuItem::font - - This property holds the menu item's font. - - \sa text -*/ -QFont QQuickPlatformMenuItem::font() const -{ - return m_font; -} - -void QQuickPlatformMenuItem::setFont(const QFont& font) -{ - if (m_font == font) - return; - - m_font = font; - sync(); - emit fontChanged(); -} - -/*! - \since Qt.labs.platform 1.1 (Qt 5.12) - \qmlproperty url Qt.labs.platform::MenuItem::icon.source - \qmlproperty string Qt.labs.platform::MenuItem::icon.name - \qmlproperty bool Qt.labs.platform::MenuItem::icon.mask - - This property holds the menu item's icon. - - \code - MenuItem { - icon.mask: true - icon.name: "edit-undo" - icon.source: "qrc:/images/undo.png" - } - \endcode - - \sa QIcon::fromTheme() -*/ -QQuickPlatformIcon QQuickPlatformMenuItem::icon() const -{ - if (!m_iconLoader) - return QQuickPlatformIcon(); - - return m_iconLoader->icon(); -} - -void QQuickPlatformMenuItem::setIcon(const QQuickPlatformIcon &icon) -{ - if (iconLoader()->icon() == icon) - return; - - iconLoader()->setIcon(icon); - emit iconChanged(); -} - -/*! - \qmlmethod void Qt.labs.platform::MenuItem::toggle() - - Toggles the \l checked state to its opposite state. -*/ -void QQuickPlatformMenuItem::toggle() -{ - if (m_checkable) - setChecked(!m_checked); -} - -void QQuickPlatformMenuItem::classBegin() -{ -} - -void QQuickPlatformMenuItem::componentComplete() -{ - if (m_handle && m_iconLoader) - m_iconLoader->setEnabled(true); - m_complete = true; - sync(); -} - -QQuickPlatformIconLoader *QQuickPlatformMenuItem::iconLoader() const -{ - if (!m_iconLoader) { - QQuickPlatformMenuItem *that = const_cast(this); - static int slot = staticMetaObject.indexOfSlot("updateIcon()"); - m_iconLoader = new QQuickPlatformIconLoader(slot, that); - m_iconLoader->setEnabled(m_complete); - } - return m_iconLoader; -} - -void QQuickPlatformMenuItem::activate() -{ - toggle(); - emit triggered(); -} - -void QQuickPlatformMenuItem::updateIcon() -{ - if (!m_handle || !m_iconLoader) - return; - - m_handle->setIcon(m_iconLoader->toQIcon()); - sync(); -} - -QT_END_NAMESPACE - -#include "moc_qquickplatformmenuitem_p.cpp" diff --git a/src/imports/platform/qquickplatformmenuitem_p.h b/src/imports/platform/qquickplatformmenuitem_p.h deleted file mode 100644 index 01b7482d..00000000 --- a/src/imports/platform/qquickplatformmenuitem_p.h +++ /dev/null @@ -1,191 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKPLATFORMMENUITEM_P_H -#define QQUICKPLATFORMMENUITEM_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 -#include -#include -#include -#include -#include - -#include "qquickplatformicon_p.h" - -QT_BEGIN_NAMESPACE - -class QPlatformMenuItem; -class QQuickPlatformMenu; -class QQuickPlatformIconLoader; -class QQuickPlatformMenuItemGroup; - -class QQuickPlatformMenuItem : public QObject, public QQmlParserStatus -{ - Q_OBJECT - Q_INTERFACES(QQmlParserStatus) - Q_PROPERTY(QQuickPlatformMenu *menu READ menu NOTIFY menuChanged FINAL) - Q_PROPERTY(QQuickPlatformMenu *subMenu READ subMenu NOTIFY subMenuChanged FINAL) - Q_PROPERTY(QQuickPlatformMenuItemGroup *group READ group WRITE setGroup NOTIFY groupChanged FINAL) - Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged FINAL) - Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL) - Q_PROPERTY(bool separator READ isSeparator WRITE setSeparator NOTIFY separatorChanged FINAL) - Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable NOTIFY checkableChanged FINAL) - Q_PROPERTY(bool checked READ isChecked WRITE setChecked NOTIFY checkedChanged FINAL) - Q_PROPERTY(QPlatformMenuItem::MenuRole role READ role WRITE setRole NOTIFY roleChanged FINAL) - Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged FINAL) - Q_PROPERTY(QVariant shortcut READ shortcut WRITE setShortcut NOTIFY shortcutChanged FINAL) - Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged FINAL) - Q_PROPERTY(QQuickPlatformIcon icon READ icon WRITE setIcon NOTIFY iconChanged FINAL REVISION(1, 1)) - Q_ENUMS(QPlatformMenuItem::MenuRole) - -public: - explicit QQuickPlatformMenuItem(QObject *parent = nullptr); - ~QQuickPlatformMenuItem(); - - QPlatformMenuItem *handle() const; - QPlatformMenuItem *create(); - void sync(); - - QQuickPlatformMenu *menu() const; - void setMenu(QQuickPlatformMenu* menu); - - QQuickPlatformMenu *subMenu() const; - void setSubMenu(QQuickPlatformMenu *menu); - - QQuickPlatformMenuItemGroup *group() const; - void setGroup(QQuickPlatformMenuItemGroup *group); - - bool isEnabled() const; - void setEnabled(bool enabled); - - bool isVisible() const; - void setVisible(bool visible); - - bool isSeparator() const; - void setSeparator(bool separator); - - bool isCheckable() const; - void setCheckable(bool checkable); - - bool isChecked() const; - void setChecked(bool checked); - - QPlatformMenuItem::MenuRole role() const; - void setRole(QPlatformMenuItem::MenuRole role); - - QString text() const; - void setText(const QString &text); - - QVariant shortcut() const; - void setShortcut(const QVariant& shortcut); - - QFont font() const; - void setFont(const QFont &font); - - QQuickPlatformIcon icon() const; - void setIcon(const QQuickPlatformIcon &icon); - -public Q_SLOTS: - void toggle(); - -Q_SIGNALS: - void triggered(); - void hovered(); - - void menuChanged(); - void subMenuChanged(); - void groupChanged(); - void enabledChanged(); - void visibleChanged(); - void separatorChanged(); - void checkableChanged(); - void checkedChanged(); - void roleChanged(); - void textChanged(); - void shortcutChanged(); - void fontChanged(); - Q_REVISION(2, 1) void iconChanged(); - -protected: - void classBegin() override; - void componentComplete() override; - - QQuickPlatformIconLoader *iconLoader() const; - - bool event(QEvent *e) override; -private Q_SLOTS: - void activate(); - void updateIcon(); - -private: - bool m_complete; - bool m_enabled; - bool m_visible; - bool m_separator; - bool m_checkable; - bool m_checked; - QPlatformMenuItem::MenuRole m_role; - QString m_text; - QVariant m_shortcut; - QFont m_font; - QQuickPlatformMenu *m_menu; - QQuickPlatformMenu *m_subMenu; - QQuickPlatformMenuItemGroup *m_group; - mutable QQuickPlatformIconLoader *m_iconLoader; - QPlatformMenuItem *m_handle; - int m_shortcutId = -1; - - friend class QQuickPlatformMenu; - friend class QQuickPlatformMenuItemGroup; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickPlatformMenuItem) - -#endif // QQUICKPLATFORMMENUITEM_P_H diff --git a/src/imports/platform/qquickplatformmenuitemgroup.cpp b/src/imports/platform/qquickplatformmenuitemgroup.cpp deleted file mode 100644 index fcfcc664..00000000 --- a/src/imports/platform/qquickplatformmenuitemgroup.cpp +++ /dev/null @@ -1,392 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Templates module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickplatformmenuitemgroup_p.h" -#include "qquickplatformmenuitem_p.h" - -QT_BEGIN_NAMESPACE - -/*! - \qmltype MenuItemGroup - \inherits QtObject -//! \instantiates QQuickPlatformMenuItemGroup - \inqmlmodule Qt.labs.platform - \since 5.8 - \brief A group for managing native menu items. - - The MenuItemGroup groups native menu items together. - - MenuItemGroup is exclusive by default. In an exclusive menu item - group, only one item can be checked at any time; checking another - item automatically unchecks the previously checked one. MenuItemGroup - can be configured as non-exclusive, which is particularly useful for - showing, hiding, enabling and disabling items together as a group. - - The most straight-forward way to use MenuItemGroup is to assign - a list of items. - - \code - Menu { - id: verticalMenu - title: qsTr("Vertical") - - MenuItemGroup { - id: verticalGroup - items: verticalMenu.items - } - - MenuItem { text: qsTr("Top"); checkable: true } - MenuItem { text: qsTr("Center"); checked: true } - MenuItem { text: qsTr("Bottom"); checkable: true } - } - \endcode - - The same menu may sometimes contain items that should not be included - in the same exclusive group. Such cases are best handled using the - \l {MenuItem::group}{group} property. - - \code - Menu { - id: horizontalMenu - title: qsTr("Horizontal") - - MenuItemGroup { - id: horizontalGroup - } - - MenuItem { - checked: true - text: qsTr("Left") - group: horizontalGroup - } - MenuItem { - checkable: true - text: qsTr("Center") - group: horizontalGroup - } - MenuItem { - text: qsTr("Right") - checkable: true - group: horizontalGroup - } - - MenuItem { separator: true } - MenuItem { text: qsTr("Justify"); checkable: true } - MenuItem { text: qsTr("Absolute"); checkable: true } - } - \endcode - - More advanced use cases can be handled using the addItem() and - removeItem() methods. - - \labs - - \sa MenuItem -*/ - -/*! - \qmlsignal Qt.labs.platform::MenuItemGroup::triggered(MenuItem item) - - This signal is emitted when an \a item in the group is triggered by the user. - - \sa MenuItem::triggered() -*/ - -/*! - \qmlsignal Qt.labs.platform::MenuItemGroup::hovered(MenuItem item) - - This signal is emitted when an \a item in the group is hovered by the user. - - \sa MenuItem::hovered() -*/ - -QQuickPlatformMenuItemGroup::QQuickPlatformMenuItemGroup(QObject *parent) - : QObject(parent), m_enabled(true), m_visible(true), m_exclusive(true), m_checkedItem(nullptr) -{ -} - -QQuickPlatformMenuItemGroup::~QQuickPlatformMenuItemGroup() -{ - clear(); -} - -/*! - \qmlproperty bool Qt.labs.platform::MenuItemGroup::enabled - - This property holds whether the group is enabled. The default value is \c true. - - The enabled state of the group affects the enabled state of each item in the group, - except that explicitly disabled items are not enabled even if the group is enabled. -*/ -bool QQuickPlatformMenuItemGroup::isEnabled() const -{ - return m_enabled; -} - -void QQuickPlatformMenuItemGroup::setEnabled(bool enabled) -{ - if (m_enabled == enabled) - return; - - m_enabled = enabled; - emit enabledChanged(); - - for (QQuickPlatformMenuItem *item : qAsConst(m_items)) { - if (item->m_enabled) { - item->sync(); - emit item->enabledChanged(); - } - } -} - -/*! - \qmlproperty bool Qt.labs.platform::MenuItemGroup::visible - - This property holds whether the group is visible. The default value is \c true. - - The visibility of the group affects the visibility of each item in the group, - except that explicitly hidden items are not visible even if the group is visible. -*/ -bool QQuickPlatformMenuItemGroup::isVisible() const -{ - return m_visible; -} - -void QQuickPlatformMenuItemGroup::setVisible(bool visible) -{ - if (m_visible == visible) - return; - - m_visible = visible; - emit visibleChanged(); - - for (QQuickPlatformMenuItem *item : qAsConst(m_items)) { - if (item->m_visible) { - item->sync(); - emit item->visibleChanged(); - } - } -} - -/*! - \qmlproperty bool Qt.labs.platform::MenuItemGroup::exclusive - - This property holds whether the group is exclusive. The default value is \c true. - - In an exclusive menu item group, only one item can be checked at any time; - checking another item automatically unchecks the previously checked one. -*/ -bool QQuickPlatformMenuItemGroup::isExclusive() const -{ - return m_exclusive; -} - -void QQuickPlatformMenuItemGroup::setExclusive(bool exclusive) -{ - if (m_exclusive == exclusive) - return; - - m_exclusive = exclusive; - emit exclusiveChanged(); - - for (QQuickPlatformMenuItem *item : qAsConst(m_items)) - item->sync(); -} - -/*! - \qmlproperty MenuItem Qt.labs.platform::MenuItemGroup::checkedItem - - This property holds the currently checked item in the group, or \c null if no item is checked. -*/ -QQuickPlatformMenuItem *QQuickPlatformMenuItemGroup::checkedItem() const -{ - return m_checkedItem; -} - -void QQuickPlatformMenuItemGroup::setCheckedItem(QQuickPlatformMenuItem *item) -{ - if (m_checkedItem == item) - return; - - if (m_checkedItem) - m_checkedItem->setChecked(false); - - m_checkedItem = item; - emit checkedItemChanged(); - - if (item) - item->setChecked(true); -} - -/*! - \qmlproperty list Qt.labs.platform::MenuItemGroup::items - - This property holds the list of items in the group. -*/ -QQmlListProperty QQuickPlatformMenuItemGroup::items() -{ - return QQmlListProperty(this, nullptr, items_append, items_count, items_at, items_clear); -} - -/*! - \qmlmethod void Qt.labs.platform::MenuItemGroup::addItem(MenuItem item) - - Adds an \a item to the group. -*/ -void QQuickPlatformMenuItemGroup::addItem(QQuickPlatformMenuItem *item) -{ - if (!item || m_items.contains(item)) - return; - - m_items.append(item); - item->setGroup(this); - - connect(item, &QQuickPlatformMenuItem::checkedChanged, this, &QQuickPlatformMenuItemGroup::updateCurrent); - connect(item, &QQuickPlatformMenuItem::triggered, this, &QQuickPlatformMenuItemGroup::activateItem); - connect(item, &QQuickPlatformMenuItem::hovered, this, &QQuickPlatformMenuItemGroup::hoverItem); - - if (m_exclusive && item->isChecked()) - setCheckedItem(item); - - emit itemsChanged(); -} - -/*! - \qmlmethod void Qt.labs.platform::MenuItemGroup::removeItem(MenuItem item) - - Removes an \a item from the group. -*/ -void QQuickPlatformMenuItemGroup::removeItem(QQuickPlatformMenuItem *item) -{ - if (!item || !m_items.contains(item)) - return; - - m_items.removeOne(item); - item->setGroup(nullptr); - - disconnect(item, &QQuickPlatformMenuItem::checkedChanged, this, &QQuickPlatformMenuItemGroup::updateCurrent); - disconnect(item, &QQuickPlatformMenuItem::triggered, this, &QQuickPlatformMenuItemGroup::activateItem); - disconnect(item, &QQuickPlatformMenuItem::hovered, this, &QQuickPlatformMenuItemGroup::hoverItem); - - if (m_checkedItem == item) - setCheckedItem(nullptr); - - emit itemsChanged(); -} - -/*! - \qmlmethod void Qt.labs.platform::MenuItemGroup::clear() - - Removes all items from the group. -*/ -void QQuickPlatformMenuItemGroup::clear() -{ - if (m_items.isEmpty()) - return; - - for (QQuickPlatformMenuItem *item : qAsConst(m_items)) { - item->setGroup(nullptr); - disconnect(item, &QQuickPlatformMenuItem::checkedChanged, this, &QQuickPlatformMenuItemGroup::updateCurrent); - disconnect(item, &QQuickPlatformMenuItem::triggered, this, &QQuickPlatformMenuItemGroup::activateItem); - disconnect(item, &QQuickPlatformMenuItem::hovered, this, &QQuickPlatformMenuItemGroup::hoverItem); - } - - setCheckedItem(nullptr); - - m_items.clear(); - emit itemsChanged(); -} - -QQuickPlatformMenuItem *QQuickPlatformMenuItemGroup::findCurrent() const -{ - for (QQuickPlatformMenuItem *item : m_items) { - if (item->isChecked()) - return item; - } - return nullptr; -} - -void QQuickPlatformMenuItemGroup::updateCurrent() -{ - if (!m_exclusive) - return; - - QQuickPlatformMenuItem *item = qobject_cast(sender()); - if (item && item->isChecked()) - setCheckedItem(item); -} - -void QQuickPlatformMenuItemGroup::activateItem() -{ - QQuickPlatformMenuItem *item = qobject_cast(sender()); - if (item) - emit triggered(item); -} - -void QQuickPlatformMenuItemGroup::hoverItem() -{ - QQuickPlatformMenuItem *item = qobject_cast(sender()); - if (item) - emit hovered(item); -} - -void QQuickPlatformMenuItemGroup::items_append(QQmlListProperty *prop, QQuickPlatformMenuItem *item) -{ - QQuickPlatformMenuItemGroup *group = static_cast(prop->object); - group->addItem(item); -} - -qsizetype QQuickPlatformMenuItemGroup::items_count(QQmlListProperty *prop) -{ - QQuickPlatformMenuItemGroup *group = static_cast(prop->object); - return group->m_items.count(); -} - -QQuickPlatformMenuItem *QQuickPlatformMenuItemGroup::items_at(QQmlListProperty *prop, qsizetype index) -{ - QQuickPlatformMenuItemGroup *group = static_cast(prop->object); - return group->m_items.value(index); -} - -void QQuickPlatformMenuItemGroup::items_clear(QQmlListProperty *prop) -{ - QQuickPlatformMenuItemGroup *group = static_cast(prop->object); - group->clear(); -} - -QT_END_NAMESPACE - -#include "moc_qquickplatformmenuitemgroup_p.cpp" diff --git a/src/imports/platform/qquickplatformmenuitemgroup_p.h b/src/imports/platform/qquickplatformmenuitemgroup_p.h deleted file mode 100644 index 7407d266..00000000 --- a/src/imports/platform/qquickplatformmenuitemgroup_p.h +++ /dev/null @@ -1,123 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Templates module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKPLATFORMMENUITEMGROUP_P_H -#define QQUICKPLATFORMMENUITEMGROUP_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 -#include -#include - -QT_BEGIN_NAMESPACE - -class QQuickPlatformMenuItem; -class QQuickPlatformMenuItemGroupPrivate; - -class QQuickPlatformMenuItemGroup : public QObject -{ - Q_OBJECT - Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged FINAL) - Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL) - Q_PROPERTY(bool exclusive READ isExclusive WRITE setExclusive NOTIFY exclusiveChanged FINAL) - Q_PROPERTY(QQuickPlatformMenuItem *checkedItem READ checkedItem WRITE setCheckedItem NOTIFY checkedItemChanged FINAL) - Q_PROPERTY(QQmlListProperty items READ items NOTIFY itemsChanged FINAL) - -public: - explicit QQuickPlatformMenuItemGroup(QObject *parent = nullptr); - ~QQuickPlatformMenuItemGroup(); - - bool isEnabled() const; - void setEnabled(bool enabled); - - bool isVisible() const; - void setVisible(bool visible); - - bool isExclusive() const; - void setExclusive(bool exclusive); - - QQuickPlatformMenuItem *checkedItem() const; - void setCheckedItem(QQuickPlatformMenuItem *item); - - QQmlListProperty items(); - - Q_INVOKABLE void addItem(QQuickPlatformMenuItem *item); - Q_INVOKABLE void removeItem(QQuickPlatformMenuItem *item); - Q_INVOKABLE void clear(); - -Q_SIGNALS: - void triggered(QQuickPlatformMenuItem *item); - void hovered(QQuickPlatformMenuItem *item); - - void enabledChanged(); - void visibleChanged(); - void exclusiveChanged(); - void checkedItemChanged(); - void itemsChanged(); - -private: - QQuickPlatformMenuItem *findCurrent() const; - void updateCurrent(); - void activateItem(); - void hoverItem(); - - static void items_append(QQmlListProperty *prop, QQuickPlatformMenuItem *obj); - static qsizetype items_count(QQmlListProperty *prop); - static QQuickPlatformMenuItem *items_at(QQmlListProperty *prop, qsizetype index); - static void items_clear(QQmlListProperty *prop); - - bool m_enabled; - bool m_visible; - bool m_exclusive; - QQuickPlatformMenuItem *m_checkedItem; - QList m_items; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickPlatformMenuItemGroup) - -#endif // QQUICKPLATFORMMENUITEMGROUP_P_H diff --git a/src/imports/platform/qquickplatformmenuseparator.cpp b/src/imports/platform/qquickplatformmenuseparator.cpp deleted file mode 100644 index f29d5b9e..00000000 --- a/src/imports/platform/qquickplatformmenuseparator.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickplatformmenuseparator_p.h" - -QT_BEGIN_NAMESPACE - -/*! - \qmltype MenuSeparator - \inherits MenuItem -//! \instantiates QQuickPlatformMenuSeparator - \inqmlmodule Qt.labs.platform - \since 5.8 - \brief A native menu separator. - - The MenuSeparator type is provided for convenience. It is a MenuItem - that has the \l {MenuItem::}{separator} property set to \c true by default. - - \image qtlabsplatform-menubar.png - - \labs - - \sa Menu, MenuItem -*/ - -QQuickPlatformMenuSeparator::QQuickPlatformMenuSeparator(QObject *parent) - : QQuickPlatformMenuItem(parent) -{ - setSeparator(true); -} - -QT_END_NAMESPACE diff --git a/src/imports/platform/qquickplatformmenuseparator_p.h b/src/imports/platform/qquickplatformmenuseparator_p.h deleted file mode 100644 index 9fe973c5..00000000 --- a/src/imports/platform/qquickplatformmenuseparator_p.h +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKPLATFORMMENUSEPARATOR_P_H -#define QQUICKPLATFORMMENUSEPARATOR_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 "qquickplatformmenuitem_p.h" - -QT_BEGIN_NAMESPACE - -class QQuickPlatformMenuSeparator : public QQuickPlatformMenuItem -{ - Q_OBJECT - -public: - explicit QQuickPlatformMenuSeparator(QObject *parent = nullptr); -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickPlatformMenuSeparator) - -#endif // QQUICKPLATFORMMENUSEPARATOR_P_H diff --git a/src/imports/platform/qquickplatformmessagedialog.cpp b/src/imports/platform/qquickplatformmessagedialog.cpp deleted file mode 100644 index f2e0970c..00000000 --- a/src/imports/platform/qquickplatformmessagedialog.cpp +++ /dev/null @@ -1,382 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickplatformmessagedialog_p.h" - -#include - -QT_BEGIN_NAMESPACE - -/*! - \qmltype MessageDialog - \inherits Dialog -//! \instantiates QQuickPlatformMessageDialog - \inqmlmodule Qt.labs.platform - \since 5.8 - \brief A native message dialog. - - The MessageDialog type provides a QML API for native platform message dialogs. - - \image qtlabsplatform-messagedialog-android.png - - A message dialog is used to inform the user, or ask the user a question. - A message dialog displays a primary \l text to alert the user to a situation, - an \l {informativeText}{informative text} to further explain the alert or to - ask the user a question, and an optional \l {detailedText}{detailed text} to - provide even more data if the user requests it. A message box can also display - a configurable set of \l buttons for accepting a user response. - - To show a message dialog, construct an instance of MessageDialog, set the - desired properties, and call \l {Dialog::}{open()}. - - \code - MessageDialog { - buttons: MessageDialog.Ok - text: "The document has been modified." - } - \endcode - - The user must click the \uicontrol OK button to dismiss the message dialog. - A modal message dialog blocks the rest of the GUI until the message is - dismissed. - - A more elaborate approach than just alerting the user to an event is to - also ask the user what to do about it. Store the question in the - \l {informativeText}{informative text} property, and specify the \l buttons - property to the set of buttons you want as the set of user responses. The - buttons are specified by combining values using the bitwise OR operator. The - display order for the buttons is platform dependent. - - \code - MessageDialog { - text: "The document has been modified." - informativeText: "Do you want to save your changes?" - buttons: MessageDialog.Ok | MessageDialog.Cancel - - onAccepted: document.save() - } - \endcode - - \image qtlabsplatform-messagedialog-informative-android.png - - The \l clicked() signal passes the information of which button was clicked. - - A native platform message dialog is currently available on the following platforms: - - \list - \li iOS - \li Android - \endlist - - \input includes/widgets.qdocinc 1 - - \labs -*/ - -/*! - \qmlsignal Qt.labs.platform::MessageDialog::clicked(button) - - This signal is emitted when a dialog \a button is clicked. - - \sa buttons -*/ - -/*! - \qmlsignal Qt.labs.platform::MessageDialog::okClicked() - - This signal is emitted when \uicontrol Ok is clicked. -*/ - -/*! - \qmlsignal Qt.labs.platform::MessageDialog::saveClicked() - - This signal is emitted when \uicontrol Save is clicked. -*/ - -/*! - \qmlsignal Qt.labs.platform::MessageDialog::saveAllClicked() - - This signal is emitted when \uicontrol {Save All} is clicked. -*/ - -/*! - \qmlsignal Qt.labs.platform::MessageDialog::openClicked() - - This signal is emitted when \uicontrol Open is clicked. -*/ - -/*! - \qmlsignal Qt.labs.platform::MessageDialog::yesClicked() - - This signal is emitted when \uicontrol Yes is clicked. -*/ - -/*! - \qmlsignal Qt.labs.platform::MessageDialog::yesToAllClicked() - - This signal is emitted when \uicontrol {Yes To All} is clicked. -*/ - -/*! - \qmlsignal Qt.labs.platform::MessageDialog::noClicked() - - This signal is emitted when \uicontrol No is clicked. -*/ - -/*! - \qmlsignal Qt.labs.platform::MessageDialog::noToAllClicked() - - This signal is emitted when \uicontrol {No To All} is clicked. -*/ - -/*! - \qmlsignal Qt.labs.platform::MessageDialog::abortClicked() - - This signal is emitted when \uicontrol Abort is clicked. -*/ - -/*! - \qmlsignal Qt.labs.platform::MessageDialog::retryClicked() - - This signal is emitted when \uicontrol Retry is clicked. -*/ - -/*! - \qmlsignal Qt.labs.platform::MessageDialog::ignoreClicked() - - This signal is emitted when \uicontrol Ignore is clicked. -*/ - -/*! - \qmlsignal Qt.labs.platform::MessageDialog::closeClicked() - - This signal is emitted when \uicontrol Close is clicked. -*/ - -/*! - \qmlsignal Qt.labs.platform::MessageDialog::cancelClicked() - - This signal is emitted when \uicontrol Cancel is clicked. -*/ - -/*! - \qmlsignal Qt.labs.platform::MessageDialog::discardClicked() - - This signal is emitted when \uicontrol Discard is clicked. -*/ - -/*! - \qmlsignal Qt.labs.platform::MessageDialog::helpClicked() - - This signal is emitted when \uicontrol Help is clicked. -*/ - -/*! - \qmlsignal Qt.labs.platform::MessageDialog::applyClicked() - - This signal is emitted when \uicontrol Apply is clicked. -*/ - -/*! - \qmlsignal Qt.labs.platform::MessageDialog::resetClicked() - - This signal is emitted when \uicontrol Reset is clicked. -*/ - -/*! - \qmlsignal Qt.labs.platform::MessageDialog::restoreDefaultsClicked() - - This signal is emitted when \uicontrol {Restore Defaults} is clicked. -*/ - -QQuickPlatformMessageDialog::QQuickPlatformMessageDialog(QObject *parent) - : QQuickPlatformDialog(QPlatformTheme::MessageDialog, parent), - m_options(QMessageDialogOptions::create()) -{ -} - -/*! - \qmlproperty string Qt.labs.platform::MessageDialog::text - - This property holds the text to be displayed on the message dialog. - - \sa informativeText, detailedText -*/ -QString QQuickPlatformMessageDialog::text() const -{ - return m_options->text(); -} - -void QQuickPlatformMessageDialog::setText(const QString &text) -{ - if (m_options->text() == text) - return; - - m_options->setText(text); - emit textChanged(); -} - -/*! - \qmlproperty string Qt.labs.platform::MessageDialog::informativeText - - This property holds the informative text that provides a fuller description for the message. - - Informative text can be used to expand upon the \l text to give more information to the user. - - \sa text, detailedText -*/ -QString QQuickPlatformMessageDialog::informativeText() const -{ - return m_options->informativeText(); -} - -void QQuickPlatformMessageDialog::setInformativeText(const QString &text) -{ - if (m_options->informativeText() == text) - return; - - m_options->setInformativeText(text); - emit informativeTextChanged(); -} - -/*! - \qmlproperty string Qt.labs.platform::MessageDialog::detailedText - - This property holds the text to be displayed in the details area. - - \sa text, informativeText -*/ -QString QQuickPlatformMessageDialog::detailedText() const -{ - return m_options->detailedText(); -} - -void QQuickPlatformMessageDialog::setDetailedText(const QString &text) -{ - if (m_options->detailedText() == text) - return; - - m_options->setDetailedText(text); - emit detailedTextChanged(); -} - -/*! - \qmlproperty flags Qt.labs.platform::MessageDialog::buttons - - This property holds a combination of buttons that are used by the message dialog. - The default value is \c MessageDialog.NoButton. - - Possible flags: - \value MessageDialog.Ok An "OK" button defined with the \c AcceptRole. - \value MessageDialog.Open An "Open" button defined with the \c AcceptRole. - \value MessageDialog.Save A "Save" button defined with the \c AcceptRole. - \value MessageDialog.Cancel A "Cancel" button defined with the \c RejectRole. - \value MessageDialog.Close A "Close" button defined with the \c RejectRole. - \value MessageDialog.Discard A "Discard" or "Don't Save" button, depending on the platform, defined with the \c DestructiveRole. - \value MessageDialog.Apply An "Apply" button defined with the \c ApplyRole. - \value MessageDialog.Reset A "Reset" button defined with the \c ResetRole. - \value MessageDialog.RestoreDefaults A "Restore Defaults" button defined with the \c ResetRole. - \value MessageDialog.Help A "Help" button defined with the \c HelpRole. - \value MessageDialog.SaveAll A "Save All" button defined with the \c AcceptRole. - \value MessageDialog.Yes A "Yes" button defined with the \c YesRole. - \value MessageDialog.YesToAll A "Yes to All" button defined with the \c YesRole. - \value MessageDialog.No A "No" button defined with the \c NoRole. - \value MessageDialog.NoToAll A "No to All" button defined with the \c NoRole. - \value MessageDialog.Abort An "Abort" button defined with the \c RejectRole. - \value MessageDialog.Retry A "Retry" button defined with the \c AcceptRole. - \value MessageDialog.Ignore An "Ignore" button defined with the \c AcceptRole. - \value MessageDialog.NoButton The dialog has no buttons. - - \sa clicked() -*/ -QPlatformDialogHelper::StandardButtons QQuickPlatformMessageDialog::buttons() const -{ - return m_options->standardButtons(); -} - -void QQuickPlatformMessageDialog::setButtons(QPlatformDialogHelper::StandardButtons buttons) -{ - if (m_options->standardButtons() == buttons) - return; - - m_options->setStandardButtons(buttons); - emit buttonsChanged(); -} - -void QQuickPlatformMessageDialog::onCreate(QPlatformDialogHelper *dialog) -{ - if (QPlatformMessageDialogHelper *messageDialog = qobject_cast(dialog)) { - connect(messageDialog, &QPlatformMessageDialogHelper::clicked, this, &QQuickPlatformMessageDialog::handleClick); - messageDialog->setOptions(m_options); - } -} - -void QQuickPlatformMessageDialog::onShow(QPlatformDialogHelper *dialog) -{ - m_options->setWindowTitle(title()); - if (QPlatformMessageDialogHelper *messageDialog = qobject_cast(dialog)) - messageDialog->setOptions(m_options); -} - -void QQuickPlatformMessageDialog::handleClick(QPlatformDialogHelper::StandardButton button) -{ - done(button); - emit clicked(button); - - switch (button) { - case QPlatformDialogHelper::Ok: emit okClicked(); break; - case QPlatformDialogHelper::Save: emit saveClicked(); break; - case QPlatformDialogHelper::SaveAll: emit saveAllClicked(); break; - case QPlatformDialogHelper::Open: emit openClicked(); break; - case QPlatformDialogHelper::Yes: emit yesClicked(); break; - case QPlatformDialogHelper::YesToAll: emit yesToAllClicked(); break; - case QPlatformDialogHelper::No: emit noClicked(); break; - case QPlatformDialogHelper::NoToAll: emit noToAllClicked(); break; - case QPlatformDialogHelper::Abort: emit abortClicked(); break; - case QPlatformDialogHelper::Retry: emit retryClicked(); break; - case QPlatformDialogHelper::Ignore: emit ignoreClicked(); break; - case QPlatformDialogHelper::Close: emit closeClicked(); break; - case QPlatformDialogHelper::Cancel: emit cancelClicked(); break; - case QPlatformDialogHelper::Discard: emit discardClicked(); break; - case QPlatformDialogHelper::Help: emit helpClicked(); break; - case QPlatformDialogHelper::Apply: emit applyClicked(); break; - case QPlatformDialogHelper::Reset: emit resetClicked(); break; - case QPlatformDialogHelper::RestoreDefaults: emit restoreDefaultsClicked(); break; - default: qmlWarning(this) << "unknown button" << int(button); break; - } -} - -QT_END_NAMESPACE diff --git a/src/imports/platform/qquickplatformmessagedialog_p.h b/src/imports/platform/qquickplatformmessagedialog_p.h deleted file mode 100644 index 9434a927..00000000 --- a/src/imports/platform/qquickplatformmessagedialog_p.h +++ /dev/null @@ -1,121 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKPLATFORMMESSAGEDIALOG_P_H -#define QQUICKPLATFORMMESSAGEDIALOG_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 "qquickplatformdialog_p.h" -#include - -QT_BEGIN_NAMESPACE - -class QQuickPlatformMessageDialog : public QQuickPlatformDialog -{ - Q_OBJECT - Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged FINAL) - Q_PROPERTY(QString informativeText READ informativeText WRITE setInformativeText NOTIFY informativeTextChanged FINAL) - Q_PROPERTY(QString detailedText READ detailedText WRITE setDetailedText NOTIFY detailedTextChanged FINAL) - Q_PROPERTY(QPlatformDialogHelper::StandardButtons buttons READ buttons WRITE setButtons NOTIFY buttonsChanged FINAL) - Q_FLAGS(QPlatformDialogHelper::StandardButtons) - -public: - explicit QQuickPlatformMessageDialog(QObject *parent = nullptr); - - QString text() const; - void setText(const QString &text); - - QString informativeText() const; - void setInformativeText(const QString &text); - - QString detailedText() const; - void setDetailedText(const QString &text); - - QPlatformDialogHelper::StandardButtons buttons() const; - void setButtons(QPlatformDialogHelper::StandardButtons buttons); - -Q_SIGNALS: - void textChanged(); - void informativeTextChanged(); - void detailedTextChanged(); - void buttonsChanged(); - void clicked(QPlatformDialogHelper::StandardButton button); - - void okClicked(); - void saveClicked(); - void saveAllClicked(); - void openClicked(); - void yesClicked(); - void yesToAllClicked(); - void noClicked(); - void noToAllClicked(); - void abortClicked(); - void retryClicked(); - void ignoreClicked(); - void closeClicked(); - void cancelClicked(); - void discardClicked(); - void helpClicked(); - void applyClicked(); - void resetClicked(); - void restoreDefaultsClicked(); - -protected: - void onCreate(QPlatformDialogHelper *dialog) override; - void onShow(QPlatformDialogHelper *dialog) override; - -private Q_SLOTS: - void handleClick(QPlatformDialogHelper::StandardButton button); - -private: - QSharedPointer m_options; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickPlatformMessageDialog) - -#endif // QQUICKPLATFORMMESSAGEDIALOG_P_H diff --git a/src/imports/platform/qquickplatformstandardpaths.cpp b/src/imports/platform/qquickplatformstandardpaths.cpp deleted file mode 100644 index a6fff1c0..00000000 --- a/src/imports/platform/qquickplatformstandardpaths.cpp +++ /dev/null @@ -1,173 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickplatformstandardpaths_p.h" - -#include - -QT_BEGIN_NAMESPACE - -/*! - \qmltype StandardPaths - \inherits QtObject -//! \instantiates QQuickPlatformStandardPaths - \inqmlmodule Qt.labs.platform - \since 5.8 - \brief Provides access to the standard system paths. - - The StandardPaths singleton type provides methods for querying the standard - system paths. The standard paths are mostly useful in conjunction with the - FileDialog and FolderDialog types. - - \qml - FileDialog { - folder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation) - } - \endqml - - \labs - - \sa FileDialog, FolderDialog, QStandardPaths -*/ - -static QList toUrlList(const QStringList &paths) -{ - QList urls; - urls.reserve(paths.size()); - for (const QString &path : paths) - urls += QUrl::fromLocalFile(path); - return urls; -} - -QQuickPlatformStandardPaths::QQuickPlatformStandardPaths(QObject *parent) - : QObject(parent) -{ -} - -QObject *QQuickPlatformStandardPaths::create(QQmlEngine *engine, QJSEngine *scriptEngine) -{ - Q_UNUSED(scriptEngine); - return new QQuickPlatformStandardPaths(engine); -} - -/*! - \qmlmethod string Qt.labs.platform::StandardPaths::displayName(StandardLocation type) - - \include standardpath/functiondocs.qdocinc displayName - - \sa QStandardPaths::displayName() -*/ -QString QQuickPlatformStandardPaths::displayName(QStandardPaths::StandardLocation type) -{ - return QStandardPaths::displayName(type); -} - -/*! - \qmlmethod url Qt.labs.platform::StandardPaths::findExecutable(string executableName, list paths) - - \include standardpath/functiondocs.qdocinc findExecutable - - \sa QStandardPaths::findExecutable() -*/ -QUrl QQuickPlatformStandardPaths::findExecutable(const QString &executableName, const QStringList &paths) -{ - return QUrl::fromLocalFile(QStandardPaths::findExecutable(executableName, paths)); -} - -/*! - \qmlmethod url Qt.labs.platform::StandardPaths::locate(StandardLocation type, string fileName, LocateOptions options) - - \include standardpath/functiondocs.qdocinc locate - - \sa QStandardPaths::locate() -*/ -QUrl QQuickPlatformStandardPaths::locate(QStandardPaths::StandardLocation type, const QString &fileName, QStandardPaths::LocateOptions options) -{ - return QUrl::fromLocalFile(QStandardPaths::locate(type, fileName, options)); -} - -/*! - \qmlmethod list Qt.labs.platform::StandardPaths::locateAll(StandardLocation type, string fileName, LocateOptions options) - - \include standardpath/functiondocs.qdocinc locateAll - - \sa QStandardPaths::locateAll() -*/ -QList QQuickPlatformStandardPaths::locateAll(QStandardPaths::StandardLocation type, const QString &fileName, QStandardPaths::LocateOptions options) -{ - return toUrlList(QStandardPaths::locateAll(type, fileName, options)); -} - -/*! - \qmlmethod void Qt.labs.platform::StandardPaths::setTestModeEnabled(bool testMode) - - \include standardpath/functiondocs.qdocinc setTestModeEnabled - - \sa QStandardPaths::setTestModeEnabled() -*/ -void QQuickPlatformStandardPaths::setTestModeEnabled(bool testMode) -{ - QStandardPaths::setTestModeEnabled(testMode); -} - -/*! - \qmlmethod list Qt.labs.platform::StandardPaths::standardLocations(StandardLocation type) - - \include standardpath/functiondocs.qdocinc standardLocations - - \sa QStandardPaths::standardLocations() -*/ -QList QQuickPlatformStandardPaths::standardLocations(QStandardPaths::StandardLocation type) -{ - return toUrlList(QStandardPaths::standardLocations(type)); -} - -/*! - \qmlmethod url Qt.labs.platform::StandardPaths::writableLocation(StandardLocation type) - - \include standardpath/functiondocs.qdocinc writableLocation - - \sa QStandardPaths::writableLocation() -*/ -QUrl QQuickPlatformStandardPaths::writableLocation(QStandardPaths::StandardLocation type) -{ - return QUrl::fromLocalFile(QStandardPaths::writableLocation(type)); -} - -QT_END_NAMESPACE diff --git a/src/imports/platform/qquickplatformstandardpaths_p.h b/src/imports/platform/qquickplatformstandardpaths_p.h deleted file mode 100644 index e2f4e11e..00000000 --- a/src/imports/platform/qquickplatformstandardpaths_p.h +++ /dev/null @@ -1,92 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKPLATFORMSTANDARDPATHS_P_H -#define QQUICKPLATFORMSTANDARDPATHS_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 -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class QQmlEngine; -class QJSEngine; - -class QQuickPlatformStandardPaths : public QObject -{ - Q_OBJECT - Q_ENUMS(QStandardPaths::StandardLocation QStandardPaths::LocateOptions) - -public: - explicit QQuickPlatformStandardPaths(QObject *parent = nullptr); - - static QObject *create(QQmlEngine *engine, QJSEngine *scriptEngine); - - Q_INVOKABLE static QString displayName(QStandardPaths::StandardLocation type); - Q_INVOKABLE static QUrl findExecutable(const QString &executableName, const QStringList &paths = QStringList()); - Q_INVOKABLE static QUrl locate(QStandardPaths::StandardLocation type, const QString &fileName, QStandardPaths::LocateOptions options = QStandardPaths::LocateFile); - Q_INVOKABLE static QList locateAll(QStandardPaths::StandardLocation type, const QString &fileName, QStandardPaths::LocateOptions options = QStandardPaths::LocateFile); - Q_INVOKABLE static void setTestModeEnabled(bool testMode); - Q_INVOKABLE static QList standardLocations(QStandardPaths::StandardLocation type); - Q_INVOKABLE static QUrl writableLocation(QStandardPaths::StandardLocation type); - -private: - Q_DISABLE_COPY(QQuickPlatformStandardPaths) -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickPlatformStandardPaths) -Q_DECLARE_METATYPE(QStandardPaths::StandardLocation) -Q_DECLARE_METATYPE(QStandardPaths::LocateOptions) - -#endif // QQUICKPLATFORMSTANDARDPATHS_P_H diff --git a/src/imports/platform/qquickplatformsystemtrayicon.cpp b/src/imports/platform/qquickplatformsystemtrayicon.cpp deleted file mode 100644 index b97e379f..00000000 --- a/src/imports/platform/qquickplatformsystemtrayicon.cpp +++ /dev/null @@ -1,443 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qquickplatformsystemtrayicon_p.h" -#include "qquickplatformmenu_p.h" -#include "qquickplatformiconloader_p.h" - -#include -#include -#include - -#include "widgets/qwidgetplatform_p.h" - -QT_BEGIN_NAMESPACE - -/*! - \qmltype SystemTrayIcon - \inherits QtObject -//! \instantiates QQuickPlatformSystemTrayIcon - \inqmlmodule Qt.labs.platform - \since 5.8 - \brief A system tray icon. - - The SystemTrayIcon type provides an icon for an application in the system tray. - - Many desktop platforms provide a special system tray or notification area, - where applications can display icons and notification messages. - - \image qtlabsplatform-systemtrayicon.png - - The following example shows how to create a system tray icon, and how to make - use of the \l activated() signal: - - \code - SystemTrayIcon { - visible: true - icon.source: "qrc:/images/tray-icon.png" - - onActivated: { - window.show() - window.raise() - window.requestActivate() - } - } - \endcode - - \section2 Tray menu - - SystemTrayIcon can have a menu that opens when the icon is activated. - - \image qtlabsplatform-systemtrayicon-menu.png - - The following example illustrates how to assign a \l Menu to a system tray icon: - - \code - SystemTrayIcon { - visible: true - icon.source: "qrc:/images/tray-icon.png" - - menu: Menu { - MenuItem { - text: qsTr("Quit") - onTriggered: Qt.quit() - } - } - } - \endcode - - \section2 Notification messages - - SystemTrayIcon can display notification messages. - - \image qtlabsplatform-systemtrayicon-message.png - - The following example presents how to show a notification message using - \l showMessage(), and how to make use of the \l messageClicked() signal: - - \code - SystemTrayIcon { - visible: true - icon.source: "qrc:/images/tray-icon.png" - - onMessageClicked: console.log("Message clicked") - Component.onCompleted: showMessage("Message title", "Something important came up. Click this to know more.") - } - \endcode - - \section2 Availability - - A native system tray icon is currently \l available on the following platforms: - - \list - \li All window managers and independent tray implementations for X11 that implement the - \l{http://standards.freedesktop.org/systemtray-spec/systemtray-spec-0.2.html} - {freedesktop.org XEmbed system tray specification}. - \li All desktop environments that implement the - \l{http://www.freedesktop.org/wiki/Specifications/StatusNotifierItem/StatusNotifierItem} - {freedesktop.org D-Bus StatusNotifierItem specification}, including recent versions of KDE and Unity. - \li All supported versions of macOS. Note that the Growl notification system must be installed - for showMessage() to display messages on OS X prior to 10.8 (Mountain Lion). - \endlist - - \input includes/widgets.qdocinc 1 - - \labs - - \sa Menu -*/ - -/*! - \qmlsignal Qt.labs.platform::SystemTrayIcon::activated(ActivationReason reason) - - This signal is emitted when the system tray icon is activated by the user. The - \a reason argument specifies how the system tray icon was activated. - - Available reasons: - - \value SystemTrayIcon.Unknown Unknown reason - \value SystemTrayIcon.Context The context menu for the system tray icon was requested - \value SystemTrayIcon.DoubleClick The system tray icon was double clicked - \value SystemTrayIcon.Trigger The system tray icon was clicked - \value SystemTrayIcon.MiddleClick The system tray icon was clicked with the middle mouse button -*/ - -/*! - \qmlsignal Qt.labs.platform::SystemTrayIcon::messageClicked() - - This signal is emitted when a notification message is clicked by the user. - - \sa showMessage() -*/ - -Q_DECLARE_LOGGING_CATEGORY(qtLabsPlatformTray) - -QQuickPlatformSystemTrayIcon::QQuickPlatformSystemTrayIcon(QObject *parent) - : QObject(parent), - m_complete(false), - m_visible(false), - m_menu(nullptr), - m_iconLoader(nullptr), - m_handle(nullptr) -{ - m_handle = QGuiApplicationPrivate::platformTheme()->createPlatformSystemTrayIcon(); - if (!m_handle) - m_handle = QWidgetPlatform::createSystemTrayIcon(this); - qCDebug(qtLabsPlatformTray) << "SystemTrayIcon ->" << m_handle; - - if (m_handle) { - connect(m_handle, &QPlatformSystemTrayIcon::activated, this, &QQuickPlatformSystemTrayIcon::activated); - connect(m_handle, &QPlatformSystemTrayIcon::messageClicked, this, &QQuickPlatformSystemTrayIcon::messageClicked); - } -} - -QQuickPlatformSystemTrayIcon::~QQuickPlatformSystemTrayIcon() -{ - if (m_menu) - m_menu->setSystemTrayIcon(nullptr); - cleanup(); - delete m_iconLoader; - m_iconLoader = nullptr; - delete m_handle; - m_handle = nullptr; -} - -QPlatformSystemTrayIcon *QQuickPlatformSystemTrayIcon::handle() const -{ - return m_handle; -} - -/*! - \readonly - \qmlproperty bool Qt.labs.platform::SystemTrayIcon::available - - This property holds whether the system tray is available. -*/ -bool QQuickPlatformSystemTrayIcon::isAvailable() const -{ - return m_handle && m_handle->isSystemTrayAvailable(); -} - -/*! - \readonly - \qmlproperty bool Qt.labs.platform::SystemTrayIcon::supportsMessages - - This property holds whether the system tray icon supports notification messages. - - \sa showMessage() -*/ -bool QQuickPlatformSystemTrayIcon::supportsMessages() const -{ - return m_handle && m_handle->supportsMessages(); -} - -/*! - \qmlproperty bool Qt.labs.platform::SystemTrayIcon::visible - - This property holds whether the system tray icon is visible. - - The default value is \c false. -*/ -bool QQuickPlatformSystemTrayIcon::isVisible() const -{ - return m_visible; -} - -void QQuickPlatformSystemTrayIcon::setVisible(bool visible) -{ - if (m_visible == visible) - return; - - if (m_handle && m_complete) { - if (visible) - init(); - else - cleanup(); - } - - m_visible = visible; - emit visibleChanged(); -} - -/*! - \qmlproperty string Qt.labs.platform::SystemTrayIcon::tooltip - - This property holds the tooltip of the system tray icon. -*/ -QString QQuickPlatformSystemTrayIcon::tooltip() const -{ - return m_tooltip; -} - -void QQuickPlatformSystemTrayIcon::setTooltip(const QString &tooltip) -{ - if (m_tooltip == tooltip) - return; - - if (m_handle && m_complete) - m_handle->updateToolTip(tooltip); - - m_tooltip = tooltip; - emit tooltipChanged(); -} - -/*! - \qmlproperty Menu Qt.labs.platform::SystemTrayIcon::menu - - This property holds a menu for the system tray icon. -*/ -QQuickPlatformMenu *QQuickPlatformSystemTrayIcon::menu() const -{ - return m_menu; -} - -void QQuickPlatformSystemTrayIcon::setMenu(QQuickPlatformMenu *menu) -{ - if (m_menu == menu) - return; - - if (m_menu) - m_menu->setSystemTrayIcon(nullptr); - if (menu) { - menu->setSystemTrayIcon(this); - if (m_handle && m_complete && menu->create()) - m_handle->updateMenu(menu->handle()); - } - - m_menu = menu; - emit menuChanged(); -} - -/*! - \since Qt.labs.platform 1.1 (Qt 5.12) - \qmlproperty rect Qt.labs.platform::SystemTrayIcon::geometry - - This property holds the geometry of the system tray icon. -*/ -QRect QQuickPlatformSystemTrayIcon::geometry() const -{ - return m_handle ? m_handle->geometry() : QRect(); -} - -/*! - \since Qt.labs.platform 1.1 (Qt 5.12) - \qmlproperty url Qt.labs.platform::SystemTrayIcon::icon.source - \qmlproperty string Qt.labs.platform::SystemTrayIcon::icon.name - \qmlproperty bool Qt.labs.platform::SystemTrayIcon::icon.mask - - This property holds the system tray icon. - - \code - SystemTrayIcon { - icon.mask: true - icon.source: "qrc:/images/tray-icon.png" - } - \endcode -*/ -QQuickPlatformIcon QQuickPlatformSystemTrayIcon::icon() const -{ - if (!m_iconLoader) - return QQuickPlatformIcon(); - - return m_iconLoader->icon(); -} - -void QQuickPlatformSystemTrayIcon::setIcon(const QQuickPlatformIcon &icon) -{ - if (iconLoader()->icon() == icon) - return; - - iconLoader()->setIcon(icon); - emit iconChanged(); -} - -/*! - \qmlmethod void Qt.labs.platform::SystemTrayIcon::show() - - Shows the system tray icon. -*/ -void QQuickPlatformSystemTrayIcon::show() -{ - setVisible(true); -} - -/*! - \qmlmethod void Qt.labs.platform::SystemTrayIcon::hide() - - Hides the system tray icon. -*/ -void QQuickPlatformSystemTrayIcon::hide() -{ - setVisible(false); -} - -/*! - \qmlmethod void Qt.labs.platform::SystemTrayIcon::showMessage(string title, string message, MessageIcon icon, int msecs) - - Shows a system tray message with the given \a title, \a message and \a icon - for the time specified in \a msecs. - - \note System tray messages are dependent on the system configuration and user preferences, - and may not appear at all. Therefore, it should not be relied upon as the sole means for providing - critical information. - - \sa supportsMessages, messageClicked() -*/ -void QQuickPlatformSystemTrayIcon::showMessage(const QString &title, const QString &msg, QPlatformSystemTrayIcon::MessageIcon icon, int msecs) -{ - if (m_handle) - m_handle->showMessage(title, msg, QIcon(), icon, msecs); -} - -void QQuickPlatformSystemTrayIcon::init() -{ - if (!m_handle) - return; - - m_handle->init(); - if (m_menu && m_menu->create()) - m_handle->updateMenu(m_menu->handle()); - m_handle->updateToolTip(m_tooltip); - if (m_iconLoader) - m_iconLoader->setEnabled(true); -} - -void QQuickPlatformSystemTrayIcon::cleanup() -{ - if (m_handle) - m_handle->cleanup(); - if (m_iconLoader) - m_iconLoader->setEnabled(false); -} - -void QQuickPlatformSystemTrayIcon::classBegin() -{ -} - -void QQuickPlatformSystemTrayIcon::componentComplete() -{ - m_complete = true; - if (m_visible) - init(); -} - -QQuickPlatformIconLoader *QQuickPlatformSystemTrayIcon::iconLoader() const -{ - if (!m_iconLoader) { - QQuickPlatformSystemTrayIcon *that = const_cast(this); - static int slot = staticMetaObject.indexOfSlot("updateIcon()"); - m_iconLoader = new QQuickPlatformIconLoader(slot, that); - m_iconLoader->setEnabled(m_complete); - } - return m_iconLoader; -} - -void QQuickPlatformSystemTrayIcon::updateIcon() -{ - if (!m_handle || !m_iconLoader) - return; - - const QRect oldGeometry = m_handle->geometry(); - - m_handle->updateIcon(m_iconLoader->toQIcon()); - - if (oldGeometry != m_handle->geometry()) - emit geometryChanged(); -} - -QT_END_NAMESPACE - -#include "moc_qquickplatformsystemtrayicon_p.cpp" diff --git a/src/imports/platform/qquickplatformsystemtrayicon_p.h b/src/imports/platform/qquickplatformsystemtrayicon_p.h deleted file mode 100644 index d7cc46c0..00000000 --- a/src/imports/platform/qquickplatformsystemtrayicon_p.h +++ /dev/null @@ -1,145 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QQUICKPLATFORMSYSTEMTRAYICON_P_H -#define QQUICKPLATFORMSYSTEMTRAYICON_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 -#include -#include -#include -#include - -#include "qquickplatformicon_p.h" - -QT_REQUIRE_CONFIG(systemtrayicon); - -QT_BEGIN_NAMESPACE - -class QQuickPlatformMenu; -class QQuickPlatformIconLoader; - -class QQuickPlatformSystemTrayIcon : public QObject, public QQmlParserStatus -{ - Q_OBJECT - Q_INTERFACES(QQmlParserStatus) - Q_PROPERTY(bool available READ isAvailable CONSTANT FINAL) - Q_PROPERTY(bool supportsMessages READ supportsMessages CONSTANT FINAL) - Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL) - Q_PROPERTY(QString tooltip READ tooltip WRITE setTooltip NOTIFY tooltipChanged FINAL) - Q_PROPERTY(QQuickPlatformMenu *menu READ menu WRITE setMenu NOTIFY menuChanged FINAL) - Q_PROPERTY(QRect geometry READ geometry NOTIFY geometryChanged FINAL REVISION(1, 1)) - Q_PROPERTY(QQuickPlatformIcon icon READ icon WRITE setIcon NOTIFY iconChanged FINAL REVISION(1, 1)) - Q_ENUMS(QPlatformSystemTrayIcon::ActivationReason QPlatformSystemTrayIcon::MessageIcon) - -public: - explicit QQuickPlatformSystemTrayIcon(QObject *parent = nullptr); - ~QQuickPlatformSystemTrayIcon(); - - QPlatformSystemTrayIcon *handle() const; - - bool isAvailable() const; - bool supportsMessages() const; - - bool isVisible() const; - void setVisible(bool visible); - - QString tooltip() const; - void setTooltip(const QString &tooltip); - - QQuickPlatformMenu *menu() const; - void setMenu(QQuickPlatformMenu *menu); - - QRect geometry() const; - - QQuickPlatformIcon icon() const; - void setIcon(const QQuickPlatformIcon &icon); - -public Q_SLOTS: - void show(); - void hide(); - - void showMessage(const QString &title, const QString &message, - QPlatformSystemTrayIcon::MessageIcon iconType = QPlatformSystemTrayIcon::Information, int msecs = 10000); - -Q_SIGNALS: - void activated(QPlatformSystemTrayIcon::ActivationReason reason); - void messageClicked(); - void visibleChanged(); - void tooltipChanged(); - void menuChanged(); - Q_REVISION(2, 1) void geometryChanged(); - Q_REVISION(2, 1) void iconChanged(); - -protected: - void init(); - void cleanup(); - - void classBegin() override; - void componentComplete() override; - - QQuickPlatformIconLoader *iconLoader() const; - -private Q_SLOTS: - void updateIcon(); - -private: - bool m_complete; - bool m_visible; - QString m_tooltip; - QQuickPlatformMenu *m_menu; - mutable QQuickPlatformIconLoader *m_iconLoader; - QPlatformSystemTrayIcon *m_handle; -}; - -QT_END_NAMESPACE - -QML_DECLARE_TYPE(QQuickPlatformSystemTrayIcon) -Q_DECLARE_METATYPE(QPlatformSystemTrayIcon::ActivationReason) -Q_DECLARE_METATYPE(QPlatformSystemTrayIcon::MessageIcon) - -#endif // QQUICKPLATFORMSYSTEMTRAYICON_P_H diff --git a/src/imports/platform/qtlabsplatformplugin.cpp b/src/imports/platform/qtlabsplatformplugin.cpp deleted file mode 100644 index 90bdb121..00000000 --- a/src/imports/platform/qtlabsplatformplugin.cpp +++ /dev/null @@ -1,117 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Templates module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include - -#include "qquickplatformdialog_p.h" -#include "qquickplatformcolordialog_p.h" -#include "qquickplatformfiledialog_p.h" -#include "qquickplatformfolderdialog_p.h" -#include "qquickplatformfontdialog_p.h" -#include "qquickplatformmessagedialog_p.h" - -#include "qquickplatformmenu_p.h" -#include "qquickplatformmenubar_p.h" -#include "qquickplatformmenuitem_p.h" -#include "qquickplatformmenuitemgroup_p.h" -#include "qquickplatformmenuseparator_p.h" - -#include "qquickplatformstandardpaths_p.h" -#if QT_CONFIG(systemtrayicon) -# include "qquickplatformsystemtrayicon_p.h" -#endif - -#include "qquickplatformicon_p.h" - -QT_BEGIN_NAMESPACE - -Q_LOGGING_CATEGORY(qtLabsPlatformDialogs, "qt.labs.platform.dialogs") -Q_LOGGING_CATEGORY(qtLabsPlatformMenus, "qt.labs.platform.menus") -Q_LOGGING_CATEGORY(qtLabsPlatformTray, "qt.labs.platform.tray") - -class QtLabsPlatformPlugin: public QQmlExtensionPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) - -public: - QtLabsPlatformPlugin(QObject *parent = nullptr); - void registerTypes(const char *uri) override; -}; - -QtLabsPlatformPlugin::QtLabsPlatformPlugin(QObject *parent) : QQmlExtensionPlugin(parent) -{ -} - -void QtLabsPlatformPlugin::registerTypes(const char *uri) -{ - qmlRegisterUncreatableType(uri, 1, 0, "Dialog", QQuickPlatformDialog::tr("Dialog is an abstract base class")); - qmlRegisterType(uri, 1, 0, "ColorDialog"); - qmlRegisterType(uri, 1, 0, "FileDialog"); - qmlRegisterAnonymousType(uri, 1); - qmlRegisterType(uri, 1, 0, "FolderDialog"); - qmlRegisterType(uri, 1, 0, "FontDialog"); - qmlRegisterType(uri, 1, 0, "MessageDialog"); - - qmlRegisterType(uri, 1, 0, "Menu"); - qmlRegisterType(uri, 1, 0, "MenuBar"); - qmlRegisterType(uri, 1, 0, "MenuItem"); - qmlRegisterType(uri, 1, 1, "MenuItem"); - qmlRegisterType(uri, 1, 0, "MenuItemGroup"); - qmlRegisterType(uri, 1, 0, "MenuSeparator"); - qRegisterMetaType(); - - qmlRegisterUncreatableType(uri, 1, 0, "StandardButton", QQuickPlatformDialog::tr("Cannot create an instance of StandardButton")); - qmlRegisterSingletonType(uri, 1, 0, "StandardPaths", QQuickPlatformStandardPaths::create); - qRegisterMetaType(); - qRegisterMetaType(); - -#if QT_CONFIG(systemtrayicon) - qmlRegisterType(uri, 1, 0, "SystemTrayIcon"); - qmlRegisterType(uri, 1, 1, "SystemTrayIcon"); - qRegisterMetaType(); - qRegisterMetaType(); -#endif - - qmlRegisterAnonymousType(uri, 1); - qRegisterMetaType(); -} - -QT_END_NAMESPACE - -#include "qtlabsplatformplugin.moc" diff --git a/src/imports/platform/widgets/qwidgetplatform_p.h b/src/imports/platform/widgets/qwidgetplatform_p.h deleted file mode 100644 index cbdaa24a..00000000 --- a/src/imports/platform/widgets/qwidgetplatform_p.h +++ /dev/null @@ -1,170 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWIDGETPLATFORM_P_H -#define QWIDGETPLATFORM_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 -#include -#include -#include -#include -#include - -#ifdef QT_WIDGETS_LIB -#include -#if QT_CONFIG(colordialog) -#include "qwidgetplatformcolordialog_p.h" -#endif -#if QT_CONFIG(filedialog) -#include "qwidgetplatformfiledialog_p.h" -#endif -#if QT_CONFIG(fontdialog) -#include "qwidgetplatformfontdialog_p.h" -#endif -#if QT_CONFIG(messagebox) -#include "qwidgetplatformmessagedialog_p.h" -#endif -#if QT_CONFIG(menu) -#include "qwidgetplatformmenu_p.h" -#include "qwidgetplatformmenuitem_p.h" -#endif -#ifndef QT_NO_SYSTEMTRAYICON -#include "qwidgetplatformsystemtrayicon_p.h" -#endif -#endif - -QT_BEGIN_NAMESPACE - -#ifndef QT_WIDGETS_LIB -typedef QPlatformMenu QWidgetPlatformMenu; -typedef QPlatformMenuItem QWidgetPlatformMenuItem; -typedef QPlatformColorDialogHelper QWidgetPlatformColorDialog; -typedef QPlatformFileDialogHelper QWidgetPlatformFileDialog; -typedef QPlatformFontDialogHelper QWidgetPlatformFontDialog; -typedef QPlatformMessageDialogHelper QWidgetPlatformMessageDialog; -typedef QPlatformSystemTrayIcon QWidgetPlatformSystemTrayIcon; -#endif - -namespace QWidgetPlatform -{ - static inline bool isAvailable(const char *type) - { - if (!qApp->inherits("QApplication")) { - qCritical("\nERROR: No native %s implementation available." - "\nQt Labs Platform requires Qt Widgets on this setup." - "\nAdd 'QT += widgets' to .pro and create QApplication in main().\n", type); - return false; - } - return true; - } - - template - static inline T *createWidget(const char *name, QObject *parent) - { - static bool available = isAvailable(name); -#ifdef QT_WIDGETS_LIB - if (available) - return new T(parent); -#else - Q_UNUSED(parent); - Q_UNUSED(available); -#endif - return nullptr; - } - - static inline QPlatformMenu *createMenu(QObject *parent = nullptr) { -#if defined(QT_WIDGETS_LIB) && QT_CONFIG(menu) - return createWidget("Menu", parent); -#else - Q_UNUSED(parent); - return nullptr; -#endif - } - static inline QPlatformMenuItem *createMenuItem(QObject *parent = nullptr) { -#if defined(QT_WIDGETS_LIB) && QT_CONFIG(menu) - return createWidget("MenuItem", parent); -#else - Q_UNUSED(parent); - return nullptr; -#endif - } - static inline QPlatformSystemTrayIcon *createSystemTrayIcon(QObject *parent = nullptr) { -#ifndef QT_NO_SYSTEMTRAYICON - return createWidget("SystemTrayIcon", parent); -#else - Q_UNUSED(parent); - return nullptr; -#endif - } - static inline QPlatformDialogHelper *createDialog(QPlatformTheme::DialogType type, QObject *parent = nullptr) - { -#if !defined(QT_WIDGETS_LIB) || !(QT_CONFIG(colordialog) || QT_CONFIG(filedialog) || QT_CONFIG(fontdialog) || QT_CONFIG(messagebox)) - Q_UNUSED(parent); -#endif - switch (type) { -#if defined(QT_WIDGETS_LIB) && QT_CONFIG(colordialog) - case QPlatformTheme::ColorDialog: return createWidget("ColorDialog", parent); -#endif -#if defined(QT_WIDGETS_LIB) && QT_CONFIG(filedialog) - case QPlatformTheme::FileDialog: return createWidget("FileDialog", parent); -#endif -#if defined(QT_WIDGETS_LIB) && QT_CONFIG(fontdialog) - case QPlatformTheme::FontDialog: return createWidget("FontDialog", parent); -#endif -#if defined(QT_WIDGETS_LIB) && QT_CONFIG(messagebox) - case QPlatformTheme::MessageDialog: return createWidget("MessageDialog", parent); -#endif - default: break; - } - return nullptr; - } -} - -QT_END_NAMESPACE - -#endif // QWIDGETPLATFORM_P_H diff --git a/src/imports/platform/widgets/qwidgetplatformcolordialog.cpp b/src/imports/platform/widgets/qwidgetplatformcolordialog.cpp deleted file mode 100644 index 6c0043ae..00000000 --- a/src/imports/platform/widgets/qwidgetplatformcolordialog.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwidgetplatformcolordialog_p.h" -#include "qwidgetplatformdialog_p.h" - -#include - -QT_BEGIN_NAMESPACE - -QWidgetPlatformColorDialog::QWidgetPlatformColorDialog(QObject *parent) - : m_dialog(new QColorDialog) -{ - setParent(parent); - - connect(m_dialog.data(), &QColorDialog::accepted, this, &QPlatformDialogHelper::accept); - connect(m_dialog.data(), &QColorDialog::rejected, this, &QPlatformDialogHelper::reject); - connect(m_dialog.data(), &QColorDialog::currentColorChanged, this, &QPlatformColorDialogHelper::currentColorChanged); -} - -QWidgetPlatformColorDialog::~QWidgetPlatformColorDialog() -{ -} - -QColor QWidgetPlatformColorDialog::currentColor() const -{ - return m_dialog->currentColor(); -} - -void QWidgetPlatformColorDialog::setCurrentColor(const QColor &color) -{ - m_dialog->setCurrentColor(color); -} - -void QWidgetPlatformColorDialog::exec() -{ - m_dialog->exec(); -} - -bool QWidgetPlatformColorDialog::show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) -{ - QSharedPointer options = QPlatformColorDialogHelper::options(); - m_dialog->setWindowTitle(options->windowTitle()); - m_dialog->setOptions(static_cast(int(options->options())) | QColorDialog::DontUseNativeDialog); - - return QWidgetPlatformDialog::show(m_dialog.data(), flags, modality, parent); -} - -void QWidgetPlatformColorDialog::hide() -{ - m_dialog->hide(); -} - -QT_END_NAMESPACE diff --git a/src/imports/platform/widgets/qwidgetplatformcolordialog_p.h b/src/imports/platform/widgets/qwidgetplatformcolordialog_p.h deleted file mode 100644 index 09ed5a1e..00000000 --- a/src/imports/platform/widgets/qwidgetplatformcolordialog_p.h +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWIDGETPLATFORMCOLORDIALOG_P_H -#define QWIDGETPLATFORMCOLORDIALOG_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 - -QT_BEGIN_NAMESPACE - -class QColorDialog; - -class QWidgetPlatformColorDialog : public QPlatformColorDialogHelper -{ - Q_OBJECT - -public: - explicit QWidgetPlatformColorDialog(QObject *parent = nullptr); - ~QWidgetPlatformColorDialog(); - - QColor currentColor() const override; - void setCurrentColor(const QColor &color) override; - - void exec() override; - bool show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) override; - void hide() override; - -private: - QScopedPointer m_dialog; -}; - -QT_END_NAMESPACE - -#endif // QWIDGETPLATFORMCOLORDIALOG_P_H diff --git a/src/imports/platform/widgets/qwidgetplatformdialog.cpp b/src/imports/platform/widgets/qwidgetplatformdialog.cpp deleted file mode 100644 index 3a206839..00000000 --- a/src/imports/platform/widgets/qwidgetplatformdialog.cpp +++ /dev/null @@ -1,58 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwidgetplatformdialog_p.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -bool QWidgetPlatformDialog::show(QDialog *dialog, Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) -{ - dialog->setWindowFlags(flags); - dialog->setWindowModality(modality); - - dialog->createWinId(); - QWindow *handle = dialog->windowHandle(); - Q_ASSERT(handle); - handle->setTransientParent(const_cast(parent)); - - dialog->show(); - return true; -} - -QT_END_NAMESPACE diff --git a/src/imports/platform/widgets/qwidgetplatformdialog_p.h b/src/imports/platform/widgets/qwidgetplatformdialog_p.h deleted file mode 100644 index d4f27655..00000000 --- a/src/imports/platform/widgets/qwidgetplatformdialog_p.h +++ /dev/null @@ -1,66 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWIDGETPLATFORMDIALOG_P_H -#define QWIDGETPLATFORMDIALOG_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 - -QT_BEGIN_NAMESPACE - -class QDialog; -class QWindow; - -class QWidgetPlatformDialog -{ -public: - static bool show(QDialog *dialog, Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent); -}; - -QT_END_NAMESPACE - -#endif // QWIDGETPLATFORMDIALOG_P_H diff --git a/src/imports/platform/widgets/qwidgetplatformfiledialog.cpp b/src/imports/platform/widgets/qwidgetplatformfiledialog.cpp deleted file mode 100644 index 21ac6527..00000000 --- a/src/imports/platform/widgets/qwidgetplatformfiledialog.cpp +++ /dev/null @@ -1,140 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwidgetplatformfiledialog_p.h" -#include "qwidgetplatformdialog_p.h" - -#include - -QT_BEGIN_NAMESPACE - -QWidgetPlatformFileDialog::QWidgetPlatformFileDialog(QObject *parent) - : m_dialog(new QFileDialog) -{ - setParent(parent); - - connect(m_dialog.data(), &QDialog::accepted, this, &QPlatformDialogHelper::accept); - connect(m_dialog.data(), &QDialog::rejected, this, &QPlatformDialogHelper::reject); - - connect(m_dialog.data(), &QFileDialog::fileSelected, [this](const QString &file) { - emit fileSelected(QUrl::fromLocalFile(file)); - }); - connect(m_dialog.data(), &QFileDialog::filesSelected, [this](const QList &files) { - QList urls; - urls.reserve(files.count()); - for (const QString &file : files) - urls += QUrl::fromLocalFile(file); - emit filesSelected(urls); - }); - connect(m_dialog.data(), &QFileDialog::currentChanged, [this](const QString &path) { - emit currentChanged(QUrl::fromLocalFile(path)); - }); - connect(m_dialog.data(), &QFileDialog::directoryEntered, this, &QWidgetPlatformFileDialog::directoryEntered); - connect(m_dialog.data(), &QFileDialog::filterSelected, this, &QWidgetPlatformFileDialog::filterSelected); -} - -QWidgetPlatformFileDialog::~QWidgetPlatformFileDialog() -{ -} - -bool QWidgetPlatformFileDialog::defaultNameFilterDisables() const -{ - return false; // TODO: ? -} - -void QWidgetPlatformFileDialog::setDirectory(const QUrl &directory) -{ - m_dialog->setDirectory(directory.toLocalFile()); -} - -QUrl QWidgetPlatformFileDialog::directory() const -{ - return m_dialog->directoryUrl(); -} - -void QWidgetPlatformFileDialog::selectFile(const QUrl &filename) -{ - m_dialog->selectUrl(filename); -} - -QList QWidgetPlatformFileDialog::selectedFiles() const -{ - return m_dialog->selectedUrls(); -} - -void QWidgetPlatformFileDialog::setFilter() -{ - // TODO: ? -} - -void QWidgetPlatformFileDialog::selectNameFilter(const QString &filter) -{ - m_dialog->selectNameFilter(filter); -} - -QString QWidgetPlatformFileDialog::selectedNameFilter() const -{ - return m_dialog->selectedNameFilter(); -} - -void QWidgetPlatformFileDialog::exec() -{ - m_dialog->exec(); -} - -bool QWidgetPlatformFileDialog::show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) -{ - QSharedPointer options = QPlatformFileDialogHelper::options(); - m_dialog->setWindowTitle(options->windowTitle()); - m_dialog->setAcceptMode(static_cast(options->acceptMode())); - m_dialog->setFileMode(static_cast(options->fileMode())); - m_dialog->setOptions(static_cast(int(options->options())) | QFileDialog::DontUseNativeDialog); - m_dialog->setNameFilters(options->nameFilters()); - m_dialog->setDefaultSuffix(options->defaultSuffix()); - if (options->isLabelExplicitlySet(QFileDialogOptions::Accept)) - m_dialog->setLabelText(QFileDialog::Accept, options->labelText(QFileDialogOptions::Accept)); - if (options->isLabelExplicitlySet(QFileDialogOptions::Reject)) - m_dialog->setLabelText(QFileDialog::Reject, options->labelText(QFileDialogOptions::Reject)); - - return QWidgetPlatformDialog::show(m_dialog.data(), flags, modality, parent); -} - -void QWidgetPlatformFileDialog::hide() -{ - m_dialog->hide(); -} - -QT_END_NAMESPACE diff --git a/src/imports/platform/widgets/qwidgetplatformfiledialog_p.h b/src/imports/platform/widgets/qwidgetplatformfiledialog_p.h deleted file mode 100644 index 3dba6038..00000000 --- a/src/imports/platform/widgets/qwidgetplatformfiledialog_p.h +++ /dev/null @@ -1,84 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWIDGETPLATFORMFILEDIALOG_P_H -#define QWIDGETPLATFORMFILEDIALOG_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 - -QT_BEGIN_NAMESPACE - -class QFileDialog; - -class QWidgetPlatformFileDialog : public QPlatformFileDialogHelper -{ - Q_OBJECT - -public: - explicit QWidgetPlatformFileDialog(QObject *parent = nullptr); - ~QWidgetPlatformFileDialog(); - - bool defaultNameFilterDisables() const override; - void setDirectory(const QUrl &directory) override; - QUrl directory() const override; - void selectFile(const QUrl &filename) override; - QList selectedFiles() const override; - void setFilter() override; - void selectNameFilter(const QString &filter) override; - QString selectedNameFilter() const override; - - void exec() override; - bool show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) override; - void hide() override; - -private: - QScopedPointer m_dialog; -}; - -QT_END_NAMESPACE - -#endif // QWIDGETPLATFORMFILEDIALOG_P_H diff --git a/src/imports/platform/widgets/qwidgetplatformfontdialog.cpp b/src/imports/platform/widgets/qwidgetplatformfontdialog.cpp deleted file mode 100644 index 315e7c73..00000000 --- a/src/imports/platform/widgets/qwidgetplatformfontdialog.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwidgetplatformfontdialog_p.h" -#include "qwidgetplatformdialog_p.h" - -#include - -QT_BEGIN_NAMESPACE - -QWidgetPlatformFontDialog::QWidgetPlatformFontDialog(QObject *parent) - : m_dialog(new QFontDialog) -{ - setParent(parent); - - connect(m_dialog.data(), &QFontDialog::accepted, this, &QPlatformDialogHelper::accept); - connect(m_dialog.data(), &QFontDialog::rejected, this, &QPlatformDialogHelper::reject); - connect(m_dialog.data(), &QFontDialog::currentFontChanged, this, &QPlatformFontDialogHelper::currentFontChanged); -} - -QWidgetPlatformFontDialog::~QWidgetPlatformFontDialog() -{ -} - -QFont QWidgetPlatformFontDialog::currentFont() const -{ - return m_dialog->currentFont(); -} - -void QWidgetPlatformFontDialog::setCurrentFont(const QFont &font) -{ - m_dialog->setCurrentFont(font); -} - -void QWidgetPlatformFontDialog::exec() -{ - m_dialog->exec(); -} - -bool QWidgetPlatformFontDialog::show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) -{ - QSharedPointer options = QPlatformFontDialogHelper::options(); - m_dialog->setWindowTitle(options->windowTitle()); - m_dialog->setOptions(static_cast(int(options->options())) | QFontDialog::DontUseNativeDialog); - - return QWidgetPlatformDialog::show(m_dialog.data(), flags, modality, parent); -} - -void QWidgetPlatformFontDialog::hide() -{ - m_dialog->hide(); -} - -QT_END_NAMESPACE diff --git a/src/imports/platform/widgets/qwidgetplatformfontdialog_p.h b/src/imports/platform/widgets/qwidgetplatformfontdialog_p.h deleted file mode 100644 index e5d13b31..00000000 --- a/src/imports/platform/widgets/qwidgetplatformfontdialog_p.h +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWIDGETPLATFORMFONTDIALOG_P_H -#define QWIDGETPLATFORMFONTDIALOG_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 - -QT_BEGIN_NAMESPACE - -class QFontDialog; - -class QWidgetPlatformFontDialog : public QPlatformFontDialogHelper -{ - Q_OBJECT - -public: - explicit QWidgetPlatformFontDialog(QObject *parent = nullptr); - ~QWidgetPlatformFontDialog(); - - QFont currentFont() const override; - void setCurrentFont(const QFont &font) override; - - void exec() override; - bool show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent) override; - void hide() override; - -private: - QScopedPointer m_dialog; -}; - -QT_END_NAMESPACE - -#endif // QWIDGETPLATFORMFONTDIALOG_P_H diff --git a/src/imports/platform/widgets/qwidgetplatformmenu.cpp b/src/imports/platform/widgets/qwidgetplatformmenu.cpp deleted file mode 100644 index f04620a3..00000000 --- a/src/imports/platform/widgets/qwidgetplatformmenu.cpp +++ /dev/null @@ -1,183 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwidgetplatformmenu_p.h" -#include "qwidgetplatformmenuitem_p.h" - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -QWidgetPlatformMenu::QWidgetPlatformMenu(QObject *parent) - : m_menu(new QMenu) -{ - setParent(parent); - - connect(m_menu.data(), &QMenu::aboutToShow, this, &QPlatformMenu::aboutToShow); - connect(m_menu.data(), &QMenu::aboutToHide, this, &QPlatformMenu::aboutToHide); -} - -QWidgetPlatformMenu::~QWidgetPlatformMenu() -{ -} - -QMenu *QWidgetPlatformMenu::menu() const -{ - return m_menu.data(); -} - -void QWidgetPlatformMenu::insertMenuItem(QPlatformMenuItem *item, QPlatformMenuItem *before) -{ - QWidgetPlatformMenuItem *widgetItem = qobject_cast(item); - if (!widgetItem) - return; - - QWidgetPlatformMenuItem *widgetBefore = qobject_cast(before); - m_menu->insertAction(widgetBefore ? widgetBefore->action() : nullptr, widgetItem->action()); - int index = m_items.indexOf(widgetBefore); - if (index < 0) - index = m_items.count(); - m_items.insert(index, widgetItem); -} - -void QWidgetPlatformMenu::removeMenuItem(QPlatformMenuItem *item) -{ - QWidgetPlatformMenuItem *widgetItem = qobject_cast(item); - if (!widgetItem) - return; - - m_items.removeOne(widgetItem); - m_menu->removeAction(widgetItem->action()); -} - -void QWidgetPlatformMenu::syncMenuItem(QPlatformMenuItem *item) -{ - Q_UNUSED(item); -} - -void QWidgetPlatformMenu::syncSeparatorsCollapsible(bool enable) -{ - m_menu->setSeparatorsCollapsible(enable); -} - -void QWidgetPlatformMenu::setText(const QString &text) -{ - m_menu->setTitle(text); -} - -void QWidgetPlatformMenu::setIcon(const QIcon &icon) -{ - m_menu->setIcon(icon); -} - -void QWidgetPlatformMenu::setEnabled(bool enabled) -{ - m_menu->menuAction()->setEnabled(enabled); -} - -bool QWidgetPlatformMenu::isEnabled() const -{ - return m_menu->menuAction()->isEnabled(); -} - -void QWidgetPlatformMenu::setVisible(bool visible) -{ - m_menu->menuAction()->setVisible(visible); -} - -void QWidgetPlatformMenu::setMinimumWidth(int width) -{ - if (width > 0) - m_menu->setMinimumWidth(width); -} - -void QWidgetPlatformMenu::setFont(const QFont &font) -{ - m_menu->setFont(font); -} - -void QWidgetPlatformMenu::setMenuType(MenuType type) -{ - Q_UNUSED(type); -} - -void QWidgetPlatformMenu::showPopup(const QWindow *window, const QRect &targetRect, const QPlatformMenuItem *item) -{ - m_menu->createWinId(); - QWindow *handle = m_menu->windowHandle(); - Q_ASSERT(handle); - handle->setTransientParent(const_cast(window)); - - QPoint targetPos = targetRect.bottomLeft(); - if (window) - targetPos = window->mapToGlobal(targetPos); - - const QWidgetPlatformMenuItem *widgetItem = qobject_cast(item); - m_menu->popup(targetPos, widgetItem ? widgetItem->action() : nullptr); -} - -void QWidgetPlatformMenu::dismiss() -{ - m_menu->close(); -} - -QPlatformMenuItem *QWidgetPlatformMenu::menuItemAt(int position) const -{ - return m_items.value(position); -} - -QPlatformMenuItem *QWidgetPlatformMenu::menuItemForTag(quintptr tag) const -{ - for (QWidgetPlatformMenuItem *item : m_items) { - if (item->tag() == tag) - return item; - } - return nullptr; -} - -QPlatformMenuItem *QWidgetPlatformMenu::createMenuItem() const -{ - return new QWidgetPlatformMenuItem; -} - -QPlatformMenu *QWidgetPlatformMenu::createSubMenu() const -{ - return new QWidgetPlatformMenu; -} - -QT_END_NAMESPACE diff --git a/src/imports/platform/widgets/qwidgetplatformmenu_p.h b/src/imports/platform/widgets/qwidgetplatformmenu_p.h deleted file mode 100644 index 9d1ef57e..00000000 --- a/src/imports/platform/widgets/qwidgetplatformmenu_p.h +++ /dev/null @@ -1,98 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWIDGETPLATFORMMENU_P_H -#define QWIDGETPLATFORMMENU_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 - -QT_BEGIN_NAMESPACE - -class QMenu; -class QWidgetPlatformMenuItem; - -class QWidgetPlatformMenu : public QPlatformMenu -{ - Q_OBJECT - -public: - explicit QWidgetPlatformMenu(QObject *parent = nullptr); - ~QWidgetPlatformMenu(); - - QMenu *menu() const; - - void insertMenuItem(QPlatformMenuItem *item, QPlatformMenuItem *before) override; - void removeMenuItem(QPlatformMenuItem *item) override; - void syncMenuItem(QPlatformMenuItem *item) override; - void syncSeparatorsCollapsible(bool enable) override; - - void setText(const QString &text) override; - void setIcon(const QIcon &icon) override; - void setEnabled(bool enabled) override; - bool isEnabled() const override; - void setVisible(bool visible) override; - void setMinimumWidth(int width) override; - void setFont(const QFont &font) override; - void setMenuType(MenuType type) override; - - void showPopup(const QWindow *window, const QRect &targetRect, const QPlatformMenuItem *item) override; - void dismiss() override; - - QPlatformMenuItem *menuItemAt(int position) const override; - QPlatformMenuItem *menuItemForTag(quintptr tag) const override; - - QPlatformMenuItem *createMenuItem() const override; - QPlatformMenu *createSubMenu() const override; - -private: - QScopedPointer m_menu; - QList m_items; -}; - -QT_END_NAMESPACE - -#endif // QWIDGETPLATFORMMENU_P_H diff --git a/src/imports/platform/widgets/qwidgetplatformmenuitem.cpp b/src/imports/platform/widgets/qwidgetplatformmenuitem.cpp deleted file mode 100644 index ea4de57f..00000000 --- a/src/imports/platform/widgets/qwidgetplatformmenuitem.cpp +++ /dev/null @@ -1,125 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwidgetplatformmenuitem_p.h" -#include "qwidgetplatformmenu_p.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -QWidgetPlatformMenuItem::QWidgetPlatformMenuItem(QObject *parent) - : m_action(new QAction) -{ - setParent(parent); - connect(m_action.data(), &QAction::hovered, this, &QPlatformMenuItem::hovered); - connect(m_action.data(), &QAction::triggered, this, &QPlatformMenuItem::activated); -} - -QWidgetPlatformMenuItem::~QWidgetPlatformMenuItem() -{ -} - -QAction *QWidgetPlatformMenuItem::action() const -{ - return m_action.data(); -} - -void QWidgetPlatformMenuItem::setText(const QString &text) -{ - m_action->setText(text); -} - -void QWidgetPlatformMenuItem::setIcon(const QIcon &icon) -{ - m_action->setIcon(icon); -} - -void QWidgetPlatformMenuItem::setMenu(QPlatformMenu *menu) -{ - QWidgetPlatformMenu *widgetMenu = qobject_cast(menu); - m_action->setMenu(widgetMenu ? widgetMenu->menu() : nullptr); -} - -void QWidgetPlatformMenuItem::setVisible(bool visible) -{ - m_action->setVisible(visible); -} - -void QWidgetPlatformMenuItem::setIsSeparator(bool separator) -{ - m_action->setSeparator(separator); -} - -void QWidgetPlatformMenuItem::setFont(const QFont &font) -{ - m_action->setFont(font); -} - -void QWidgetPlatformMenuItem::setRole(MenuRole role) -{ - m_action->setMenuRole(static_cast(role)); -} - -void QWidgetPlatformMenuItem::setCheckable(bool checkable) -{ - m_action->setCheckable(checkable); -} - -void QWidgetPlatformMenuItem::setChecked(bool checked) -{ - m_action->setChecked(checked); -} - -#if QT_CONFIG(shortcut) -void QWidgetPlatformMenuItem::setShortcut(const QKeySequence &shortcut) -{ - m_action->setShortcut(shortcut); -} -#endif - -void QWidgetPlatformMenuItem::setEnabled(bool enabled) -{ - m_action->setEnabled(enabled); -} - -void QWidgetPlatformMenuItem::setIconSize(int size) -{ - Q_UNUSED(size); -} - -QT_END_NAMESPACE diff --git a/src/imports/platform/widgets/qwidgetplatformmenuitem_p.h b/src/imports/platform/widgets/qwidgetplatformmenuitem_p.h deleted file mode 100644 index 43b3fc17..00000000 --- a/src/imports/platform/widgets/qwidgetplatformmenuitem_p.h +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWIDGETPLATFORMMENUITEM_P_H -#define QWIDGETPLATFORMMENUITEM_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 - -QT_BEGIN_NAMESPACE - -class QAction; - -class QWidgetPlatformMenuItem : public QPlatformMenuItem -{ - Q_OBJECT - -public: - explicit QWidgetPlatformMenuItem(QObject *parent = nullptr); - ~QWidgetPlatformMenuItem(); - - QAction *action() const; - - void setText(const QString &text) override; - void setIcon(const QIcon &icon) override; - void setMenu(QPlatformMenu *menu) override; - void setVisible(bool visible) override; - void setIsSeparator(bool separator) override; - void setFont(const QFont &font) override; - void setRole(MenuRole role) override; - void setCheckable(bool checkable) override; - void setChecked(bool checked) override; -#if QT_CONFIG(shortcut) - void setShortcut(const QKeySequence& shortcut) override; -#endif - void setEnabled(bool enabled) override; - void setIconSize(int size) override; - -private: - QScopedPointer m_action; -}; - -QT_END_NAMESPACE - -#endif // QWIDGETPLATFORMMENUITEM_P_H diff --git a/src/imports/platform/widgets/qwidgetplatformmessagedialog.cpp b/src/imports/platform/widgets/qwidgetplatformmessagedialog.cpp deleted file mode 100644 index 365692dc..00000000 --- a/src/imports/platform/widgets/qwidgetplatformmessagedialog.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwidgetplatformmessagedialog_p.h" -#include "qwidgetplatformdialog_p.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -QWidgetPlatformMessageDialog::QWidgetPlatformMessageDialog(QObject *parent) - : m_dialog(new QMessageBox) -{ - setParent(parent); - - connect(m_dialog.data(), &QMessageBox::accepted, this, &QPlatformDialogHelper::accept); - connect(m_dialog.data(), &QMessageBox::rejected, this, &QPlatformDialogHelper::reject); - connect(m_dialog.data(), &QMessageBox::buttonClicked, [this](QAbstractButton *button) { - QMessageBox::ButtonRole role = m_dialog->buttonRole(button); - QMessageBox::StandardButton standardButton = m_dialog->standardButton(button); - emit clicked(static_cast(standardButton), static_cast(role)); - }); -} - -QWidgetPlatformMessageDialog::~QWidgetPlatformMessageDialog() -{ -} -void QWidgetPlatformMessageDialog::exec() -{ - m_dialog->exec(); -} - -bool QWidgetPlatformMessageDialog::show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) -{ - QSharedPointer options = QPlatformMessageDialogHelper::options(); - m_dialog->setWindowTitle(options->windowTitle()); - m_dialog->setIcon(static_cast(options->icon())); - m_dialog->setText(options->text()); - m_dialog->setInformativeText(options->informativeText()); -#if QT_CONFIG(textedit) - m_dialog->setDetailedText(options->detailedText()); -#endif - m_dialog->setStandardButtons(static_cast(int(options->standardButtons()))); - - return QWidgetPlatformDialog::show(m_dialog.data(), flags, modality, parent); -} - -void QWidgetPlatformMessageDialog::hide() -{ - m_dialog->hide(); -} - -QT_END_NAMESPACE diff --git a/src/imports/platform/widgets/qwidgetplatformmessagedialog_p.h b/src/imports/platform/widgets/qwidgetplatformmessagedialog_p.h deleted file mode 100644 index 6581337a..00000000 --- a/src/imports/platform/widgets/qwidgetplatformmessagedialog_p.h +++ /dev/null @@ -1,75 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWIDGETPLATFORMMESSAGEDIALOG_P_H -#define QWIDGETPLATFORMMESSAGEDIALOG_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 - -QT_BEGIN_NAMESPACE - -class QMessageBox; - -class QWidgetPlatformMessageDialog : public QPlatformMessageDialogHelper -{ - Q_OBJECT - -public: - explicit QWidgetPlatformMessageDialog(QObject *parent = nullptr); - ~QWidgetPlatformMessageDialog(); - - void exec() override; - bool show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) override; - void hide() override; - -private: - QScopedPointer m_dialog; -}; - -QT_END_NAMESPACE - -#endif // QWIDGETPLATFORMMESSAGEDIALOG_P_H diff --git a/src/imports/platform/widgets/qwidgetplatformsystemtrayicon.cpp b/src/imports/platform/widgets/qwidgetplatformsystemtrayicon.cpp deleted file mode 100644 index e406ff03..00000000 --- a/src/imports/platform/widgets/qwidgetplatformsystemtrayicon.cpp +++ /dev/null @@ -1,118 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwidgetplatformsystemtrayicon_p.h" -#include "qwidgetplatformmenu_p.h" - -#include - -QT_BEGIN_NAMESPACE - -QWidgetPlatformSystemTrayIcon::QWidgetPlatformSystemTrayIcon(QObject *parent) - : m_systray(new QSystemTrayIcon) -{ - setParent(parent); - - connect(m_systray.data(), &QSystemTrayIcon::messageClicked, this, &QPlatformSystemTrayIcon::messageClicked); - connect(m_systray.data(), &QSystemTrayIcon::activated, [this](QSystemTrayIcon::ActivationReason reason) { - emit activated(static_cast(reason)); - }); -} - -QWidgetPlatformSystemTrayIcon::~QWidgetPlatformSystemTrayIcon() -{ -} - -void QWidgetPlatformSystemTrayIcon::init() -{ - m_systray->show(); -} - -void QWidgetPlatformSystemTrayIcon::cleanup() -{ - m_systray->hide(); -} - -void QWidgetPlatformSystemTrayIcon::updateIcon(const QIcon &icon) -{ - m_systray->setIcon(icon); -} - -void QWidgetPlatformSystemTrayIcon::updateToolTip(const QString &tooltip) -{ - m_systray->setToolTip(tooltip); -} - -void QWidgetPlatformSystemTrayIcon::updateMenu(QPlatformMenu *menu) -{ -#if QT_CONFIG(menu) - QWidgetPlatformMenu *widgetMenu = qobject_cast(menu); - if (!widgetMenu) - return; - - m_systray->setContextMenu(widgetMenu->menu()); -#else - Q_UNUSED(menu); -#endif -} - -QRect QWidgetPlatformSystemTrayIcon::geometry() const -{ - return m_systray->geometry(); -} - -void QWidgetPlatformSystemTrayIcon::showMessage(const QString &title, const QString &msg, const QIcon &icon, MessageIcon iconType, int msecs) -{ - Q_UNUSED(icon); - m_systray->showMessage(title, msg, static_cast(iconType), msecs); -} - -bool QWidgetPlatformSystemTrayIcon::isSystemTrayAvailable() const -{ - return QSystemTrayIcon::isSystemTrayAvailable(); -} - -bool QWidgetPlatformSystemTrayIcon::supportsMessages() const -{ - return QSystemTrayIcon::supportsMessages(); -} - -QPlatformMenu *QWidgetPlatformSystemTrayIcon::createMenu() const -{ - return new QWidgetPlatformMenu; -} - -QT_END_NAMESPACE diff --git a/src/imports/platform/widgets/qwidgetplatformsystemtrayicon_p.h b/src/imports/platform/widgets/qwidgetplatformsystemtrayicon_p.h deleted file mode 100644 index 11ea5377..00000000 --- a/src/imports/platform/widgets/qwidgetplatformsystemtrayicon_p.h +++ /dev/null @@ -1,87 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Labs Platform module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWIDGETPLATFORMSYSTEMTRAYICON_P_H -#define QWIDGETPLATFORMSYSTEMTRAYICON_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 - -QT_REQUIRE_CONFIG(systemtrayicon); - -QT_BEGIN_NAMESPACE - -class QSystemTrayIcon; - -class QWidgetPlatformSystemTrayIcon : public QPlatformSystemTrayIcon -{ - Q_OBJECT - -public: - explicit QWidgetPlatformSystemTrayIcon(QObject *parent = nullptr); - ~QWidgetPlatformSystemTrayIcon(); - - void init() override; - void cleanup() override; - void updateIcon(const QIcon &icon) override; - void updateToolTip(const QString &tooltip) override; - void updateMenu(QPlatformMenu *menu) override; - QRect geometry() const override; - void showMessage(const QString &title, const QString &msg, - const QIcon &icon, MessageIcon iconType, int msecs) override; - - bool isSystemTrayAvailable() const override; - bool supportsMessages() const override; - - QPlatformMenu *createMenu() const override; - -private: - QScopedPointer m_systray; -}; - -QT_END_NAMESPACE - -#endif // QWIDGETPLATFORMSYSTEMTRAYICON_P_H diff --git a/src/imports/platform/widgets/widgets.pri b/src/imports/platform/widgets/widgets.pri deleted file mode 100644 index 54ad7187..00000000 --- a/src/imports/platform/widgets/widgets.pri +++ /dev/null @@ -1,56 +0,0 @@ -QT += widgets -DEPENDPATH += $$PWD - -HEADERS += \ - $$PWD/qwidgetplatform_p.h - -qtConfig(systemtrayicon) { - HEADERS += \ - $$PWD/qwidgetplatformsystemtrayicon_p.h - SOURCES += \ - $$PWD/qwidgetplatformsystemtrayicon.cpp -} - -qtConfig(colordialog) | qtConfig(filedialog) | qtConfig(fontdialog) | qtConfig(messagebox) { - HEADERS += \ - $$PWD/qwidgetplatformdialog_p.h - SOURCES += \ - $$PWD/qwidgetplatformdialog.cpp -} - -qtConfig(colordialog) { - HEADERS += \ - $$PWD/qwidgetplatformcolordialog_p.h - SOURCES += \ - $$PWD/qwidgetplatformcolordialog.cpp -} - -qtConfig(filedialog) { - HEADERS += \ - $$PWD/qwidgetplatformfiledialog_p.h - SOURCES += \ - $$PWD/qwidgetplatformfiledialog.cpp -} - -qtConfig(fontdialog) { - HEADERS += \ - $$PWD/qwidgetplatformfontdialog_p.h - SOURCES += \ - $$PWD/qwidgetplatformfontdialog.cpp -} - -qtConfig(menu) { - HEADERS += \ - $$PWD/qwidgetplatformmenu_p.h \ - $$PWD/qwidgetplatformmenuitem_p.h - SOURCES += \ - $$PWD/qwidgetplatformmenu.cpp \ - $$PWD/qwidgetplatformmenuitem.cpp -} - -qtConfig(messagebox) { - HEADERS += \ - $$PWD/qwidgetplatformmessagedialog_p.h - SOURCES += \ - $$PWD/qwidgetplatformmessagedialog.cpp -} diff --git a/src/imports/templates/CMakeLists.txt b/src/imports/templates/CMakeLists.txt deleted file mode 100644 index ada7cb59..00000000 --- a/src/imports/templates/CMakeLists.txt +++ /dev/null @@ -1,35 +0,0 @@ -# Generated from templates.pro. - -##################################################################### -## qtquicktemplates2plugin Plugin: -##################################################################### - -qt_internal_add_qml_module(qtquicktemplates2plugin - URI "QtQuick.Templates" - VERSION "${PROJECT_VERSION}" - CLASSNAME QtQuickTemplates2Plugin - DEPENDENCIES - QtQuick/auto - SKIP_TYPE_REGISTRATION - SOURCES - qtquicktemplates2plugin.cpp - DEFINES - QT_NO_CAST_FROM_ASCII - QT_NO_CAST_TO_ASCII - LIBRARIES - Qt::CorePrivate - Qt::GuiPrivate - Qt::QmlPrivate - Qt::QuickPrivate - Qt::QuickTemplates2Private - PUBLIC_LIBRARIES - Qt::Core - Qt::Gui - Qt::Qml - Qt::Quick -) - -#### Keys ignored in scope 1:.:.:templates.pro:: -# OTHER_FILES = "qmldir" -# QML_IMPORT_VERSION = "$$QT_VERSION" -# TARGETPATH = "QtQuick/Templates" diff --git a/src/imports/templates/doc/src/qtquicktemplates2-index.qdoc b/src/imports/templates/doc/src/qtquicktemplates2-index.qdoc deleted file mode 100644 index c7e25548..00000000 --- a/src/imports/templates/doc/src/qtquicktemplates2-index.qdoc +++ /dev/null @@ -1,58 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtquicktemplates2-index.html - \title Qt Quick Templates 2 - \brief A set of templates to create user interface controls in Qt Quick - - Qt Quick Templates are the foundations of \l {Qt Quick Controls}. Templates - are non-visual implementations of controls' logic and behavior. They offer - an interface to visualize the controls in QML using \l {Qt Quick}. - - Even though the templates aim to be as style-agnostic as possible, in some - cases they have to make certain assumptions about the visual structure of - a control. For example, a spinbox has buttons that increment and decrement - the value of the spinbox. In order to implement the behavior of a spinbox, - the spinbox template needs to know if the user is interacting with the up - or down button. A visual implementation of the spinbox template merely needs - to position the up and down buttons and visualize them in normal, pressed, - and disabled states. Any input event handling and state processing is taken - care of by the underlying template. - - \section1 Module Evolution - \l{Changes to Qt Quick Controls} lists important changes in the - module API and functionality that were done for the Qt 6 series of Qt. - - \section1 Related Information - - \list - \li \l{Qt Quick} - \li \l{Qt Quick Controls} - \li \l{Qt Quick Templates 2 QML Types} - \endlist -*/ diff --git a/src/imports/templates/doc/src/qtquicktemplates2-qmltypes.qdoc b/src/imports/templates/doc/src/qtquicktemplates2-qmltypes.qdoc deleted file mode 100644 index 396dbdc5..00000000 --- a/src/imports/templates/doc/src/qtquicktemplates2-qmltypes.qdoc +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2017 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Free Documentation License Usage -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. Please review the following information to ensure -** the GNU Free Documentation License version 1.3 requirements -** will be met: https://www.gnu.org/licenses/fdl-1.3.html. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \qmlmodule QtQuick.Templates 2.\QtMinorVersion - \title Qt Quick Templates 2 QML Types - \ingroup qmlmodules - \brief Provides QML types for templates (Qt Quick Templates). - - The \l {Qt Quick Templates 2} module provides a set of non-visual templates - that can be used to build user interface controls in QML using \l {Qt Quick}. - - The QML types can be imported using the following import statement in your - \c .qml file: - - \qml - import QtQuick.Templates as T - \endqml - - For the sake of clarity, there is a one-to-one mapping between the types - provided by the \c QtQuick.Templates and \c QtQuick.Controls imports. For - every type available in the \c QtQuick.Controls import, a non-visual template - type by the same name exists in the \c QtQuick.Templates import. - - \note It is recommended to use a namespace for the templates import to avoid - overlap with the types provided by the \c QtQuick.Controls import. - - \section1 QML Types - - \generatelist {qmltypesbymodule QtQuick.Controls} - - \section1 Related Information - - \list - \li \l {Qt Quick Controls QML Types} - \li \l {Using Qt Quick Controls types in property declarations} - \endlist - - \noautolist -*/ diff --git a/src/imports/templates/qtquicktemplates2plugin.cpp b/src/imports/templates/qtquicktemplates2plugin.cpp deleted file mode 100644 index da89601d..00000000 --- a/src/imports/templates/qtquicktemplates2plugin.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2020 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ -** -** This file is part of the Qt Quick Templates 2 module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL3$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPLv3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or later as published by the Free -** Software Foundation and appearing in the file LICENSE.GPL included in -** the packaging of this file. Please review the following information to -** ensure the GNU General Public License version 2.0 requirements will be -** met: http://www.gnu.org/licenses/gpl-2.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include - -#if QT_CONFIG(shortcut) -#include - -// qtdeclarative/src/quick/util/qquickshortcut.cpp -typedef bool (*ShortcutContextMatcher)(QObject *, Qt::ShortcutContext); -extern ShortcutContextMatcher qt_quick_shortcut_context_matcher(); -extern void qt_quick_set_shortcut_context_matcher(ShortcutContextMatcher matcher); -#endif - -QT_BEGIN_NAMESPACE - -class QtQuickTemplates2Plugin : public QQmlExtensionPlugin -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) - -public: - QtQuickTemplates2Plugin(QObject *parent = nullptr); - ~QtQuickTemplates2Plugin(); - - void registerTypes(const char *uri) override; - void unregisterTypes() override; - -private: - bool registered; -#if QT_CONFIG(shortcut) - ShortcutContextMatcher originalContextMatcher; -#endif -}; - -QtQuickTemplates2Plugin::QtQuickTemplates2Plugin(QObject *parent) - : QQmlExtensionPlugin(parent), registered(false) -{ - volatile auto registration = &qml_register_types_QtQuick_Templates; - volatile auto initialization = &QQuickTemplates_initializeModule; - - Q_UNUSED(registration) - Q_UNUSED(initialization) -} - -QtQuickTemplates2Plugin::~QtQuickTemplates2Plugin() -{ - // Intentionally empty: we use register/unregisterTypes() to do - // initialization and cleanup, as plugins are not unloaded on macOS. -} - -void QtQuickTemplates2Plugin::registerTypes(const char */*uri*/) -{ -#if QT_CONFIG(shortcut) - originalContextMatcher = qt_quick_shortcut_context_matcher(); - qt_quick_set_shortcut_context_matcher(QQuickShortcutContext::matcher); -#endif - - registered = true; -} - -void QtQuickTemplates2Plugin::unregisterTypes() -{ -#if QT_CONFIG(shortcut) - qt_quick_set_shortcut_context_matcher(originalContextMatcher); -#endif -} - -QT_END_NAMESPACE - -#include "qtquicktemplates2plugin.moc" diff --git a/src/labs/CMakeLists.txt b/src/labs/CMakeLists.txt new file mode 100644 index 00000000..72b278fe --- /dev/null +++ b/src/labs/CMakeLists.txt @@ -0,0 +1,2 @@ +add_subdirectory(platform) + diff --git a/src/labs/platform/CMakeLists.txt b/src/labs/platform/CMakeLists.txt new file mode 100644 index 00000000..e1ddc4ee --- /dev/null +++ b/src/labs/platform/CMakeLists.txt @@ -0,0 +1,94 @@ +##################################################################### +## qtlabsplatformplugin Plugin: +##################################################################### + +qt_internal_add_qml_module(qtlabsplatformplugin + URI "Qt.labs.platform" + VERSION "1.1" + CLASS_NAME QtLabsPlatformPlugin + PLUGIN_TARGET qtlabsplatformplugin + NO_PLUGIN_OPTIONAL + NO_GENERATE_PLUGIN_SOURCE + SOURCES + qquickplatformcolordialog.cpp qquickplatformcolordialog_p.h + qquickplatformdialog.cpp qquickplatformdialog_p.h + qquickplatformfiledialog.cpp qquickplatformfiledialog_p.h + qquickplatformfolderdialog.cpp qquickplatformfolderdialog_p.h + qquickplatformfontdialog.cpp qquickplatformfontdialog_p.h + qquickplatformicon.cpp qquickplatformicon_p.h + qquickplatformiconloader.cpp qquickplatformiconloader_p.h + qquickplatformmenu.cpp qquickplatformmenu_p.h + qquickplatformmenubar.cpp qquickplatformmenubar_p.h + qquickplatformmenuitem.cpp qquickplatformmenuitem_p.h + qquickplatformmenuitemgroup.cpp qquickplatformmenuitemgroup_p.h + qquickplatformmenuseparator.cpp qquickplatformmenuseparator_p.h + qquickplatformmessagedialog.cpp qquickplatformmessagedialog_p.h + qquickplatformstandardpaths.cpp qquickplatformstandardpaths_p.h + qtlabsplatformplugin.cpp + DEFINES + QT_NO_CAST_FROM_ASCII + QT_NO_CAST_TO_ASCII + LIBRARIES + Qt::CorePrivate + Qt::GuiPrivate + Qt::QmlPrivate + Qt::QuickPrivate + Qt::QuickTemplates2Private + PUBLIC_LIBRARIES + Qt::Core + Qt::Gui + Qt::Qml + Qt::Quick +) + +qt_internal_extend_target(qtlabsplatformplugin CONDITION TARGET Qt::Widgets + SOURCES + widgets/qwidgetplatform_p.h + PUBLIC_LIBRARIES + Qt::Widgets +) + +qt_internal_extend_target(qtlabsplatformplugin CONDITION TARGET Qt::Widgets AND QT_FEATURE_systemtrayicon AND TARGET Qt::Widgets # special case + SOURCES + widgets/qwidgetplatformsystemtrayicon.cpp widgets/qwidgetplatformsystemtrayicon_p.h +) + +qt_internal_extend_target(qtlabsplatformplugin CONDITION TARGET Qt::Widgets AND (QT_FEATURE_colordialog OR QT_FEATURE_filedialog OR QT_FEATURE_fontdialog OR QT_FEATURE_messagebox) + SOURCES + widgets/qwidgetplatformdialog.cpp widgets/qwidgetplatformdialog_p.h +) + +qt_internal_extend_target(qtlabsplatformplugin CONDITION TARGET Qt::Widgets AND QT_FEATURE_colordialog AND TARGET Qt::Widgets # special case + SOURCES + widgets/qwidgetplatformcolordialog.cpp widgets/qwidgetplatformcolordialog_p.h +) + +qt_internal_extend_target(qtlabsplatformplugin CONDITION TARGET Qt::Widgets AND QT_FEATURE_filedialog AND TARGET Qt::Widgets # special case + SOURCES + widgets/qwidgetplatformfiledialog.cpp widgets/qwidgetplatformfiledialog_p.h +) + +qt_internal_extend_target(qtlabsplatformplugin CONDITION TARGET Qt::Widgets AND QT_FEATURE_fontdialog AND TARGET Qt::Widgets # special case + SOURCES + widgets/qwidgetplatformfontdialog.cpp widgets/qwidgetplatformfontdialog_p.h +) + +qt_internal_extend_target(qtlabsplatformplugin CONDITION TARGET Qt::Widgets AND QT_FEATURE_menu AND TARGET Qt::Widgets # special case + SOURCES + widgets/qwidgetplatformmenu.cpp widgets/qwidgetplatformmenu_p.h + widgets/qwidgetplatformmenuitem.cpp widgets/qwidgetplatformmenuitem_p.h +) + +qt_internal_extend_target(qtlabsplatformplugin CONDITION TARGET Qt::Widgets AND QT_FEATURE_messagebox AND TARGET Qt::Widgets # special case + SOURCES + widgets/qwidgetplatformmessagedialog.cpp widgets/qwidgetplatformmessagedialog_p.h +) + +qt_internal_extend_target(qtlabsplatformplugin CONDITION QT_FEATURE_systemtrayicon + SOURCES + qquickplatformsystemtrayicon.cpp qquickplatformsystemtrayicon_p.h +) + +qt_internal_add_docs(qtlabsplatformplugin + doc/qtlabsplatform.qdocconf +) diff --git a/src/labs/platform/doc/images/qtlabsplatform-colordialog-gtk.png b/src/labs/platform/doc/images/qtlabsplatform-colordialog-gtk.png new file mode 100644 index 00000000..12197f7f Binary files /dev/null and b/src/labs/platform/doc/images/qtlabsplatform-colordialog-gtk.png differ diff --git a/src/labs/platform/doc/images/qtlabsplatform-filedialog-gtk.png b/src/labs/platform/doc/images/qtlabsplatform-filedialog-gtk.png new file mode 100644 index 00000000..9360d747 Binary files /dev/null and b/src/labs/platform/doc/images/qtlabsplatform-filedialog-gtk.png differ diff --git a/src/labs/platform/doc/images/qtlabsplatform-folderdialog-gtk.png b/src/labs/platform/doc/images/qtlabsplatform-folderdialog-gtk.png new file mode 100644 index 00000000..45f0585c Binary files /dev/null and b/src/labs/platform/doc/images/qtlabsplatform-folderdialog-gtk.png differ diff --git a/src/labs/platform/doc/images/qtlabsplatform-fontdialog-gtk.png b/src/labs/platform/doc/images/qtlabsplatform-fontdialog-gtk.png new file mode 100644 index 00000000..0c6217bd Binary files /dev/null and b/src/labs/platform/doc/images/qtlabsplatform-fontdialog-gtk.png differ diff --git a/src/labs/platform/doc/images/qtlabsplatform-menu.png b/src/labs/platform/doc/images/qtlabsplatform-menu.png new file mode 100644 index 00000000..7945b45f Binary files /dev/null and b/src/labs/platform/doc/images/qtlabsplatform-menu.png differ diff --git a/src/labs/platform/doc/images/qtlabsplatform-menubar.png b/src/labs/platform/doc/images/qtlabsplatform-menubar.png new file mode 100644 index 00000000..7faa8141 Binary files /dev/null and b/src/labs/platform/doc/images/qtlabsplatform-menubar.png differ diff --git a/src/labs/platform/doc/images/qtlabsplatform-messagedialog-android.png b/src/labs/platform/doc/images/qtlabsplatform-messagedialog-android.png new file mode 100644 index 00000000..3986694f Binary files /dev/null and b/src/labs/platform/doc/images/qtlabsplatform-messagedialog-android.png differ diff --git a/src/labs/platform/doc/images/qtlabsplatform-messagedialog-informative-android.png b/src/labs/platform/doc/images/qtlabsplatform-messagedialog-informative-android.png new file mode 100644 index 00000000..b2d3cd37 Binary files /dev/null and b/src/labs/platform/doc/images/qtlabsplatform-messagedialog-informative-android.png differ diff --git a/src/labs/platform/doc/images/qtlabsplatform-systemtrayicon-menu.png b/src/labs/platform/doc/images/qtlabsplatform-systemtrayicon-menu.png new file mode 100644 index 00000000..670df8ed Binary files /dev/null and b/src/labs/platform/doc/images/qtlabsplatform-systemtrayicon-menu.png differ diff --git a/src/labs/platform/doc/images/qtlabsplatform-systemtrayicon-message.png b/src/labs/platform/doc/images/qtlabsplatform-systemtrayicon-message.png new file mode 100644 index 00000000..beaeed92 Binary files /dev/null and b/src/labs/platform/doc/images/qtlabsplatform-systemtrayicon-message.png differ diff --git a/src/labs/platform/doc/images/qtlabsplatform-systemtrayicon.png b/src/labs/platform/doc/images/qtlabsplatform-systemtrayicon.png new file mode 100644 index 00000000..2f7a851c Binary files /dev/null and b/src/labs/platform/doc/images/qtlabsplatform-systemtrayicon.png differ diff --git a/src/labs/platform/doc/qtlabsplatform.qdocconf b/src/labs/platform/doc/qtlabsplatform.qdocconf new file mode 100644 index 00000000..54ed8204 --- /dev/null +++ b/src/labs/platform/doc/qtlabsplatform.qdocconf @@ -0,0 +1,41 @@ +include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf) +include($QT_INSTALL_DOCS/config/exampleurl-qtquickcontrols2.qdocconf) + +project = QtLabsPlatform +description = Qt Labs Platform Reference Documentation +version = $QT_VERSION + +qhp.projects = QtLabsPlatform + +qhp.QtLabsPlatform.file = qtlabsplatform.qhp +qhp.QtLabsPlatform.namespace = org.qt-project.qtlabsplatform.$QT_VERSION_TAG +qhp.QtLabsPlatform.virtualFolder = qtlabsplatform +qhp.QtLabsPlatform.indexTitle = Qt Labs Platform +qhp.QtLabsPlatform.indexRoot = + +qhp.QtLabsPlatform.filterAttributes = qtlabsplatform $QT_VERSION qtrefdoc +qhp.QtLabsPlatform.customFilters.Qt.name = QtLabsPlatform $QT_VERSION +qhp.QtLabsPlatform.customFilters.Qt.filterAttributes = qtlabsplatform $QT_VERSION + +qhp.QtLabsPlatform.subprojects = qmltypes +qhp.QtLabsPlatform.subprojects.qmltypes.title = QML Types +qhp.QtLabsPlatform.subprojects.qmltypes.indexTitle = Qt Labs Platform QML Types +qhp.QtLabsPlatform.subprojects.qmltypes.selectors = qmlclass +qhp.QtLabsPlatform.subprojects.qmltypes.sortPages = true + +depends = qtcore qtgui qtdoc qtqml qtqmlmodels qtquick qtquickcontrols qtwidgets + +# This module has no documented C++ types, clear the module header +moduleheader = + +headerdirs += ../ +sourcedirs += ../ + +imagedirs += images + +navigation.landingpage = "Qt Labs Platform" +navigation.qmltypespage = "Qt Labs Platform QML Types" + +tagfile = qtlabsplatform.tags + +macro.labs = "\\note \\e{Types in Qt.labs modules are not guaranteed to remain compatible in future versions.}" diff --git a/src/labs/platform/doc/src/includes/widgets.qdocinc b/src/labs/platform/doc/src/includes/widgets.qdocinc new file mode 100644 index 00000000..44ebba6d --- /dev/null +++ b/src/labs/platform/doc/src/includes/widgets.qdocinc @@ -0,0 +1,28 @@ +//! [1] +The Qt Labs Platform module uses Qt Widgets as a fallback on platforms that +do not have a native implementation available. Therefore, applications that +use types from the Qt Labs Platform module should link to QtWidgets and use +\l QApplication instead of \l QGuiApplication. + +To link against the QtWidgets library, add the following to your qmake project +file: + +\code +QT += widgets +\endcode + +Create an instance of \l QApplication in \c main(): + +\code +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QQmlApplicationEngine engine; + engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); + return app.exec(); +} +\endcode +//! [1] diff --git a/src/labs/platform/doc/src/qt6-changes.qdoc b/src/labs/platform/doc/src/qt6-changes.qdoc new file mode 100644 index 00000000..de1c7a29 --- /dev/null +++ b/src/labs/platform/doc/src/qt6-changes.qdoc @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquicklabsplatform-changes-qt6.html + \title Changes to Qt Quick Labs Platform + \ingroup changes-qt-5-to-6 + \brief Migrate Qt Quick Labs Platform to Qt 6. + + Qt 6 is a result of the conscious effort to make the framework more + efficient and easy to use. + + We try to maintain compatibility for all the public APIs in each release. + Some changes were inevitable in an effort to make Qt a better framework. + + In this topic we summarize those changes in Qt Quick Labs Platform, and + provide guidance to handle them. + + \section1 The Menu type + + The deprecated \c iconName and \c iconSource properties were removed. Use + the \l {Menu::}{icon} property instead. + + \section1 The MenuItem type + + The deprecated \c iconName and \c iconSource properties were removed. Use + the \l {MenuItem::}{icon} property instead. + + \section1 The SystemTrayIcon type + + The deprecated \c iconName and \c iconSource properties were removed. Use + the \l {SystemTrayIcon::}{icon} property instead. +*/ diff --git a/src/labs/platform/doc/src/qtlabsplatform-index.qdoc b/src/labs/platform/doc/src/qtlabsplatform-index.qdoc new file mode 100644 index 00000000..c6eff0ba --- /dev/null +++ b/src/labs/platform/doc/src/qtlabsplatform-index.qdoc @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtlabsplatform-index.html + \title Qt Labs Platform + + \brief The experimental Qt Labs Platform module provides QML types for + native platform extensions. + + The experimental Qt Labs Platform module provides QML types for native + platform extensions. The module was introduced in Qt 5.8. + + \section1 QML Types + + \generatelist {qmltypesbymodule Qt.labs.platform} + + \labs + + \section1 Module Evolution + \l{Changes to Qt Quick Labs Platform} lists important changes in the + module API and functionality that were done for the Qt 6 series of Qt. + + \section1 Related Information + + \list + \li \l{Qt Quick} + \li \l{Qt Quick Controls} + \endlist +*/ diff --git a/src/labs/platform/doc/src/qtlabsplatform-qmltypes.qdoc b/src/labs/platform/doc/src/qtlabsplatform-qmltypes.qdoc new file mode 100644 index 00000000..51b7601a --- /dev/null +++ b/src/labs/platform/doc/src/qtlabsplatform-qmltypes.qdoc @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \qmlmodule Qt.labs.platform 1.1 + \title Qt Labs Platform QML Types + \ingroup qmlmodules + \brief Provides QML types for native platform extensions. + + The experimental \l{Qt Labs Platform} module provides QML types for native + platform extensions. These QML types work in conjunction with \l{Qt Quick} + and \l{Qt Quick Controls}. + + The QML types can be imported into your application using the + following import statement in your .qml file: + + \qml + import Qt.labs.platform + \endqml + + \section1 QML Types + + \generatelist {qmltypesbymodule Qt.labs.platform} + + \labs + + \section1 Related Information + + \list + \li \l {Qt Quick Controls QML Types} + \endlist + + \noautolist +*/ diff --git a/src/labs/platform/platform.pri b/src/labs/platform/platform.pri new file mode 100644 index 00000000..ec6e8616 --- /dev/null +++ b/src/labs/platform/platform.pri @@ -0,0 +1,39 @@ +HEADERS += \ + $$PWD/qquickplatformcolordialog_p.h \ + $$PWD/qquickplatformdialog_p.h \ + $$PWD/qquickplatformfiledialog_p.h \ + $$PWD/qquickplatformfolderdialog_p.h \ + $$PWD/qquickplatformfontdialog_p.h \ + $$PWD/qquickplatformicon_p.h \ + $$PWD/qquickplatformiconloader_p.h \ + $$PWD/qquickplatformmenu_p.h \ + $$PWD/qquickplatformmenubar_p.h \ + $$PWD/qquickplatformmenuitem_p.h \ + $$PWD/qquickplatformmenuitemgroup_p.h \ + $$PWD/qquickplatformmenuseparator_p.h \ + $$PWD/qquickplatformmessagedialog_p.h \ + $$PWD/qquickplatformstandardpaths_p.h + +SOURCES += \ + $$PWD/qquickplatformcolordialog.cpp \ + $$PWD/qquickplatformdialog.cpp \ + $$PWD/qquickplatformfiledialog.cpp \ + $$PWD/qquickplatformfolderdialog.cpp \ + $$PWD/qquickplatformfontdialog.cpp \ + $$PWD/qquickplatformicon.cpp \ + $$PWD/qquickplatformiconloader.cpp \ + $$PWD/qquickplatformmenu.cpp \ + $$PWD/qquickplatformmenubar.cpp \ + $$PWD/qquickplatformmenuitem.cpp \ + $$PWD/qquickplatformmenuitemgroup.cpp \ + $$PWD/qquickplatformmenuseparator.cpp \ + $$PWD/qquickplatformmessagedialog.cpp \ + $$PWD/qquickplatformstandardpaths.cpp + + +qtConfig(systemtrayicon) { + HEADERS += \ + $$PWD/qquickplatformsystemtrayicon_p.h + SOURCES += \ + $$PWD/qquickplatformsystemtrayicon.cpp +} diff --git a/src/labs/platform/qquickplatformcolordialog.cpp b/src/labs/platform/qquickplatformcolordialog.cpp new file mode 100644 index 00000000..04a5e079 --- /dev/null +++ b/src/labs/platform/qquickplatformcolordialog.cpp @@ -0,0 +1,206 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickplatformcolordialog_p.h" + +QT_BEGIN_NAMESPACE + +/*! + \qmltype ColorDialog + \inherits Dialog +//! \instantiates QQuickPlatformColorDialog + \inqmlmodule Qt.labs.platform + \since 5.8 + \brief A native color dialog. + + The ColorDialog type provides a QML API for native platform color dialogs. + + \image qtlabsplatform-colordialog-gtk.png + + To show a color dialog, construct an instance of ColorDialog, set the + desired properties, and call \l {Dialog::}{open()}. The \l currentColor + property can be used to determine the currently selected color in the + dialog. The \l color property is updated only after the final selection + has been made by accepting the dialog. + + \code + MenuItem { + text: "Color" + onTriggered: colorDialog.open() + } + + ColorDialog { + id: colorDialog + currentColor: document.color + } + + MyDocument { + id: document + color: colorDialog.color + } + \endcode + + \section2 Availability + + A native platform color dialog is currently available on the following platforms: + + \list + \li macOS + \li Linux (when running with the GTK+ platform theme) + \endlist + + \input includes/widgets.qdocinc 1 + + \labs +*/ + +QQuickPlatformColorDialog::QQuickPlatformColorDialog(QObject *parent) + : QQuickPlatformDialog(QPlatformTheme::ColorDialog, parent), + m_options(QColorDialogOptions::create()) +{ +} + +/*! + \qmlproperty color Qt.labs.platform::ColorDialog::color + + This property holds the final accepted color. + + Unlike the \l currentColor property, the \c color property is not updated + while the user is selecting colors in the dialog, but only after the final + selection has been made. That is, when the user has clicked \uicontrol OK + to accept a color. Alternatively, the \l {Dialog::}{accepted()} signal + can be handled to get the final selection. + + \sa currentColor, {Dialog::}{accepted()} +*/ +QColor QQuickPlatformColorDialog::color() const +{ + return m_color; +} + +void QQuickPlatformColorDialog::setColor(const QColor &color) +{ + if (m_color == color) + return; + + m_color = color; + setCurrentColor(color); + emit colorChanged(); +} + +/*! + \qmlproperty color Qt.labs.platform::ColorDialog::currentColor + + This property holds the currently selected color in the dialog. + + Unlike the \l color property, the \c currentColor property is updated + while the user is selecting colors in the dialog, even before the final + selection has been made. + + \sa color +*/ +QColor QQuickPlatformColorDialog::currentColor() const +{ + if (QPlatformColorDialogHelper *colorDialog = qobject_cast(handle())) + return colorDialog->currentColor(); + return m_currentColor; +} + +void QQuickPlatformColorDialog::setCurrentColor(const QColor &color) +{ + if (QPlatformColorDialogHelper *colorDialog = qobject_cast(handle())) + colorDialog->setCurrentColor(color); + m_currentColor = color; +} + +/*! + \qmlproperty flags Qt.labs.platform::ColorDialog::options + + This property holds the various options that affect the look and feel of the dialog. + + By default, all options are disabled. + + Options should be set before showing the dialog. Setting them while the dialog is + visible is not guaranteed to have an immediate effect on the dialog (depending on + the option and on the platform). + + Available options: + \value ColorDialog.ShowAlphaChannel Allow the user to select the alpha component of a color. + \value ColorDialog.NoButtons Don't display \uicontrol OK and \uicontrol Cancel buttons (useful for "live dialogs"). +*/ +QColorDialogOptions::ColorDialogOptions QQuickPlatformColorDialog::options() const +{ + return m_options->options(); +} + +void QQuickPlatformColorDialog::setOptions(QColorDialogOptions::ColorDialogOptions options) +{ + if (options == m_options->options()) + return; + + m_options->setOptions(options); + emit optionsChanged(); +} + +bool QQuickPlatformColorDialog::useNativeDialog() const +{ + return QQuickPlatformDialog::useNativeDialog() + && !m_options->testOption(QColorDialogOptions::DontUseNativeDialog); +} + +void QQuickPlatformColorDialog::onCreate(QPlatformDialogHelper *dialog) +{ + if (QPlatformColorDialogHelper *colorDialog = qobject_cast(dialog)) { + connect(colorDialog, &QPlatformColorDialogHelper::currentColorChanged, this, &QQuickPlatformColorDialog::currentColorChanged); + colorDialog->setOptions(m_options); + colorDialog->setCurrentColor(m_currentColor); + } +} + +void QQuickPlatformColorDialog::onShow(QPlatformDialogHelper *dialog) +{ + m_options->setWindowTitle(title()); + if (QPlatformColorDialogHelper *colorDialog = qobject_cast(dialog)) + colorDialog->setOptions(m_options); +} + +void QQuickPlatformColorDialog::accept() +{ + setColor(currentColor()); + QQuickPlatformDialog::accept(); +} + +QT_END_NAMESPACE diff --git a/src/labs/platform/qquickplatformcolordialog_p.h b/src/labs/platform/qquickplatformcolordialog_p.h new file mode 100644 index 00000000..1df047d9 --- /dev/null +++ b/src/labs/platform/qquickplatformcolordialog_p.h @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKPLATFORMCOLORDIALOG_P_H +#define QQUICKPLATFORMCOLORDIALOG_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 "qquickplatformdialog_p.h" +#include +#include + +QT_BEGIN_NAMESPACE + +class QQuickPlatformColorDialog : public QQuickPlatformDialog +{ + Q_OBJECT + Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged FINAL) + Q_PROPERTY(QColor currentColor READ currentColor WRITE setCurrentColor NOTIFY currentColorChanged FINAL) + Q_PROPERTY(QColorDialogOptions::ColorDialogOptions options READ options WRITE setOptions NOTIFY optionsChanged FINAL) + Q_FLAGS(QColorDialogOptions::ColorDialogOptions) + +public: + explicit QQuickPlatformColorDialog(QObject *parent = nullptr); + + QColor color() const; + void setColor(const QColor &color); + + QColor currentColor() const; + void setCurrentColor(const QColor &color); + + QColorDialogOptions::ColorDialogOptions options() const; + void setOptions(QColorDialogOptions::ColorDialogOptions options); + +Q_SIGNALS: + void colorChanged(); + void currentColorChanged(); + void optionsChanged(); + +protected: + bool useNativeDialog() const override; + void onCreate(QPlatformDialogHelper *dialog) override; + void onShow(QPlatformDialogHelper *dialog) override; + void accept() override; + +private: + QColor m_color; + QColor m_currentColor; // TODO: QColorDialogOptions::initialColor + QSharedPointer m_options; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickPlatformColorDialog) + +#endif // QQUICKPLATFORMCOLORDIALOG_P_H diff --git a/src/labs/platform/qquickplatformdialog.cpp b/src/labs/platform/qquickplatformdialog.cpp new file mode 100644 index 00000000..06a26237 --- /dev/null +++ b/src/labs/platform/qquickplatformdialog.cpp @@ -0,0 +1,411 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickplatformdialog_p.h" + +#include +#include +#include +#include + +#include "widgets/qwidgetplatform_p.h" + +QT_BEGIN_NAMESPACE + +/*! + \qmltype Dialog + \inherits QtObject +//! \instantiates QQuickPlatformDialog + \inqmlmodule Qt.labs.platform + \since 5.8 + \brief The base class of native dialogs. + + The Dialog type provides common QML API for native platform dialogs. + + To show a native dialog, construct an instance of one of the concrete + Dialog implementations, set the desired properties, and call \l open(). + Dialog emits \l accepted() or \l rejected() when the user is done with + the dialog. + + \labs +*/ + +/*! + \qmlsignal void Qt.labs.platform::Dialog::accepted() + + This signal is emitted when the dialog has been accepted either + interactively or by calling \l accept(). + + \note This signal is \e not emitted when closing the dialog with \l close(). + + \sa rejected() +*/ + +/*! + \qmlsignal void Qt.labs.platform::Dialog::rejected() + + This signal is emitted when the dialog has been rejected either + interactively or by calling \l reject(). + + \note This signal is \e not emitted when closing the dialog with \l close(). + + \sa accepted() +*/ + +Q_DECLARE_LOGGING_CATEGORY(qtLabsPlatformDialogs) + +QQuickPlatformDialog::QQuickPlatformDialog(QPlatformTheme::DialogType type, QObject *parent) + : QObject(parent), + m_visible(false), + m_complete(false), + m_result(0), + m_parentWindow(nullptr), + m_flags(Qt::Dialog), + m_modality(Qt::WindowModal), + m_type(type), + m_handle(nullptr) +{ +} + +QQuickPlatformDialog::~QQuickPlatformDialog() +{ + destroy(); +} + +QPlatformDialogHelper *QQuickPlatformDialog::handle() const +{ + return m_handle; +} + +/*! + \qmldefault + \qmlproperty list Qt.labs.platform::Dialog::data + + This default property holds the list of all objects declared as children of + the dialog. +*/ +QQmlListProperty QQuickPlatformDialog::data() +{ + return QQmlListProperty(this, &m_data); +} + +/*! + \qmlproperty Window Qt.labs.platform::Dialog::parentWindow + + This property holds the parent window of the dialog. + + Unless explicitly set, the window is automatically resolved by iterating + the QML parent objects until a \l Window or an \l Item that has a window + is found. +*/ +QWindow *QQuickPlatformDialog::parentWindow() const +{ + return m_parentWindow; +} + +void QQuickPlatformDialog::setParentWindow(QWindow *window) +{ + if (m_parentWindow == window) + return; + + m_parentWindow = window; + emit parentWindowChanged(); +} + +/*! + \qmlproperty string Qt.labs.platform::Dialog::title + + This property holds the title of the dialog. +*/ +QString QQuickPlatformDialog::title() const +{ + return m_title; +} + +void QQuickPlatformDialog::setTitle(const QString &title) +{ + if (m_title == title) + return; + + m_title = title; + emit titleChanged(); +} + +/*! + \qmlproperty Qt::WindowFlags Qt.labs.platform::Dialog::flags + + This property holds the window flags of the dialog. The default value is \c Qt.Dialog. +*/ +Qt::WindowFlags QQuickPlatformDialog::flags() const +{ + return m_flags; +} + +void QQuickPlatformDialog::setFlags(Qt::WindowFlags flags) +{ + if (m_flags == flags) + return; + + m_flags = flags; + emit flagsChanged(); +} + +/*! + \qmlproperty Qt::WindowModality Qt.labs.platform::Dialog::modality + + This property holds the modality of the dialog. The default value is \c Qt.WindowModal. + + Available values: + \value Qt.NonModal The dialog is not modal and does not block input to other windows. + \value Qt.WindowModal The dialog is modal to a single window hierarchy and blocks input to its parent window, all grandparent windows, and all siblings of its parent and grandparent windows. + \value Qt.ApplicationModal The dialog is modal to the application and blocks input to all windows. +*/ +Qt::WindowModality QQuickPlatformDialog::modality() const +{ + return m_modality; +} + +void QQuickPlatformDialog::setModality(Qt::WindowModality modality) +{ + if (m_modality == modality) + return; + + m_modality = modality; + emit modalityChanged(); +} + +/*! + \qmlproperty bool Qt.labs.platform::Dialog::visible + + This property holds the visibility of the dialog. The default value is \c false. + + \sa open(), close() +*/ +bool QQuickPlatformDialog::isVisible() const +{ + return m_handle && m_visible; +} + +void QQuickPlatformDialog::setVisible(bool visible) +{ + if (visible) + open(); + else + close(); +} + +/*! + \qmlproperty int Qt.labs.platform::Dialog::result + + This property holds the result code. + + Standard result codes: + \value Dialog.Accepted + \value Dialog.Rejected + + \note MessageDialog sets the result to the value of the clicked standard + button instead of using the standard result codes. +*/ +int QQuickPlatformDialog::result() const +{ + return m_result; +} + +void QQuickPlatformDialog::setResult(int result) +{ + if (m_result == result) + return; + + m_result = result; + emit resultChanged(); +} + +/*! + \qmlmethod void Qt.labs.platform::Dialog::open() + + Opens the dialog. + + \sa visible, close() +*/ +void QQuickPlatformDialog::open() +{ + if (m_visible || !create()) + return; + + onShow(m_handle); + m_visible = m_handle->show(m_flags, m_modality, m_parentWindow); + if (m_visible) + emit visibleChanged(); +} + +/*! + \qmlmethod void Qt.labs.platform::Dialog::close() + + Closes the dialog. + + \sa visible, open() +*/ +void QQuickPlatformDialog::close() +{ + if (!m_handle || !m_visible) + return; + + onHide(m_handle); + m_handle->hide(); + m_visible = false; + emit visibleChanged(); +} + +/*! + \qmlmethod void Qt.labs.platform::Dialog::accept() + + Closes the dialog and emits the \l accepted() signal. + + \sa reject() +*/ +void QQuickPlatformDialog::accept() +{ + done(Accepted); +} + +/*! + \qmlmethod void Qt.labs.platform::Dialog::reject() + + Closes the dialog and emits the \l rejected() signal. + + \sa accept() +*/ +void QQuickPlatformDialog::reject() +{ + done(Rejected); +} + +/*! + \qmlmethod void Qt.labs.platform::Dialog::done(int result) + + Closes the dialog and sets the \a result. + + \sa accept(), reject(), result +*/ +void QQuickPlatformDialog::done(int result) +{ + close(); + setResult(result); + + if (result == Accepted) + emit accepted(); + else if (result == Rejected) + emit rejected(); +} + +void QQuickPlatformDialog::classBegin() +{ +} + +void QQuickPlatformDialog::componentComplete() +{ + m_complete = true; + if (!m_parentWindow) + setParentWindow(findParentWindow()); +} + +static const char *qmlTypeName(const QObject *object) +{ + return object->metaObject()->className() + qstrlen("QQuickPlatform"); +} + +bool QQuickPlatformDialog::create() +{ + if (!m_handle) { + if (useNativeDialog()) + m_handle = QGuiApplicationPrivate::platformTheme()->createPlatformDialogHelper(m_type); + if (!m_handle) + m_handle = QWidgetPlatform::createDialog(m_type, this); + qCDebug(qtLabsPlatformDialogs) << qmlTypeName(this) << "->" << m_handle; + if (m_handle) { + onCreate(m_handle); + connect(m_handle, &QPlatformDialogHelper::accept, this, &QQuickPlatformDialog::accept); + connect(m_handle, &QPlatformDialogHelper::reject, this, &QQuickPlatformDialog::reject); + } + } + return m_handle; +} + +void QQuickPlatformDialog::destroy() +{ + delete m_handle; + m_handle = nullptr; +} + +bool QQuickPlatformDialog::useNativeDialog() const +{ + return !QCoreApplication::testAttribute(Qt::AA_DontUseNativeDialogs) + && QGuiApplicationPrivate::platformTheme()->usePlatformNativeDialog(m_type); +} + +void QQuickPlatformDialog::onCreate(QPlatformDialogHelper *dialog) +{ + Q_UNUSED(dialog); +} + +void QQuickPlatformDialog::onShow(QPlatformDialogHelper *dialog) +{ + Q_UNUSED(dialog); +} + +void QQuickPlatformDialog::onHide(QPlatformDialogHelper *dialog) +{ + Q_UNUSED(dialog); +} + +QWindow *QQuickPlatformDialog::findParentWindow() const +{ + QObject *obj = parent(); + while (obj) { + QWindow *window = qobject_cast(obj); + if (window) + return window; + QQuickItem *item = qobject_cast(obj); + if (item && item->window()) + return item->window(); + obj = obj->parent(); + } + return nullptr; +} + +QT_END_NAMESPACE + +#include "moc_qquickplatformdialog_p.cpp" diff --git a/src/labs/platform/qquickplatformdialog_p.h b/src/labs/platform/qquickplatformdialog_p.h new file mode 100644 index 00000000..55a54937 --- /dev/null +++ b/src/labs/platform/qquickplatformdialog_p.h @@ -0,0 +1,153 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKPLATFORMDIALOG_P_H +#define QQUICKPLATFORMDIALOG_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 +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QWindow; +class QPlatformDialogHelper; + +class QQuickPlatformDialog : public QObject, public QQmlParserStatus +{ + Q_OBJECT + Q_INTERFACES(QQmlParserStatus) + Q_PROPERTY(QQmlListProperty data READ data FINAL) + Q_PROPERTY(QWindow *parentWindow READ parentWindow WRITE setParentWindow NOTIFY parentWindowChanged FINAL) + Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged FINAL) + Q_PROPERTY(Qt::WindowFlags flags READ flags WRITE setFlags NOTIFY flagsChanged FINAL) + Q_PROPERTY(Qt::WindowModality modality READ modality WRITE setModality NOTIFY modalityChanged FINAL) + Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL) + Q_PROPERTY(int result READ result WRITE setResult NOTIFY resultChanged FINAL) + Q_CLASSINFO("DefaultProperty", "data") + +public: + explicit QQuickPlatformDialog(QPlatformTheme::DialogType type, QObject *parent = nullptr); + ~QQuickPlatformDialog(); + + QPlatformDialogHelper *handle() const; + + QQmlListProperty data(); + + QWindow *parentWindow() const; + void setParentWindow(QWindow *window); + + QString title() const; + void setTitle(const QString &title); + + Qt::WindowFlags flags() const; + void setFlags(Qt::WindowFlags flags); + + Qt::WindowModality modality() const; + void setModality(Qt::WindowModality modality); + + bool isVisible() const; + void setVisible(bool visible); + + enum StandardCode { Rejected, Accepted }; + Q_ENUM(StandardCode) + + int result() const; + void setResult(int result); + +public Q_SLOTS: + void open(); + void close(); + virtual void accept(); + virtual void reject(); + virtual void done(int result); + +Q_SIGNALS: + void accepted(); + void rejected(); + void parentWindowChanged(); + void titleChanged(); + void flagsChanged(); + void modalityChanged(); + void visibleChanged(); + void resultChanged(); + +protected: + void classBegin() override; + void componentComplete() override; + + bool create(); + void destroy(); + + virtual bool useNativeDialog() const; + virtual void onCreate(QPlatformDialogHelper *dialog); + virtual void onShow(QPlatformDialogHelper *dialog); + virtual void onHide(QPlatformDialogHelper *dialog); + + QWindow *findParentWindow() const; + +private: + bool m_visible; + bool m_complete; + int m_result; + QWindow *m_parentWindow; + QString m_title; + Qt::WindowFlags m_flags; + Qt::WindowModality m_modality; + QPlatformTheme::DialogType m_type; + QList m_data; + QPlatformDialogHelper *m_handle; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickPlatformDialog) + +#endif // QQUICKPLATFORMDIALOG_P_H diff --git a/src/labs/platform/qquickplatformfiledialog.cpp b/src/labs/platform/qquickplatformfiledialog.cpp new file mode 100644 index 00000000..8bfcfc93 --- /dev/null +++ b/src/labs/platform/qquickplatformfiledialog.cpp @@ -0,0 +1,662 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickplatformfiledialog_p.h" + +#include + +QT_BEGIN_NAMESPACE + +/*! + \qmltype FileDialog + \inherits Dialog +//! \instantiates QQuickPlatformFileDialog + \inqmlmodule Qt.labs.platform + \since 5.8 + \brief A native file dialog. + + The FileDialog type provides a QML API for native platform file dialogs. + + \image qtlabsplatform-filedialog-gtk.png + + To show a file dialog, construct an instance of FileDialog, set the + desired properties, and call \l {Dialog::}{open()}. The \l currentFile + or \l currentFiles properties can be used to determine the currently + selected file(s) in the dialog. The \l file and \l files properties + are updated only after the final selection has been made by accepting + the dialog. + + \code + MenuItem { + text: "Open..." + onTriggered: fileDialog.open() + } + + FileDialog { + id: fileDialog + currentFile: document.source + folder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation) + } + + MyDocument { + id: document + source: fileDialog.file + } + \endcode + + \section2 Availability + + A native platform file dialog is currently available on the following platforms: + + \list + \li iOS + \li Linux (when running with the GTK+ platform theme) + \li macOS + \li Windows + \endlist + + \input includes/widgets.qdocinc 1 + + \labs + + \sa FolderDialog, StandardPaths +*/ + +QQuickPlatformFileDialog::QQuickPlatformFileDialog(QObject *parent) + : QQuickPlatformDialog(QPlatformTheme::FileDialog, parent), + m_fileMode(OpenFile), + m_options(QFileDialogOptions::create()), + m_selectedNameFilter(nullptr) +{ + m_options->setFileMode(QFileDialogOptions::ExistingFile); + m_options->setAcceptMode(QFileDialogOptions::AcceptOpen); +} + +/*! + \qmlproperty enumeration Qt.labs.platform::FileDialog::fileMode + + This property holds the mode of the dialog. + + Available values: + \value FileDialog.OpenFile The dialog is used to select an existing file (default). + \value FileDialog.OpenFiles The dialog is used to select multiple existing files. + \value FileDialog.SaveFile The dialog is used to select any file. The file does not have to exist. +*/ +QQuickPlatformFileDialog::FileMode QQuickPlatformFileDialog::fileMode() const +{ + return m_fileMode; +} + +void QQuickPlatformFileDialog::setFileMode(FileMode mode) +{ + if (mode == m_fileMode) + return; + + switch (mode) { + case OpenFile: + m_options->setFileMode(QFileDialogOptions::ExistingFile); + m_options->setAcceptMode(QFileDialogOptions::AcceptOpen); + break; + case OpenFiles: + m_options->setFileMode(QFileDialogOptions::ExistingFiles); + m_options->setAcceptMode(QFileDialogOptions::AcceptOpen); + break; + case SaveFile: + m_options->setFileMode(QFileDialogOptions::AnyFile); + m_options->setAcceptMode(QFileDialogOptions::AcceptSave); + break; + default: + break; + } + + m_fileMode = mode; + emit fileModeChanged(); +} + +/*! + \qmlproperty url Qt.labs.platform::FileDialog::file + + This property holds the final accepted file. + + Unlike the \l currentFile property, the \c file property is not updated + while the user is selecting files in the dialog, but only after the final + selection has been made. That is, when the user has clicked \uicontrol OK + to accept a file. Alternatively, the \l {Dialog::}{accepted()} signal + can be handled to get the final selection. + + \sa currentFile, {Dialog::}{accepted()} +*/ +QUrl QQuickPlatformFileDialog::file() const +{ + return addDefaultSuffix(m_files.value(0)); +} + +void QQuickPlatformFileDialog::setFile(const QUrl &file) +{ + setFiles(QList() << file); +} + +/*! + \qmlproperty list Qt.labs.platform::FileDialog::files + + This property holds the final accepted files. + + Unlike the \l currentFiles property, the \c files property is not updated + while the user is selecting files in the dialog, but only after the final + selection has been made. That is, when the user has clicked \uicontrol OK + to accept files. Alternatively, the \l {Dialog::}{accepted()} signal + can be handled to get the final selection. + + \sa currentFiles, {Dialog::}{accepted()} +*/ +QList QQuickPlatformFileDialog::files() const +{ + return addDefaultSuffixes(m_files); +} + +void QQuickPlatformFileDialog::setFiles(const QList &files) +{ + if (m_files == files) + return; + + bool firstChanged = m_files.value(0) != files.value(0); + m_files = files; + if (firstChanged) + emit fileChanged(); + emit filesChanged(); +} + +/*! + \qmlproperty url Qt.labs.platform::FileDialog::currentFile + + This property holds the currently selected file in the dialog. + + Unlike the \l file property, the \c currentFile property is updated + while the user is selecting files in the dialog, even before the final + selection has been made. + + \sa file, currentFiles +*/ +QUrl QQuickPlatformFileDialog::currentFile() const +{ + return currentFiles().value(0); +} + +void QQuickPlatformFileDialog::setCurrentFile(const QUrl &file) +{ + setCurrentFiles(QList() << file); +} + +/*! + \qmlproperty list Qt.labs.platform::FileDialog::currentFiles + + This property holds the currently selected files in the dialog. + + Unlike the \l files property, the \c currentFiles property is updated + while the user is selecting files in the dialog, even before the final + selection has been made. + + \sa files, currentFile +*/ +QList QQuickPlatformFileDialog::currentFiles() const +{ + if (QPlatformFileDialogHelper *fileDialog = qobject_cast(handle())) + return fileDialog->selectedFiles(); + return m_options->initiallySelectedFiles(); +} + +void QQuickPlatformFileDialog::setCurrentFiles(const QList &files) +{ + if (QPlatformFileDialogHelper *fileDialog = qobject_cast(handle())) { + for (const QUrl &file : files) + fileDialog->selectFile(file); + } + m_options->setInitiallySelectedFiles(files); +} + +/*! + \qmlproperty url Qt.labs.platform::FileDialog::folder + + This property holds the folder where files are selected. + For selecting a folder, use FolderDialog instead. + + \sa FolderDialog +*/ +QUrl QQuickPlatformFileDialog::folder() const +{ + if (QPlatformFileDialogHelper *fileDialog = qobject_cast(handle())) + return fileDialog->directory(); + return m_options->initialDirectory(); +} + +void QQuickPlatformFileDialog::setFolder(const QUrl &folder) +{ + if (QPlatformFileDialogHelper *fileDialog = qobject_cast(handle())) + fileDialog->setDirectory(folder); + m_options->setInitialDirectory(folder); +} + +/*! + \qmlproperty flags Qt.labs.platform::FileDialog::options + + This property holds the various options that affect the look and feel of the dialog. + + By default, all options are disabled. + + Options should be set before showing the dialog. Setting them while the dialog is + visible is not guaranteed to have an immediate effect on the dialog (depending on + the option and on the platform). + + Available options: + \value FileDialog.DontResolveSymlinks Don't resolve symlinks in the file dialog. By default symlinks are resolved. + \value FileDialog.DontConfirmOverwrite Don't ask for confirmation if an existing file is selected. By default confirmation is requested. + \value FileDialog.ReadOnly Indicates that the dialog doesn't allow creating directories. + \value FileDialog.HideNameFilterDetails Indicates if the file name filter details are hidden or not. +*/ +QFileDialogOptions::FileDialogOptions QQuickPlatformFileDialog::options() const +{ + return m_options->options(); +} + +void QQuickPlatformFileDialog::setOptions(QFileDialogOptions::FileDialogOptions options) +{ + if (options == m_options->options()) + return; + + m_options->setOptions(options); + emit optionsChanged(); +} + +void QQuickPlatformFileDialog::resetOptions() +{ + setOptions({}); +} + +/*! + \qmlproperty list Qt.labs.platform::FileDialog::nameFilters + + This property holds the filters that restrict the types of files that + can be selected. + + \code + FileDialog { + nameFilters: ["Text files (*.txt)", "HTML files (*.html *.htm)"] + } + \endcode + + \note \b{*.*} is not a portable filter, because the historical assumption + that the file extension determines the file type is not consistent on every + operating system. It is possible to have a file with no dot in its name (for + example, \c Makefile). In a native Windows file dialog, \b{*.*} will match + such files, while in other types of file dialogs it may not. So it is better + to use \b{*} if you mean to select any file. + + \sa selectedNameFilter +*/ +QStringList QQuickPlatformFileDialog::nameFilters() const +{ + return m_options->nameFilters(); +} + +void QQuickPlatformFileDialog::setNameFilters(const QStringList &filters) +{ + if (filters == m_options->nameFilters()) + return; + + m_options->setNameFilters(filters); + if (m_selectedNameFilter) { + int index = m_selectedNameFilter->index(); + if (index < 0 || index >= filters.count()) + index = 0; + m_selectedNameFilter->update(filters.value(index)); + } + emit nameFiltersChanged(); +} + +void QQuickPlatformFileDialog::resetNameFilters() +{ + setNameFilters(QStringList()); +} + +/*! + \qmlproperty int Qt.labs.platform::FileDialog::selectedNameFilter.index + \qmlproperty string Qt.labs.platform::FileDialog::selectedNameFilter.name + \qmlproperty list Qt.labs.platform::FileDialog::selectedNameFilter.extensions + + These properties hold the currently selected name filter. + + \table + \header + \li Name + \li Description + \row + \li \b index : int + \li This property determines which \l {nameFilters}{name filter} is selected. + The specified filter is selected when the dialog is opened. The value is + updated when the user selects another filter. + \row + \li [read-only] \b name : string + \li This property holds the name of the selected filter. In the + example below, the name of the first filter is \c {"Text files"} + and the second is \c {"HTML files"}. + \row + \li [read-only] \b extensions : list + \li This property holds the list of extensions of the selected filter. + In the example below, the list of extensions of the first filter is + \c {["txt"]} and the second is \c {["html", "htm"]}. + \endtable + + \code + FileDialog { + id: fileDialog + selectedNameFilter.index: 1 + nameFilters: ["Text files (*.txt)", "HTML files (*.html *.htm)"] + } + + MyDocument { + id: document + fileType: fileDialog.selectedNameFilter.extensions[0] + } + \endcode + + \sa nameFilters +*/ +QQuickPlatformFileNameFilter *QQuickPlatformFileDialog::selectedNameFilter() const +{ + if (!m_selectedNameFilter) { + QQuickPlatformFileDialog *that = const_cast(this); + m_selectedNameFilter = new QQuickPlatformFileNameFilter(that); + m_selectedNameFilter->setOptions(m_options); + } + return m_selectedNameFilter; +} + +/*! + \qmlproperty string Qt.labs.platform::FileDialog::defaultSuffix + + This property holds a suffix that is added to selected files that have + no suffix specified. The suffix is typically used to indicate the file + type (e.g. "txt" indicates a text file). + + If the first character is a dot ('.'), it is removed. +*/ +QString QQuickPlatformFileDialog::defaultSuffix() const +{ + return m_options->defaultSuffix(); +} + +void QQuickPlatformFileDialog::setDefaultSuffix(const QString &suffix) +{ + if (suffix == m_options->defaultSuffix()) + return; + + m_options->setDefaultSuffix(suffix); + emit defaultSuffixChanged(); +} + +void QQuickPlatformFileDialog::resetDefaultSuffix() +{ + setDefaultSuffix(QString()); +} + +/*! + \qmlproperty string Qt.labs.platform::FileDialog::acceptLabel + + This property holds the label text shown on the button that accepts the dialog. + + When set to an empty string, the default label of the underlying platform is used. + The default label is typically \uicontrol Open or \uicontrol Save depending on which + \l fileMode the dialog is used in. + + The default value is an empty string. + + \sa rejectLabel +*/ +QString QQuickPlatformFileDialog::acceptLabel() const +{ + return m_options->labelText(QFileDialogOptions::Accept); +} + +void QQuickPlatformFileDialog::setAcceptLabel(const QString &label) +{ + if (label == m_options->labelText(QFileDialogOptions::Accept)) + return; + + m_options->setLabelText(QFileDialogOptions::Accept, label); + emit acceptLabelChanged(); +} + +void QQuickPlatformFileDialog::resetAcceptLabel() +{ + setAcceptLabel(QString()); +} + +/*! + \qmlproperty string Qt.labs.platform::FileDialog::rejectLabel + + This property holds the label text shown on the button that rejects the dialog. + + When set to an empty string, the default label of the underlying platform is used. + The default label is typically \uicontrol Cancel. + + The default value is an empty string. + + \sa acceptLabel +*/ +QString QQuickPlatformFileDialog::rejectLabel() const +{ + return m_options->labelText(QFileDialogOptions::Reject); +} + +void QQuickPlatformFileDialog::setRejectLabel(const QString &label) +{ + if (label == m_options->labelText(QFileDialogOptions::Reject)) + return; + + m_options->setLabelText(QFileDialogOptions::Reject, label); + emit rejectLabelChanged(); +} + +void QQuickPlatformFileDialog::resetRejectLabel() +{ + setRejectLabel(QString()); +} + +bool QQuickPlatformFileDialog::useNativeDialog() const +{ + return QQuickPlatformDialog::useNativeDialog() + && !m_options->testOption(QFileDialogOptions::DontUseNativeDialog); +} + +void QQuickPlatformFileDialog::onCreate(QPlatformDialogHelper *dialog) +{ + if (QPlatformFileDialogHelper *fileDialog = qobject_cast(dialog)) { + // TODO: emit currentFileChanged only when the first entry in currentFiles changes + connect(fileDialog, &QPlatformFileDialogHelper::currentChanged, this, &QQuickPlatformFileDialog::currentFileChanged); + connect(fileDialog, &QPlatformFileDialogHelper::currentChanged, this, &QQuickPlatformFileDialog::currentFilesChanged); + connect(fileDialog, &QPlatformFileDialogHelper::directoryEntered, this, &QQuickPlatformFileDialog::folderChanged); + fileDialog->setOptions(m_options); + } +} + +void QQuickPlatformFileDialog::onShow(QPlatformDialogHelper *dialog) +{ + m_options->setWindowTitle(title()); + if (QPlatformFileDialogHelper *fileDialog = qobject_cast(dialog)) { + fileDialog->setOptions(m_options); // setOptions only assigns a member and isn't virtual + if (m_firstShow && m_options->initialDirectory().isValid()) + fileDialog->setDirectory(m_options->initialDirectory()); + if (m_selectedNameFilter) { + const int index = m_selectedNameFilter->index(); + const QString filter = m_options->nameFilters().value(index); + m_options->setInitiallySelectedNameFilter(filter); + fileDialog->selectNameFilter(filter); + connect(fileDialog, &QPlatformFileDialogHelper::filterSelected, m_selectedNameFilter, &QQuickPlatformFileNameFilter::update); + } + } + if (m_firstShow) + m_firstShow = false; +} + +void QQuickPlatformFileDialog::onHide(QPlatformDialogHelper *dialog) +{ + if (QPlatformFileDialogHelper *fileDialog = qobject_cast(dialog)) { + if (m_selectedNameFilter) + disconnect(fileDialog, &QPlatformFileDialogHelper::filterSelected, m_selectedNameFilter, &QQuickPlatformFileNameFilter::update); + } +} + +void QQuickPlatformFileDialog::accept() +{ + if (QPlatformFileDialogHelper *fileDialog = qobject_cast(handle())) + setFiles(fileDialog->selectedFiles()); + QQuickPlatformDialog::accept(); +} + +QUrl QQuickPlatformFileDialog::addDefaultSuffix(const QUrl &file) const +{ + QUrl url = file; + const QString path = url.path(); + const QString suffix = m_options->defaultSuffix(); + if (!suffix.isEmpty() && !path.endsWith(QLatin1Char('/')) && path.lastIndexOf(QLatin1Char('.')) == -1) + url.setPath(path + QLatin1Char('.') + suffix); + return url; +} + +QList QQuickPlatformFileDialog::addDefaultSuffixes(const QList &files) const +{ + QList urls; + urls.reserve(files.size()); + for (const QUrl &file : files) + urls += addDefaultSuffix(file); + return urls; +} + +QQuickPlatformFileNameFilter::QQuickPlatformFileNameFilter(QObject *parent) + : QObject(parent), m_index(-1) +{ +} + +int QQuickPlatformFileNameFilter::index() const +{ + return m_index; +} + +void QQuickPlatformFileNameFilter::setIndex(int index) +{ + if (m_index == index) + return; + + m_index = index; + emit indexChanged(index); +} + +QString QQuickPlatformFileNameFilter::name() const +{ + return m_name; +} + +QStringList QQuickPlatformFileNameFilter::extensions() const +{ + return m_extensions; +} + +QSharedPointer QQuickPlatformFileNameFilter::options() const +{ + return m_options; +} + +void QQuickPlatformFileNameFilter::setOptions(const QSharedPointer &options) +{ + m_options = options; +} + +static QString extractName(const QString &filter) +{ + return filter.left(filter.indexOf(QLatin1Char('(')) - 1); +} + +static QString extractExtension(QStringView filter) +{ + return filter.mid(filter.indexOf(QLatin1Char('.')) + 1).toString(); +} + +static QStringList extractExtensions(QStringView filter) +{ + QStringList extensions; + const int from = filter.indexOf(QLatin1Char('(')); + const int to = filter.lastIndexOf(QLatin1Char(')')) - 1; + if (from >= 0 && from < to) { + const QStringView ref = filter.mid(from + 1, to - from); + const QList exts = ref.split(QLatin1Char(' '), Qt::SkipEmptyParts); + for (const QStringView &ref : exts) + extensions += extractExtension(ref); + } + + return extensions; +} + +void QQuickPlatformFileNameFilter::update(const QString &filter) +{ + const QStringList filters = nameFilters(); + + const int oldIndex = m_index; + const QString oldName = m_name; + const QStringList oldExtensions = m_extensions; + + m_index = filters.indexOf(filter); + m_name = extractName(filter); + m_extensions = extractExtensions(filter); + + if (oldIndex != m_index) + emit indexChanged(m_index); + if (oldName != m_name) + emit nameChanged(m_name); + if (oldExtensions != m_extensions) + emit extensionsChanged(m_extensions); +} + +QStringList QQuickPlatformFileNameFilter::nameFilters() const +{ + return m_options ? m_options->nameFilters() : QStringList(); +} + +QString QQuickPlatformFileNameFilter::nameFilter(int index) const +{ + return m_options ? m_options->nameFilters().value(index) : QString(); +} + +QT_END_NAMESPACE diff --git a/src/labs/platform/qquickplatformfiledialog_p.h b/src/labs/platform/qquickplatformfiledialog_p.h new file mode 100644 index 00000000..b867f3c8 --- /dev/null +++ b/src/labs/platform/qquickplatformfiledialog_p.h @@ -0,0 +1,197 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKPLATFORMFILEDIALOG_P_H +#define QQUICKPLATFORMFILEDIALOG_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 "qquickplatformdialog_p.h" +#include +#include + +QT_BEGIN_NAMESPACE + +class QQuickPlatformFileNameFilter; + +class QQuickPlatformFileDialog : public QQuickPlatformDialog +{ + Q_OBJECT + Q_PROPERTY(FileMode fileMode READ fileMode WRITE setFileMode NOTIFY fileModeChanged FINAL) + Q_PROPERTY(QUrl file READ file WRITE setFile NOTIFY fileChanged FINAL) + Q_PROPERTY(QList files READ files WRITE setFiles NOTIFY filesChanged FINAL) + Q_PROPERTY(QUrl currentFile READ currentFile WRITE setCurrentFile NOTIFY currentFileChanged FINAL) + Q_PROPERTY(QList currentFiles READ currentFiles WRITE setCurrentFiles NOTIFY currentFilesChanged FINAL) + Q_PROPERTY(QUrl folder READ folder WRITE setFolder NOTIFY folderChanged FINAL) + Q_PROPERTY(QFileDialogOptions::FileDialogOptions options READ options WRITE setOptions RESET resetOptions NOTIFY optionsChanged FINAL) + Q_PROPERTY(QStringList nameFilters READ nameFilters WRITE setNameFilters RESET resetNameFilters NOTIFY nameFiltersChanged FINAL) + Q_PROPERTY(QQuickPlatformFileNameFilter *selectedNameFilter READ selectedNameFilter CONSTANT) + Q_PROPERTY(QString defaultSuffix READ defaultSuffix WRITE setDefaultSuffix RESET resetDefaultSuffix NOTIFY defaultSuffixChanged FINAL) + Q_PROPERTY(QString acceptLabel READ acceptLabel WRITE setAcceptLabel RESET resetAcceptLabel NOTIFY acceptLabelChanged FINAL) + Q_PROPERTY(QString rejectLabel READ rejectLabel WRITE setRejectLabel RESET resetRejectLabel NOTIFY rejectLabelChanged FINAL) + Q_FLAGS(QFileDialogOptions::FileDialogOptions) + +public: + explicit QQuickPlatformFileDialog(QObject *parent = nullptr); + + enum FileMode { + OpenFile, + OpenFiles, + SaveFile + }; + Q_ENUM(FileMode) + + FileMode fileMode() const; + void setFileMode(FileMode fileMode); + + QUrl file() const; + void setFile(const QUrl &file); + + QList files() const; + void setFiles(const QList &files); + + QUrl currentFile() const; + void setCurrentFile(const QUrl &file); + + QList currentFiles() const; + void setCurrentFiles(const QList &files); + + QUrl folder() const; + void setFolder(const QUrl &folder); + + QFileDialogOptions::FileDialogOptions options() const; + void setOptions(QFileDialogOptions::FileDialogOptions options); + void resetOptions(); + + QStringList nameFilters() const; + void setNameFilters(const QStringList &filters); + void resetNameFilters(); + + QQuickPlatformFileNameFilter *selectedNameFilter() const; + + QString defaultSuffix() const; + void setDefaultSuffix(const QString &suffix); + void resetDefaultSuffix(); + + QString acceptLabel() const; + void setAcceptLabel(const QString &label); + void resetAcceptLabel(); + + QString rejectLabel() const; + void setRejectLabel(const QString &label); + void resetRejectLabel(); + +Q_SIGNALS: + void fileModeChanged(); + void fileChanged(); + void filesChanged(); + void currentFileChanged(); + void currentFilesChanged(); + void folderChanged(); + void optionsChanged(); + void nameFiltersChanged(); + void defaultSuffixChanged(); + void acceptLabelChanged(); + void rejectLabelChanged(); + +protected: + bool useNativeDialog() const override; + void onCreate(QPlatformDialogHelper *dialog) override; + void onShow(QPlatformDialogHelper *dialog) override; + void onHide(QPlatformDialogHelper *dialog) override; + void accept() override; + +private: + QUrl addDefaultSuffix(const QUrl &file) const; + QList addDefaultSuffixes(const QList &files) const; + + FileMode m_fileMode; + QList m_files; + bool m_firstShow = true; + QSharedPointer m_options; + mutable QQuickPlatformFileNameFilter *m_selectedNameFilter; +}; + +class QQuickPlatformFileNameFilter : public QObject +{ + Q_OBJECT + Q_PROPERTY(int index READ index WRITE setIndex NOTIFY indexChanged FINAL) + Q_PROPERTY(QString name READ name NOTIFY nameChanged FINAL) + Q_PROPERTY(QStringList extensions READ extensions NOTIFY extensionsChanged FINAL) + +public: + explicit QQuickPlatformFileNameFilter(QObject *parent = nullptr); + + int index() const; + void setIndex(int index); + + QString name() const; + QStringList extensions() const; + + QSharedPointer options() const; + void setOptions(const QSharedPointer &options); + + void update(const QString &filter); + +Q_SIGNALS: + void indexChanged(int index); + void nameChanged(const QString &name); + void extensionsChanged(const QStringList &extensions); + +private: + QStringList nameFilters() const; + QString nameFilter(int index) const; + + int m_index; + QString m_name; + QStringList m_extensions; + QSharedPointer m_options; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickPlatformFileDialog) + +#endif // QQUICKPLATFORMFILEDIALOG_P_H diff --git a/src/labs/platform/qquickplatformfolderdialog.cpp b/src/labs/platform/qquickplatformfolderdialog.cpp new file mode 100644 index 00000000..a28dc828 --- /dev/null +++ b/src/labs/platform/qquickplatformfolderdialog.cpp @@ -0,0 +1,280 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickplatformfolderdialog_p.h" + +QT_BEGIN_NAMESPACE + +/*! + \qmltype FolderDialog + \inherits Dialog +//! \instantiates QQuickPlatformFolderDialog + \inqmlmodule Qt.labs.platform + \since 5.8 + \brief A native folder dialog. + + The FolderDialog type provides a QML API for native platform folder dialogs. + + \image qtlabsplatform-folderdialog-gtk.png + + To show a folder dialog, construct an instance of FolderDialog, set the + desired properties, and call \l {Dialog::}{open()}. The \l currentFolder + property can be used to determine the currently selected folder in the + dialog. The \l folder property is updated only after the final selection + has been made by accepting the dialog. + + \code + MenuItem { + text: "Open..." + onTriggered: folderDialog.open() + } + + FolderDialog { + id: folderDialog + currentFolder: viewer.folder + folder: StandardPaths.standardLocations(StandardPaths.PicturesLocation)[0] + } + + MyViewer { + id: viewer + folder: folderDialog.folder + } + \endcode + + \section2 Availability + + A native platform folder dialog is currently available on the following platforms: + + \list + \li iOS + \li Linux (when running with the GTK+ platform theme) + \li macOS + \li Windows + \endlist + + \input includes/widgets.qdocinc 1 + + \labs + + \sa FileDialog, StandardPaths +*/ + +QQuickPlatformFolderDialog::QQuickPlatformFolderDialog(QObject *parent) + : QQuickPlatformDialog(QPlatformTheme::FileDialog, parent), + m_options(QFileDialogOptions::create()) +{ + m_options->setFileMode(QFileDialogOptions::Directory); + m_options->setAcceptMode(QFileDialogOptions::AcceptOpen); +} + +/*! + \qmlproperty url Qt.labs.platform::FolderDialog::folder + + This property holds the final accepted folder. + + Unlike the \l currentFolder property, the \c folder property is not updated + while the user is selecting folders in the dialog, but only after the final + selection has been made. That is, when the user has clicked \uicontrol OK + to accept a folder. Alternatively, the \l {Dialog::}{accepted()} signal + can be handled to get the final selection. + + \sa currentFolder, {Dialog::}{accepted()} +*/ +QUrl QQuickPlatformFolderDialog::folder() const +{ + return m_folder; +} + +void QQuickPlatformFolderDialog::setFolder(const QUrl &folder) +{ + if (m_folder == folder) + return; + + m_folder = folder; + setCurrentFolder(folder); + emit folderChanged(); +} + +/*! + \qmlproperty url Qt.labs.platform::FolderDialog::currentFolder + + This property holds the currently selected folder in the dialog. + + Unlike the \l folder property, the \c currentFolder property is updated + while the user is selecting folders in the dialog, even before the final + selection has been made. + + \sa folder +*/ +QUrl QQuickPlatformFolderDialog::currentFolder() const +{ + if (QPlatformFileDialogHelper *fileDialog = qobject_cast(handle())) + return fileDialog->directory(); + return m_options->initialDirectory(); +} + +void QQuickPlatformFolderDialog::setCurrentFolder(const QUrl &folder) +{ + if (QPlatformFileDialogHelper *fileDialog = qobject_cast(handle())) + fileDialog->setDirectory(folder); + m_options->setInitialDirectory(folder); +} + +/*! + \qmlproperty flags Qt.labs.platform::FolderDialog::options + + This property holds the various options that affect the look and feel of the dialog. + + By default, all options are disabled. + + Options should be set before showing the dialog. Setting them while the dialog is + visible is not guaranteed to have an immediate effect on the dialog (depending on + the option and on the platform). + + Available options: + \value FolderDialog.ShowDirsOnly Only show directories in the folder dialog. By default both folders and directories are shown. + \value FolderDialog.DontResolveSymlinks Don't resolve symlinks in the folder dialog. By default symlinks are resolved. + \value FolderDialog.ReadOnly Indicates that the dialog doesn't allow creating directories. +*/ +QFileDialogOptions::FileDialogOptions QQuickPlatformFolderDialog::options() const +{ + return m_options->options(); +} + +void QQuickPlatformFolderDialog::setOptions(QFileDialogOptions::FileDialogOptions options) +{ + if (options == m_options->options()) + return; + + m_options->setOptions(options); + emit optionsChanged(); +} + +void QQuickPlatformFolderDialog::resetOptions() +{ + setOptions({}); +} + +/*! + \qmlproperty string Qt.labs.platform::FolderDialog::acceptLabel + + This property holds the label text shown on the button that accepts the dialog. + + When set to an empty string, the default label of the underlying platform is used. + The default label is typically \uicontrol Open. + + The default value is an empty string. + + \sa rejectLabel +*/ +QString QQuickPlatformFolderDialog::acceptLabel() const +{ + return m_options->labelText(QFileDialogOptions::Accept); +} + +void QQuickPlatformFolderDialog::setAcceptLabel(const QString &label) +{ + if (label == m_options->labelText(QFileDialogOptions::Accept)) + return; + + m_options->setLabelText(QFileDialogOptions::Accept, label); + emit acceptLabelChanged(); +} + +void QQuickPlatformFolderDialog::resetAcceptLabel() +{ + setAcceptLabel(QString()); +} + +/*! + \qmlproperty string Qt.labs.platform::FolderDialog::rejectLabel + + This property holds the label text shown on the button that rejects the dialog. + + When set to an empty string, the default label of the underlying platform is used. + The default label is typically \uicontrol Cancel. + + The default value is an empty string. + + \sa acceptLabel +*/ +QString QQuickPlatformFolderDialog::rejectLabel() const +{ + return m_options->labelText(QFileDialogOptions::Reject); +} + +void QQuickPlatformFolderDialog::setRejectLabel(const QString &label) +{ + if (label == m_options->labelText(QFileDialogOptions::Reject)) + return; + + m_options->setLabelText(QFileDialogOptions::Reject, label); + emit rejectLabelChanged(); +} + +void QQuickPlatformFolderDialog::resetRejectLabel() +{ + setRejectLabel(QString()); +} + +bool QQuickPlatformFolderDialog::useNativeDialog() const +{ + return QQuickPlatformDialog::useNativeDialog() + && !m_options->testOption(QFileDialogOptions::DontUseNativeDialog); +} + +void QQuickPlatformFolderDialog::onCreate(QPlatformDialogHelper *dialog) +{ + if (QPlatformFileDialogHelper *fileDialog = qobject_cast(dialog)) { + connect(fileDialog, &QPlatformFileDialogHelper::directoryEntered, this, &QQuickPlatformFolderDialog::currentFolderChanged); + fileDialog->setOptions(m_options); + } +} + +void QQuickPlatformFolderDialog::onShow(QPlatformDialogHelper *dialog) +{ + m_options->setWindowTitle(title()); + if (QPlatformFileDialogHelper *fileDialog = qobject_cast(dialog)) + fileDialog->setOptions(m_options); +} + +void QQuickPlatformFolderDialog::accept() +{ + setFolder(currentFolder()); + QQuickPlatformDialog::accept(); +} + +QT_END_NAMESPACE diff --git a/src/labs/platform/qquickplatformfolderdialog_p.h b/src/labs/platform/qquickplatformfolderdialog_p.h new file mode 100644 index 00000000..69878cb9 --- /dev/null +++ b/src/labs/platform/qquickplatformfolderdialog_p.h @@ -0,0 +1,110 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKPLATFORMFOLDERDIALOG_P_H +#define QQUICKPLATFORMFOLDERDIALOG_P_H + +// +// W A R N I N G +// ------------- +// +// This folder is not part of the Qt API. It exists purely as an +// implementation detail. This header folder may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "qquickplatformdialog_p.h" +#include +#include + +QT_BEGIN_NAMESPACE + +class QQuickPlatformFolderDialog : public QQuickPlatformDialog +{ + Q_OBJECT + Q_PROPERTY(QUrl folder READ folder WRITE setFolder NOTIFY folderChanged FINAL) + Q_PROPERTY(QUrl currentFolder READ currentFolder WRITE setCurrentFolder NOTIFY currentFolderChanged FINAL) + Q_PROPERTY(QFileDialogOptions::FileDialogOptions options READ options WRITE setOptions RESET resetOptions NOTIFY optionsChanged FINAL) + Q_PROPERTY(QString acceptLabel READ acceptLabel WRITE setAcceptLabel RESET resetAcceptLabel NOTIFY acceptLabelChanged FINAL) + Q_PROPERTY(QString rejectLabel READ rejectLabel WRITE setRejectLabel RESET resetRejectLabel NOTIFY rejectLabelChanged FINAL) + Q_FLAGS(QFileDialogOptions::FileDialogOptions) + +public: + explicit QQuickPlatformFolderDialog(QObject *parent = nullptr); + + QUrl folder() const; + void setFolder(const QUrl &folder); + + QUrl currentFolder() const; + void setCurrentFolder(const QUrl &folder); + + QFileDialogOptions::FileDialogOptions options() const; + void setOptions(QFileDialogOptions::FileDialogOptions options); + void resetOptions(); + + QString acceptLabel() const; + void setAcceptLabel(const QString &label); + void resetAcceptLabel(); + + QString rejectLabel() const; + void setRejectLabel(const QString &label); + void resetRejectLabel(); + +Q_SIGNALS: + void folderChanged(); + void currentFolderChanged(); + void optionsChanged(); + void acceptLabelChanged(); + void rejectLabelChanged(); + +protected: + bool useNativeDialog() const override; + void onCreate(QPlatformDialogHelper *dialog) override; + void onShow(QPlatformDialogHelper *dialog) override; + void accept() override; + +private: + QUrl m_folder; + QSharedPointer m_options; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickPlatformFolderDialog) + +#endif // QQUICKPLATFORMFOLDERDIALOG_P_H diff --git a/src/labs/platform/qquickplatformfontdialog.cpp b/src/labs/platform/qquickplatformfontdialog.cpp new file mode 100644 index 00000000..f3eca2c3 --- /dev/null +++ b/src/labs/platform/qquickplatformfontdialog.cpp @@ -0,0 +1,208 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickplatformfontdialog_p.h" + +QT_BEGIN_NAMESPACE + +/*! + \qmltype FontDialog + \inherits Dialog +//! \instantiates QQuickPlatformFontDialog + \inqmlmodule Qt.labs.platform + \since 5.8 + \brief A native font dialog. + + The FontDialog type provides a QML API for native platform font dialogs. + + \image qtlabsplatform-fontdialog-gtk.png + + To show a font dialog, construct an instance of FontDialog, set the + desired properties, and call \l {Dialog::}{open()}. The \l currentFont + property can be used to determine the currently selected font in the + dialog. The \l font property is updated only after the final selection + has been made by accepting the dialog. + + \code + MenuItem { + text: "Font" + onTriggered: fontDialog.open() + } + + FontDialog { + id: fontDialog + currentFont.family: document.font + } + + MyDocument { + id: document + font: fontDialog.font + } + \endcode + + \section2 Availability + + A native platform font dialog is currently available on the following platforms: + + \list + \li macOS + \li Linux (when running with the GTK+ platform theme) + \endlist + + \input includes/widgets.qdocinc 1 + + \labs +*/ + +QQuickPlatformFontDialog::QQuickPlatformFontDialog(QObject *parent) + : QQuickPlatformDialog(QPlatformTheme::FontDialog, parent), + m_options(QFontDialogOptions::create()) +{ +} + +/*! + \qmlproperty font Qt.labs.platform::FontDialog::font + + This property holds the final accepted font. + + Unlike the \l currentFont property, the \c font property is not updated + while the user is selecting fonts in the dialog, but only after the final + selection has been made. That is, when the user has clicked \uicontrol OK + to accept a font. Alternatively, the \l {Dialog::}{accepted()} signal + can be handled to get the final selection. + + \sa currentFont, {Dialog::}{accepted()} +*/ +QFont QQuickPlatformFontDialog::font() const +{ + return m_font; +} + +void QQuickPlatformFontDialog::setFont(const QFont &font) +{ + if (m_font == font) + return; + + m_font = font; + setCurrentFont(font); + emit fontChanged(); +} + +/*! + \qmlproperty font Qt.labs.platform::FontDialog::currentFont + + This property holds the currently selected font in the dialog. + + Unlike the \l font property, the \c currentFont property is updated + while the user is selecting fonts in the dialog, even before the final + selection has been made. + + \sa font +*/ +QFont QQuickPlatformFontDialog::currentFont() const +{ + if (QPlatformFontDialogHelper *fontDialog = qobject_cast(handle())) + return fontDialog->currentFont(); + return m_currentFont; +} + +void QQuickPlatformFontDialog::setCurrentFont(const QFont &font) +{ + if (QPlatformFontDialogHelper *fontDialog = qobject_cast(handle())) + fontDialog->setCurrentFont(font); + m_currentFont = font; +} + +/*! + \qmlproperty flags Qt.labs.platform::FontDialog::options + + This property holds the various options that affect the look and feel of the dialog. + + By default, all options are disabled. + + Options should be set before showing the dialog. Setting them while the dialog is + visible is not guaranteed to have an immediate effect on the dialog (depending on + the option and on the platform). + + Available options: + \value FontDialog.ScalableFonts Show scalable fonts. + \value FontDialog.NonScalableFonts Show non-scalable fonts. + \value FontDialog.MonospacedFonts Show monospaced fonts. + \value FontDialog.ProportionalFonts Show proportional fonts. + \value FontDialog.NoButtons Don't display \uicontrol OK and \uicontrol Cancel buttons (useful for "live dialogs"). +*/ +QFontDialogOptions::FontDialogOptions QQuickPlatformFontDialog::options() const +{ + return m_options->options(); +} + +void QQuickPlatformFontDialog::setOptions(QFontDialogOptions::FontDialogOptions options) +{ + if (options == m_options->options()) + return; + + m_options->setOptions(options); + emit optionsChanged(); +} + +bool QQuickPlatformFontDialog::useNativeDialog() const +{ + return QQuickPlatformDialog::useNativeDialog() + && !m_options->testOption(QFontDialogOptions::DontUseNativeDialog); +} + +void QQuickPlatformFontDialog::onCreate(QPlatformDialogHelper *dialog) +{ + if (QPlatformFontDialogHelper *fontDialog = qobject_cast(dialog)) { + connect(fontDialog, &QPlatformFontDialogHelper::currentFontChanged, this, &QQuickPlatformFontDialog::currentFontChanged); + fontDialog->setOptions(m_options); + } +} + +void QQuickPlatformFontDialog::onShow(QPlatformDialogHelper *dialog) +{ + m_options->setWindowTitle(title()); + if (QPlatformFontDialogHelper *fontDialog = qobject_cast(dialog)) + fontDialog->setOptions(m_options); +} + +void QQuickPlatformFontDialog::accept() +{ + setFont(currentFont()); + QQuickPlatformDialog::accept(); +} + +QT_END_NAMESPACE diff --git a/src/labs/platform/qquickplatformfontdialog_p.h b/src/labs/platform/qquickplatformfontdialog_p.h new file mode 100644 index 00000000..e7946477 --- /dev/null +++ b/src/labs/platform/qquickplatformfontdialog_p.h @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKPLATFORMFONTDIALOG_P_H +#define QQUICKPLATFORMFONTDIALOG_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 "qquickplatformdialog_p.h" +#include +#include + +QT_BEGIN_NAMESPACE + +class QQuickPlatformFontDialog : public QQuickPlatformDialog +{ + Q_OBJECT + Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged FINAL) + Q_PROPERTY(QFont currentFont READ currentFont WRITE setCurrentFont NOTIFY currentFontChanged FINAL) + Q_PROPERTY(QFontDialogOptions::FontDialogOptions options READ options WRITE setOptions NOTIFY optionsChanged FINAL) + Q_FLAGS(QFontDialogOptions::FontDialogOptions) + +public: + explicit QQuickPlatformFontDialog(QObject *parent = nullptr); + + QFont font() const; + void setFont(const QFont &font); + + QFont currentFont() const; + void setCurrentFont(const QFont &font); + + QFontDialogOptions::FontDialogOptions options() const; + void setOptions(QFontDialogOptions::FontDialogOptions options); + +Q_SIGNALS: + void fontChanged(); + void currentFontChanged(); + void optionsChanged(); + +protected: + bool useNativeDialog() const override; + void onCreate(QPlatformDialogHelper *dialog) override; + void onShow(QPlatformDialogHelper *dialog) override; + void accept() override; + +private: + QFont m_font; + QFont m_currentFont; // TODO: QFontDialogOptions::initialFont + QSharedPointer m_options; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickPlatformFontDialog) + +#endif // QQUICKPLATFORMFONTDIALOG_P_H diff --git a/src/labs/platform/qquickplatformicon.cpp b/src/labs/platform/qquickplatformicon.cpp new file mode 100644 index 00000000..7096ff8a --- /dev/null +++ b/src/labs/platform/qquickplatformicon.cpp @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickplatformicon_p.h" + +QT_BEGIN_NAMESPACE + +QUrl QQuickPlatformIcon::source() const +{ + return m_source; +} + +void QQuickPlatformIcon::setSource(const QUrl& source) +{ + m_source = source; +} + +QString QQuickPlatformIcon::name() const +{ + return m_name; +} + +void QQuickPlatformIcon::setName(const QString& name) +{ + m_name = name; +} + +bool QQuickPlatformIcon::isMask() const +{ + return m_mask; +} + +void QQuickPlatformIcon::setMask(bool mask) +{ + m_mask = mask; +} + +bool QQuickPlatformIcon::operator==(const QQuickPlatformIcon &other) const +{ + return m_source == other.m_source && m_name == other.m_name && m_mask == other.m_mask; +} + +bool QQuickPlatformIcon::operator!=(const QQuickPlatformIcon &other) const +{ + return !(*this == other); +} + +QT_END_NAMESPACE diff --git a/src/labs/platform/qquickplatformicon_p.h b/src/labs/platform/qquickplatformicon_p.h new file mode 100644 index 00000000..9add9d6e --- /dev/null +++ b/src/labs/platform/qquickplatformicon_p.h @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKPLATFORMICON_P_H +#define QQUICKPLATFORMICON_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 +#include + +QT_BEGIN_NAMESPACE + +class QObject; + +class QQuickPlatformIcon +{ + Q_GADGET + Q_PROPERTY(QUrl source READ source WRITE setSource) + Q_PROPERTY(QString name READ name WRITE setName) + Q_PROPERTY(bool mask READ isMask WRITE setMask) + +public: + QUrl source() const; + void setSource(const QUrl &source); + + QString name() const; + void setName(const QString &name); + + bool isMask() const; + void setMask(bool mask); + + bool operator==(const QQuickPlatformIcon &other) const; + bool operator!=(const QQuickPlatformIcon &other) const; + +private: + bool m_mask = false; + QUrl m_source; + QString m_name; +}; + +QT_END_NAMESPACE + +#endif // QQUICKPLATFORMICON_P_H diff --git a/src/labs/platform/qquickplatformiconloader.cpp b/src/labs/platform/qquickplatformiconloader.cpp new file mode 100644 index 00000000..c7b699b2 --- /dev/null +++ b/src/labs/platform/qquickplatformiconloader.cpp @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickplatformiconloader_p.h" + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +QQuickPlatformIconLoader::QQuickPlatformIconLoader(int slot, QObject *parent) + : m_parent(parent), + m_slot(slot), + m_enabled(false) +{ + Q_ASSERT(slot != -1 && parent); +} + +bool QQuickPlatformIconLoader::isEnabled() const +{ + return m_enabled; +} + +void QQuickPlatformIconLoader::setEnabled(bool enabled) +{ + m_enabled = enabled; + if (m_enabled) + loadIcon(); +} + +QIcon QQuickPlatformIconLoader::toQIcon() const +{ + QIcon fallback = QPixmap::fromImage(image()); + QIcon icon = QIcon::fromTheme(m_icon.name(), fallback); + icon.setIsMask(m_icon.isMask()); + return icon; +} + +QQuickPlatformIcon QQuickPlatformIconLoader::icon() const +{ + return m_icon; +} + +void QQuickPlatformIconLoader::setIcon(const QQuickPlatformIcon& icon) +{ + m_icon = icon; + if (m_enabled) + loadIcon(); +} + +void QQuickPlatformIconLoader::loadIcon() +{ + if (m_icon.source().isEmpty()) { + clear(m_parent); + } else { + load(qmlEngine(m_parent), m_icon.source()); + if (m_slot != -1 && isLoading()) { + connectFinished(m_parent, m_slot); + m_slot = -1; + } + } + + if (!isLoading()) + m_parent->metaObject()->method(m_slot).invoke(m_parent); +} + +QT_END_NAMESPACE diff --git a/src/labs/platform/qquickplatformiconloader_p.h b/src/labs/platform/qquickplatformiconloader_p.h new file mode 100644 index 00000000..d284a513 --- /dev/null +++ b/src/labs/platform/qquickplatformiconloader_p.h @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKPLATFORMICONLOADER_P_H +#define QQUICKPLATFORMICONLOADER_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 +#include +#include +#include + +#include "qquickplatformicon_p.h" + +QT_BEGIN_NAMESPACE + +class QObject; + +class QQuickPlatformIconLoader : public QQuickPixmap +{ +public: + QQuickPlatformIconLoader(int slot, QObject *parent); + + bool isEnabled() const; + void setEnabled(bool enabled); + + QIcon toQIcon() const; + + QQuickPlatformIcon icon() const; + void setIcon(const QQuickPlatformIcon &icon); + +private: + void loadIcon(); + + QObject *m_parent; + int m_slot; + bool m_enabled; + QQuickPlatformIcon m_icon; +}; + +QT_END_NAMESPACE + +#endif // QQUICKPLATFORMICONLOADER_P_H diff --git a/src/labs/platform/qquickplatformmenu.cpp b/src/labs/platform/qquickplatformmenu.cpp new file mode 100644 index 00000000..16dffd5e --- /dev/null +++ b/src/labs/platform/qquickplatformmenu.cpp @@ -0,0 +1,895 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickplatformmenu_p.h" +#include "qquickplatformmenubar_p.h" +#include "qquickplatformmenuitem_p.h" +#include "qquickplatformiconloader_p.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "widgets/qwidgetplatform_p.h" + +#if QT_CONFIG(systemtrayicon) +#include "qquickplatformsystemtrayicon_p.h" +#endif + +QT_BEGIN_NAMESPACE + +/*! + \qmltype Menu + \inherits QtObject +//! \instantiates QQuickPlatformMenu + \inqmlmodule Qt.labs.platform + \since 5.8 + \brief A native menu. + + The Menu type provides a QML API for native platform menu popups. + + \image qtlabsplatform-menu.png + + Menu can be used in a \l MenuBar, or as a stand-alone context menu. + The following example shows how to open a context menu on right mouse + click: + + \code + MouseArea { + anchors.fill: parent + acceptedButtons: Qt.RightButton + onClicked: zoomMenu.open() + } + + Menu { + id: zoomMenu + + MenuItem { + text: qsTr("Zoom In") + shortcut: StandardKey.ZoomIn + onTriggered: zoomIn() + } + + MenuItem { + text: qsTr("Zoom Out") + shortcut: StandardKey.ZoomOut + onTriggered: zoomOut() + } + } + \endcode + + \section2 Submenus + + To create submenus, declare a Menu as a child of another Menu: + + \qml + Menu { + title: qsTr("Edit") + + Menu { + title: qsTr("Advanced") + + MenuItem { + text: qsTr("Auto-indent Selection") + onTriggered: autoIndentSelection() + } + + MenuItem { + text: qsTr("Rewrap Paragraph") + onTriggered: rewrapParagraph() + } + } + } + \endqml + + \section2 Dynamically Generating Menu Items + + It is possible to dynamically generate menu items. One of the easiest ways + to do so is with \l Instantiator. For example, to implement a + "Recent Files" submenu, where the items are based on a list of files stored + in settings, the following code could be used: + + \qml + Menu { + title: qsTr("File") + + Menu { + id: recentFilesSubMenu + title: qsTr("Recent Files") + enabled: recentFilesInstantiator.count > 0 + + Instantiator { + id: recentFilesInstantiator + model: settings.recentFiles + delegate: MenuItem { + text: settings.displayableFilePath(modelData) + onTriggered: loadFile(modelData) + } + + onObjectAdded: recentFilesSubMenu.insertItem(index, object) + onObjectRemoved: recentFilesSubMenu.removeItem(object) + } + + MenuSeparator {} + + MenuItem { + text: qsTr("Clear Recent Files") + onTriggered: settings.clearRecentFiles() + } + } + } + \endqml + + \section2 Availability + + A native platform menu is currently available on the following platforms: + + \list + \li macOS + \li iOS + \li Android + \li Linux (only available as a stand-alone context menu when running with the GTK+ platform theme) + \endlist + + \input includes/widgets.qdocinc 1 + + \labs + + \sa MenuItem, MenuSeparator, MenuBar +*/ + +/*! + \qmlsignal Qt.labs.platform::Menu::aboutToShow() + + This signal is emitted when the menu is about to be shown to the user. +*/ + +/*! + \qmlsignal Qt.labs.platform::Menu::aboutToHide() + + This signal is emitted when the menu is about to be hidden from the user. +*/ + +Q_DECLARE_LOGGING_CATEGORY(qtLabsPlatformMenus) + +QQuickPlatformMenu::QQuickPlatformMenu(QObject *parent) + : QObject(parent), + m_complete(false), + m_enabled(true), + m_visible(true), + m_minimumWidth(-1), + m_type(QPlatformMenu::DefaultMenu), + m_menuBar(nullptr), + m_parentMenu(nullptr), + m_systemTrayIcon(nullptr), + m_menuItem(nullptr), + m_iconLoader(nullptr), + m_handle(nullptr) +{ +} + +QQuickPlatformMenu::~QQuickPlatformMenu() +{ + if (m_menuBar) + m_menuBar->removeMenu(this); + if (m_parentMenu) + m_parentMenu->removeMenu(this); + + unparentSubmenus(); + + delete m_iconLoader; + m_iconLoader = nullptr; + delete m_handle; + m_handle = nullptr; +} + +void QQuickPlatformMenu::unparentSubmenus() +{ + for (QQuickPlatformMenuItem *item : qAsConst(m_items)) { + if (QQuickPlatformMenu *subMenu = item->subMenu()) + subMenu->setParentMenu(nullptr); + item->setMenu(nullptr); + } +} + +QPlatformMenu *QQuickPlatformMenu::handle() const +{ + return m_handle; +} + +QPlatformMenu * QQuickPlatformMenu::create() +{ + if (!m_handle) { + if (m_menuBar && m_menuBar->handle()) + m_handle = m_menuBar->handle()->createMenu(); + else if (m_parentMenu && m_parentMenu->handle()) + m_handle = m_parentMenu->handle()->createSubMenu(); +#if QT_CONFIG(systemtrayicon) + else if (m_systemTrayIcon && m_systemTrayIcon->handle()) + m_handle = m_systemTrayIcon->handle()->createMenu(); +#endif + + // TODO: implement ^ + // - QCocoaMenuBar::createMenu() + // - QCocoaMenu::createSubMenu() + // - QCocoaSystemTrayIcon::createMenu() + if (!m_handle) + m_handle = QGuiApplicationPrivate::platformTheme()->createPlatformMenu(); + + if (!m_handle) + m_handle = QWidgetPlatform::createMenu(); + + qCDebug(qtLabsPlatformMenus) << "Menu ->" << m_handle; + + if (m_handle) { + connect(m_handle, &QPlatformMenu::aboutToShow, this, &QQuickPlatformMenu::aboutToShow); + connect(m_handle, &QPlatformMenu::aboutToHide, this, &QQuickPlatformMenu::aboutToHide); + + for (QQuickPlatformMenuItem *item : qAsConst(m_items)) + m_handle->insertMenuItem(item->create(), nullptr); + + if (m_menuItem) { + if (QPlatformMenuItem *handle = m_menuItem->create()) + handle->setMenu(m_handle); + } + } + } + return m_handle; +} + +void QQuickPlatformMenu::destroy() +{ + if (!m_handle) + return; + + // Ensure that all submenus are unparented before we are destroyed, + // so that they don't try to access a destroyed menu. + unparentSubmenus(); + + delete m_handle; + m_handle = nullptr; +} + +void QQuickPlatformMenu::sync() +{ + if (!m_complete || !create()) + return; + + m_handle->setText(m_title); + m_handle->setEnabled(m_enabled); + m_handle->setVisible(m_visible); + m_handle->setMinimumWidth(m_minimumWidth); + m_handle->setMenuType(m_type); + m_handle->setFont(m_font); + + if (m_menuBar && m_menuBar->handle()) + m_menuBar->handle()->syncMenu(m_handle); +#if QT_CONFIG(systemtrayicon) + else if (m_systemTrayIcon && m_systemTrayIcon->handle()) + m_systemTrayIcon->handle()->updateMenu(m_handle); +#endif + + for (QQuickPlatformMenuItem *item : qAsConst(m_items)) + item->sync(); +} + +/*! + \qmldefault + \qmlproperty list Qt.labs.platform::Menu::data + + This default property holds the list of all objects declared as children of + the menu. The data property includes objects that are not \l MenuItem instances, + such as \l Timer and \l QtObject. + + \sa items +*/ +QQmlListProperty QQuickPlatformMenu::data() +{ + return QQmlListProperty(this, nullptr, data_append, data_count, data_at, data_clear); +} + +/*! + \qmlproperty list Qt.labs.platform::Menu::items + + This property holds the list of items in the menu. +*/ +QQmlListProperty QQuickPlatformMenu::items() +{ + return QQmlListProperty(this, nullptr, items_append, items_count, items_at, items_clear); +} + +/*! + \readonly + \qmlproperty MenuBar Qt.labs.platform::Menu::menuBar + + This property holds the menubar that the menu belongs to, or \c null if the + menu is not in a menubar. +*/ +QQuickPlatformMenuBar *QQuickPlatformMenu::menuBar() const +{ + return m_menuBar; +} + +void QQuickPlatformMenu::setMenuBar(QQuickPlatformMenuBar *menuBar) +{ + if (m_menuBar == menuBar) + return; + + m_menuBar = menuBar; + destroy(); + emit menuBarChanged(); +} + +/*! + \readonly + \qmlproperty Menu Qt.labs.platform::Menu::parentMenu + + This property holds the parent menu that the menu belongs to, or \c null if the + menu is not a sub-menu. +*/ +QQuickPlatformMenu *QQuickPlatformMenu::parentMenu() const +{ + return m_parentMenu; +} + +void QQuickPlatformMenu::setParentMenu(QQuickPlatformMenu *menu) +{ + if (m_parentMenu == menu) + return; + + m_parentMenu = menu; + destroy(); + emit parentMenuChanged(); +} + +/*! + \readonly + \qmlproperty SystemTrayIcon Qt.labs.platform::Menu::systemTrayIcon + + This property holds the system tray icon that the menu belongs to, or \c null + if the menu is not in a system tray icon. +*/ +QQuickPlatformSystemTrayIcon *QQuickPlatformMenu::systemTrayIcon() const +{ + return m_systemTrayIcon; +} + +void QQuickPlatformMenu::setSystemTrayIcon(QQuickPlatformSystemTrayIcon *icon) +{ + if (m_systemTrayIcon == icon) + return; + + m_systemTrayIcon = icon; + destroy(); + emit systemTrayIconChanged(); +} + +/*! + \readonly + \qmlproperty MenuItem Qt.labs.platform::Menu::menuItem + + This property holds the item that presents the menu (in a parent menu). +*/ +QQuickPlatformMenuItem *QQuickPlatformMenu::menuItem() const +{ + if (!m_menuItem) { + QQuickPlatformMenu *that = const_cast(this); + m_menuItem = new QQuickPlatformMenuItem(that); + m_menuItem->setSubMenu(that); + m_menuItem->setText(m_title); + m_menuItem->setIcon(icon()); + m_menuItem->setVisible(m_visible); + m_menuItem->setEnabled(m_enabled); + m_menuItem->componentComplete(); + } + return m_menuItem; +} + +/*! + \qmlproperty bool Qt.labs.platform::Menu::enabled + + This property holds whether the menu is enabled. The default value is \c true. +*/ +bool QQuickPlatformMenu::isEnabled() const +{ + return m_enabled; +} + +void QQuickPlatformMenu::setEnabled(bool enabled) +{ + if (m_enabled == enabled) + return; + + if (m_menuItem) + m_menuItem->setEnabled(enabled); + + m_enabled = enabled; + sync(); + emit enabledChanged(); +} + +/*! + \qmlproperty bool Qt.labs.platform::Menu::visible + + This property holds whether the menu is visible. The default value is \c true. +*/ +bool QQuickPlatformMenu::isVisible() const +{ + return m_visible; +} + +void QQuickPlatformMenu::setVisible(bool visible) +{ + if (m_visible == visible) + return; + + if (m_menuItem) + m_menuItem->setVisible(visible); + + m_visible = visible; + sync(); + emit visibleChanged(); +} + +/*! + \qmlproperty int Qt.labs.platform::Menu::minimumWidth + + This property holds the minimum width of the menu. The default value is \c -1 (no minimum width). +*/ +int QQuickPlatformMenu::minimumWidth() const +{ + return m_minimumWidth; +} + +void QQuickPlatformMenu::setMinimumWidth(int width) +{ + if (m_minimumWidth == width) + return; + + m_minimumWidth = width; + sync(); + emit minimumWidthChanged(); +} + +/*! + \qmlproperty enumeration Qt.labs.platform::Menu::type + + This property holds the type of the menu. + + Available values: + \value Menu.DefaultMenu A normal menu (default). + \value Menu.EditMenu An edit menu with pre-populated cut, copy and paste items. +*/ +QPlatformMenu::MenuType QQuickPlatformMenu::type() const +{ + return m_type; +} + +void QQuickPlatformMenu::setType(QPlatformMenu::MenuType type) +{ + if (m_type == type) + return; + + m_type = type; + sync(); + emit typeChanged(); +} + +/*! + \qmlproperty string Qt.labs.platform::Menu::title + + This property holds the menu's title. +*/ +QString QQuickPlatformMenu::title() const +{ + return m_title; +} + +void QQuickPlatformMenu::setTitle(const QString &title) +{ + if (m_title == title) + return; + + if (m_menuItem) + m_menuItem->setText(title); + + m_title = title; + sync(); + emit titleChanged(); +} + +/*! + \qmlproperty font Qt.labs.platform::Menu::font + + This property holds the menu's font. + + \sa text +*/ +QFont QQuickPlatformMenu::font() const +{ + return m_font; +} + +void QQuickPlatformMenu::setFont(const QFont& font) +{ + if (m_font == font) + return; + + m_font = font; + sync(); + emit fontChanged(); +} + +/*! + \since Qt.labs.platform 1.1 (Qt 5.12) + \qmlproperty url Qt.labs.platform::Menu::icon.source + \qmlproperty string Qt.labs.platform::Menu::icon.name + \qmlproperty bool Qt.labs.platform::Menu::icon.mask + + This property holds the menu item's icon. +*/ +QQuickPlatformIcon QQuickPlatformMenu::icon() const +{ + if (!m_iconLoader) + return QQuickPlatformIcon(); + + return iconLoader()->icon(); +} + +void QQuickPlatformMenu::setIcon(const QQuickPlatformIcon &icon) +{ + if (iconLoader()->icon() == icon) + return; + + if (m_menuItem) + m_menuItem->setIcon(icon); + + iconLoader()->setIcon(icon); + emit iconChanged(); +} + +/*! + \qmlmethod void Qt.labs.platform::Menu::addItem(MenuItem item) + + Adds an \a item to the end of the menu. +*/ +void QQuickPlatformMenu::addItem(QQuickPlatformMenuItem *item) +{ + insertItem(m_items.count(), item); +} + +/*! + \qmlmethod void Qt.labs.platform::Menu::insertItem(int index, MenuItem item) + + Inserts an \a item at the specified \a index in the menu. +*/ +void QQuickPlatformMenu::insertItem(int index, QQuickPlatformMenuItem *item) +{ + if (!item || m_items.contains(item)) + return; + + m_items.insert(index, item); + m_data.append(item); + item->setMenu(this); + if (m_handle && item->create()) { + QQuickPlatformMenuItem *before = m_items.value(index + 1); + m_handle->insertMenuItem(item->handle(), before ? before->create() : nullptr); + } + sync(); + emit itemsChanged(); +} + +/*! + \qmlmethod void Qt.labs.platform::Menu::removeItem(MenuItem item) + + Removes an \a item from the menu. +*/ +void QQuickPlatformMenu::removeItem(QQuickPlatformMenuItem *item) +{ + if (!item || !m_items.removeOne(item)) + return; + + m_data.removeOne(item); + if (m_handle) + m_handle->removeMenuItem(item->handle()); + item->setMenu(nullptr); + sync(); + emit itemsChanged(); +} + +/*! + \qmlmethod void Qt.labs.platform::Menu::addMenu(Menu submenu) + + Adds a \a submenu to the end of the menu. +*/ +void QQuickPlatformMenu::addMenu(QQuickPlatformMenu *menu) +{ + insertMenu(m_items.count(), menu); +} + +/*! + \qmlmethod void Qt.labs.platform::Menu::insertMenu(int index, Menu submenu) + + Inserts a \a submenu at the specified \a index in the menu. +*/ +void QQuickPlatformMenu::insertMenu(int index, QQuickPlatformMenu *menu) +{ + if (!menu) + return; + + menu->setParentMenu(this); + insertItem(index, menu->menuItem()); +} + +/*! + \qmlmethod void Qt.labs.platform::Menu::removeMenu(Menu submenu) + + Removes a \a submenu from the menu. +*/ +void QQuickPlatformMenu::removeMenu(QQuickPlatformMenu *menu) +{ + if (!menu) + return; + + menu->setParentMenu(nullptr); + removeItem(menu->menuItem()); +} + +/*! + \qmlmethod void Qt.labs.platform::Menu::clear() + + Removes all items from the menu. +*/ +void QQuickPlatformMenu::clear() +{ + if (m_items.isEmpty()) + return; + + for (QQuickPlatformMenuItem *item : qAsConst(m_items)) { + m_data.removeOne(item); + if (m_handle) + m_handle->removeMenuItem(item->handle()); + item->setMenu(nullptr); + delete item; + } + + m_items.clear(); + sync(); + emit itemsChanged(); +} + +/*! + \qmlmethod void Qt.labs.platform::Menu::open(MenuItem item) + + Opens the menu at the current mouse position, optionally aligned to a menu \a item. +*/ + +/*! + \qmlmethod void Qt.labs.platform::Menu::open(Item target, MenuItem item) + + Opens the menu at the specified \a target item, optionally aligned to a menu \a item. +*/ +void QQuickPlatformMenu::open(QQmlV4Function *args) +{ + if (!m_handle) + return; + + if (args->length() > 2) { + args->v4engine()->throwTypeError(); + return; + } + + QV4::ExecutionEngine *v4 = args->v4engine(); + QV4::Scope scope(v4); + + QQuickItem *targetItem = nullptr; + if (args->length() > 0) { + QV4::ScopedValue value(scope, (*args)[0]); + QV4::Scoped object(scope, value->as()); + if (object) + targetItem = qobject_cast(object->object()); + } + + QQuickPlatformMenuItem *menuItem = nullptr; + if (args->length() > 1) { + QV4::ScopedValue value(scope, (*args)[1]); + QV4::Scoped object(scope, value->as()); + if (object) + menuItem = qobject_cast(object->object()); + } + + QPoint offset; + QWindow *window = findWindow(targetItem, &offset); + + QRect targetRect; + if (targetItem) { + QRectF sceneBounds = targetItem->mapRectToScene(targetItem->boundingRect()); + targetRect = sceneBounds.toAlignedRect().translated(offset); + } else { +#if QT_CONFIG(cursor) + QPoint pos = QCursor::pos(); + if (window) + pos = window->mapFromGlobal(pos); + targetRect.moveTo(pos); +#endif + } + m_handle->showPopup(window, + QHighDpi::toNativePixels(targetRect, window), + menuItem ? menuItem->handle() : nullptr); +} + +/*! + \qmlmethod void Qt.labs.platform::Menu::close() + + Closes the menu. +*/ +void QQuickPlatformMenu::close() +{ + if (m_handle) + m_handle->dismiss(); +} + +void QQuickPlatformMenu::classBegin() +{ +} + +void QQuickPlatformMenu::componentComplete() +{ + m_complete = true; + if (m_handle && m_iconLoader) + m_iconLoader->setEnabled(true); + sync(); +} + +QQuickPlatformIconLoader *QQuickPlatformMenu::iconLoader() const +{ + if (!m_iconLoader) { + QQuickPlatformMenu *that = const_cast(this); + static int slot = staticMetaObject.indexOfSlot("updateIcon()"); + m_iconLoader = new QQuickPlatformIconLoader(slot, that); + m_iconLoader->setEnabled(m_complete); + } + return m_iconLoader; +} + +static QWindow *effectiveWindow(QWindow *window, QPoint *offset) +{ + QQuickWindow *quickWindow = qobject_cast(window); + if (quickWindow) { + QWindow *renderWindow = QQuickRenderControl::renderWindowFor(quickWindow, offset); + if (renderWindow) + return renderWindow; + } + return window; +} + +QWindow *QQuickPlatformMenu::findWindow(QQuickItem *target, QPoint *offset) const +{ + if (target) + return effectiveWindow(target->window(), offset); + + if (m_menuBar && m_menuBar->window()) + return effectiveWindow(m_menuBar->window(), offset); + + QObject *obj = parent(); + while (obj) { + QWindow *window = qobject_cast(obj); + if (window) + return effectiveWindow(window, offset); + + QQuickItem *item = qobject_cast(obj); + if (item && item->window()) + return effectiveWindow(item->window(), offset); + + obj = obj->parent(); + } + return nullptr; +} + +void QQuickPlatformMenu::data_append(QQmlListProperty *property, QObject *object) +{ + QQuickPlatformMenu *menu = static_cast(property->object); + if (QQuickPlatformMenuItem *item = qobject_cast(object)) + menu->addItem(item); + else if (QQuickPlatformMenu *subMenu = qobject_cast(object)) + menu->addMenu(subMenu); + else + menu->m_data.append(object); +} + +qsizetype QQuickPlatformMenu::data_count(QQmlListProperty *property) +{ + QQuickPlatformMenu *menu = static_cast(property->object); + return menu->m_data.count(); +} + +QObject *QQuickPlatformMenu::data_at(QQmlListProperty *property, qsizetype index) +{ + QQuickPlatformMenu *menu = static_cast(property->object); + return menu->m_data.value(index); +} + +void QQuickPlatformMenu::data_clear(QQmlListProperty *property) +{ + QQuickPlatformMenu *menu = static_cast(property->object); + menu->m_data.clear(); +} + +void QQuickPlatformMenu::items_append(QQmlListProperty *property, QQuickPlatformMenuItem *item) +{ + QQuickPlatformMenu *menu = static_cast(property->object); + menu->addItem(item); +} + +qsizetype QQuickPlatformMenu::items_count(QQmlListProperty *property) +{ + QQuickPlatformMenu *menu = static_cast(property->object); + return menu->m_items.count(); +} + +QQuickPlatformMenuItem *QQuickPlatformMenu::items_at(QQmlListProperty *property, qsizetype index) +{ + QQuickPlatformMenu *menu = static_cast(property->object); + return menu->m_items.value(index); +} + +void QQuickPlatformMenu::items_clear(QQmlListProperty *property) +{ + QQuickPlatformMenu *menu = static_cast(property->object); + menu->clear(); +} + +void QQuickPlatformMenu::updateIcon() +{ + if (!m_handle || !m_iconLoader) + return; + + m_handle->setIcon(m_iconLoader->toQIcon()); + sync(); +} + +QT_END_NAMESPACE + +#include "moc_qquickplatformmenu_p.cpp" diff --git a/src/labs/platform/qquickplatformmenu_p.h b/src/labs/platform/qquickplatformmenu_p.h new file mode 100644 index 00000000..fc66b61b --- /dev/null +++ b/src/labs/platform/qquickplatformmenu_p.h @@ -0,0 +1,213 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKPLATFORMMENU_P_H +#define QQUICKPLATFORMMENU_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 +#include +#include +#include +#include +#include +#include + +#include "qquickplatformicon_p.h" + +QT_BEGIN_NAMESPACE + +class QIcon; +class QWindow; +class QQuickItem; +class QPlatformMenu; +class QQmlV4Function; +class QQuickPlatformMenuBar; +class QQuickPlatformMenuItem; +class QQuickPlatformIconLoader; +class QQuickPlatformSystemTrayIcon; + +class QQuickPlatformMenu : public QObject, public QQmlParserStatus +{ + Q_OBJECT + Q_INTERFACES(QQmlParserStatus) + Q_PROPERTY(QQmlListProperty data READ data FINAL) + Q_PROPERTY(QQmlListProperty items READ items NOTIFY itemsChanged FINAL) + Q_PROPERTY(QQuickPlatformMenuBar *menuBar READ menuBar NOTIFY menuBarChanged FINAL) + Q_PROPERTY(QQuickPlatformMenu *parentMenu READ parentMenu NOTIFY parentMenuChanged FINAL) + Q_PROPERTY(QQuickPlatformSystemTrayIcon *systemTrayIcon READ systemTrayIcon NOTIFY systemTrayIconChanged FINAL) + Q_PROPERTY(QQuickPlatformMenuItem *menuItem READ menuItem CONSTANT FINAL) + Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged FINAL) + Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL) + Q_PROPERTY(int minimumWidth READ minimumWidth WRITE setMinimumWidth NOTIFY minimumWidthChanged FINAL) + Q_PROPERTY(QPlatformMenu::MenuType type READ type WRITE setType NOTIFY typeChanged FINAL) + Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged FINAL) + Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged FINAL) + Q_PROPERTY(QQuickPlatformIcon icon READ icon WRITE setIcon NOTIFY iconChanged FINAL REVISION(1, 1)) + Q_ENUMS(QPlatformMenu::MenuType) + Q_CLASSINFO("DefaultProperty", "data") + +public: + explicit QQuickPlatformMenu(QObject *parent = nullptr); + ~QQuickPlatformMenu(); + + QPlatformMenu *handle() const; + QPlatformMenu *create(); + void destroy(); + void sync(); + + QQmlListProperty data(); + QQmlListProperty items(); + + QQuickPlatformMenuBar *menuBar() const; + void setMenuBar(QQuickPlatformMenuBar *menuBar); + + QQuickPlatformMenu *parentMenu() const; + void setParentMenu(QQuickPlatformMenu *menu); + + QQuickPlatformSystemTrayIcon *systemTrayIcon() const; + void setSystemTrayIcon(QQuickPlatformSystemTrayIcon *icon); + + QQuickPlatformMenuItem *menuItem() const; + + bool isEnabled() const; + void setEnabled(bool enabled); + + bool isVisible() const; + void setVisible(bool visible); + + int minimumWidth() const; + void setMinimumWidth(int width); + + QPlatformMenu::MenuType type() const; + void setType(QPlatformMenu::MenuType type); + + QString title() const; + void setTitle(const QString &title); + + QFont font() const; + void setFont(const QFont &font); + + QQuickPlatformIcon icon() const; + void setIcon(const QQuickPlatformIcon &icon); + + Q_INVOKABLE void addItem(QQuickPlatformMenuItem *item); + Q_INVOKABLE void insertItem(int index, QQuickPlatformMenuItem *item); + Q_INVOKABLE void removeItem(QQuickPlatformMenuItem *item); + + Q_INVOKABLE void addMenu(QQuickPlatformMenu *menu); + Q_INVOKABLE void insertMenu(int index, QQuickPlatformMenu *menu); + Q_INVOKABLE void removeMenu(QQuickPlatformMenu *menu); + + Q_INVOKABLE void clear(); + +public Q_SLOTS: + void open(QQmlV4Function *args); + void close(); + +Q_SIGNALS: + void aboutToShow(); + void aboutToHide(); + + void itemsChanged(); + void menuBarChanged(); + void parentMenuChanged(); + void systemTrayIconChanged(); + void titleChanged(); + void enabledChanged(); + void visibleChanged(); + void minimumWidthChanged(); + void fontChanged(); + void typeChanged(); + Q_REVISION(2, 1) void iconChanged(); + +protected: + void classBegin() override; + void componentComplete() override; + + QQuickPlatformIconLoader *iconLoader() const; + + QWindow *findWindow(QQuickItem *target, QPoint *offset) const; + + static void data_append(QQmlListProperty *property, QObject *object); + static qsizetype data_count(QQmlListProperty *property); + static QObject *data_at(QQmlListProperty *property, qsizetype index); + static void data_clear(QQmlListProperty *property); + + static void items_append(QQmlListProperty *property, QQuickPlatformMenuItem *item); + static qsizetype items_count(QQmlListProperty *property); + static QQuickPlatformMenuItem *items_at(QQmlListProperty *property, qsizetype index); + static void items_clear(QQmlListProperty *property); + +private Q_SLOTS: + void updateIcon(); + +private: + void unparentSubmenus(); + + bool m_complete; + bool m_enabled; + bool m_visible; + int m_minimumWidth; + QPlatformMenu::MenuType m_type; + QString m_title; + QFont m_font; + QList m_data; + QList m_items; + QQuickPlatformMenuBar *m_menuBar; + QQuickPlatformMenu *m_parentMenu; + QQuickPlatformSystemTrayIcon *m_systemTrayIcon; + mutable QQuickPlatformMenuItem *m_menuItem; + mutable QQuickPlatformIconLoader *m_iconLoader; + QPlatformMenu *m_handle; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickPlatformMenu) +Q_DECLARE_METATYPE(QPlatformMenu::MenuType) + +#endif // QQUICKPLATFORMMENU_P_H diff --git a/src/labs/platform/qquickplatformmenubar.cpp b/src/labs/platform/qquickplatformmenubar.cpp new file mode 100644 index 00000000..3b1f4b74 --- /dev/null +++ b/src/labs/platform/qquickplatformmenubar.cpp @@ -0,0 +1,333 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickplatformmenubar_p.h" +#include "qquickplatformmenu_p.h" + +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +/*! + \qmltype MenuBar + \inherits QtObject +//! \instantiates QQuickPlatformMenuBar + \inqmlmodule Qt.labs.platform + \since 5.8 + \brief A native menubar. + + The MenuBar type provides a QML API for native platform menubars. + + \image qtlabsplatform-menubar.png + + A menubar consists of a list of drop-down menus. + + \code + MenuBar { + id: menuBar + + Menu { + id: fileMenu + title: qsTr("File") + // ... + } + + Menu { + id: editMenu + title: qsTr("&Edit") + // ... + } + + Menu { + id: viewMenu + title: qsTr("&View") + // ... + } + + Menu { + id: helpMenu + title: qsTr("&Help") + // ... + } + } + \endcode + + MenuBar is currently available on the following platforms: + + \list + \li macOS + \li Android + \li Linux (only available on desktop environments that provide a global D-Bus menu bar) + \endlist + + \labs + + \sa Menu +*/ + +Q_DECLARE_LOGGING_CATEGORY(qtLabsPlatformMenus) + +QQuickPlatformMenuBar::QQuickPlatformMenuBar(QObject *parent) + : QObject(parent), + m_complete(false), + m_window(nullptr), + m_handle(nullptr) +{ + m_handle = QGuiApplicationPrivate::platformTheme()->createPlatformMenuBar(); + qCDebug(qtLabsPlatformMenus) << "MenuBar ->" << m_handle; +} + +QQuickPlatformMenuBar::~QQuickPlatformMenuBar() +{ + for (QQuickPlatformMenu *menu : qAsConst(m_menus)) + menu->setMenuBar(nullptr); + delete m_handle; + m_handle = nullptr; +} + +QPlatformMenuBar *QQuickPlatformMenuBar::handle() const +{ + return m_handle; +} + +/*! + \qmldefault + \qmlproperty list Qt.labs.platform::MenuBar::data + + This default property holds the list of all objects declared as children of + the menubar. The data property includes objects that are not \l Menu instances, + such as \l Timer and \l QtObject. + + \sa menus +*/ +QQmlListProperty QQuickPlatformMenuBar::data() +{ + return QQmlListProperty(this, nullptr, data_append, data_count, data_at, data_clear); +} + +/*! + \qmlproperty list Qt.labs.platform::MenuBar::menus + + This property holds the list of menus in the menubar. +*/ +QQmlListProperty QQuickPlatformMenuBar::menus() +{ + return QQmlListProperty(this, nullptr, menus_append, menus_count, menus_at, menus_clear); +} + +/*! + \qmlproperty Window Qt.labs.platform::MenuBar::window + + This property holds the menubar's window. + + Unless explicitly set, the window is automatically resolved by iterating + the QML parent objects until a \l Window or an \l Item that has a window + is found. +*/ +QWindow *QQuickPlatformMenuBar::window() const +{ + return m_window; +} + +void QQuickPlatformMenuBar::setWindow(QWindow *window) +{ + if (m_window == window) + return; + + if (m_handle) + m_handle->handleReparent(window); + + m_window = window; + emit windowChanged(); +} + +/*! + \qmlmethod void Qt.labs.platform::MenuBar::addMenu(Menu menu) + + Adds a \a menu to end of the menubar. +*/ +void QQuickPlatformMenuBar::addMenu(QQuickPlatformMenu *menu) +{ + insertMenu(m_menus.count(), menu); +} + +/*! + \qmlmethod void Qt.labs.platform::MenuBar::insertMenu(int index, Menu menu) + + Inserts a \a menu at the specified \a index in the menubar. +*/ +void QQuickPlatformMenuBar::insertMenu(int index, QQuickPlatformMenu *menu) +{ + if (!menu || m_menus.contains(menu)) + return; + + QQuickPlatformMenu *before = m_menus.value(index); + m_menus.insert(index, menu); + m_data.append(menu); + menu->setMenuBar(this); + if (m_handle) + m_handle->insertMenu(menu->create(), before ? before->handle() : nullptr); + menu->sync(); + emit menusChanged(); +} + +/*! + \qmlmethod void Qt.labs.platform::MenuBar::removeMenu(Menu menu) + + Removes a \a menu from the menubar. +*/ +void QQuickPlatformMenuBar::removeMenu(QQuickPlatformMenu *menu) +{ + if (!menu || !m_menus.removeOne(menu)) + return; + + m_data.removeOne(menu); + if (m_handle) + m_handle->removeMenu(menu->handle()); + menu->setMenuBar(nullptr); + emit menusChanged(); +} + +/*! + \qmlmethod void Qt.labs.platform::MenuBar::clear() + + Removes all menus from the menubar. +*/ +void QQuickPlatformMenuBar::clear() +{ + if (m_menus.isEmpty()) + return; + + for (QQuickPlatformMenu *menu : qAsConst(m_menus)) { + m_data.removeOne(menu); + if (m_handle) + m_handle->removeMenu(menu->handle()); + menu->setMenuBar(nullptr); + delete menu; + } + + m_menus.clear(); + emit menusChanged(); +} + +void QQuickPlatformMenuBar::classBegin() +{ +} + +void QQuickPlatformMenuBar::componentComplete() +{ + m_complete = true; + for (QQuickPlatformMenu *menu : qAsConst(m_menus)) + menu->sync(); + if (!m_window) + setWindow(findWindow()); +} + +QWindow *QQuickPlatformMenuBar::findWindow() const +{ + QObject *obj = parent(); + while (obj) { + QWindow *window = qobject_cast(obj); + if (window) + return window; + QQuickItem *item = qobject_cast(obj); + if (item && item->window()) + return item->window(); + obj = obj->parent(); + } + return nullptr; +} + +void QQuickPlatformMenuBar::data_append(QQmlListProperty *property, QObject *object) +{ + QQuickPlatformMenuBar *menuBar = static_cast(property->object); + QQuickPlatformMenu *menu = qobject_cast(object); + if (menu) + menuBar->addMenu(menu); + else + menuBar->m_data.append(object); +} + +qsizetype QQuickPlatformMenuBar::data_count(QQmlListProperty *property) +{ + QQuickPlatformMenuBar *menuBar = static_cast(property->object); + return menuBar->m_data.count(); +} + +QObject *QQuickPlatformMenuBar::data_at(QQmlListProperty *property, qsizetype index) +{ + QQuickPlatformMenuBar *menuBar = static_cast(property->object); + return menuBar->m_data.value(index); +} + +void QQuickPlatformMenuBar::data_clear(QQmlListProperty *property) +{ + QQuickPlatformMenuBar *menuBar = static_cast(property->object); + menuBar->m_data.clear(); +} + +void QQuickPlatformMenuBar::menus_append(QQmlListProperty *property, QQuickPlatformMenu *menu) +{ + QQuickPlatformMenuBar *menuBar = static_cast(property->object); + menuBar->addMenu(menu); +} + +qsizetype QQuickPlatformMenuBar::menus_count(QQmlListProperty *property) +{ + QQuickPlatformMenuBar *menuBar = static_cast(property->object); + return menuBar->m_menus.count(); +} + +QQuickPlatformMenu *QQuickPlatformMenuBar::menus_at(QQmlListProperty *property, qsizetype index) +{ + QQuickPlatformMenuBar *menuBar = static_cast(property->object); + return menuBar->m_menus.value(index); +} + +void QQuickPlatformMenuBar::menus_clear(QQmlListProperty *property) +{ + QQuickPlatformMenuBar *menuBar = static_cast(property->object); + menuBar->clear(); +} + +QT_END_NAMESPACE + +#include "moc_qquickplatformmenubar_p.cpp" diff --git a/src/labs/platform/qquickplatformmenubar_p.h b/src/labs/platform/qquickplatformmenubar_p.h new file mode 100644 index 00000000..e644c86c --- /dev/null +++ b/src/labs/platform/qquickplatformmenubar_p.h @@ -0,0 +1,120 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKPLATFORMMENUBAR_P_H +#define QQUICKPLATFORMMENUBAR_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 +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QWindow; +class QPlatformMenuBar; +class QQuickPlatformMenu; + +class QQuickPlatformMenuBar : public QObject, public QQmlParserStatus +{ + Q_OBJECT + Q_INTERFACES(QQmlParserStatus) + Q_PROPERTY(QQmlListProperty data READ data FINAL) + Q_PROPERTY(QQmlListProperty menus READ menus NOTIFY menusChanged FINAL) + Q_PROPERTY(QWindow *window READ window WRITE setWindow NOTIFY windowChanged FINAL) + Q_CLASSINFO("DefaultProperty", "data") + +public: + explicit QQuickPlatformMenuBar(QObject *parent = nullptr); + ~QQuickPlatformMenuBar(); + + QPlatformMenuBar *handle() const; + + QQmlListProperty data(); + QQmlListProperty menus(); + + QWindow *window() const; + void setWindow(QWindow *window); + + Q_INVOKABLE void addMenu(QQuickPlatformMenu *menu); + Q_INVOKABLE void insertMenu(int index, QQuickPlatformMenu *menu); + Q_INVOKABLE void removeMenu(QQuickPlatformMenu *menu); + Q_INVOKABLE void clear(); + +Q_SIGNALS: + void menusChanged(); + void windowChanged(); + +protected: + void classBegin() override; + void componentComplete() override; + + QWindow *findWindow() const; + + static void data_append(QQmlListProperty *property, QObject *object); + static qsizetype data_count(QQmlListProperty *property); + static QObject *data_at(QQmlListProperty *property, qsizetype index); + static void data_clear(QQmlListProperty *property); + + static void menus_append(QQmlListProperty *property, QQuickPlatformMenu *menu); + static qsizetype menus_count(QQmlListProperty *property); + static QQuickPlatformMenu *menus_at(QQmlListProperty *property, qsizetype index); + static void menus_clear(QQmlListProperty *property); + +private: + bool m_complete; + QWindow *m_window; + QList m_data; + QList m_menus; + QPlatformMenuBar *m_handle; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickPlatformMenuBar) + +#endif // QQUICKPLATFORMMENUBAR_P_H diff --git a/src/labs/platform/qquickplatformmenuitem.cpp b/src/labs/platform/qquickplatformmenuitem.cpp new file mode 100644 index 00000000..4f61d423 --- /dev/null +++ b/src/labs/platform/qquickplatformmenuitem.cpp @@ -0,0 +1,641 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickplatformmenuitem_p.h" +#include "qquickplatformmenu_p.h" +#include "qquickplatformmenuitemgroup_p.h" +#include "qquickplatformiconloader_p.h" + +#include +#if QT_CONFIG(shortcut) +#include +#endif +#include +#include +#include + +#include "widgets/qwidgetplatform_p.h" + +QT_BEGIN_NAMESPACE + +/*! + \qmltype MenuItem + \inherits QtObject +//! \instantiates QQuickPlatformMenuItem + \inqmlmodule Qt.labs.platform + \since 5.8 + \brief A native menu item. + + The MenuItem type provides a QML API for native platform menu items. + + \image qtlabsplatform-menu.png + + A menu item consists of an \l icon, \l text, and \l shortcut. + + \code + Menu { + id: zoomMenu + + MenuItem { + text: qsTr("Zoom In") + shortcut: StandardKey.ZoomIn + onTriggered: zoomIn() + } + + MenuItem { + text: qsTr("Zoom Out") + shortcut: StandardKey.ZoomOut + onTriggered: zoomOut() + } + } + \endcode + + \labs + + \sa Menu, MenuItemGroup +*/ + +/*! + \qmlsignal Qt.labs.platform::MenuItem::triggered() + + This signal is emitted when the menu item is triggered by the user. +*/ + +/*! + \qmlsignal Qt.labs.platform::MenuItem::hovered() + + This signal is emitted when the menu item is hovered by the user. +*/ + +QQuickPlatformMenuItem::QQuickPlatformMenuItem(QObject *parent) + : QObject(parent), + m_complete(false), + m_enabled(true), + m_visible(true), + m_separator(false), + m_checkable(false), + m_checked(false), + m_role(QPlatformMenuItem::TextHeuristicRole), + m_menu(nullptr), + m_subMenu(nullptr), + m_group(nullptr), + m_iconLoader(nullptr), + m_handle(nullptr) +{ +} + +QQuickPlatformMenuItem::~QQuickPlatformMenuItem() +{ + if (m_menu) + m_menu->removeItem(this); + if (m_group) + m_group->removeItem(this); +#if QT_CONFIG(shortcut) + if (m_shortcutId != -1) { + QKeySequence sequence; + if (m_shortcut.metaType().id() == QMetaType::Int) + sequence = QKeySequence(static_cast(m_shortcut.toInt())); + else + sequence = QKeySequence::fromString(m_shortcut.toString()); + QGuiApplicationPrivate::instance()->shortcutMap.removeShortcut(m_shortcutId, this, sequence); + } +#endif + delete m_iconLoader; + m_iconLoader = nullptr; + delete m_handle; + m_handle = nullptr; +} + +QPlatformMenuItem *QQuickPlatformMenuItem::handle() const +{ + return m_handle; +} + +QPlatformMenuItem *QQuickPlatformMenuItem::create() +{ + if (!m_handle && m_menu && m_menu->handle()) { + m_handle = m_menu->handle()->createMenuItem(); + + // TODO: implement QCocoaMenu::createMenuItem() + if (!m_handle) + m_handle = QGuiApplicationPrivate::platformTheme()->createPlatformMenuItem(); + + if (!m_handle) + m_handle = QWidgetPlatform::createMenuItem(); + + if (m_handle) { + connect(m_handle, &QPlatformMenuItem::activated, this, &QQuickPlatformMenuItem::activate); + connect(m_handle, &QPlatformMenuItem::hovered, this, &QQuickPlatformMenuItem::hovered); + } + } + return m_handle; +} + +void QQuickPlatformMenuItem::sync() +{ + if (!m_complete || !create()) + return; + + m_handle->setEnabled(isEnabled()); + m_handle->setVisible(isVisible()); + m_handle->setIsSeparator(m_separator); + m_handle->setCheckable(m_checkable); + m_handle->setChecked(m_checked); + m_handle->setRole(m_role); + m_handle->setText(m_text); + m_handle->setFont(m_font); + m_handle->setHasExclusiveGroup(m_group && m_group->isExclusive()); + if (m_subMenu) { + // Sync first as dynamically created menus may need to get the + // handle recreated + m_subMenu->sync(); + if (m_subMenu->handle()) + m_handle->setMenu(m_subMenu->handle()); + } + +#if QT_CONFIG(shortcut) + QKeySequence sequence; + if (m_shortcut.metaType().id() == QMetaType::Int) + sequence = QKeySequence(static_cast(m_shortcut.toInt())); + else + sequence = QKeySequence::fromString(m_shortcut.toString()); + m_handle->setShortcut(sequence.toString()); +#endif + + if (m_menu && m_menu->handle()) + m_menu->handle()->syncMenuItem(m_handle); +} + +/*! + \readonly + \qmlproperty Menu Qt.labs.platform::MenuItem::menu + + This property holds the menu that the item belongs to, or \c null if the + item is not in a menu. +*/ +QQuickPlatformMenu *QQuickPlatformMenuItem::menu() const +{ + return m_menu; +} + +void QQuickPlatformMenuItem::setMenu(QQuickPlatformMenu *menu) +{ + if (m_menu == menu) + return; + + m_menu = menu; + emit menuChanged(); +} + +/*! + \readonly + \qmlproperty Menu Qt.labs.platform::MenuItem::subMenu + + This property holds the sub-menu that the item contains, or \c null if + the item is not a sub-menu item. +*/ +QQuickPlatformMenu *QQuickPlatformMenuItem::subMenu() const +{ + return m_subMenu; +} + +void QQuickPlatformMenuItem::setSubMenu(QQuickPlatformMenu *menu) +{ + if (m_subMenu == menu) + return; + + m_subMenu = menu; + sync(); + emit subMenuChanged(); +} + +/*! + \qmlproperty MenuItemGroup Qt.labs.platform::MenuItem::group + + This property holds the group that the item belongs to, or \c null if the + item is not in a group. +*/ +QQuickPlatformMenuItemGroup *QQuickPlatformMenuItem::group() const +{ + return m_group; +} + +void QQuickPlatformMenuItem::setGroup(QQuickPlatformMenuItemGroup *group) +{ + if (m_group == group) + return; + + bool wasEnabled = isEnabled(); + bool wasVisible = isVisible(); + + if (group) + group->addItem(this); + + m_group = group; + sync(); + emit groupChanged(); + + if (isEnabled() != wasEnabled) + emit enabledChanged(); + if (isVisible() != wasVisible) + emit visibleChanged(); +} + +/*! + \qmlproperty bool Qt.labs.platform::MenuItem::enabled + + This property holds whether the item is enabled. The default value is \c true. + + Disabled items cannot be triggered by the user. They do not disappear from menus, + but they are displayed in a way which indicates that they are unavailable. For + example, they might be displayed using only shades of gray. + + When an item is disabled, it is not possible to trigger it through its \l shortcut. +*/ +bool QQuickPlatformMenuItem::isEnabled() const +{ + return m_enabled && (!m_group || m_group->isEnabled()); +} + +void QQuickPlatformMenuItem::setEnabled(bool enabled) +{ + if (m_enabled == enabled) + return; + + bool wasEnabled = isEnabled(); + m_enabled = enabled; + sync(); + if (isEnabled() != wasEnabled) + emit enabledChanged(); +} + +/*! + \qmlproperty bool Qt.labs.platform::MenuItem::visible + + This property holds whether the item is visible. The default value is \c true. +*/ +bool QQuickPlatformMenuItem::isVisible() const +{ + return m_visible && (!m_group || m_group->isVisible()); +} + +void QQuickPlatformMenuItem::setVisible(bool visible) +{ + if (m_visible == visible) + return; + + bool wasVisible = isVisible(); + m_visible = visible; + sync(); + if (isVisible() != wasVisible) + emit visibleChanged(); +} + +/*! + \qmlproperty bool Qt.labs.platform::MenuItem::separator + + This property holds whether the item is a separator line. The default value + is \c false. + + \sa MenuSeparator +*/ +bool QQuickPlatformMenuItem::isSeparator() const +{ + return m_separator; +} + +void QQuickPlatformMenuItem::setSeparator(bool separator) +{ + if (m_separator == separator) + return; + + m_separator = separator; + sync(); + emit separatorChanged(); +} + +/*! + \qmlproperty bool Qt.labs.platform::MenuItem::checkable + + This property holds whether the item is checkable. + + A checkable menu item has an on/off state. For example, in a word processor, + a "Bold" menu item may be either on or off. A menu item that is not checkable + is a command item that is simply executed, e.g. file save. + + The default value is \c false. + + \sa checked, MenuItemGroup +*/ +bool QQuickPlatformMenuItem::isCheckable() const +{ + return m_checkable; +} + +void QQuickPlatformMenuItem::setCheckable(bool checkable) +{ + if (m_checkable == checkable) + return; + + m_checkable = checkable; + sync(); + emit checkableChanged(); +} + +/*! + \qmlproperty bool Qt.labs.platform::MenuItem::checked + + This property holds whether the item is checked (on) or unchecked (off). + The default value is \c false. + + \sa checkable, MenuItemGroup +*/ +bool QQuickPlatformMenuItem::isChecked() const +{ + return m_checked; +} + +void QQuickPlatformMenuItem::setChecked(bool checked) +{ + if (m_checked == checked) + return; + + if (checked && !m_checkable) + setCheckable(true); + + m_checked = checked; + sync(); + emit checkedChanged(); +} + +/*! + \qmlproperty enumeration Qt.labs.platform::MenuItem::role + + This property holds the role of the item. The role determines whether + the item should be placed into the application menu on macOS. + + Available values: + \value MenuItem.NoRole The item should not be put into the application menu + \value MenuItem.TextHeuristicRole The item should be put in the application menu based on the action's text (default) + \value MenuItem.ApplicationSpecificRole The item should be put in the application menu with an application-specific role + \value MenuItem.AboutQtRole The item handles the "About Qt" menu item. + \value MenuItem.AboutRole The item should be placed where the "About" menu item is in the application menu. The text of + the menu item will be set to "About ". The application name is fetched from the + \c{Info.plist} file in the application's bundle (See \l{Qt for macOS - Deployment}). + \value MenuItem.PreferencesRole The item should be placed where the "Preferences..." menu item is in the application menu. + \value MenuItem.QuitRole The item should be placed where the Quit menu item is in the application menu. + + Specifying the role only has effect on items that are in the immediate + menus of a menubar, not in the submenus of those menus. For example, if + you have a "File" menu in your menubar and the "File" menu has a submenu, + specifying a role for the items in that submenu has no effect. They will + never be moved to the application menu. +*/ +QPlatformMenuItem::MenuRole QQuickPlatformMenuItem::role() const +{ + return m_role; +} + +void QQuickPlatformMenuItem::setRole(QPlatformMenuItem::MenuRole role) +{ + if (m_role == role) + return; + + m_role = role; + sync(); + emit roleChanged(); +} + +/*! + \qmlproperty string Qt.labs.platform::MenuItem::text + + This property holds the menu item's text. +*/ +QString QQuickPlatformMenuItem::text() const +{ + return m_text; +} + +void QQuickPlatformMenuItem::setText(const QString &text) +{ + if (m_text == text) + return; + + m_text = text; + sync(); + emit textChanged(); +} + +/*! + \qmlproperty keysequence Qt.labs.platform::MenuItem::shortcut + + This property holds the menu item's shortcut. + + The shortcut key sequence can be set to one of the + \l{QKeySequence::StandardKey}{standard keyboard shortcuts}, or it can be + specified by a string containing a sequence of up to four key presses + that are needed to \l{triggered}{trigger} the shortcut. + + The default value is an empty key sequence. + + \code + MenuItem { + shortcut: "Ctrl+E,Ctrl+W" + onTriggered: edit.wrapMode = TextEdit.Wrap + } + \endcode +*/ +QVariant QQuickPlatformMenuItem::shortcut() const +{ + return m_shortcut; +} + +bool QQuickPlatformMenuItem::event(QEvent *e) +{ +#if QT_CONFIG(shortcut) + if (e->type() == QEvent::Shortcut) { + QShortcutEvent *se = static_cast(e); + if (se->shortcutId() == m_shortcutId) { + activate(); + return true; + } + } +#endif + return QObject::event(e); +} + +void QQuickPlatformMenuItem::setShortcut(const QVariant& shortcut) +{ + if (m_shortcut == shortcut) + return; + +#if QT_CONFIG(shortcut) + if (m_shortcutId != -1) { + QKeySequence sequence; + if (m_shortcut.metaType().id() == QMetaType::Int) + sequence = QKeySequence(static_cast(m_shortcut.toInt())); + else + sequence = QKeySequence::fromString(m_shortcut.toString()); + QGuiApplicationPrivate::instance()->shortcutMap.removeShortcut(m_shortcutId, this, sequence); + } +#endif + m_shortcut = shortcut; + sync(); +#if QT_CONFIG(shortcut) + QKeySequence sequence; + if (m_shortcut.metaType().id() == QMetaType::Int) + sequence = QKeySequence(static_cast(m_shortcut.toInt())); + else + sequence = QKeySequence::fromString(m_shortcut.toString()); + if (!sequence.isEmpty()) { + m_shortcutId = QGuiApplicationPrivate::instance()->shortcutMap.addShortcut(this, sequence, + Qt::WindowShortcut, QQuickShortcutContext::matcher); + } else { + m_shortcutId = -1; + } +#endif + emit shortcutChanged(); +} + +/*! + \qmlproperty font Qt.labs.platform::MenuItem::font + + This property holds the menu item's font. + + \sa text +*/ +QFont QQuickPlatformMenuItem::font() const +{ + return m_font; +} + +void QQuickPlatformMenuItem::setFont(const QFont& font) +{ + if (m_font == font) + return; + + m_font = font; + sync(); + emit fontChanged(); +} + +/*! + \since Qt.labs.platform 1.1 (Qt 5.12) + \qmlproperty url Qt.labs.platform::MenuItem::icon.source + \qmlproperty string Qt.labs.platform::MenuItem::icon.name + \qmlproperty bool Qt.labs.platform::MenuItem::icon.mask + + This property holds the menu item's icon. + + \code + MenuItem { + icon.mask: true + icon.name: "edit-undo" + icon.source: "qrc:/images/undo.png" + } + \endcode + + \sa QIcon::fromTheme() +*/ +QQuickPlatformIcon QQuickPlatformMenuItem::icon() const +{ + if (!m_iconLoader) + return QQuickPlatformIcon(); + + return m_iconLoader->icon(); +} + +void QQuickPlatformMenuItem::setIcon(const QQuickPlatformIcon &icon) +{ + if (iconLoader()->icon() == icon) + return; + + iconLoader()->setIcon(icon); + emit iconChanged(); +} + +/*! + \qmlmethod void Qt.labs.platform::MenuItem::toggle() + + Toggles the \l checked state to its opposite state. +*/ +void QQuickPlatformMenuItem::toggle() +{ + if (m_checkable) + setChecked(!m_checked); +} + +void QQuickPlatformMenuItem::classBegin() +{ +} + +void QQuickPlatformMenuItem::componentComplete() +{ + if (m_handle && m_iconLoader) + m_iconLoader->setEnabled(true); + m_complete = true; + sync(); +} + +QQuickPlatformIconLoader *QQuickPlatformMenuItem::iconLoader() const +{ + if (!m_iconLoader) { + QQuickPlatformMenuItem *that = const_cast(this); + static int slot = staticMetaObject.indexOfSlot("updateIcon()"); + m_iconLoader = new QQuickPlatformIconLoader(slot, that); + m_iconLoader->setEnabled(m_complete); + } + return m_iconLoader; +} + +void QQuickPlatformMenuItem::activate() +{ + toggle(); + emit triggered(); +} + +void QQuickPlatformMenuItem::updateIcon() +{ + if (!m_handle || !m_iconLoader) + return; + + m_handle->setIcon(m_iconLoader->toQIcon()); + sync(); +} + +QT_END_NAMESPACE + +#include "moc_qquickplatformmenuitem_p.cpp" diff --git a/src/labs/platform/qquickplatformmenuitem_p.h b/src/labs/platform/qquickplatformmenuitem_p.h new file mode 100644 index 00000000..01b7482d --- /dev/null +++ b/src/labs/platform/qquickplatformmenuitem_p.h @@ -0,0 +1,191 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKPLATFORMMENUITEM_P_H +#define QQUICKPLATFORMMENUITEM_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 +#include +#include +#include +#include +#include + +#include "qquickplatformicon_p.h" + +QT_BEGIN_NAMESPACE + +class QPlatformMenuItem; +class QQuickPlatformMenu; +class QQuickPlatformIconLoader; +class QQuickPlatformMenuItemGroup; + +class QQuickPlatformMenuItem : public QObject, public QQmlParserStatus +{ + Q_OBJECT + Q_INTERFACES(QQmlParserStatus) + Q_PROPERTY(QQuickPlatformMenu *menu READ menu NOTIFY menuChanged FINAL) + Q_PROPERTY(QQuickPlatformMenu *subMenu READ subMenu NOTIFY subMenuChanged FINAL) + Q_PROPERTY(QQuickPlatformMenuItemGroup *group READ group WRITE setGroup NOTIFY groupChanged FINAL) + Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged FINAL) + Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL) + Q_PROPERTY(bool separator READ isSeparator WRITE setSeparator NOTIFY separatorChanged FINAL) + Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable NOTIFY checkableChanged FINAL) + Q_PROPERTY(bool checked READ isChecked WRITE setChecked NOTIFY checkedChanged FINAL) + Q_PROPERTY(QPlatformMenuItem::MenuRole role READ role WRITE setRole NOTIFY roleChanged FINAL) + Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged FINAL) + Q_PROPERTY(QVariant shortcut READ shortcut WRITE setShortcut NOTIFY shortcutChanged FINAL) + Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged FINAL) + Q_PROPERTY(QQuickPlatformIcon icon READ icon WRITE setIcon NOTIFY iconChanged FINAL REVISION(1, 1)) + Q_ENUMS(QPlatformMenuItem::MenuRole) + +public: + explicit QQuickPlatformMenuItem(QObject *parent = nullptr); + ~QQuickPlatformMenuItem(); + + QPlatformMenuItem *handle() const; + QPlatformMenuItem *create(); + void sync(); + + QQuickPlatformMenu *menu() const; + void setMenu(QQuickPlatformMenu* menu); + + QQuickPlatformMenu *subMenu() const; + void setSubMenu(QQuickPlatformMenu *menu); + + QQuickPlatformMenuItemGroup *group() const; + void setGroup(QQuickPlatformMenuItemGroup *group); + + bool isEnabled() const; + void setEnabled(bool enabled); + + bool isVisible() const; + void setVisible(bool visible); + + bool isSeparator() const; + void setSeparator(bool separator); + + bool isCheckable() const; + void setCheckable(bool checkable); + + bool isChecked() const; + void setChecked(bool checked); + + QPlatformMenuItem::MenuRole role() const; + void setRole(QPlatformMenuItem::MenuRole role); + + QString text() const; + void setText(const QString &text); + + QVariant shortcut() const; + void setShortcut(const QVariant& shortcut); + + QFont font() const; + void setFont(const QFont &font); + + QQuickPlatformIcon icon() const; + void setIcon(const QQuickPlatformIcon &icon); + +public Q_SLOTS: + void toggle(); + +Q_SIGNALS: + void triggered(); + void hovered(); + + void menuChanged(); + void subMenuChanged(); + void groupChanged(); + void enabledChanged(); + void visibleChanged(); + void separatorChanged(); + void checkableChanged(); + void checkedChanged(); + void roleChanged(); + void textChanged(); + void shortcutChanged(); + void fontChanged(); + Q_REVISION(2, 1) void iconChanged(); + +protected: + void classBegin() override; + void componentComplete() override; + + QQuickPlatformIconLoader *iconLoader() const; + + bool event(QEvent *e) override; +private Q_SLOTS: + void activate(); + void updateIcon(); + +private: + bool m_complete; + bool m_enabled; + bool m_visible; + bool m_separator; + bool m_checkable; + bool m_checked; + QPlatformMenuItem::MenuRole m_role; + QString m_text; + QVariant m_shortcut; + QFont m_font; + QQuickPlatformMenu *m_menu; + QQuickPlatformMenu *m_subMenu; + QQuickPlatformMenuItemGroup *m_group; + mutable QQuickPlatformIconLoader *m_iconLoader; + QPlatformMenuItem *m_handle; + int m_shortcutId = -1; + + friend class QQuickPlatformMenu; + friend class QQuickPlatformMenuItemGroup; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickPlatformMenuItem) + +#endif // QQUICKPLATFORMMENUITEM_P_H diff --git a/src/labs/platform/qquickplatformmenuitemgroup.cpp b/src/labs/platform/qquickplatformmenuitemgroup.cpp new file mode 100644 index 00000000..fcfcc664 --- /dev/null +++ b/src/labs/platform/qquickplatformmenuitemgroup.cpp @@ -0,0 +1,392 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Templates module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickplatformmenuitemgroup_p.h" +#include "qquickplatformmenuitem_p.h" + +QT_BEGIN_NAMESPACE + +/*! + \qmltype MenuItemGroup + \inherits QtObject +//! \instantiates QQuickPlatformMenuItemGroup + \inqmlmodule Qt.labs.platform + \since 5.8 + \brief A group for managing native menu items. + + The MenuItemGroup groups native menu items together. + + MenuItemGroup is exclusive by default. In an exclusive menu item + group, only one item can be checked at any time; checking another + item automatically unchecks the previously checked one. MenuItemGroup + can be configured as non-exclusive, which is particularly useful for + showing, hiding, enabling and disabling items together as a group. + + The most straight-forward way to use MenuItemGroup is to assign + a list of items. + + \code + Menu { + id: verticalMenu + title: qsTr("Vertical") + + MenuItemGroup { + id: verticalGroup + items: verticalMenu.items + } + + MenuItem { text: qsTr("Top"); checkable: true } + MenuItem { text: qsTr("Center"); checked: true } + MenuItem { text: qsTr("Bottom"); checkable: true } + } + \endcode + + The same menu may sometimes contain items that should not be included + in the same exclusive group. Such cases are best handled using the + \l {MenuItem::group}{group} property. + + \code + Menu { + id: horizontalMenu + title: qsTr("Horizontal") + + MenuItemGroup { + id: horizontalGroup + } + + MenuItem { + checked: true + text: qsTr("Left") + group: horizontalGroup + } + MenuItem { + checkable: true + text: qsTr("Center") + group: horizontalGroup + } + MenuItem { + text: qsTr("Right") + checkable: true + group: horizontalGroup + } + + MenuItem { separator: true } + MenuItem { text: qsTr("Justify"); checkable: true } + MenuItem { text: qsTr("Absolute"); checkable: true } + } + \endcode + + More advanced use cases can be handled using the addItem() and + removeItem() methods. + + \labs + + \sa MenuItem +*/ + +/*! + \qmlsignal Qt.labs.platform::MenuItemGroup::triggered(MenuItem item) + + This signal is emitted when an \a item in the group is triggered by the user. + + \sa MenuItem::triggered() +*/ + +/*! + \qmlsignal Qt.labs.platform::MenuItemGroup::hovered(MenuItem item) + + This signal is emitted when an \a item in the group is hovered by the user. + + \sa MenuItem::hovered() +*/ + +QQuickPlatformMenuItemGroup::QQuickPlatformMenuItemGroup(QObject *parent) + : QObject(parent), m_enabled(true), m_visible(true), m_exclusive(true), m_checkedItem(nullptr) +{ +} + +QQuickPlatformMenuItemGroup::~QQuickPlatformMenuItemGroup() +{ + clear(); +} + +/*! + \qmlproperty bool Qt.labs.platform::MenuItemGroup::enabled + + This property holds whether the group is enabled. The default value is \c true. + + The enabled state of the group affects the enabled state of each item in the group, + except that explicitly disabled items are not enabled even if the group is enabled. +*/ +bool QQuickPlatformMenuItemGroup::isEnabled() const +{ + return m_enabled; +} + +void QQuickPlatformMenuItemGroup::setEnabled(bool enabled) +{ + if (m_enabled == enabled) + return; + + m_enabled = enabled; + emit enabledChanged(); + + for (QQuickPlatformMenuItem *item : qAsConst(m_items)) { + if (item->m_enabled) { + item->sync(); + emit item->enabledChanged(); + } + } +} + +/*! + \qmlproperty bool Qt.labs.platform::MenuItemGroup::visible + + This property holds whether the group is visible. The default value is \c true. + + The visibility of the group affects the visibility of each item in the group, + except that explicitly hidden items are not visible even if the group is visible. +*/ +bool QQuickPlatformMenuItemGroup::isVisible() const +{ + return m_visible; +} + +void QQuickPlatformMenuItemGroup::setVisible(bool visible) +{ + if (m_visible == visible) + return; + + m_visible = visible; + emit visibleChanged(); + + for (QQuickPlatformMenuItem *item : qAsConst(m_items)) { + if (item->m_visible) { + item->sync(); + emit item->visibleChanged(); + } + } +} + +/*! + \qmlproperty bool Qt.labs.platform::MenuItemGroup::exclusive + + This property holds whether the group is exclusive. The default value is \c true. + + In an exclusive menu item group, only one item can be checked at any time; + checking another item automatically unchecks the previously checked one. +*/ +bool QQuickPlatformMenuItemGroup::isExclusive() const +{ + return m_exclusive; +} + +void QQuickPlatformMenuItemGroup::setExclusive(bool exclusive) +{ + if (m_exclusive == exclusive) + return; + + m_exclusive = exclusive; + emit exclusiveChanged(); + + for (QQuickPlatformMenuItem *item : qAsConst(m_items)) + item->sync(); +} + +/*! + \qmlproperty MenuItem Qt.labs.platform::MenuItemGroup::checkedItem + + This property holds the currently checked item in the group, or \c null if no item is checked. +*/ +QQuickPlatformMenuItem *QQuickPlatformMenuItemGroup::checkedItem() const +{ + return m_checkedItem; +} + +void QQuickPlatformMenuItemGroup::setCheckedItem(QQuickPlatformMenuItem *item) +{ + if (m_checkedItem == item) + return; + + if (m_checkedItem) + m_checkedItem->setChecked(false); + + m_checkedItem = item; + emit checkedItemChanged(); + + if (item) + item->setChecked(true); +} + +/*! + \qmlproperty list Qt.labs.platform::MenuItemGroup::items + + This property holds the list of items in the group. +*/ +QQmlListProperty QQuickPlatformMenuItemGroup::items() +{ + return QQmlListProperty(this, nullptr, items_append, items_count, items_at, items_clear); +} + +/*! + \qmlmethod void Qt.labs.platform::MenuItemGroup::addItem(MenuItem item) + + Adds an \a item to the group. +*/ +void QQuickPlatformMenuItemGroup::addItem(QQuickPlatformMenuItem *item) +{ + if (!item || m_items.contains(item)) + return; + + m_items.append(item); + item->setGroup(this); + + connect(item, &QQuickPlatformMenuItem::checkedChanged, this, &QQuickPlatformMenuItemGroup::updateCurrent); + connect(item, &QQuickPlatformMenuItem::triggered, this, &QQuickPlatformMenuItemGroup::activateItem); + connect(item, &QQuickPlatformMenuItem::hovered, this, &QQuickPlatformMenuItemGroup::hoverItem); + + if (m_exclusive && item->isChecked()) + setCheckedItem(item); + + emit itemsChanged(); +} + +/*! + \qmlmethod void Qt.labs.platform::MenuItemGroup::removeItem(MenuItem item) + + Removes an \a item from the group. +*/ +void QQuickPlatformMenuItemGroup::removeItem(QQuickPlatformMenuItem *item) +{ + if (!item || !m_items.contains(item)) + return; + + m_items.removeOne(item); + item->setGroup(nullptr); + + disconnect(item, &QQuickPlatformMenuItem::checkedChanged, this, &QQuickPlatformMenuItemGroup::updateCurrent); + disconnect(item, &QQuickPlatformMenuItem::triggered, this, &QQuickPlatformMenuItemGroup::activateItem); + disconnect(item, &QQuickPlatformMenuItem::hovered, this, &QQuickPlatformMenuItemGroup::hoverItem); + + if (m_checkedItem == item) + setCheckedItem(nullptr); + + emit itemsChanged(); +} + +/*! + \qmlmethod void Qt.labs.platform::MenuItemGroup::clear() + + Removes all items from the group. +*/ +void QQuickPlatformMenuItemGroup::clear() +{ + if (m_items.isEmpty()) + return; + + for (QQuickPlatformMenuItem *item : qAsConst(m_items)) { + item->setGroup(nullptr); + disconnect(item, &QQuickPlatformMenuItem::checkedChanged, this, &QQuickPlatformMenuItemGroup::updateCurrent); + disconnect(item, &QQuickPlatformMenuItem::triggered, this, &QQuickPlatformMenuItemGroup::activateItem); + disconnect(item, &QQuickPlatformMenuItem::hovered, this, &QQuickPlatformMenuItemGroup::hoverItem); + } + + setCheckedItem(nullptr); + + m_items.clear(); + emit itemsChanged(); +} + +QQuickPlatformMenuItem *QQuickPlatformMenuItemGroup::findCurrent() const +{ + for (QQuickPlatformMenuItem *item : m_items) { + if (item->isChecked()) + return item; + } + return nullptr; +} + +void QQuickPlatformMenuItemGroup::updateCurrent() +{ + if (!m_exclusive) + return; + + QQuickPlatformMenuItem *item = qobject_cast(sender()); + if (item && item->isChecked()) + setCheckedItem(item); +} + +void QQuickPlatformMenuItemGroup::activateItem() +{ + QQuickPlatformMenuItem *item = qobject_cast(sender()); + if (item) + emit triggered(item); +} + +void QQuickPlatformMenuItemGroup::hoverItem() +{ + QQuickPlatformMenuItem *item = qobject_cast(sender()); + if (item) + emit hovered(item); +} + +void QQuickPlatformMenuItemGroup::items_append(QQmlListProperty *prop, QQuickPlatformMenuItem *item) +{ + QQuickPlatformMenuItemGroup *group = static_cast(prop->object); + group->addItem(item); +} + +qsizetype QQuickPlatformMenuItemGroup::items_count(QQmlListProperty *prop) +{ + QQuickPlatformMenuItemGroup *group = static_cast(prop->object); + return group->m_items.count(); +} + +QQuickPlatformMenuItem *QQuickPlatformMenuItemGroup::items_at(QQmlListProperty *prop, qsizetype index) +{ + QQuickPlatformMenuItemGroup *group = static_cast(prop->object); + return group->m_items.value(index); +} + +void QQuickPlatformMenuItemGroup::items_clear(QQmlListProperty *prop) +{ + QQuickPlatformMenuItemGroup *group = static_cast(prop->object); + group->clear(); +} + +QT_END_NAMESPACE + +#include "moc_qquickplatformmenuitemgroup_p.cpp" diff --git a/src/labs/platform/qquickplatformmenuitemgroup_p.h b/src/labs/platform/qquickplatformmenuitemgroup_p.h new file mode 100644 index 00000000..7407d266 --- /dev/null +++ b/src/labs/platform/qquickplatformmenuitemgroup_p.h @@ -0,0 +1,123 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Templates module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKPLATFORMMENUITEMGROUP_P_H +#define QQUICKPLATFORMMENUITEMGROUP_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 +#include +#include + +QT_BEGIN_NAMESPACE + +class QQuickPlatformMenuItem; +class QQuickPlatformMenuItemGroupPrivate; + +class QQuickPlatformMenuItemGroup : public QObject +{ + Q_OBJECT + Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged FINAL) + Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL) + Q_PROPERTY(bool exclusive READ isExclusive WRITE setExclusive NOTIFY exclusiveChanged FINAL) + Q_PROPERTY(QQuickPlatformMenuItem *checkedItem READ checkedItem WRITE setCheckedItem NOTIFY checkedItemChanged FINAL) + Q_PROPERTY(QQmlListProperty items READ items NOTIFY itemsChanged FINAL) + +public: + explicit QQuickPlatformMenuItemGroup(QObject *parent = nullptr); + ~QQuickPlatformMenuItemGroup(); + + bool isEnabled() const; + void setEnabled(bool enabled); + + bool isVisible() const; + void setVisible(bool visible); + + bool isExclusive() const; + void setExclusive(bool exclusive); + + QQuickPlatformMenuItem *checkedItem() const; + void setCheckedItem(QQuickPlatformMenuItem *item); + + QQmlListProperty items(); + + Q_INVOKABLE void addItem(QQuickPlatformMenuItem *item); + Q_INVOKABLE void removeItem(QQuickPlatformMenuItem *item); + Q_INVOKABLE void clear(); + +Q_SIGNALS: + void triggered(QQuickPlatformMenuItem *item); + void hovered(QQuickPlatformMenuItem *item); + + void enabledChanged(); + void visibleChanged(); + void exclusiveChanged(); + void checkedItemChanged(); + void itemsChanged(); + +private: + QQuickPlatformMenuItem *findCurrent() const; + void updateCurrent(); + void activateItem(); + void hoverItem(); + + static void items_append(QQmlListProperty *prop, QQuickPlatformMenuItem *obj); + static qsizetype items_count(QQmlListProperty *prop); + static QQuickPlatformMenuItem *items_at(QQmlListProperty *prop, qsizetype index); + static void items_clear(QQmlListProperty *prop); + + bool m_enabled; + bool m_visible; + bool m_exclusive; + QQuickPlatformMenuItem *m_checkedItem; + QList m_items; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickPlatformMenuItemGroup) + +#endif // QQUICKPLATFORMMENUITEMGROUP_P_H diff --git a/src/labs/platform/qquickplatformmenuseparator.cpp b/src/labs/platform/qquickplatformmenuseparator.cpp new file mode 100644 index 00000000..f29d5b9e --- /dev/null +++ b/src/labs/platform/qquickplatformmenuseparator.cpp @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickplatformmenuseparator_p.h" + +QT_BEGIN_NAMESPACE + +/*! + \qmltype MenuSeparator + \inherits MenuItem +//! \instantiates QQuickPlatformMenuSeparator + \inqmlmodule Qt.labs.platform + \since 5.8 + \brief A native menu separator. + + The MenuSeparator type is provided for convenience. It is a MenuItem + that has the \l {MenuItem::}{separator} property set to \c true by default. + + \image qtlabsplatform-menubar.png + + \labs + + \sa Menu, MenuItem +*/ + +QQuickPlatformMenuSeparator::QQuickPlatformMenuSeparator(QObject *parent) + : QQuickPlatformMenuItem(parent) +{ + setSeparator(true); +} + +QT_END_NAMESPACE diff --git a/src/labs/platform/qquickplatformmenuseparator_p.h b/src/labs/platform/qquickplatformmenuseparator_p.h new file mode 100644 index 00000000..9fe973c5 --- /dev/null +++ b/src/labs/platform/qquickplatformmenuseparator_p.h @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKPLATFORMMENUSEPARATOR_P_H +#define QQUICKPLATFORMMENUSEPARATOR_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 "qquickplatformmenuitem_p.h" + +QT_BEGIN_NAMESPACE + +class QQuickPlatformMenuSeparator : public QQuickPlatformMenuItem +{ + Q_OBJECT + +public: + explicit QQuickPlatformMenuSeparator(QObject *parent = nullptr); +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickPlatformMenuSeparator) + +#endif // QQUICKPLATFORMMENUSEPARATOR_P_H diff --git a/src/labs/platform/qquickplatformmessagedialog.cpp b/src/labs/platform/qquickplatformmessagedialog.cpp new file mode 100644 index 00000000..f2e0970c --- /dev/null +++ b/src/labs/platform/qquickplatformmessagedialog.cpp @@ -0,0 +1,382 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickplatformmessagedialog_p.h" + +#include + +QT_BEGIN_NAMESPACE + +/*! + \qmltype MessageDialog + \inherits Dialog +//! \instantiates QQuickPlatformMessageDialog + \inqmlmodule Qt.labs.platform + \since 5.8 + \brief A native message dialog. + + The MessageDialog type provides a QML API for native platform message dialogs. + + \image qtlabsplatform-messagedialog-android.png + + A message dialog is used to inform the user, or ask the user a question. + A message dialog displays a primary \l text to alert the user to a situation, + an \l {informativeText}{informative text} to further explain the alert or to + ask the user a question, and an optional \l {detailedText}{detailed text} to + provide even more data if the user requests it. A message box can also display + a configurable set of \l buttons for accepting a user response. + + To show a message dialog, construct an instance of MessageDialog, set the + desired properties, and call \l {Dialog::}{open()}. + + \code + MessageDialog { + buttons: MessageDialog.Ok + text: "The document has been modified." + } + \endcode + + The user must click the \uicontrol OK button to dismiss the message dialog. + A modal message dialog blocks the rest of the GUI until the message is + dismissed. + + A more elaborate approach than just alerting the user to an event is to + also ask the user what to do about it. Store the question in the + \l {informativeText}{informative text} property, and specify the \l buttons + property to the set of buttons you want as the set of user responses. The + buttons are specified by combining values using the bitwise OR operator. The + display order for the buttons is platform dependent. + + \code + MessageDialog { + text: "The document has been modified." + informativeText: "Do you want to save your changes?" + buttons: MessageDialog.Ok | MessageDialog.Cancel + + onAccepted: document.save() + } + \endcode + + \image qtlabsplatform-messagedialog-informative-android.png + + The \l clicked() signal passes the information of which button was clicked. + + A native platform message dialog is currently available on the following platforms: + + \list + \li iOS + \li Android + \endlist + + \input includes/widgets.qdocinc 1 + + \labs +*/ + +/*! + \qmlsignal Qt.labs.platform::MessageDialog::clicked(button) + + This signal is emitted when a dialog \a button is clicked. + + \sa buttons +*/ + +/*! + \qmlsignal Qt.labs.platform::MessageDialog::okClicked() + + This signal is emitted when \uicontrol Ok is clicked. +*/ + +/*! + \qmlsignal Qt.labs.platform::MessageDialog::saveClicked() + + This signal is emitted when \uicontrol Save is clicked. +*/ + +/*! + \qmlsignal Qt.labs.platform::MessageDialog::saveAllClicked() + + This signal is emitted when \uicontrol {Save All} is clicked. +*/ + +/*! + \qmlsignal Qt.labs.platform::MessageDialog::openClicked() + + This signal is emitted when \uicontrol Open is clicked. +*/ + +/*! + \qmlsignal Qt.labs.platform::MessageDialog::yesClicked() + + This signal is emitted when \uicontrol Yes is clicked. +*/ + +/*! + \qmlsignal Qt.labs.platform::MessageDialog::yesToAllClicked() + + This signal is emitted when \uicontrol {Yes To All} is clicked. +*/ + +/*! + \qmlsignal Qt.labs.platform::MessageDialog::noClicked() + + This signal is emitted when \uicontrol No is clicked. +*/ + +/*! + \qmlsignal Qt.labs.platform::MessageDialog::noToAllClicked() + + This signal is emitted when \uicontrol {No To All} is clicked. +*/ + +/*! + \qmlsignal Qt.labs.platform::MessageDialog::abortClicked() + + This signal is emitted when \uicontrol Abort is clicked. +*/ + +/*! + \qmlsignal Qt.labs.platform::MessageDialog::retryClicked() + + This signal is emitted when \uicontrol Retry is clicked. +*/ + +/*! + \qmlsignal Qt.labs.platform::MessageDialog::ignoreClicked() + + This signal is emitted when \uicontrol Ignore is clicked. +*/ + +/*! + \qmlsignal Qt.labs.platform::MessageDialog::closeClicked() + + This signal is emitted when \uicontrol Close is clicked. +*/ + +/*! + \qmlsignal Qt.labs.platform::MessageDialog::cancelClicked() + + This signal is emitted when \uicontrol Cancel is clicked. +*/ + +/*! + \qmlsignal Qt.labs.platform::MessageDialog::discardClicked() + + This signal is emitted when \uicontrol Discard is clicked. +*/ + +/*! + \qmlsignal Qt.labs.platform::MessageDialog::helpClicked() + + This signal is emitted when \uicontrol Help is clicked. +*/ + +/*! + \qmlsignal Qt.labs.platform::MessageDialog::applyClicked() + + This signal is emitted when \uicontrol Apply is clicked. +*/ + +/*! + \qmlsignal Qt.labs.platform::MessageDialog::resetClicked() + + This signal is emitted when \uicontrol Reset is clicked. +*/ + +/*! + \qmlsignal Qt.labs.platform::MessageDialog::restoreDefaultsClicked() + + This signal is emitted when \uicontrol {Restore Defaults} is clicked. +*/ + +QQuickPlatformMessageDialog::QQuickPlatformMessageDialog(QObject *parent) + : QQuickPlatformDialog(QPlatformTheme::MessageDialog, parent), + m_options(QMessageDialogOptions::create()) +{ +} + +/*! + \qmlproperty string Qt.labs.platform::MessageDialog::text + + This property holds the text to be displayed on the message dialog. + + \sa informativeText, detailedText +*/ +QString QQuickPlatformMessageDialog::text() const +{ + return m_options->text(); +} + +void QQuickPlatformMessageDialog::setText(const QString &text) +{ + if (m_options->text() == text) + return; + + m_options->setText(text); + emit textChanged(); +} + +/*! + \qmlproperty string Qt.labs.platform::MessageDialog::informativeText + + This property holds the informative text that provides a fuller description for the message. + + Informative text can be used to expand upon the \l text to give more information to the user. + + \sa text, detailedText +*/ +QString QQuickPlatformMessageDialog::informativeText() const +{ + return m_options->informativeText(); +} + +void QQuickPlatformMessageDialog::setInformativeText(const QString &text) +{ + if (m_options->informativeText() == text) + return; + + m_options->setInformativeText(text); + emit informativeTextChanged(); +} + +/*! + \qmlproperty string Qt.labs.platform::MessageDialog::detailedText + + This property holds the text to be displayed in the details area. + + \sa text, informativeText +*/ +QString QQuickPlatformMessageDialog::detailedText() const +{ + return m_options->detailedText(); +} + +void QQuickPlatformMessageDialog::setDetailedText(const QString &text) +{ + if (m_options->detailedText() == text) + return; + + m_options->setDetailedText(text); + emit detailedTextChanged(); +} + +/*! + \qmlproperty flags Qt.labs.platform::MessageDialog::buttons + + This property holds a combination of buttons that are used by the message dialog. + The default value is \c MessageDialog.NoButton. + + Possible flags: + \value MessageDialog.Ok An "OK" button defined with the \c AcceptRole. + \value MessageDialog.Open An "Open" button defined with the \c AcceptRole. + \value MessageDialog.Save A "Save" button defined with the \c AcceptRole. + \value MessageDialog.Cancel A "Cancel" button defined with the \c RejectRole. + \value MessageDialog.Close A "Close" button defined with the \c RejectRole. + \value MessageDialog.Discard A "Discard" or "Don't Save" button, depending on the platform, defined with the \c DestructiveRole. + \value MessageDialog.Apply An "Apply" button defined with the \c ApplyRole. + \value MessageDialog.Reset A "Reset" button defined with the \c ResetRole. + \value MessageDialog.RestoreDefaults A "Restore Defaults" button defined with the \c ResetRole. + \value MessageDialog.Help A "Help" button defined with the \c HelpRole. + \value MessageDialog.SaveAll A "Save All" button defined with the \c AcceptRole. + \value MessageDialog.Yes A "Yes" button defined with the \c YesRole. + \value MessageDialog.YesToAll A "Yes to All" button defined with the \c YesRole. + \value MessageDialog.No A "No" button defined with the \c NoRole. + \value MessageDialog.NoToAll A "No to All" button defined with the \c NoRole. + \value MessageDialog.Abort An "Abort" button defined with the \c RejectRole. + \value MessageDialog.Retry A "Retry" button defined with the \c AcceptRole. + \value MessageDialog.Ignore An "Ignore" button defined with the \c AcceptRole. + \value MessageDialog.NoButton The dialog has no buttons. + + \sa clicked() +*/ +QPlatformDialogHelper::StandardButtons QQuickPlatformMessageDialog::buttons() const +{ + return m_options->standardButtons(); +} + +void QQuickPlatformMessageDialog::setButtons(QPlatformDialogHelper::StandardButtons buttons) +{ + if (m_options->standardButtons() == buttons) + return; + + m_options->setStandardButtons(buttons); + emit buttonsChanged(); +} + +void QQuickPlatformMessageDialog::onCreate(QPlatformDialogHelper *dialog) +{ + if (QPlatformMessageDialogHelper *messageDialog = qobject_cast(dialog)) { + connect(messageDialog, &QPlatformMessageDialogHelper::clicked, this, &QQuickPlatformMessageDialog::handleClick); + messageDialog->setOptions(m_options); + } +} + +void QQuickPlatformMessageDialog::onShow(QPlatformDialogHelper *dialog) +{ + m_options->setWindowTitle(title()); + if (QPlatformMessageDialogHelper *messageDialog = qobject_cast(dialog)) + messageDialog->setOptions(m_options); +} + +void QQuickPlatformMessageDialog::handleClick(QPlatformDialogHelper::StandardButton button) +{ + done(button); + emit clicked(button); + + switch (button) { + case QPlatformDialogHelper::Ok: emit okClicked(); break; + case QPlatformDialogHelper::Save: emit saveClicked(); break; + case QPlatformDialogHelper::SaveAll: emit saveAllClicked(); break; + case QPlatformDialogHelper::Open: emit openClicked(); break; + case QPlatformDialogHelper::Yes: emit yesClicked(); break; + case QPlatformDialogHelper::YesToAll: emit yesToAllClicked(); break; + case QPlatformDialogHelper::No: emit noClicked(); break; + case QPlatformDialogHelper::NoToAll: emit noToAllClicked(); break; + case QPlatformDialogHelper::Abort: emit abortClicked(); break; + case QPlatformDialogHelper::Retry: emit retryClicked(); break; + case QPlatformDialogHelper::Ignore: emit ignoreClicked(); break; + case QPlatformDialogHelper::Close: emit closeClicked(); break; + case QPlatformDialogHelper::Cancel: emit cancelClicked(); break; + case QPlatformDialogHelper::Discard: emit discardClicked(); break; + case QPlatformDialogHelper::Help: emit helpClicked(); break; + case QPlatformDialogHelper::Apply: emit applyClicked(); break; + case QPlatformDialogHelper::Reset: emit resetClicked(); break; + case QPlatformDialogHelper::RestoreDefaults: emit restoreDefaultsClicked(); break; + default: qmlWarning(this) << "unknown button" << int(button); break; + } +} + +QT_END_NAMESPACE diff --git a/src/labs/platform/qquickplatformmessagedialog_p.h b/src/labs/platform/qquickplatformmessagedialog_p.h new file mode 100644 index 00000000..9434a927 --- /dev/null +++ b/src/labs/platform/qquickplatformmessagedialog_p.h @@ -0,0 +1,121 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKPLATFORMMESSAGEDIALOG_P_H +#define QQUICKPLATFORMMESSAGEDIALOG_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 "qquickplatformdialog_p.h" +#include + +QT_BEGIN_NAMESPACE + +class QQuickPlatformMessageDialog : public QQuickPlatformDialog +{ + Q_OBJECT + Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged FINAL) + Q_PROPERTY(QString informativeText READ informativeText WRITE setInformativeText NOTIFY informativeTextChanged FINAL) + Q_PROPERTY(QString detailedText READ detailedText WRITE setDetailedText NOTIFY detailedTextChanged FINAL) + Q_PROPERTY(QPlatformDialogHelper::StandardButtons buttons READ buttons WRITE setButtons NOTIFY buttonsChanged FINAL) + Q_FLAGS(QPlatformDialogHelper::StandardButtons) + +public: + explicit QQuickPlatformMessageDialog(QObject *parent = nullptr); + + QString text() const; + void setText(const QString &text); + + QString informativeText() const; + void setInformativeText(const QString &text); + + QString detailedText() const; + void setDetailedText(const QString &text); + + QPlatformDialogHelper::StandardButtons buttons() const; + void setButtons(QPlatformDialogHelper::StandardButtons buttons); + +Q_SIGNALS: + void textChanged(); + void informativeTextChanged(); + void detailedTextChanged(); + void buttonsChanged(); + void clicked(QPlatformDialogHelper::StandardButton button); + + void okClicked(); + void saveClicked(); + void saveAllClicked(); + void openClicked(); + void yesClicked(); + void yesToAllClicked(); + void noClicked(); + void noToAllClicked(); + void abortClicked(); + void retryClicked(); + void ignoreClicked(); + void closeClicked(); + void cancelClicked(); + void discardClicked(); + void helpClicked(); + void applyClicked(); + void resetClicked(); + void restoreDefaultsClicked(); + +protected: + void onCreate(QPlatformDialogHelper *dialog) override; + void onShow(QPlatformDialogHelper *dialog) override; + +private Q_SLOTS: + void handleClick(QPlatformDialogHelper::StandardButton button); + +private: + QSharedPointer m_options; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickPlatformMessageDialog) + +#endif // QQUICKPLATFORMMESSAGEDIALOG_P_H diff --git a/src/labs/platform/qquickplatformstandardpaths.cpp b/src/labs/platform/qquickplatformstandardpaths.cpp new file mode 100644 index 00000000..a6fff1c0 --- /dev/null +++ b/src/labs/platform/qquickplatformstandardpaths.cpp @@ -0,0 +1,173 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickplatformstandardpaths_p.h" + +#include + +QT_BEGIN_NAMESPACE + +/*! + \qmltype StandardPaths + \inherits QtObject +//! \instantiates QQuickPlatformStandardPaths + \inqmlmodule Qt.labs.platform + \since 5.8 + \brief Provides access to the standard system paths. + + The StandardPaths singleton type provides methods for querying the standard + system paths. The standard paths are mostly useful in conjunction with the + FileDialog and FolderDialog types. + + \qml + FileDialog { + folder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation) + } + \endqml + + \labs + + \sa FileDialog, FolderDialog, QStandardPaths +*/ + +static QList toUrlList(const QStringList &paths) +{ + QList urls; + urls.reserve(paths.size()); + for (const QString &path : paths) + urls += QUrl::fromLocalFile(path); + return urls; +} + +QQuickPlatformStandardPaths::QQuickPlatformStandardPaths(QObject *parent) + : QObject(parent) +{ +} + +QObject *QQuickPlatformStandardPaths::create(QQmlEngine *engine, QJSEngine *scriptEngine) +{ + Q_UNUSED(scriptEngine); + return new QQuickPlatformStandardPaths(engine); +} + +/*! + \qmlmethod string Qt.labs.platform::StandardPaths::displayName(StandardLocation type) + + \include standardpath/functiondocs.qdocinc displayName + + \sa QStandardPaths::displayName() +*/ +QString QQuickPlatformStandardPaths::displayName(QStandardPaths::StandardLocation type) +{ + return QStandardPaths::displayName(type); +} + +/*! + \qmlmethod url Qt.labs.platform::StandardPaths::findExecutable(string executableName, list paths) + + \include standardpath/functiondocs.qdocinc findExecutable + + \sa QStandardPaths::findExecutable() +*/ +QUrl QQuickPlatformStandardPaths::findExecutable(const QString &executableName, const QStringList &paths) +{ + return QUrl::fromLocalFile(QStandardPaths::findExecutable(executableName, paths)); +} + +/*! + \qmlmethod url Qt.labs.platform::StandardPaths::locate(StandardLocation type, string fileName, LocateOptions options) + + \include standardpath/functiondocs.qdocinc locate + + \sa QStandardPaths::locate() +*/ +QUrl QQuickPlatformStandardPaths::locate(QStandardPaths::StandardLocation type, const QString &fileName, QStandardPaths::LocateOptions options) +{ + return QUrl::fromLocalFile(QStandardPaths::locate(type, fileName, options)); +} + +/*! + \qmlmethod list Qt.labs.platform::StandardPaths::locateAll(StandardLocation type, string fileName, LocateOptions options) + + \include standardpath/functiondocs.qdocinc locateAll + + \sa QStandardPaths::locateAll() +*/ +QList QQuickPlatformStandardPaths::locateAll(QStandardPaths::StandardLocation type, const QString &fileName, QStandardPaths::LocateOptions options) +{ + return toUrlList(QStandardPaths::locateAll(type, fileName, options)); +} + +/*! + \qmlmethod void Qt.labs.platform::StandardPaths::setTestModeEnabled(bool testMode) + + \include standardpath/functiondocs.qdocinc setTestModeEnabled + + \sa QStandardPaths::setTestModeEnabled() +*/ +void QQuickPlatformStandardPaths::setTestModeEnabled(bool testMode) +{ + QStandardPaths::setTestModeEnabled(testMode); +} + +/*! + \qmlmethod list Qt.labs.platform::StandardPaths::standardLocations(StandardLocation type) + + \include standardpath/functiondocs.qdocinc standardLocations + + \sa QStandardPaths::standardLocations() +*/ +QList QQuickPlatformStandardPaths::standardLocations(QStandardPaths::StandardLocation type) +{ + return toUrlList(QStandardPaths::standardLocations(type)); +} + +/*! + \qmlmethod url Qt.labs.platform::StandardPaths::writableLocation(StandardLocation type) + + \include standardpath/functiondocs.qdocinc writableLocation + + \sa QStandardPaths::writableLocation() +*/ +QUrl QQuickPlatformStandardPaths::writableLocation(QStandardPaths::StandardLocation type) +{ + return QUrl::fromLocalFile(QStandardPaths::writableLocation(type)); +} + +QT_END_NAMESPACE diff --git a/src/labs/platform/qquickplatformstandardpaths_p.h b/src/labs/platform/qquickplatformstandardpaths_p.h new file mode 100644 index 00000000..e2f4e11e --- /dev/null +++ b/src/labs/platform/qquickplatformstandardpaths_p.h @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKPLATFORMSTANDARDPATHS_P_H +#define QQUICKPLATFORMSTANDARDPATHS_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 +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QQmlEngine; +class QJSEngine; + +class QQuickPlatformStandardPaths : public QObject +{ + Q_OBJECT + Q_ENUMS(QStandardPaths::StandardLocation QStandardPaths::LocateOptions) + +public: + explicit QQuickPlatformStandardPaths(QObject *parent = nullptr); + + static QObject *create(QQmlEngine *engine, QJSEngine *scriptEngine); + + Q_INVOKABLE static QString displayName(QStandardPaths::StandardLocation type); + Q_INVOKABLE static QUrl findExecutable(const QString &executableName, const QStringList &paths = QStringList()); + Q_INVOKABLE static QUrl locate(QStandardPaths::StandardLocation type, const QString &fileName, QStandardPaths::LocateOptions options = QStandardPaths::LocateFile); + Q_INVOKABLE static QList locateAll(QStandardPaths::StandardLocation type, const QString &fileName, QStandardPaths::LocateOptions options = QStandardPaths::LocateFile); + Q_INVOKABLE static void setTestModeEnabled(bool testMode); + Q_INVOKABLE static QList standardLocations(QStandardPaths::StandardLocation type); + Q_INVOKABLE static QUrl writableLocation(QStandardPaths::StandardLocation type); + +private: + Q_DISABLE_COPY(QQuickPlatformStandardPaths) +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickPlatformStandardPaths) +Q_DECLARE_METATYPE(QStandardPaths::StandardLocation) +Q_DECLARE_METATYPE(QStandardPaths::LocateOptions) + +#endif // QQUICKPLATFORMSTANDARDPATHS_P_H diff --git a/src/labs/platform/qquickplatformsystemtrayicon.cpp b/src/labs/platform/qquickplatformsystemtrayicon.cpp new file mode 100644 index 00000000..b97e379f --- /dev/null +++ b/src/labs/platform/qquickplatformsystemtrayicon.cpp @@ -0,0 +1,443 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickplatformsystemtrayicon_p.h" +#include "qquickplatformmenu_p.h" +#include "qquickplatformiconloader_p.h" + +#include +#include +#include + +#include "widgets/qwidgetplatform_p.h" + +QT_BEGIN_NAMESPACE + +/*! + \qmltype SystemTrayIcon + \inherits QtObject +//! \instantiates QQuickPlatformSystemTrayIcon + \inqmlmodule Qt.labs.platform + \since 5.8 + \brief A system tray icon. + + The SystemTrayIcon type provides an icon for an application in the system tray. + + Many desktop platforms provide a special system tray or notification area, + where applications can display icons and notification messages. + + \image qtlabsplatform-systemtrayicon.png + + The following example shows how to create a system tray icon, and how to make + use of the \l activated() signal: + + \code + SystemTrayIcon { + visible: true + icon.source: "qrc:/images/tray-icon.png" + + onActivated: { + window.show() + window.raise() + window.requestActivate() + } + } + \endcode + + \section2 Tray menu + + SystemTrayIcon can have a menu that opens when the icon is activated. + + \image qtlabsplatform-systemtrayicon-menu.png + + The following example illustrates how to assign a \l Menu to a system tray icon: + + \code + SystemTrayIcon { + visible: true + icon.source: "qrc:/images/tray-icon.png" + + menu: Menu { + MenuItem { + text: qsTr("Quit") + onTriggered: Qt.quit() + } + } + } + \endcode + + \section2 Notification messages + + SystemTrayIcon can display notification messages. + + \image qtlabsplatform-systemtrayicon-message.png + + The following example presents how to show a notification message using + \l showMessage(), and how to make use of the \l messageClicked() signal: + + \code + SystemTrayIcon { + visible: true + icon.source: "qrc:/images/tray-icon.png" + + onMessageClicked: console.log("Message clicked") + Component.onCompleted: showMessage("Message title", "Something important came up. Click this to know more.") + } + \endcode + + \section2 Availability + + A native system tray icon is currently \l available on the following platforms: + + \list + \li All window managers and independent tray implementations for X11 that implement the + \l{http://standards.freedesktop.org/systemtray-spec/systemtray-spec-0.2.html} + {freedesktop.org XEmbed system tray specification}. + \li All desktop environments that implement the + \l{http://www.freedesktop.org/wiki/Specifications/StatusNotifierItem/StatusNotifierItem} + {freedesktop.org D-Bus StatusNotifierItem specification}, including recent versions of KDE and Unity. + \li All supported versions of macOS. Note that the Growl notification system must be installed + for showMessage() to display messages on OS X prior to 10.8 (Mountain Lion). + \endlist + + \input includes/widgets.qdocinc 1 + + \labs + + \sa Menu +*/ + +/*! + \qmlsignal Qt.labs.platform::SystemTrayIcon::activated(ActivationReason reason) + + This signal is emitted when the system tray icon is activated by the user. The + \a reason argument specifies how the system tray icon was activated. + + Available reasons: + + \value SystemTrayIcon.Unknown Unknown reason + \value SystemTrayIcon.Context The context menu for the system tray icon was requested + \value SystemTrayIcon.DoubleClick The system tray icon was double clicked + \value SystemTrayIcon.Trigger The system tray icon was clicked + \value SystemTrayIcon.MiddleClick The system tray icon was clicked with the middle mouse button +*/ + +/*! + \qmlsignal Qt.labs.platform::SystemTrayIcon::messageClicked() + + This signal is emitted when a notification message is clicked by the user. + + \sa showMessage() +*/ + +Q_DECLARE_LOGGING_CATEGORY(qtLabsPlatformTray) + +QQuickPlatformSystemTrayIcon::QQuickPlatformSystemTrayIcon(QObject *parent) + : QObject(parent), + m_complete(false), + m_visible(false), + m_menu(nullptr), + m_iconLoader(nullptr), + m_handle(nullptr) +{ + m_handle = QGuiApplicationPrivate::platformTheme()->createPlatformSystemTrayIcon(); + if (!m_handle) + m_handle = QWidgetPlatform::createSystemTrayIcon(this); + qCDebug(qtLabsPlatformTray) << "SystemTrayIcon ->" << m_handle; + + if (m_handle) { + connect(m_handle, &QPlatformSystemTrayIcon::activated, this, &QQuickPlatformSystemTrayIcon::activated); + connect(m_handle, &QPlatformSystemTrayIcon::messageClicked, this, &QQuickPlatformSystemTrayIcon::messageClicked); + } +} + +QQuickPlatformSystemTrayIcon::~QQuickPlatformSystemTrayIcon() +{ + if (m_menu) + m_menu->setSystemTrayIcon(nullptr); + cleanup(); + delete m_iconLoader; + m_iconLoader = nullptr; + delete m_handle; + m_handle = nullptr; +} + +QPlatformSystemTrayIcon *QQuickPlatformSystemTrayIcon::handle() const +{ + return m_handle; +} + +/*! + \readonly + \qmlproperty bool Qt.labs.platform::SystemTrayIcon::available + + This property holds whether the system tray is available. +*/ +bool QQuickPlatformSystemTrayIcon::isAvailable() const +{ + return m_handle && m_handle->isSystemTrayAvailable(); +} + +/*! + \readonly + \qmlproperty bool Qt.labs.platform::SystemTrayIcon::supportsMessages + + This property holds whether the system tray icon supports notification messages. + + \sa showMessage() +*/ +bool QQuickPlatformSystemTrayIcon::supportsMessages() const +{ + return m_handle && m_handle->supportsMessages(); +} + +/*! + \qmlproperty bool Qt.labs.platform::SystemTrayIcon::visible + + This property holds whether the system tray icon is visible. + + The default value is \c false. +*/ +bool QQuickPlatformSystemTrayIcon::isVisible() const +{ + return m_visible; +} + +void QQuickPlatformSystemTrayIcon::setVisible(bool visible) +{ + if (m_visible == visible) + return; + + if (m_handle && m_complete) { + if (visible) + init(); + else + cleanup(); + } + + m_visible = visible; + emit visibleChanged(); +} + +/*! + \qmlproperty string Qt.labs.platform::SystemTrayIcon::tooltip + + This property holds the tooltip of the system tray icon. +*/ +QString QQuickPlatformSystemTrayIcon::tooltip() const +{ + return m_tooltip; +} + +void QQuickPlatformSystemTrayIcon::setTooltip(const QString &tooltip) +{ + if (m_tooltip == tooltip) + return; + + if (m_handle && m_complete) + m_handle->updateToolTip(tooltip); + + m_tooltip = tooltip; + emit tooltipChanged(); +} + +/*! + \qmlproperty Menu Qt.labs.platform::SystemTrayIcon::menu + + This property holds a menu for the system tray icon. +*/ +QQuickPlatformMenu *QQuickPlatformSystemTrayIcon::menu() const +{ + return m_menu; +} + +void QQuickPlatformSystemTrayIcon::setMenu(QQuickPlatformMenu *menu) +{ + if (m_menu == menu) + return; + + if (m_menu) + m_menu->setSystemTrayIcon(nullptr); + if (menu) { + menu->setSystemTrayIcon(this); + if (m_handle && m_complete && menu->create()) + m_handle->updateMenu(menu->handle()); + } + + m_menu = menu; + emit menuChanged(); +} + +/*! + \since Qt.labs.platform 1.1 (Qt 5.12) + \qmlproperty rect Qt.labs.platform::SystemTrayIcon::geometry + + This property holds the geometry of the system tray icon. +*/ +QRect QQuickPlatformSystemTrayIcon::geometry() const +{ + return m_handle ? m_handle->geometry() : QRect(); +} + +/*! + \since Qt.labs.platform 1.1 (Qt 5.12) + \qmlproperty url Qt.labs.platform::SystemTrayIcon::icon.source + \qmlproperty string Qt.labs.platform::SystemTrayIcon::icon.name + \qmlproperty bool Qt.labs.platform::SystemTrayIcon::icon.mask + + This property holds the system tray icon. + + \code + SystemTrayIcon { + icon.mask: true + icon.source: "qrc:/images/tray-icon.png" + } + \endcode +*/ +QQuickPlatformIcon QQuickPlatformSystemTrayIcon::icon() const +{ + if (!m_iconLoader) + return QQuickPlatformIcon(); + + return m_iconLoader->icon(); +} + +void QQuickPlatformSystemTrayIcon::setIcon(const QQuickPlatformIcon &icon) +{ + if (iconLoader()->icon() == icon) + return; + + iconLoader()->setIcon(icon); + emit iconChanged(); +} + +/*! + \qmlmethod void Qt.labs.platform::SystemTrayIcon::show() + + Shows the system tray icon. +*/ +void QQuickPlatformSystemTrayIcon::show() +{ + setVisible(true); +} + +/*! + \qmlmethod void Qt.labs.platform::SystemTrayIcon::hide() + + Hides the system tray icon. +*/ +void QQuickPlatformSystemTrayIcon::hide() +{ + setVisible(false); +} + +/*! + \qmlmethod void Qt.labs.platform::SystemTrayIcon::showMessage(string title, string message, MessageIcon icon, int msecs) + + Shows a system tray message with the given \a title, \a message and \a icon + for the time specified in \a msecs. + + \note System tray messages are dependent on the system configuration and user preferences, + and may not appear at all. Therefore, it should not be relied upon as the sole means for providing + critical information. + + \sa supportsMessages, messageClicked() +*/ +void QQuickPlatformSystemTrayIcon::showMessage(const QString &title, const QString &msg, QPlatformSystemTrayIcon::MessageIcon icon, int msecs) +{ + if (m_handle) + m_handle->showMessage(title, msg, QIcon(), icon, msecs); +} + +void QQuickPlatformSystemTrayIcon::init() +{ + if (!m_handle) + return; + + m_handle->init(); + if (m_menu && m_menu->create()) + m_handle->updateMenu(m_menu->handle()); + m_handle->updateToolTip(m_tooltip); + if (m_iconLoader) + m_iconLoader->setEnabled(true); +} + +void QQuickPlatformSystemTrayIcon::cleanup() +{ + if (m_handle) + m_handle->cleanup(); + if (m_iconLoader) + m_iconLoader->setEnabled(false); +} + +void QQuickPlatformSystemTrayIcon::classBegin() +{ +} + +void QQuickPlatformSystemTrayIcon::componentComplete() +{ + m_complete = true; + if (m_visible) + init(); +} + +QQuickPlatformIconLoader *QQuickPlatformSystemTrayIcon::iconLoader() const +{ + if (!m_iconLoader) { + QQuickPlatformSystemTrayIcon *that = const_cast(this); + static int slot = staticMetaObject.indexOfSlot("updateIcon()"); + m_iconLoader = new QQuickPlatformIconLoader(slot, that); + m_iconLoader->setEnabled(m_complete); + } + return m_iconLoader; +} + +void QQuickPlatformSystemTrayIcon::updateIcon() +{ + if (!m_handle || !m_iconLoader) + return; + + const QRect oldGeometry = m_handle->geometry(); + + m_handle->updateIcon(m_iconLoader->toQIcon()); + + if (oldGeometry != m_handle->geometry()) + emit geometryChanged(); +} + +QT_END_NAMESPACE + +#include "moc_qquickplatformsystemtrayicon_p.cpp" diff --git a/src/labs/platform/qquickplatformsystemtrayicon_p.h b/src/labs/platform/qquickplatformsystemtrayicon_p.h new file mode 100644 index 00000000..d7cc46c0 --- /dev/null +++ b/src/labs/platform/qquickplatformsystemtrayicon_p.h @@ -0,0 +1,145 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKPLATFORMSYSTEMTRAYICON_P_H +#define QQUICKPLATFORMSYSTEMTRAYICON_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 +#include +#include +#include +#include + +#include "qquickplatformicon_p.h" + +QT_REQUIRE_CONFIG(systemtrayicon); + +QT_BEGIN_NAMESPACE + +class QQuickPlatformMenu; +class QQuickPlatformIconLoader; + +class QQuickPlatformSystemTrayIcon : public QObject, public QQmlParserStatus +{ + Q_OBJECT + Q_INTERFACES(QQmlParserStatus) + Q_PROPERTY(bool available READ isAvailable CONSTANT FINAL) + Q_PROPERTY(bool supportsMessages READ supportsMessages CONSTANT FINAL) + Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL) + Q_PROPERTY(QString tooltip READ tooltip WRITE setTooltip NOTIFY tooltipChanged FINAL) + Q_PROPERTY(QQuickPlatformMenu *menu READ menu WRITE setMenu NOTIFY menuChanged FINAL) + Q_PROPERTY(QRect geometry READ geometry NOTIFY geometryChanged FINAL REVISION(1, 1)) + Q_PROPERTY(QQuickPlatformIcon icon READ icon WRITE setIcon NOTIFY iconChanged FINAL REVISION(1, 1)) + Q_ENUMS(QPlatformSystemTrayIcon::ActivationReason QPlatformSystemTrayIcon::MessageIcon) + +public: + explicit QQuickPlatformSystemTrayIcon(QObject *parent = nullptr); + ~QQuickPlatformSystemTrayIcon(); + + QPlatformSystemTrayIcon *handle() const; + + bool isAvailable() const; + bool supportsMessages() const; + + bool isVisible() const; + void setVisible(bool visible); + + QString tooltip() const; + void setTooltip(const QString &tooltip); + + QQuickPlatformMenu *menu() const; + void setMenu(QQuickPlatformMenu *menu); + + QRect geometry() const; + + QQuickPlatformIcon icon() const; + void setIcon(const QQuickPlatformIcon &icon); + +public Q_SLOTS: + void show(); + void hide(); + + void showMessage(const QString &title, const QString &message, + QPlatformSystemTrayIcon::MessageIcon iconType = QPlatformSystemTrayIcon::Information, int msecs = 10000); + +Q_SIGNALS: + void activated(QPlatformSystemTrayIcon::ActivationReason reason); + void messageClicked(); + void visibleChanged(); + void tooltipChanged(); + void menuChanged(); + Q_REVISION(2, 1) void geometryChanged(); + Q_REVISION(2, 1) void iconChanged(); + +protected: + void init(); + void cleanup(); + + void classBegin() override; + void componentComplete() override; + + QQuickPlatformIconLoader *iconLoader() const; + +private Q_SLOTS: + void updateIcon(); + +private: + bool m_complete; + bool m_visible; + QString m_tooltip; + QQuickPlatformMenu *m_menu; + mutable QQuickPlatformIconLoader *m_iconLoader; + QPlatformSystemTrayIcon *m_handle; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickPlatformSystemTrayIcon) +Q_DECLARE_METATYPE(QPlatformSystemTrayIcon::ActivationReason) +Q_DECLARE_METATYPE(QPlatformSystemTrayIcon::MessageIcon) + +#endif // QQUICKPLATFORMSYSTEMTRAYICON_P_H diff --git a/src/labs/platform/qtlabsplatformplugin.cpp b/src/labs/platform/qtlabsplatformplugin.cpp new file mode 100644 index 00000000..90bdb121 --- /dev/null +++ b/src/labs/platform/qtlabsplatformplugin.cpp @@ -0,0 +1,117 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Templates module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +#include "qquickplatformdialog_p.h" +#include "qquickplatformcolordialog_p.h" +#include "qquickplatformfiledialog_p.h" +#include "qquickplatformfolderdialog_p.h" +#include "qquickplatformfontdialog_p.h" +#include "qquickplatformmessagedialog_p.h" + +#include "qquickplatformmenu_p.h" +#include "qquickplatformmenubar_p.h" +#include "qquickplatformmenuitem_p.h" +#include "qquickplatformmenuitemgroup_p.h" +#include "qquickplatformmenuseparator_p.h" + +#include "qquickplatformstandardpaths_p.h" +#if QT_CONFIG(systemtrayicon) +# include "qquickplatformsystemtrayicon_p.h" +#endif + +#include "qquickplatformicon_p.h" + +QT_BEGIN_NAMESPACE + +Q_LOGGING_CATEGORY(qtLabsPlatformDialogs, "qt.labs.platform.dialogs") +Q_LOGGING_CATEGORY(qtLabsPlatformMenus, "qt.labs.platform.menus") +Q_LOGGING_CATEGORY(qtLabsPlatformTray, "qt.labs.platform.tray") + +class QtLabsPlatformPlugin: public QQmlExtensionPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) + +public: + QtLabsPlatformPlugin(QObject *parent = nullptr); + void registerTypes(const char *uri) override; +}; + +QtLabsPlatformPlugin::QtLabsPlatformPlugin(QObject *parent) : QQmlExtensionPlugin(parent) +{ +} + +void QtLabsPlatformPlugin::registerTypes(const char *uri) +{ + qmlRegisterUncreatableType(uri, 1, 0, "Dialog", QQuickPlatformDialog::tr("Dialog is an abstract base class")); + qmlRegisterType(uri, 1, 0, "ColorDialog"); + qmlRegisterType(uri, 1, 0, "FileDialog"); + qmlRegisterAnonymousType(uri, 1); + qmlRegisterType(uri, 1, 0, "FolderDialog"); + qmlRegisterType(uri, 1, 0, "FontDialog"); + qmlRegisterType(uri, 1, 0, "MessageDialog"); + + qmlRegisterType(uri, 1, 0, "Menu"); + qmlRegisterType(uri, 1, 0, "MenuBar"); + qmlRegisterType(uri, 1, 0, "MenuItem"); + qmlRegisterType(uri, 1, 1, "MenuItem"); + qmlRegisterType(uri, 1, 0, "MenuItemGroup"); + qmlRegisterType(uri, 1, 0, "MenuSeparator"); + qRegisterMetaType(); + + qmlRegisterUncreatableType(uri, 1, 0, "StandardButton", QQuickPlatformDialog::tr("Cannot create an instance of StandardButton")); + qmlRegisterSingletonType(uri, 1, 0, "StandardPaths", QQuickPlatformStandardPaths::create); + qRegisterMetaType(); + qRegisterMetaType(); + +#if QT_CONFIG(systemtrayicon) + qmlRegisterType(uri, 1, 0, "SystemTrayIcon"); + qmlRegisterType(uri, 1, 1, "SystemTrayIcon"); + qRegisterMetaType(); + qRegisterMetaType(); +#endif + + qmlRegisterAnonymousType(uri, 1); + qRegisterMetaType(); +} + +QT_END_NAMESPACE + +#include "qtlabsplatformplugin.moc" diff --git a/src/labs/platform/widgets/qwidgetplatform_p.h b/src/labs/platform/widgets/qwidgetplatform_p.h new file mode 100644 index 00000000..cbdaa24a --- /dev/null +++ b/src/labs/platform/widgets/qwidgetplatform_p.h @@ -0,0 +1,170 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWIDGETPLATFORM_P_H +#define QWIDGETPLATFORM_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 +#include +#include +#include +#include +#include + +#ifdef QT_WIDGETS_LIB +#include +#if QT_CONFIG(colordialog) +#include "qwidgetplatformcolordialog_p.h" +#endif +#if QT_CONFIG(filedialog) +#include "qwidgetplatformfiledialog_p.h" +#endif +#if QT_CONFIG(fontdialog) +#include "qwidgetplatformfontdialog_p.h" +#endif +#if QT_CONFIG(messagebox) +#include "qwidgetplatformmessagedialog_p.h" +#endif +#if QT_CONFIG(menu) +#include "qwidgetplatformmenu_p.h" +#include "qwidgetplatformmenuitem_p.h" +#endif +#ifndef QT_NO_SYSTEMTRAYICON +#include "qwidgetplatformsystemtrayicon_p.h" +#endif +#endif + +QT_BEGIN_NAMESPACE + +#ifndef QT_WIDGETS_LIB +typedef QPlatformMenu QWidgetPlatformMenu; +typedef QPlatformMenuItem QWidgetPlatformMenuItem; +typedef QPlatformColorDialogHelper QWidgetPlatformColorDialog; +typedef QPlatformFileDialogHelper QWidgetPlatformFileDialog; +typedef QPlatformFontDialogHelper QWidgetPlatformFontDialog; +typedef QPlatformMessageDialogHelper QWidgetPlatformMessageDialog; +typedef QPlatformSystemTrayIcon QWidgetPlatformSystemTrayIcon; +#endif + +namespace QWidgetPlatform +{ + static inline bool isAvailable(const char *type) + { + if (!qApp->inherits("QApplication")) { + qCritical("\nERROR: No native %s implementation available." + "\nQt Labs Platform requires Qt Widgets on this setup." + "\nAdd 'QT += widgets' to .pro and create QApplication in main().\n", type); + return false; + } + return true; + } + + template + static inline T *createWidget(const char *name, QObject *parent) + { + static bool available = isAvailable(name); +#ifdef QT_WIDGETS_LIB + if (available) + return new T(parent); +#else + Q_UNUSED(parent); + Q_UNUSED(available); +#endif + return nullptr; + } + + static inline QPlatformMenu *createMenu(QObject *parent = nullptr) { +#if defined(QT_WIDGETS_LIB) && QT_CONFIG(menu) + return createWidget("Menu", parent); +#else + Q_UNUSED(parent); + return nullptr; +#endif + } + static inline QPlatformMenuItem *createMenuItem(QObject *parent = nullptr) { +#if defined(QT_WIDGETS_LIB) && QT_CONFIG(menu) + return createWidget("MenuItem", parent); +#else + Q_UNUSED(parent); + return nullptr; +#endif + } + static inline QPlatformSystemTrayIcon *createSystemTrayIcon(QObject *parent = nullptr) { +#ifndef QT_NO_SYSTEMTRAYICON + return createWidget("SystemTrayIcon", parent); +#else + Q_UNUSED(parent); + return nullptr; +#endif + } + static inline QPlatformDialogHelper *createDialog(QPlatformTheme::DialogType type, QObject *parent = nullptr) + { +#if !defined(QT_WIDGETS_LIB) || !(QT_CONFIG(colordialog) || QT_CONFIG(filedialog) || QT_CONFIG(fontdialog) || QT_CONFIG(messagebox)) + Q_UNUSED(parent); +#endif + switch (type) { +#if defined(QT_WIDGETS_LIB) && QT_CONFIG(colordialog) + case QPlatformTheme::ColorDialog: return createWidget("ColorDialog", parent); +#endif +#if defined(QT_WIDGETS_LIB) && QT_CONFIG(filedialog) + case QPlatformTheme::FileDialog: return createWidget("FileDialog", parent); +#endif +#if defined(QT_WIDGETS_LIB) && QT_CONFIG(fontdialog) + case QPlatformTheme::FontDialog: return createWidget("FontDialog", parent); +#endif +#if defined(QT_WIDGETS_LIB) && QT_CONFIG(messagebox) + case QPlatformTheme::MessageDialog: return createWidget("MessageDialog", parent); +#endif + default: break; + } + return nullptr; + } +} + +QT_END_NAMESPACE + +#endif // QWIDGETPLATFORM_P_H diff --git a/src/labs/platform/widgets/qwidgetplatformcolordialog.cpp b/src/labs/platform/widgets/qwidgetplatformcolordialog.cpp new file mode 100644 index 00000000..6c0043ae --- /dev/null +++ b/src/labs/platform/widgets/qwidgetplatformcolordialog.cpp @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwidgetplatformcolordialog_p.h" +#include "qwidgetplatformdialog_p.h" + +#include + +QT_BEGIN_NAMESPACE + +QWidgetPlatformColorDialog::QWidgetPlatformColorDialog(QObject *parent) + : m_dialog(new QColorDialog) +{ + setParent(parent); + + connect(m_dialog.data(), &QColorDialog::accepted, this, &QPlatformDialogHelper::accept); + connect(m_dialog.data(), &QColorDialog::rejected, this, &QPlatformDialogHelper::reject); + connect(m_dialog.data(), &QColorDialog::currentColorChanged, this, &QPlatformColorDialogHelper::currentColorChanged); +} + +QWidgetPlatformColorDialog::~QWidgetPlatformColorDialog() +{ +} + +QColor QWidgetPlatformColorDialog::currentColor() const +{ + return m_dialog->currentColor(); +} + +void QWidgetPlatformColorDialog::setCurrentColor(const QColor &color) +{ + m_dialog->setCurrentColor(color); +} + +void QWidgetPlatformColorDialog::exec() +{ + m_dialog->exec(); +} + +bool QWidgetPlatformColorDialog::show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) +{ + QSharedPointer options = QPlatformColorDialogHelper::options(); + m_dialog->setWindowTitle(options->windowTitle()); + m_dialog->setOptions(static_cast(int(options->options())) | QColorDialog::DontUseNativeDialog); + + return QWidgetPlatformDialog::show(m_dialog.data(), flags, modality, parent); +} + +void QWidgetPlatformColorDialog::hide() +{ + m_dialog->hide(); +} + +QT_END_NAMESPACE diff --git a/src/labs/platform/widgets/qwidgetplatformcolordialog_p.h b/src/labs/platform/widgets/qwidgetplatformcolordialog_p.h new file mode 100644 index 00000000..09ed5a1e --- /dev/null +++ b/src/labs/platform/widgets/qwidgetplatformcolordialog_p.h @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWIDGETPLATFORMCOLORDIALOG_P_H +#define QWIDGETPLATFORMCOLORDIALOG_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 + +QT_BEGIN_NAMESPACE + +class QColorDialog; + +class QWidgetPlatformColorDialog : public QPlatformColorDialogHelper +{ + Q_OBJECT + +public: + explicit QWidgetPlatformColorDialog(QObject *parent = nullptr); + ~QWidgetPlatformColorDialog(); + + QColor currentColor() const override; + void setCurrentColor(const QColor &color) override; + + void exec() override; + bool show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) override; + void hide() override; + +private: + QScopedPointer m_dialog; +}; + +QT_END_NAMESPACE + +#endif // QWIDGETPLATFORMCOLORDIALOG_P_H diff --git a/src/labs/platform/widgets/qwidgetplatformdialog.cpp b/src/labs/platform/widgets/qwidgetplatformdialog.cpp new file mode 100644 index 00000000..3a206839 --- /dev/null +++ b/src/labs/platform/widgets/qwidgetplatformdialog.cpp @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwidgetplatformdialog_p.h" + +#include +#include + +QT_BEGIN_NAMESPACE + +bool QWidgetPlatformDialog::show(QDialog *dialog, Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) +{ + dialog->setWindowFlags(flags); + dialog->setWindowModality(modality); + + dialog->createWinId(); + QWindow *handle = dialog->windowHandle(); + Q_ASSERT(handle); + handle->setTransientParent(const_cast(parent)); + + dialog->show(); + return true; +} + +QT_END_NAMESPACE diff --git a/src/labs/platform/widgets/qwidgetplatformdialog_p.h b/src/labs/platform/widgets/qwidgetplatformdialog_p.h new file mode 100644 index 00000000..d4f27655 --- /dev/null +++ b/src/labs/platform/widgets/qwidgetplatformdialog_p.h @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWIDGETPLATFORMDIALOG_P_H +#define QWIDGETPLATFORMDIALOG_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 + +QT_BEGIN_NAMESPACE + +class QDialog; +class QWindow; + +class QWidgetPlatformDialog +{ +public: + static bool show(QDialog *dialog, Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent); +}; + +QT_END_NAMESPACE + +#endif // QWIDGETPLATFORMDIALOG_P_H diff --git a/src/labs/platform/widgets/qwidgetplatformfiledialog.cpp b/src/labs/platform/widgets/qwidgetplatformfiledialog.cpp new file mode 100644 index 00000000..21ac6527 --- /dev/null +++ b/src/labs/platform/widgets/qwidgetplatformfiledialog.cpp @@ -0,0 +1,140 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwidgetplatformfiledialog_p.h" +#include "qwidgetplatformdialog_p.h" + +#include + +QT_BEGIN_NAMESPACE + +QWidgetPlatformFileDialog::QWidgetPlatformFileDialog(QObject *parent) + : m_dialog(new QFileDialog) +{ + setParent(parent); + + connect(m_dialog.data(), &QDialog::accepted, this, &QPlatformDialogHelper::accept); + connect(m_dialog.data(), &QDialog::rejected, this, &QPlatformDialogHelper::reject); + + connect(m_dialog.data(), &QFileDialog::fileSelected, [this](const QString &file) { + emit fileSelected(QUrl::fromLocalFile(file)); + }); + connect(m_dialog.data(), &QFileDialog::filesSelected, [this](const QList &files) { + QList urls; + urls.reserve(files.count()); + for (const QString &file : files) + urls += QUrl::fromLocalFile(file); + emit filesSelected(urls); + }); + connect(m_dialog.data(), &QFileDialog::currentChanged, [this](const QString &path) { + emit currentChanged(QUrl::fromLocalFile(path)); + }); + connect(m_dialog.data(), &QFileDialog::directoryEntered, this, &QWidgetPlatformFileDialog::directoryEntered); + connect(m_dialog.data(), &QFileDialog::filterSelected, this, &QWidgetPlatformFileDialog::filterSelected); +} + +QWidgetPlatformFileDialog::~QWidgetPlatformFileDialog() +{ +} + +bool QWidgetPlatformFileDialog::defaultNameFilterDisables() const +{ + return false; // TODO: ? +} + +void QWidgetPlatformFileDialog::setDirectory(const QUrl &directory) +{ + m_dialog->setDirectory(directory.toLocalFile()); +} + +QUrl QWidgetPlatformFileDialog::directory() const +{ + return m_dialog->directoryUrl(); +} + +void QWidgetPlatformFileDialog::selectFile(const QUrl &filename) +{ + m_dialog->selectUrl(filename); +} + +QList QWidgetPlatformFileDialog::selectedFiles() const +{ + return m_dialog->selectedUrls(); +} + +void QWidgetPlatformFileDialog::setFilter() +{ + // TODO: ? +} + +void QWidgetPlatformFileDialog::selectNameFilter(const QString &filter) +{ + m_dialog->selectNameFilter(filter); +} + +QString QWidgetPlatformFileDialog::selectedNameFilter() const +{ + return m_dialog->selectedNameFilter(); +} + +void QWidgetPlatformFileDialog::exec() +{ + m_dialog->exec(); +} + +bool QWidgetPlatformFileDialog::show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) +{ + QSharedPointer options = QPlatformFileDialogHelper::options(); + m_dialog->setWindowTitle(options->windowTitle()); + m_dialog->setAcceptMode(static_cast(options->acceptMode())); + m_dialog->setFileMode(static_cast(options->fileMode())); + m_dialog->setOptions(static_cast(int(options->options())) | QFileDialog::DontUseNativeDialog); + m_dialog->setNameFilters(options->nameFilters()); + m_dialog->setDefaultSuffix(options->defaultSuffix()); + if (options->isLabelExplicitlySet(QFileDialogOptions::Accept)) + m_dialog->setLabelText(QFileDialog::Accept, options->labelText(QFileDialogOptions::Accept)); + if (options->isLabelExplicitlySet(QFileDialogOptions::Reject)) + m_dialog->setLabelText(QFileDialog::Reject, options->labelText(QFileDialogOptions::Reject)); + + return QWidgetPlatformDialog::show(m_dialog.data(), flags, modality, parent); +} + +void QWidgetPlatformFileDialog::hide() +{ + m_dialog->hide(); +} + +QT_END_NAMESPACE diff --git a/src/labs/platform/widgets/qwidgetplatformfiledialog_p.h b/src/labs/platform/widgets/qwidgetplatformfiledialog_p.h new file mode 100644 index 00000000..3dba6038 --- /dev/null +++ b/src/labs/platform/widgets/qwidgetplatformfiledialog_p.h @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWIDGETPLATFORMFILEDIALOG_P_H +#define QWIDGETPLATFORMFILEDIALOG_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 + +QT_BEGIN_NAMESPACE + +class QFileDialog; + +class QWidgetPlatformFileDialog : public QPlatformFileDialogHelper +{ + Q_OBJECT + +public: + explicit QWidgetPlatformFileDialog(QObject *parent = nullptr); + ~QWidgetPlatformFileDialog(); + + bool defaultNameFilterDisables() const override; + void setDirectory(const QUrl &directory) override; + QUrl directory() const override; + void selectFile(const QUrl &filename) override; + QList selectedFiles() const override; + void setFilter() override; + void selectNameFilter(const QString &filter) override; + QString selectedNameFilter() const override; + + void exec() override; + bool show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) override; + void hide() override; + +private: + QScopedPointer m_dialog; +}; + +QT_END_NAMESPACE + +#endif // QWIDGETPLATFORMFILEDIALOG_P_H diff --git a/src/labs/platform/widgets/qwidgetplatformfontdialog.cpp b/src/labs/platform/widgets/qwidgetplatformfontdialog.cpp new file mode 100644 index 00000000..315e7c73 --- /dev/null +++ b/src/labs/platform/widgets/qwidgetplatformfontdialog.cpp @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwidgetplatformfontdialog_p.h" +#include "qwidgetplatformdialog_p.h" + +#include + +QT_BEGIN_NAMESPACE + +QWidgetPlatformFontDialog::QWidgetPlatformFontDialog(QObject *parent) + : m_dialog(new QFontDialog) +{ + setParent(parent); + + connect(m_dialog.data(), &QFontDialog::accepted, this, &QPlatformDialogHelper::accept); + connect(m_dialog.data(), &QFontDialog::rejected, this, &QPlatformDialogHelper::reject); + connect(m_dialog.data(), &QFontDialog::currentFontChanged, this, &QPlatformFontDialogHelper::currentFontChanged); +} + +QWidgetPlatformFontDialog::~QWidgetPlatformFontDialog() +{ +} + +QFont QWidgetPlatformFontDialog::currentFont() const +{ + return m_dialog->currentFont(); +} + +void QWidgetPlatformFontDialog::setCurrentFont(const QFont &font) +{ + m_dialog->setCurrentFont(font); +} + +void QWidgetPlatformFontDialog::exec() +{ + m_dialog->exec(); +} + +bool QWidgetPlatformFontDialog::show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) +{ + QSharedPointer options = QPlatformFontDialogHelper::options(); + m_dialog->setWindowTitle(options->windowTitle()); + m_dialog->setOptions(static_cast(int(options->options())) | QFontDialog::DontUseNativeDialog); + + return QWidgetPlatformDialog::show(m_dialog.data(), flags, modality, parent); +} + +void QWidgetPlatformFontDialog::hide() +{ + m_dialog->hide(); +} + +QT_END_NAMESPACE diff --git a/src/labs/platform/widgets/qwidgetplatformfontdialog_p.h b/src/labs/platform/widgets/qwidgetplatformfontdialog_p.h new file mode 100644 index 00000000..e5d13b31 --- /dev/null +++ b/src/labs/platform/widgets/qwidgetplatformfontdialog_p.h @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWIDGETPLATFORMFONTDIALOG_P_H +#define QWIDGETPLATFORMFONTDIALOG_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 + +QT_BEGIN_NAMESPACE + +class QFontDialog; + +class QWidgetPlatformFontDialog : public QPlatformFontDialogHelper +{ + Q_OBJECT + +public: + explicit QWidgetPlatformFontDialog(QObject *parent = nullptr); + ~QWidgetPlatformFontDialog(); + + QFont currentFont() const override; + void setCurrentFont(const QFont &font) override; + + void exec() override; + bool show(Qt::WindowFlags windowFlags, Qt::WindowModality windowModality, QWindow *parent) override; + void hide() override; + +private: + QScopedPointer m_dialog; +}; + +QT_END_NAMESPACE + +#endif // QWIDGETPLATFORMFONTDIALOG_P_H diff --git a/src/labs/platform/widgets/qwidgetplatformmenu.cpp b/src/labs/platform/widgets/qwidgetplatformmenu.cpp new file mode 100644 index 00000000..f04620a3 --- /dev/null +++ b/src/labs/platform/widgets/qwidgetplatformmenu.cpp @@ -0,0 +1,183 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwidgetplatformmenu_p.h" +#include "qwidgetplatformmenuitem_p.h" + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +QWidgetPlatformMenu::QWidgetPlatformMenu(QObject *parent) + : m_menu(new QMenu) +{ + setParent(parent); + + connect(m_menu.data(), &QMenu::aboutToShow, this, &QPlatformMenu::aboutToShow); + connect(m_menu.data(), &QMenu::aboutToHide, this, &QPlatformMenu::aboutToHide); +} + +QWidgetPlatformMenu::~QWidgetPlatformMenu() +{ +} + +QMenu *QWidgetPlatformMenu::menu() const +{ + return m_menu.data(); +} + +void QWidgetPlatformMenu::insertMenuItem(QPlatformMenuItem *item, QPlatformMenuItem *before) +{ + QWidgetPlatformMenuItem *widgetItem = qobject_cast(item); + if (!widgetItem) + return; + + QWidgetPlatformMenuItem *widgetBefore = qobject_cast(before); + m_menu->insertAction(widgetBefore ? widgetBefore->action() : nullptr, widgetItem->action()); + int index = m_items.indexOf(widgetBefore); + if (index < 0) + index = m_items.count(); + m_items.insert(index, widgetItem); +} + +void QWidgetPlatformMenu::removeMenuItem(QPlatformMenuItem *item) +{ + QWidgetPlatformMenuItem *widgetItem = qobject_cast(item); + if (!widgetItem) + return; + + m_items.removeOne(widgetItem); + m_menu->removeAction(widgetItem->action()); +} + +void QWidgetPlatformMenu::syncMenuItem(QPlatformMenuItem *item) +{ + Q_UNUSED(item); +} + +void QWidgetPlatformMenu::syncSeparatorsCollapsible(bool enable) +{ + m_menu->setSeparatorsCollapsible(enable); +} + +void QWidgetPlatformMenu::setText(const QString &text) +{ + m_menu->setTitle(text); +} + +void QWidgetPlatformMenu::setIcon(const QIcon &icon) +{ + m_menu->setIcon(icon); +} + +void QWidgetPlatformMenu::setEnabled(bool enabled) +{ + m_menu->menuAction()->setEnabled(enabled); +} + +bool QWidgetPlatformMenu::isEnabled() const +{ + return m_menu->menuAction()->isEnabled(); +} + +void QWidgetPlatformMenu::setVisible(bool visible) +{ + m_menu->menuAction()->setVisible(visible); +} + +void QWidgetPlatformMenu::setMinimumWidth(int width) +{ + if (width > 0) + m_menu->setMinimumWidth(width); +} + +void QWidgetPlatformMenu::setFont(const QFont &font) +{ + m_menu->setFont(font); +} + +void QWidgetPlatformMenu::setMenuType(MenuType type) +{ + Q_UNUSED(type); +} + +void QWidgetPlatformMenu::showPopup(const QWindow *window, const QRect &targetRect, const QPlatformMenuItem *item) +{ + m_menu->createWinId(); + QWindow *handle = m_menu->windowHandle(); + Q_ASSERT(handle); + handle->setTransientParent(const_cast(window)); + + QPoint targetPos = targetRect.bottomLeft(); + if (window) + targetPos = window->mapToGlobal(targetPos); + + const QWidgetPlatformMenuItem *widgetItem = qobject_cast(item); + m_menu->popup(targetPos, widgetItem ? widgetItem->action() : nullptr); +} + +void QWidgetPlatformMenu::dismiss() +{ + m_menu->close(); +} + +QPlatformMenuItem *QWidgetPlatformMenu::menuItemAt(int position) const +{ + return m_items.value(position); +} + +QPlatformMenuItem *QWidgetPlatformMenu::menuItemForTag(quintptr tag) const +{ + for (QWidgetPlatformMenuItem *item : m_items) { + if (item->tag() == tag) + return item; + } + return nullptr; +} + +QPlatformMenuItem *QWidgetPlatformMenu::createMenuItem() const +{ + return new QWidgetPlatformMenuItem; +} + +QPlatformMenu *QWidgetPlatformMenu::createSubMenu() const +{ + return new QWidgetPlatformMenu; +} + +QT_END_NAMESPACE diff --git a/src/labs/platform/widgets/qwidgetplatformmenu_p.h b/src/labs/platform/widgets/qwidgetplatformmenu_p.h new file mode 100644 index 00000000..9d1ef57e --- /dev/null +++ b/src/labs/platform/widgets/qwidgetplatformmenu_p.h @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWIDGETPLATFORMMENU_P_H +#define QWIDGETPLATFORMMENU_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 + +QT_BEGIN_NAMESPACE + +class QMenu; +class QWidgetPlatformMenuItem; + +class QWidgetPlatformMenu : public QPlatformMenu +{ + Q_OBJECT + +public: + explicit QWidgetPlatformMenu(QObject *parent = nullptr); + ~QWidgetPlatformMenu(); + + QMenu *menu() const; + + void insertMenuItem(QPlatformMenuItem *item, QPlatformMenuItem *before) override; + void removeMenuItem(QPlatformMenuItem *item) override; + void syncMenuItem(QPlatformMenuItem *item) override; + void syncSeparatorsCollapsible(bool enable) override; + + void setText(const QString &text) override; + void setIcon(const QIcon &icon) override; + void setEnabled(bool enabled) override; + bool isEnabled() const override; + void setVisible(bool visible) override; + void setMinimumWidth(int width) override; + void setFont(const QFont &font) override; + void setMenuType(MenuType type) override; + + void showPopup(const QWindow *window, const QRect &targetRect, const QPlatformMenuItem *item) override; + void dismiss() override; + + QPlatformMenuItem *menuItemAt(int position) const override; + QPlatformMenuItem *menuItemForTag(quintptr tag) const override; + + QPlatformMenuItem *createMenuItem() const override; + QPlatformMenu *createSubMenu() const override; + +private: + QScopedPointer m_menu; + QList m_items; +}; + +QT_END_NAMESPACE + +#endif // QWIDGETPLATFORMMENU_P_H diff --git a/src/labs/platform/widgets/qwidgetplatformmenuitem.cpp b/src/labs/platform/widgets/qwidgetplatformmenuitem.cpp new file mode 100644 index 00000000..ea4de57f --- /dev/null +++ b/src/labs/platform/widgets/qwidgetplatformmenuitem.cpp @@ -0,0 +1,125 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwidgetplatformmenuitem_p.h" +#include "qwidgetplatformmenu_p.h" + +#include +#include + +QT_BEGIN_NAMESPACE + +QWidgetPlatformMenuItem::QWidgetPlatformMenuItem(QObject *parent) + : m_action(new QAction) +{ + setParent(parent); + connect(m_action.data(), &QAction::hovered, this, &QPlatformMenuItem::hovered); + connect(m_action.data(), &QAction::triggered, this, &QPlatformMenuItem::activated); +} + +QWidgetPlatformMenuItem::~QWidgetPlatformMenuItem() +{ +} + +QAction *QWidgetPlatformMenuItem::action() const +{ + return m_action.data(); +} + +void QWidgetPlatformMenuItem::setText(const QString &text) +{ + m_action->setText(text); +} + +void QWidgetPlatformMenuItem::setIcon(const QIcon &icon) +{ + m_action->setIcon(icon); +} + +void QWidgetPlatformMenuItem::setMenu(QPlatformMenu *menu) +{ + QWidgetPlatformMenu *widgetMenu = qobject_cast(menu); + m_action->setMenu(widgetMenu ? widgetMenu->menu() : nullptr); +} + +void QWidgetPlatformMenuItem::setVisible(bool visible) +{ + m_action->setVisible(visible); +} + +void QWidgetPlatformMenuItem::setIsSeparator(bool separator) +{ + m_action->setSeparator(separator); +} + +void QWidgetPlatformMenuItem::setFont(const QFont &font) +{ + m_action->setFont(font); +} + +void QWidgetPlatformMenuItem::setRole(MenuRole role) +{ + m_action->setMenuRole(static_cast(role)); +} + +void QWidgetPlatformMenuItem::setCheckable(bool checkable) +{ + m_action->setCheckable(checkable); +} + +void QWidgetPlatformMenuItem::setChecked(bool checked) +{ + m_action->setChecked(checked); +} + +#if QT_CONFIG(shortcut) +void QWidgetPlatformMenuItem::setShortcut(const QKeySequence &shortcut) +{ + m_action->setShortcut(shortcut); +} +#endif + +void QWidgetPlatformMenuItem::setEnabled(bool enabled) +{ + m_action->setEnabled(enabled); +} + +void QWidgetPlatformMenuItem::setIconSize(int size) +{ + Q_UNUSED(size); +} + +QT_END_NAMESPACE diff --git a/src/labs/platform/widgets/qwidgetplatformmenuitem_p.h b/src/labs/platform/widgets/qwidgetplatformmenuitem_p.h new file mode 100644 index 00000000..43b3fc17 --- /dev/null +++ b/src/labs/platform/widgets/qwidgetplatformmenuitem_p.h @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWIDGETPLATFORMMENUITEM_P_H +#define QWIDGETPLATFORMMENUITEM_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 + +QT_BEGIN_NAMESPACE + +class QAction; + +class QWidgetPlatformMenuItem : public QPlatformMenuItem +{ + Q_OBJECT + +public: + explicit QWidgetPlatformMenuItem(QObject *parent = nullptr); + ~QWidgetPlatformMenuItem(); + + QAction *action() const; + + void setText(const QString &text) override; + void setIcon(const QIcon &icon) override; + void setMenu(QPlatformMenu *menu) override; + void setVisible(bool visible) override; + void setIsSeparator(bool separator) override; + void setFont(const QFont &font) override; + void setRole(MenuRole role) override; + void setCheckable(bool checkable) override; + void setChecked(bool checked) override; +#if QT_CONFIG(shortcut) + void setShortcut(const QKeySequence& shortcut) override; +#endif + void setEnabled(bool enabled) override; + void setIconSize(int size) override; + +private: + QScopedPointer m_action; +}; + +QT_END_NAMESPACE + +#endif // QWIDGETPLATFORMMENUITEM_P_H diff --git a/src/labs/platform/widgets/qwidgetplatformmessagedialog.cpp b/src/labs/platform/widgets/qwidgetplatformmessagedialog.cpp new file mode 100644 index 00000000..365692dc --- /dev/null +++ b/src/labs/platform/widgets/qwidgetplatformmessagedialog.cpp @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwidgetplatformmessagedialog_p.h" +#include "qwidgetplatformdialog_p.h" + +#include +#include + +QT_BEGIN_NAMESPACE + +QWidgetPlatformMessageDialog::QWidgetPlatformMessageDialog(QObject *parent) + : m_dialog(new QMessageBox) +{ + setParent(parent); + + connect(m_dialog.data(), &QMessageBox::accepted, this, &QPlatformDialogHelper::accept); + connect(m_dialog.data(), &QMessageBox::rejected, this, &QPlatformDialogHelper::reject); + connect(m_dialog.data(), &QMessageBox::buttonClicked, [this](QAbstractButton *button) { + QMessageBox::ButtonRole role = m_dialog->buttonRole(button); + QMessageBox::StandardButton standardButton = m_dialog->standardButton(button); + emit clicked(static_cast(standardButton), static_cast(role)); + }); +} + +QWidgetPlatformMessageDialog::~QWidgetPlatformMessageDialog() +{ +} +void QWidgetPlatformMessageDialog::exec() +{ + m_dialog->exec(); +} + +bool QWidgetPlatformMessageDialog::show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) +{ + QSharedPointer options = QPlatformMessageDialogHelper::options(); + m_dialog->setWindowTitle(options->windowTitle()); + m_dialog->setIcon(static_cast(options->icon())); + m_dialog->setText(options->text()); + m_dialog->setInformativeText(options->informativeText()); +#if QT_CONFIG(textedit) + m_dialog->setDetailedText(options->detailedText()); +#endif + m_dialog->setStandardButtons(static_cast(int(options->standardButtons()))); + + return QWidgetPlatformDialog::show(m_dialog.data(), flags, modality, parent); +} + +void QWidgetPlatformMessageDialog::hide() +{ + m_dialog->hide(); +} + +QT_END_NAMESPACE diff --git a/src/labs/platform/widgets/qwidgetplatformmessagedialog_p.h b/src/labs/platform/widgets/qwidgetplatformmessagedialog_p.h new file mode 100644 index 00000000..6581337a --- /dev/null +++ b/src/labs/platform/widgets/qwidgetplatformmessagedialog_p.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWIDGETPLATFORMMESSAGEDIALOG_P_H +#define QWIDGETPLATFORMMESSAGEDIALOG_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 + +QT_BEGIN_NAMESPACE + +class QMessageBox; + +class QWidgetPlatformMessageDialog : public QPlatformMessageDialogHelper +{ + Q_OBJECT + +public: + explicit QWidgetPlatformMessageDialog(QObject *parent = nullptr); + ~QWidgetPlatformMessageDialog(); + + void exec() override; + bool show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) override; + void hide() override; + +private: + QScopedPointer m_dialog; +}; + +QT_END_NAMESPACE + +#endif // QWIDGETPLATFORMMESSAGEDIALOG_P_H diff --git a/src/labs/platform/widgets/qwidgetplatformsystemtrayicon.cpp b/src/labs/platform/widgets/qwidgetplatformsystemtrayicon.cpp new file mode 100644 index 00000000..e406ff03 --- /dev/null +++ b/src/labs/platform/widgets/qwidgetplatformsystemtrayicon.cpp @@ -0,0 +1,118 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwidgetplatformsystemtrayicon_p.h" +#include "qwidgetplatformmenu_p.h" + +#include + +QT_BEGIN_NAMESPACE + +QWidgetPlatformSystemTrayIcon::QWidgetPlatformSystemTrayIcon(QObject *parent) + : m_systray(new QSystemTrayIcon) +{ + setParent(parent); + + connect(m_systray.data(), &QSystemTrayIcon::messageClicked, this, &QPlatformSystemTrayIcon::messageClicked); + connect(m_systray.data(), &QSystemTrayIcon::activated, [this](QSystemTrayIcon::ActivationReason reason) { + emit activated(static_cast(reason)); + }); +} + +QWidgetPlatformSystemTrayIcon::~QWidgetPlatformSystemTrayIcon() +{ +} + +void QWidgetPlatformSystemTrayIcon::init() +{ + m_systray->show(); +} + +void QWidgetPlatformSystemTrayIcon::cleanup() +{ + m_systray->hide(); +} + +void QWidgetPlatformSystemTrayIcon::updateIcon(const QIcon &icon) +{ + m_systray->setIcon(icon); +} + +void QWidgetPlatformSystemTrayIcon::updateToolTip(const QString &tooltip) +{ + m_systray->setToolTip(tooltip); +} + +void QWidgetPlatformSystemTrayIcon::updateMenu(QPlatformMenu *menu) +{ +#if QT_CONFIG(menu) + QWidgetPlatformMenu *widgetMenu = qobject_cast(menu); + if (!widgetMenu) + return; + + m_systray->setContextMenu(widgetMenu->menu()); +#else + Q_UNUSED(menu); +#endif +} + +QRect QWidgetPlatformSystemTrayIcon::geometry() const +{ + return m_systray->geometry(); +} + +void QWidgetPlatformSystemTrayIcon::showMessage(const QString &title, const QString &msg, const QIcon &icon, MessageIcon iconType, int msecs) +{ + Q_UNUSED(icon); + m_systray->showMessage(title, msg, static_cast(iconType), msecs); +} + +bool QWidgetPlatformSystemTrayIcon::isSystemTrayAvailable() const +{ + return QSystemTrayIcon::isSystemTrayAvailable(); +} + +bool QWidgetPlatformSystemTrayIcon::supportsMessages() const +{ + return QSystemTrayIcon::supportsMessages(); +} + +QPlatformMenu *QWidgetPlatformSystemTrayIcon::createMenu() const +{ + return new QWidgetPlatformMenu; +} + +QT_END_NAMESPACE diff --git a/src/labs/platform/widgets/qwidgetplatformsystemtrayicon_p.h b/src/labs/platform/widgets/qwidgetplatformsystemtrayicon_p.h new file mode 100644 index 00000000..11ea5377 --- /dev/null +++ b/src/labs/platform/widgets/qwidgetplatformsystemtrayicon_p.h @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Labs Platform module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWIDGETPLATFORMSYSTEMTRAYICON_P_H +#define QWIDGETPLATFORMSYSTEMTRAYICON_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 + +QT_REQUIRE_CONFIG(systemtrayicon); + +QT_BEGIN_NAMESPACE + +class QSystemTrayIcon; + +class QWidgetPlatformSystemTrayIcon : public QPlatformSystemTrayIcon +{ + Q_OBJECT + +public: + explicit QWidgetPlatformSystemTrayIcon(QObject *parent = nullptr); + ~QWidgetPlatformSystemTrayIcon(); + + void init() override; + void cleanup() override; + void updateIcon(const QIcon &icon) override; + void updateToolTip(const QString &tooltip) override; + void updateMenu(QPlatformMenu *menu) override; + QRect geometry() const override; + void showMessage(const QString &title, const QString &msg, + const QIcon &icon, MessageIcon iconType, int msecs) override; + + bool isSystemTrayAvailable() const override; + bool supportsMessages() const override; + + QPlatformMenu *createMenu() const override; + +private: + QScopedPointer m_systray; +}; + +QT_END_NAMESPACE + +#endif // QWIDGETPLATFORMSYSTEMTRAYICON_P_H diff --git a/src/labs/platform/widgets/widgets.pri b/src/labs/platform/widgets/widgets.pri new file mode 100644 index 00000000..54ad7187 --- /dev/null +++ b/src/labs/platform/widgets/widgets.pri @@ -0,0 +1,56 @@ +QT += widgets +DEPENDPATH += $$PWD + +HEADERS += \ + $$PWD/qwidgetplatform_p.h + +qtConfig(systemtrayicon) { + HEADERS += \ + $$PWD/qwidgetplatformsystemtrayicon_p.h + SOURCES += \ + $$PWD/qwidgetplatformsystemtrayicon.cpp +} + +qtConfig(colordialog) | qtConfig(filedialog) | qtConfig(fontdialog) | qtConfig(messagebox) { + HEADERS += \ + $$PWD/qwidgetplatformdialog_p.h + SOURCES += \ + $$PWD/qwidgetplatformdialog.cpp +} + +qtConfig(colordialog) { + HEADERS += \ + $$PWD/qwidgetplatformcolordialog_p.h + SOURCES += \ + $$PWD/qwidgetplatformcolordialog.cpp +} + +qtConfig(filedialog) { + HEADERS += \ + $$PWD/qwidgetplatformfiledialog_p.h + SOURCES += \ + $$PWD/qwidgetplatformfiledialog.cpp +} + +qtConfig(fontdialog) { + HEADERS += \ + $$PWD/qwidgetplatformfontdialog_p.h + SOURCES += \ + $$PWD/qwidgetplatformfontdialog.cpp +} + +qtConfig(menu) { + HEADERS += \ + $$PWD/qwidgetplatformmenu_p.h \ + $$PWD/qwidgetplatformmenuitem_p.h + SOURCES += \ + $$PWD/qwidgetplatformmenu.cpp \ + $$PWD/qwidgetplatformmenuitem.cpp +} + +qtConfig(messagebox) { + HEADERS += \ + $$PWD/qwidgetplatformmessagedialog_p.h + SOURCES += \ + $$PWD/qwidgetplatformmessagedialog.cpp +} diff --git a/src/quickcontrols2/CMakeLists.txt b/src/quickcontrols2/CMakeLists.txt index 4ac2d051..77659a2a 100644 --- a/src/quickcontrols2/CMakeLists.txt +++ b/src/quickcontrols2/CMakeLists.txt @@ -1,10 +1,25 @@ -# Generated from quickcontrols2.pro. - ##################################################################### ## QuickControls2 Module: ##################################################################### -qt_internal_add_module(QuickControls2 +qt_internal_add_qml_module(QuickControls2 + URI "QtQuick.Controls" + VERSION "${PROJECT_VERSION}" + DESIGNER_SUPPORTED + CLASS_NAME QtQuickControls2Plugin + PLUGIN_TARGET qtquickcontrols2plugin + IMPORTS + QtQuick.Controls.impl/auto + OPTIONAL_IMPORTS + QtQuick.Controls.Basic/auto + QtQuick.Controls.Fusion/auto + QtQuick.Controls.Material/auto + QtQuick.Controls.Imagine/auto + QtQuick.Controls.Universal/auto + QtQuick.Controls.Windows/auto + QtQuick.Controls.macOS/auto + NO_PLUGIN_OPTIONAL + NO_GENERATE_PLUGIN_SOURCE SOURCES qquickdummyregistration_p.h qquickstyle.cpp qquickstyle.h qquickstyle_p.h @@ -25,19 +40,33 @@ qt_internal_add_module(QuickControls2 Qt::Quick ) -#### Keys ignored in scope 1:.:.:quickcontrols2.pro:: -# MODULE = "quickcontrols2" -# QMLTYPES_FILENAME = "plugins.qmltypes" -# QMLTYPES_INSTALL_DIR = "$$[QT_INSTALL_QML]/QtQuick/Controls" -# QML_IMPORT_NAME = "QtQuick.Controls" -# QML_IMPORT_VERSION = "$$QT_VERSION" - -set_target_properties(QuickControls2 PROPERTIES - QT_QML_MODULE_INSTALL_QMLTYPES TRUE - QT_QML_MODULE_VERSION ${PROJECT_VERSION} - QT_QML_MODULE_URI QtQuick.Controls - QT_QMLTYPES_FILENAME plugins.qmltypes - QT_QML_MODULE_INSTALL_DIR "${INSTALL_QMLDIR}/QtQuick/Controls" +qt_internal_extend_target(qtquickcontrols2plugin + SOURCES + qtquickcontrols2plugin.cpp + LIBRARIES + Qt::QuickControls2ImplPrivate + Qt::QuickControls2Private + Qt::QuickTemplates2Private ) -qt6_qml_type_registration(QuickControls2) +if(QT_FEATURE_quick_designer) + add_subdirectory(designer) +endif() + +add_subdirectory(basic) +add_subdirectory(fusion) +add_subdirectory(imagine) +add_subdirectory(material) +add_subdirectory(universal) + +if(MACOS) + add_subdirectory(macos) +endif() + +if(WIN32) + add_subdirectory(windows) +endif() + +qt_internal_add_docs(QuickControls2 + doc/qtquickcontrols.qdocconf +) diff --git a/src/quickcontrols2/basic/AbstractButton.qml b/src/quickcontrols2/basic/AbstractButton.qml new file mode 100644 index 00000000..a4855c21 --- /dev/null +++ b/src/quickcontrols2/basic/AbstractButton.qml @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T + +T.AbstractButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) +} diff --git a/src/quickcontrols2/basic/Action.qml b/src/quickcontrols2/basic/Action.qml new file mode 100644 index 00000000..bb66fc8f --- /dev/null +++ b/src/quickcontrols2/basic/Action.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T + +T.Action { } diff --git a/src/quickcontrols2/basic/ActionGroup.qml b/src/quickcontrols2/basic/ActionGroup.qml new file mode 100644 index 00000000..70170f0e --- /dev/null +++ b/src/quickcontrols2/basic/ActionGroup.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T + +T.ActionGroup { } diff --git a/src/quickcontrols2/basic/ApplicationWindow.qml b/src/quickcontrols2/basic/ApplicationWindow.qml new file mode 100644 index 00000000..ac50d5fa --- /dev/null +++ b/src/quickcontrols2/basic/ApplicationWindow.qml @@ -0,0 +1,45 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.ApplicationWindow { + id: window + + color: window.palette.window +} diff --git a/src/quickcontrols2/basic/BusyIndicator.qml b/src/quickcontrols2/basic/BusyIndicator.qml new file mode 100644 index 00000000..0c51c9a2 --- /dev/null +++ b/src/quickcontrols2/basic/BusyIndicator.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.Basic.impl +import QtQuick.Templates as T + +T.BusyIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + + contentItem: BusyIndicatorImpl { + implicitWidth: 48 + implicitHeight: 48 + + pen: control.palette.dark + fill: control.palette.dark + + running: control.running + opacity: control.running ? 1 : 0 + Behavior on opacity { OpacityAnimator { duration: 250 } } + } +} diff --git a/src/quickcontrols2/basic/Button.qml b/src/quickcontrols2/basic/Button.qml new file mode 100644 index 00000000..f657a0d2 --- /dev/null +++ b/src/quickcontrols2/basic/Button.qml @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.Button { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + horizontalPadding: padding + 2 + spacing: 6 + + icon.width: 24 + icon.height: 24 + icon.color: control.checked || control.highlighted ? control.palette.brightText : + control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.checked || control.highlighted ? control.palette.brightText : + control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 40 + visible: !control.flat || control.down || control.checked || control.highlighted + color: Color.blend(control.checked || control.highlighted ? control.palette.dark : control.palette.button, + control.palette.mid, control.down ? 0.5 : 0.0) + border.color: control.palette.highlight + border.width: control.visualFocus ? 2 : 0 + } +} diff --git a/src/quickcontrols2/basic/ButtonGroup.qml b/src/quickcontrols2/basic/ButtonGroup.qml new file mode 100644 index 00000000..fadc538a --- /dev/null +++ b/src/quickcontrols2/basic/ButtonGroup.qml @@ -0,0 +1,40 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T + +T.ButtonGroup { } diff --git a/src/quickcontrols2/basic/CMakeLists.txt b/src/quickcontrols2/basic/CMakeLists.txt new file mode 100644 index 00000000..0067a53f --- /dev/null +++ b/src/quickcontrols2/basic/CMakeLists.txt @@ -0,0 +1,297 @@ +##################################################################### +## qtquickcontrols2basicstyleplugin Plugin: +##################################################################### + +set(qml_files + "AbstractButton.qml" + "Action.qml" + "ActionGroup.qml" + "ApplicationWindow.qml" + "BusyIndicator.qml" + "Button.qml" + "ButtonGroup.qml" + "CheckBox.qml" + "CheckDelegate.qml" + "ComboBox.qml" + "Container.qml" + "Control.qml" + "DelayButton.qml" + "Dial.qml" + "Dialog.qml" + "DialogButtonBox.qml" + "Drawer.qml" + "Frame.qml" + "GroupBox.qml" + "HorizontalHeaderView.qml" + "ItemDelegate.qml" + "Label.qml" + "Menu.qml" + "MenuBar.qml" + "MenuBarItem.qml" + "MenuItem.qml" + "MenuSeparator.qml" + "Page.qml" + "PageIndicator.qml" + "Pane.qml" + "Popup.qml" + "ProgressBar.qml" + "RadioButton.qml" + "RadioDelegate.qml" + "RangeSlider.qml" + "RoundButton.qml" + "ScrollBar.qml" + "ScrollIndicator.qml" + "ScrollView.qml" + "Slider.qml" + "SpinBox.qml" + "SplitView.qml" + "StackView.qml" + "SwipeDelegate.qml" + "Switch.qml" + "SwitchDelegate.qml" + "SwipeView.qml" + "TabBar.qml" + "TabButton.qml" + "TextArea.qml" + "TextField.qml" + "ToolBar.qml" + "ToolButton.qml" + "ToolSeparator.qml" + "ToolTip.qml" + "Tumbler.qml" + "VerticalHeaderView.qml" +) +set_source_files_properties(AbstractButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Action.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.3;6.0" +) +set_source_files_properties(ActionGroup.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.3;6.0" +) +set_source_files_properties(ApplicationWindow.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(BusyIndicator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Button.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ButtonGroup.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(CheckBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(CheckDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ComboBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Container.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Control.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(DelayButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.2;6.0" +) +set_source_files_properties(Dial.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Dialog.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(DialogButtonBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(Drawer.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Frame.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(GroupBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(HorizontalHeaderView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.15;6.0" +) +set_source_files_properties(ItemDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Label.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Menu.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(MenuBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.3;6.0" +) +set_source_files_properties(MenuBarItem.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.3;6.0" +) +set_source_files_properties(MenuItem.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(MenuSeparator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(Page.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(PageIndicator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Pane.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Popup.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ProgressBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(RadioButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(RadioDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(RangeSlider.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(RoundButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(ScrollBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ScrollIndicator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ScrollView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.2;6.0" +) +set_source_files_properties(Slider.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(SpinBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(SplitView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.13;6.0" +) +set_source_files_properties(StackView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(SwipeDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Switch.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(SwitchDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(SwipeView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(TabBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(TabButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(TextArea.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(TextField.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ToolBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ToolButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ToolSeparator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(ToolTip.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Tumbler.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(VerticalHeaderView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.15;6.0" +) + +qt_internal_add_qml_module(qtquickcontrols2basicstyleplugin + URI "QtQuick.Controls.Basic" + VERSION "${PROJECT_VERSION}" + CLASS_NAME QtQuickControls2BasicStylePlugin + PLUGIN_TARGET qtquickcontrols2basicstyleplugin + NO_PLUGIN_OPTIONAL + NO_GENERATE_PLUGIN_SOURCE + SOURCES + qquickbasicstyle.cpp qquickbasicstyle_p.h + qquickbasictheme.cpp qquickbasictheme_p.h + qtquickcontrols2basicstyleplugin.cpp + QML_FILES + ${qml_files} + DEFINES + QT_NO_CAST_FROM_ASCII + QT_NO_CAST_TO_ASCII + LIBRARIES + Qt::CorePrivate + Qt::GuiPrivate + Qt::QmlPrivate + Qt::QuickControls2Private + Qt::QuickPrivate + Qt::QuickTemplates2Private + PUBLIC_LIBRARIES + Qt::Core + Qt::Gui + Qt::Qml + Qt::Quick +) + +# Resources: +set(qtquickcontrols2basicstyleplugin_resource_files + "images/arrow-indicator.png" + "images/arrow-indicator@2x.png" + "images/arrow-indicator@3x.png" + "images/arrow-indicator@4x.png" + "images/check.png" + "images/check@2x.png" + "images/check@3x.png" + "images/check@4x.png" + "images/dial-indicator.png" + "images/dial-indicator@2x.png" + "images/dial-indicator@3x.png" + "images/dial-indicator@4x.png" + "images/double-arrow.png" + "images/double-arrow@2x.png" + "images/double-arrow@3x.png" + "images/double-arrow@4x.png" + "images/drop-indicator.png" + "images/drop-indicator@2x.png" + "images/drop-indicator@3x.png" + "images/drop-indicator@4x.png" +) + +qt_internal_add_resource(qtquickcontrols2basicstyleplugin "qtquickcontrols2basicstyleplugin" + PREFIX + "/qt-project.org/imports/QtQuick/Controls/Basic" + FILES + ${qtquickcontrols2basicstyleplugin_resource_files} +) + +add_subdirectory(impl) diff --git a/src/quickcontrols2/basic/CheckBox.qml b/src/quickcontrols2/basic/CheckBox.qml new file mode 100644 index 00000000..6465460d --- /dev/null +++ b/src/quickcontrols2/basic/CheckBox.qml @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl + +T.CheckBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + // keep in sync with CheckDelegate.qml (shared CheckIndicator.qml was removed for performance reasons) + indicator: Rectangle { + implicitWidth: 28 + implicitHeight: 28 + + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + + color: control.down ? control.palette.light : control.palette.base + border.width: control.visualFocus ? 2 : 1 + border.color: control.visualFocus ? control.palette.highlight : control.palette.mid + + ColorImage { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + defaultColor: "#353637" + color: control.palette.text + source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png" + visible: control.checkState === Qt.Checked + } + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 16 + height: 3 + color: control.palette.text + visible: control.checkState === Qt.PartiallyChecked + } + } + + contentItem: CheckLabel { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.palette.windowText + } +} diff --git a/src/quickcontrols2/basic/CheckDelegate.qml b/src/quickcontrols2/basic/CheckDelegate.qml new file mode 100644 index 00000000..1a1827e3 --- /dev/null +++ b/src/quickcontrols2/basic/CheckDelegate.qml @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl + +T.CheckDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 12 + spacing: 12 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.text + + contentItem: IconLabel { + leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.text + } + + // keep in sync with CheckBox.qml (shared CheckIndicator.qml was removed for performance reasons) + indicator: Rectangle { + implicitWidth: 28 + implicitHeight: 28 + + x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + color: control.down ? control.palette.light : control.palette.base + border.width: control.visualFocus ? 2 : 1 + border.color: control.visualFocus ? control.palette.highlight : control.palette.mid + + ColorImage { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + defaultColor: "#353637" + color: control.palette.text + source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png" + visible: control.checkState === Qt.Checked + } + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 16 + height: 3 + color: control.palette.text + visible: control.checkState === Qt.PartiallyChecked + } + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 40 + visible: control.down || control.highlighted + color: control.down ? control.palette.midlight : control.palette.light + } +} diff --git a/src/quickcontrols2/basic/ComboBox.qml b/src/quickcontrols2/basic/ComboBox.qml new file mode 100644 index 00000000..6a1924ed --- /dev/null +++ b/src/quickcontrols2/basic/ComboBox.qml @@ -0,0 +1,140 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.ComboBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) + rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) + + delegate: ItemDelegate { + width: ListView.view.width + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData + palette.text: control.palette.text + palette.highlightedText: control.palette.highlightedText + font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal + highlighted: control.highlightedIndex === index + hoverEnabled: control.hoverEnabled + } + + indicator: ColorImage { + x: control.mirrored ? control.padding : control.width - width - control.padding + y: control.topPadding + (control.availableHeight - height) / 2 + color: control.palette.dark + defaultColor: "#353637" + source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/double-arrow.png" + opacity: enabled ? 1 : 0.3 + } + + contentItem: T.TextField { + leftPadding: !control.mirrored ? 12 : control.editable && activeFocus ? 3 : 1 + rightPadding: control.mirrored ? 12 : control.editable && activeFocus ? 3 : 1 + topPadding: 6 - control.padding + bottomPadding: 6 - control.padding + + text: control.editable ? control.editText : control.displayText + + enabled: control.editable + autoScroll: control.editable + readOnly: control.down + inputMethodHints: control.inputMethodHints + validator: control.validator + selectByMouse: control.selectTextByMouse + + font: control.font + color: control.editable ? control.palette.text : control.palette.buttonText + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + verticalAlignment: Text.AlignVCenter + + background: Rectangle { + visible: control.enabled && control.editable && !control.flat + border.width: parent && parent.activeFocus ? 2 : 1 + border.color: parent && parent.activeFocus ? control.palette.highlight : control.palette.button + color: control.palette.base + } + } + + background: Rectangle { + implicitWidth: 140 + implicitHeight: 40 + + color: control.down ? control.palette.mid : control.palette.button + border.color: control.palette.highlight + border.width: !control.editable && control.visualFocus ? 2 : 0 + visible: !control.flat || control.down + } + + popup: T.Popup { + y: control.height + width: control.width + height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin) + topMargin: 6 + bottomMargin: 6 + + contentItem: ListView { + clip: true + implicitHeight: contentHeight + model: control.delegateModel + currentIndex: control.highlightedIndex + highlightMoveDuration: 0 + + Rectangle { + z: 10 + width: parent.width + height: parent.height + color: "transparent" + border.color: control.palette.mid + } + + T.ScrollIndicator.vertical: ScrollIndicator { } + } + + background: Rectangle { + color: control.palette.window + } + } +} diff --git a/src/quickcontrols2/basic/Container.qml b/src/quickcontrols2/basic/Container.qml new file mode 100644 index 00000000..93919075 --- /dev/null +++ b/src/quickcontrols2/basic/Container.qml @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T + +T.Container { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) +} diff --git a/src/quickcontrols2/basic/Control.qml b/src/quickcontrols2/basic/Control.qml new file mode 100644 index 00000000..7a68a431 --- /dev/null +++ b/src/quickcontrols2/basic/Control.qml @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T + +T.Control { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) +} diff --git a/src/quickcontrols2/basic/DelayButton.qml b/src/quickcontrols2/basic/DelayButton.qml new file mode 100644 index 00000000..367384c0 --- /dev/null +++ b/src/quickcontrols2/basic/DelayButton.qml @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.DelayButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + horizontalPadding: padding + 2 + + transition: Transition { + NumberAnimation { + duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress) + } + } + + contentItem: ItemGroup { + ClippedText { + clip: control.progress > 0 + clipX: -control.leftPadding + control.progress * control.width + clipWidth: (1.0 - control.progress) * control.width + visible: control.progress < 1 + + text: control.text + font: control.font + opacity: enabled ? 1 : 0.3 + color: control.palette.buttonText + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + ClippedText { + clip: control.progress > 0 + clipX: -control.leftPadding + clipWidth: control.progress * control.width + visible: control.progress > 0 + + text: control.text + font: control.font + opacity: enabled ? 1 : 0.3 + color: control.palette.brightText + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 40 + color: Color.blend(control.palette.button, control.palette.mid, control.down ? 0.5 : 0.0) + border.color: control.palette.highlight + border.width: control.visualFocus ? 2 : 0 + + PaddedRectangle { + padding: control.visualFocus ? 2 : 0 + width: control.progress * parent.width + height: parent.height + color: Color.blend(control.palette.dark, control.palette.mid, control.down ? 0.5 : 0.0) + } + } +} diff --git a/src/quickcontrols2/basic/Dial.qml b/src/quickcontrols2/basic/Dial.qml new file mode 100644 index 00000000..8450e9f9 --- /dev/null +++ b/src/quickcontrols2/basic/Dial.qml @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Controls.Basic.impl +import QtQuick.Templates as T + +T.Dial { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + background: DialImpl { + implicitWidth: 184 + implicitHeight: 184 + color: control.visualFocus ? control.palette.highlight : control.palette.dark + progress: control.position + opacity: control.enabled ? 1 : 0.3 + } + + handle: ColorImage { + x: control.background.x + control.background.width / 2 - width / 2 + y: control.background.y + control.background.height / 2 - height / 2 + width: 14 + height: 10 + defaultColor: "#353637" + color: control.visualFocus ? control.palette.highlight : control.palette.dark + source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/dial-indicator.png" + antialiasing: true + opacity: control.enabled ? 1 : 0.3 + transform: [ + Translate { + y: -Math.min(control.background.width, control.background.height) * 0.4 + control.handle.height / 2 + }, + Rotation { + angle: control.angle + origin.x: control.handle.width / 2 + origin.y: control.handle.height / 2 + } + ] + } +} diff --git a/src/quickcontrols2/basic/Dialog.qml b/src/quickcontrols2/basic/Dialog.qml new file mode 100644 index 00000000..1f2b4fbb --- /dev/null +++ b/src/quickcontrols2/basic/Dialog.qml @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl + +T.Dialog { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitHeaderWidth, + implicitFooterWidth) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + + padding: 12 + + background: Rectangle { + color: control.palette.window + border.color: control.palette.dark + } + + header: Label { + text: control.title + visible: control.title + elide: Label.ElideRight + font.bold: true + padding: 12 + background: Rectangle { + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 1 + color: control.palette.window + } + } + + footer: DialogButtonBox { + visible: count > 0 + } + + T.Overlay.modal: Rectangle { + color: Color.transparent(control.palette.shadow, 0.5) + } + + T.Overlay.modeless: Rectangle { + color: Color.transparent(control.palette.shadow, 0.12) + } +} diff --git a/src/quickcontrols2/basic/DialogButtonBox.qml b/src/quickcontrols2/basic/DialogButtonBox.qml new file mode 100644 index 00000000..e4cdbd14 --- /dev/null +++ b/src/quickcontrols2/basic/DialogButtonBox.qml @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T + +T.DialogButtonBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + (control.count === 1 ? implicitContentWidth * 2 : implicitContentWidth) + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + contentWidth: contentItem.contentWidth + + spacing: 1 + padding: 12 + alignment: count === 1 ? Qt.AlignRight : undefined + + delegate: Button { + width: control.count === 1 ? control.availableWidth / 2 : undefined + } + + contentItem: ListView { + model: control.contentModel + spacing: control.spacing + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + snapMode: ListView.SnapToItem + } + + background: Rectangle { + implicitHeight: 40 + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + color: control.palette.window + } +} diff --git a/src/quickcontrols2/basic/Drawer.qml b/src/quickcontrols2/basic/Drawer.qml new file mode 100644 index 00000000..0d286f99 --- /dev/null +++ b/src/quickcontrols2/basic/Drawer.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.Drawer { + id: control + + parent: T.Overlay.overlay + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: control.edge === Qt.BottomEdge + leftPadding: control.edge === Qt.RightEdge + rightPadding: control.edge === Qt.LeftEdge + bottomPadding: control.edge === Qt.TopEdge + + enter: Transition { SmoothedAnimation { velocity: 5 } } + exit: Transition { SmoothedAnimation { velocity: 5 } } + + background: Rectangle { + color: control.palette.window + Rectangle { + readonly property bool horizontal: control.edge === Qt.LeftEdge || control.edge === Qt.RightEdge + width: horizontal ? 1 : parent.width + height: horizontal ? parent.height : 1 + color: control.palette.dark + x: control.edge === Qt.LeftEdge ? parent.width - 1 : 0 + y: control.edge === Qt.TopEdge ? parent.height - 1 : 0 + } + } + + T.Overlay.modal: Rectangle { + color: Color.transparent(control.palette.shadow, 0.5) + } + + T.Overlay.modeless: Rectangle { + color: Color.transparent(control.palette.shadow, 0.12) + } +} diff --git a/src/quickcontrols2/basic/Frame.qml b/src/quickcontrols2/basic/Frame.qml new file mode 100644 index 00000000..22f29806 --- /dev/null +++ b/src/quickcontrols2/basic/Frame.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.Frame { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 12 + + background: Rectangle { + color: "transparent" + border.color: control.palette.mid + } +} diff --git a/src/quickcontrols2/basic/GroupBox.qml b/src/quickcontrols2/basic/GroupBox.qml new file mode 100644 index 00000000..27ff8ce6 --- /dev/null +++ b/src/quickcontrols2/basic/GroupBox.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.GroupBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitLabelWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + spacing: 6 + padding: 12 + topPadding: padding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) + + label: Text { + x: control.leftPadding + width: control.availableWidth + + text: control.title + font: control.font + color: control.palette.windowText + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + + background: Rectangle { + y: control.topPadding - control.bottomPadding + width: parent.width + height: parent.height - control.topPadding + control.bottomPadding + + color: "transparent" + border.color: control.palette.mid + } +} diff --git a/src/quickcontrols2/basic/HorizontalHeaderView.qml b/src/quickcontrols2/basic/HorizontalHeaderView.qml new file mode 100644 index 00000000..e5214593 --- /dev/null +++ b/src/quickcontrols2/basic/HorizontalHeaderView.qml @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T + +T.HorizontalHeaderView { + id: control + + implicitWidth: syncView ? syncView.width : 0 + implicitHeight: contentHeight + + delegate: Rectangle { + // Qt6: add cellPadding (and font etc) as public API in headerview + readonly property real cellPadding: 8 + + implicitWidth: text.implicitWidth + (cellPadding * 2) + implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2)) + color: "#f6f6f6" + border.color: "#e4e4e4" + + Text { + id: text + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] + : model[control.textRole]) + : modelData + width: parent.width + height: parent.height + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: "#ff26282a" + } + } +} diff --git a/src/quickcontrols2/basic/ItemDelegate.qml b/src/quickcontrols2/basic/ItemDelegate.qml new file mode 100644 index 00000000..3a1cb298 --- /dev/null +++ b/src/quickcontrols2/basic/ItemDelegate.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.ItemDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 12 + spacing: 8 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.text + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.highlighted ? control.palette.highlightedText : control.palette.text + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 40 + visible: control.down || control.highlighted || control.visualFocus + color: Color.blend(control.down ? control.palette.midlight : control.palette.light, + control.palette.highlight, control.visualFocus ? 0.15 : 0.0) + } +} diff --git a/src/quickcontrols2/basic/Label.qml b/src/quickcontrols2/basic/Label.qml new file mode 100644 index 00000000..9d7dfdfd --- /dev/null +++ b/src/quickcontrols2/basic/Label.qml @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.Label { + id: control + + color: control.palette.windowText + linkColor: control.palette.link +} diff --git a/src/quickcontrols2/basic/Menu.qml b/src/quickcontrols2/basic/Menu.qml new file mode 100644 index 00000000..475e58cc --- /dev/null +++ b/src/quickcontrols2/basic/Menu.qml @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.Menu { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + margins: 0 + overlap: 1 + + delegate: MenuItem { } + + contentItem: ListView { + implicitHeight: contentHeight + model: control.contentModel + interactive: Window.window + ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height + : false + clip: true + currentIndex: control.currentIndex + + ScrollIndicator.vertical: ScrollIndicator {} + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 40 + color: control.palette.window + border.color: control.palette.dark + } + + T.Overlay.modal: Rectangle { + color: Color.transparent(control.palette.shadow, 0.5) + } + + T.Overlay.modeless: Rectangle { + color: Color.transparent(control.palette.shadow, 0.12) + } +} diff --git a/src/quickcontrols2/basic/MenuBar.qml b/src/quickcontrols2/basic/MenuBar.qml new file mode 100644 index 00000000..79199d12 --- /dev/null +++ b/src/quickcontrols2/basic/MenuBar.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl + +T.MenuBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + delegate: MenuBarItem { } + + contentItem: Row { + spacing: control.spacing + Repeater { + model: control.contentModel + } + } + + background: Rectangle { + implicitHeight: 40 + color: control.palette.button + } +} diff --git a/src/quickcontrols2/basic/MenuBarItem.qml b/src/quickcontrols2/basic/MenuBarItem.qml new file mode 100644 index 00000000..e7fd1c0b --- /dev/null +++ b/src/quickcontrols2/basic/MenuBarItem.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl + +T.MenuBarItem { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 6 + padding: 6 + leftPadding: 12 + rightPadding: 16 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.buttonText + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.buttonText + } + + background: Rectangle { + implicitWidth: 40 + implicitHeight: 40 + color: control.down || control.highlighted ? control.palette.mid : "transparent" + } +} diff --git a/src/quickcontrols2/basic/MenuItem.qml b/src/quickcontrols2/basic/MenuItem.qml new file mode 100644 index 00000000..ab1f12f5 --- /dev/null +++ b/src/quickcontrols2/basic/MenuItem.qml @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.MenuItem { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.windowText + + contentItem: IconLabel { + readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0 + readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0 + leftPadding: !control.mirrored ? indicatorPadding : arrowPadding + rightPadding: control.mirrored ? indicatorPadding : arrowPadding + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.windowText + } + + indicator: ColorImage { + x: control.mirrored ? control.width - width - control.rightPadding : control.leftPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + visible: control.checked + source: control.checkable ? "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png" : "" + color: control.palette.windowText + defaultColor: "#353637" + } + + arrow: ColorImage { + x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + visible: control.subMenu + mirror: control.mirrored + source: control.subMenu ? "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/arrow-indicator.png" : "" + color: control.palette.windowText + defaultColor: "#353637" + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 40 + x: 1 + y: 1 + width: control.width - 2 + height: control.height - 2 + color: control.down ? control.palette.midlight : control.highlighted ? control.palette.light : "transparent" + } +} diff --git a/src/quickcontrols2/basic/MenuSeparator.qml b/src/quickcontrols2/basic/MenuSeparator.qml new file mode 100644 index 00000000..bc17dc39 --- /dev/null +++ b/src/quickcontrols2/basic/MenuSeparator.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.MenuSeparator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 2 + verticalPadding: padding + 4 + + contentItem: Rectangle { + implicitWidth: 188 + implicitHeight: 1 + color: control.palette.mid + } +} diff --git a/src/quickcontrols2/basic/Page.qml b/src/quickcontrols2/basic/Page.qml new file mode 100644 index 00000000..ff75ee4e --- /dev/null +++ b/src/quickcontrols2/basic/Page.qml @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.Page { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitHeaderWidth, + implicitFooterWidth) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + + background: Rectangle { + color: control.palette.window + } +} diff --git a/src/quickcontrols2/basic/PageIndicator.qml b/src/quickcontrols2/basic/PageIndicator.qml new file mode 100644 index 00000000..bd5ef290 --- /dev/null +++ b/src/quickcontrols2/basic/PageIndicator.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.PageIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + delegate: Rectangle { + implicitWidth: 8 + implicitHeight: 8 + + radius: width / 2 + color: control.palette.dark + + opacity: index === currentIndex ? 0.95 : pressed ? 0.7 : 0.45 + Behavior on opacity { OpacityAnimator { duration: 100 } } + } + + contentItem: Row { + spacing: control.spacing + + Repeater { + model: control.count + delegate: control.delegate + } + } +} diff --git a/src/quickcontrols2/basic/Pane.qml b/src/quickcontrols2/basic/Pane.qml new file mode 100644 index 00000000..181db9e4 --- /dev/null +++ b/src/quickcontrols2/basic/Pane.qml @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.Pane { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 12 + + background: Rectangle { + color: control.palette.window + } +} diff --git a/src/quickcontrols2/basic/Popup.qml b/src/quickcontrols2/basic/Popup.qml new file mode 100644 index 00000000..720483d9 --- /dev/null +++ b/src/quickcontrols2/basic/Popup.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.Popup { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 12 + + background: Rectangle { + color: control.palette.window + border.color: control.palette.dark + } + + T.Overlay.modal: Rectangle { + color: Color.transparent(control.palette.shadow, 0.5) + } + + T.Overlay.modeless: Rectangle { + color: Color.transparent(control.palette.shadow, 0.12) + } +} diff --git a/src/quickcontrols2/basic/ProgressBar.qml b/src/quickcontrols2/basic/ProgressBar.qml new file mode 100644 index 00000000..a49538d1 --- /dev/null +++ b/src/quickcontrols2/basic/ProgressBar.qml @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Basic.impl + +T.ProgressBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + contentItem: ProgressBarImpl { + implicitHeight: 6 + implicitWidth: 116 + scale: control.mirrored ? -1 : 1 + progress: control.position + indeterminate: control.visible && control.indeterminate + color: control.palette.dark + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 6 + y: (control.height - height) / 2 + height: 6 + + color: control.palette.midlight + } +} diff --git a/src/quickcontrols2/basic/RadioButton.qml b/src/quickcontrols2/basic/RadioButton.qml new file mode 100644 index 00000000..adb91435 --- /dev/null +++ b/src/quickcontrols2/basic/RadioButton.qml @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.RadioButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + // keep in sync with RadioDelegate.qml (shared RadioIndicator.qml was removed for performance reasons) + indicator: Rectangle { + implicitWidth: 28 + implicitHeight: 28 + + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + + radius: width / 2 + color: control.down ? control.palette.light : control.palette.base + border.width: control.visualFocus ? 2 : 1 + border.color: control.visualFocus ? control.palette.highlight : control.palette.mid + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 20 + height: 20 + radius: width / 2 + color: control.palette.text + visible: control.checked + } + } + + contentItem: CheckLabel { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.palette.windowText + } +} diff --git a/src/quickcontrols2/basic/RadioDelegate.qml b/src/quickcontrols2/basic/RadioDelegate.qml new file mode 100644 index 00000000..69be290c --- /dev/null +++ b/src/quickcontrols2/basic/RadioDelegate.qml @@ -0,0 +1,102 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.RadioDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 12 + spacing: 12 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.text + + contentItem: IconLabel { + leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.text + } + + // keep in sync with RadioButton.qml (shared RadioIndicator.qml was removed for performance reasons) + indicator: Rectangle { + implicitWidth: 28 + implicitHeight: 28 + + x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + radius: width / 2 + color: control.down ? control.palette.light : control.palette.base + border.width: control.visualFocus ? 2 : 1 + border.color: control.visualFocus ? control.palette.highlight : control.palette.mid + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 20 + height: 20 + radius: width / 2 + color: control.palette.text + visible: control.checked + } + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 40 + visible: control.down || control.highlighted + color: control.down ? control.palette.midlight : control.palette.light + } +} diff --git a/src/quickcontrols2/basic/RangeSlider.qml b/src/quickcontrols2/basic/RangeSlider.qml new file mode 100644 index 00000000..e47cbd52 --- /dev/null +++ b/src/quickcontrols2/basic/RangeSlider.qml @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.RangeSlider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + first.implicitHandleWidth + leftPadding + rightPadding, + second.implicitHandleWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + first.implicitHandleHeight + topPadding + bottomPadding, + second.implicitHandleHeight + topPadding + bottomPadding) + + padding: 6 + + first.handle: Rectangle { + x: control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height)) + implicitWidth: 28 + implicitHeight: 28 + radius: width / 2 + border.width: activeFocus ? 2 : 1 + border.color: activeFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight + color: control.first.pressed ? control.palette.light : control.palette.window + } + + second.handle: Rectangle { + x: control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height)) + implicitWidth: 28 + implicitHeight: 28 + radius: width / 2 + border.width: activeFocus ? 2 : 1 + border.color: activeFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight + color: control.second.pressed ? control.palette.light : control.palette.window + } + + background: Rectangle { + x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) + implicitWidth: control.horizontal ? 200 : 6 + implicitHeight: control.horizontal ? 6 : 200 + width: control.horizontal ? control.availableWidth : implicitWidth + height: control.horizontal ? implicitHeight : control.availableHeight + radius: 3 + color: control.palette.midlight + scale: control.horizontal && control.mirrored ? -1 : 1 + + Rectangle { + x: control.horizontal ? control.first.position * parent.width + 3 : 0 + y: control.horizontal ? 0 : control.second.visualPosition * parent.height + 3 + width: control.horizontal ? control.second.position * parent.width - control.first.position * parent.width - 6 : 6 + height: control.horizontal ? 6 : control.second.position * parent.height - control.first.position * parent.height - 6 + + color: control.palette.dark + } + } +} diff --git a/src/quickcontrols2/basic/RoundButton.qml b/src/quickcontrols2/basic/RoundButton.qml new file mode 100644 index 00000000..6ab810fd --- /dev/null +++ b/src/quickcontrols2/basic/RoundButton.qml @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.RoundButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 24 + icon.height: 24 + icon.color: control.checked || control.highlighted ? control.palette.brightText : + control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.checked || control.highlighted ? control.palette.brightText : + control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText + } + + background: Rectangle { + implicitWidth: 40 + implicitHeight: 40 + radius: control.radius + opacity: enabled ? 1 : 0.3 + visible: !control.flat || control.down || control.checked || control.highlighted + color: Color.blend(control.checked || control.highlighted ? control.palette.dark : control.palette.button, + control.palette.mid, control.down ? 0.5 : 0.0) + border.color: control.palette.highlight + border.width: control.visualFocus ? 2 : 0 + } +} diff --git a/src/quickcontrols2/basic/ScrollBar.qml b/src/quickcontrols2/basic/ScrollBar.qml new file mode 100644 index 00000000..763f96bb --- /dev/null +++ b/src/quickcontrols2/basic/ScrollBar.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.ScrollBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 2 + visible: control.policy !== T.ScrollBar.AlwaysOff + minimumSize: orientation == Qt.Horizontal ? height / width : width / height + + contentItem: Rectangle { + implicitWidth: control.interactive ? 6 : 2 + implicitHeight: control.interactive ? 6 : 2 + + radius: width / 2 + color: control.pressed ? control.palette.dark : control.palette.mid + opacity: 0.0 + + states: State { + name: "active" + when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0) + PropertyChanges { target: 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/quickcontrols2/basic/ScrollIndicator.qml b/src/quickcontrols2/basic/ScrollIndicator.qml new file mode 100644 index 00000000..dcb23d65 --- /dev/null +++ b/src/quickcontrols2/basic/ScrollIndicator.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.ScrollIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 2 + + contentItem: Rectangle { + implicitWidth: 2 + implicitHeight: 2 + + color: control.palette.mid + visible: control.size < 1.0 + opacity: 0.0 + + states: State { + name: "active" + when: control.active + PropertyChanges { target: 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/quickcontrols2/basic/ScrollView.qml b/src/quickcontrols2/basic/ScrollView.qml new file mode 100644 index 00000000..43c4e428 --- /dev/null +++ b/src/quickcontrols2/basic/ScrollView.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.ScrollView { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + ScrollBar.vertical: ScrollBar { + parent: control + x: control.mirrored ? 0 : control.width - width + y: control.topPadding + height: control.availableHeight + active: control.ScrollBar.horizontal.active + } + + ScrollBar.horizontal: ScrollBar { + parent: control + x: control.leftPadding + y: control.height - height + width: control.availableWidth + active: control.ScrollBar.vertical.active + } +} diff --git a/src/quickcontrols2/basic/Slider.qml b/src/quickcontrols2/basic/Slider.qml new file mode 100644 index 00000000..425f4975 --- /dev/null +++ b/src/quickcontrols2/basic/Slider.qml @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.Slider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitHandleWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitHandleHeight + topPadding + bottomPadding) + + padding: 6 + + handle: Rectangle { + x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)) + implicitWidth: 28 + implicitHeight: 28 + radius: width / 2 + color: control.pressed ? control.palette.light : control.palette.window + border.width: control.visualFocus ? 2 : 1 + border.color: control.visualFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight + } + + background: Rectangle { + x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) + implicitWidth: control.horizontal ? 200 : 6 + implicitHeight: control.horizontal ? 6 : 200 + width: control.horizontal ? control.availableWidth : implicitWidth + height: control.horizontal ? implicitHeight : control.availableHeight + radius: 3 + color: control.palette.midlight + scale: control.horizontal && control.mirrored ? -1 : 1 + + Rectangle { + y: control.horizontal ? 0 : control.visualPosition * parent.height + width: control.horizontal ? control.position * parent.width : 6 + height: control.horizontal ? 6 : control.position * parent.height + + radius: 3 + color: control.palette.dark + } + } +} diff --git a/src/quickcontrols2/basic/SpinBox.qml b/src/quickcontrols2/basic/SpinBox.qml new file mode 100644 index 00000000..772cc583 --- /dev/null +++ b/src/quickcontrols2/basic/SpinBox.qml @@ -0,0 +1,134 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.SpinBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentItem.implicitWidth + 2 * padding + + up.implicitIndicatorWidth + + down.implicitIndicatorWidth) + implicitHeight: Math.max(implicitContentHeight + topPadding + bottomPadding, + implicitBackgroundHeight, + up.implicitIndicatorHeight, + down.implicitIndicatorHeight) + + padding: 6 + leftPadding: padding + (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0)) + rightPadding: padding + (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0)) + + validator: IntValidator { + locale: control.locale.name + bottom: Math.min(control.from, control.to) + top: Math.max(control.from, control.to) + } + + contentItem: TextInput { + z: 2 + text: control.displayText + + font: control.font + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + horizontalAlignment: Qt.AlignHCenter + verticalAlignment: Qt.AlignVCenter + + readOnly: !control.editable + validator: control.validator + inputMethodHints: control.inputMethodHints + + Rectangle { + x: -6 - (control.down.indicator ? 1 : 0) + y: -6 + width: control.width - (control.up.indicator ? control.up.indicator.width - 1 : 0) - (control.down.indicator ? control.down.indicator.width - 1 : 0) + height: control.height + visible: control.activeFocus + color: "transparent" + border.color: control.palette.highlight + border.width: 2 + } + } + + up.indicator: Rectangle { + x: control.mirrored ? 0 : parent.width - width + height: parent.height + implicitWidth: 40 + implicitHeight: 40 + color: control.up.pressed ? control.palette.mid : control.palette.button + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: parent.width / 3 + height: 2 + color: enabled ? control.palette.buttonText : control.palette.mid + } + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 2 + height: parent.width / 3 + color: enabled ? control.palette.buttonText : control.palette.mid + } + } + + down.indicator: Rectangle { + x: control.mirrored ? parent.width - width : 0 + height: parent.height + implicitWidth: 40 + implicitHeight: 40 + color: control.down.pressed ? control.palette.mid : control.palette.button + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: parent.width / 3 + height: 2 + color: enabled ? control.palette.buttonText : control.palette.mid + } + } + + background: Rectangle { + implicitWidth: 140 + color: enabled ? control.palette.base : control.palette.button + border.color: control.palette.button + } +} diff --git a/src/quickcontrols2/basic/SplitView.qml b/src/quickcontrols2/basic/SplitView.qml new file mode 100644 index 00000000..66d24743 --- /dev/null +++ b/src/quickcontrols2/basic/SplitView.qml @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl + +T.SplitView { + id: control + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + handle: Rectangle { + implicitWidth: control.orientation === Qt.Horizontal ? 6 : control.width + implicitHeight: control.orientation === Qt.Horizontal ? control.height : 6 + color: T.SplitHandle.pressed ? control.palette.mid + : (T.SplitHandle.hovered ? control.palette.midlight : control.palette.button) + } +} diff --git a/src/quickcontrols2/basic/StackView.qml b/src/quickcontrols2/basic/StackView.qml new file mode 100644 index 00000000..cbf13f36 --- /dev/null +++ b/src/quickcontrols2/basic/StackView.qml @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T + +T.StackView { + id: control + + popEnter: Transition { + XAnimator { from: (control.mirrored ? -1 : 1) * -control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } + } + + popExit: Transition { + XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * control.width; duration: 400; easing.type: Easing.OutCubic } + } + + pushEnter: Transition { + XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } + } + + pushExit: Transition { + XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 400; easing.type: Easing.OutCubic } + } + + replaceEnter: Transition { + XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } + } + + replaceExit: Transition { + XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 400; easing.type: Easing.OutCubic } + } +} diff --git a/src/quickcontrols2/basic/SwipeDelegate.qml b/src/quickcontrols2/basic/SwipeDelegate.qml new file mode 100644 index 00000000..f8209a1e --- /dev/null +++ b/src/quickcontrols2/basic/SwipeDelegate.qml @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.SwipeDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 12 + spacing: 12 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.text + + swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } } + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.text + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 40 + color: Color.blend(control.down ? control.palette.midlight : control.palette.light, + control.palette.highlight, control.visualFocus ? 0.15 : 0.0) + } +} diff --git a/src/quickcontrols2/basic/SwipeView.qml b/src/quickcontrols2/basic/SwipeView.qml new file mode 100644 index 00000000..6ce4ee6c --- /dev/null +++ b/src/quickcontrols2/basic/SwipeView.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T + +T.SwipeView { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + contentItem: ListView { + model: control.contentModel + interactive: control.interactive + currentIndex: control.currentIndex + focus: control.focus + + spacing: control.spacing + orientation: control.orientation + snapMode: ListView.SnapOneItem + boundsBehavior: Flickable.StopAtBounds + + highlightRangeMode: ListView.StrictlyEnforceRange + preferredHighlightBegin: 0 + preferredHighlightEnd: 0 + highlightMoveDuration: 250 + maximumFlickVelocity: 4 * (control.orientation === Qt.Horizontal ? width : height) + } +} diff --git a/src/quickcontrols2/basic/Switch.qml b/src/quickcontrols2/basic/Switch.qml new file mode 100644 index 00000000..0d919f9e --- /dev/null +++ b/src/quickcontrols2/basic/Switch.qml @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl + +T.Switch { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + indicator: PaddedRectangle { + implicitWidth: 56 + implicitHeight: 28 + + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + + radius: 8 + leftPadding: 0 + rightPadding: 0 + padding: (height - 16) / 2 + color: control.checked ? control.palette.dark : control.palette.midlight + + Rectangle { + x: Math.max(0, Math.min(parent.width - width, control.visualPosition * parent.width - (width / 2))) + y: (parent.height - height) / 2 + width: 28 + height: 28 + radius: 16 + color: control.down ? control.palette.light : control.palette.window + border.width: control.visualFocus ? 2 : 1 + border.color: control.visualFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight + + Behavior on x { + enabled: !control.down + SmoothedAnimation { velocity: 200 } + } + } + } + + contentItem: CheckLabel { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.palette.windowText + } +} diff --git a/src/quickcontrols2/basic/SwitchDelegate.qml b/src/quickcontrols2/basic/SwitchDelegate.qml new file mode 100644 index 00000000..8203e107 --- /dev/null +++ b/src/quickcontrols2/basic/SwitchDelegate.qml @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl + +T.SwitchDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 12 + spacing: 12 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.text + + indicator: PaddedRectangle { + implicitWidth: 56 + implicitHeight: 28 + + x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + + radius: 8 + leftPadding: 0 + rightPadding: 0 + padding: (height - 16) / 2 + color: control.checked ? control.palette.dark : control.palette.midlight + + Rectangle { + x: Math.max(0, Math.min(parent.width - width, control.visualPosition * parent.width - (width / 2))) + y: (parent.height - height) / 2 + width: 28 + height: 28 + radius: 16 + color: control.down ? control.palette.light : control.palette.window + border.width: control.visualFocus ? 2 : 1 + border.color: control.visualFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight + + Behavior on x { + enabled: !control.down + SmoothedAnimation { velocity: 200 } + } + } + } + + contentItem: IconLabel { + leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.text + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 40 + visible: control.down || control.highlighted + color: control.down ? control.palette.midlight : control.palette.light + } +} diff --git a/src/quickcontrols2/basic/TabBar.qml b/src/quickcontrols2/basic/TabBar.qml new file mode 100644 index 00000000..f1b11ac2 --- /dev/null +++ b/src/quickcontrols2/basic/TabBar.qml @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T + +T.TabBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + spacing: 1 + + contentItem: ListView { + model: control.contentModel + currentIndex: control.currentIndex + + spacing: control.spacing + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + flickableDirection: Flickable.AutoFlickIfNeeded + snapMode: ListView.SnapToItem + + highlightMoveDuration: 0 + highlightRangeMode: ListView.ApplyRange + preferredHighlightBegin: 40 + preferredHighlightEnd: width - 40 + } + + background: Rectangle { + color: control.palette.window + } +} diff --git a/src/quickcontrols2/basic/TabButton.qml b/src/quickcontrols2/basic/TabButton.qml new file mode 100644 index 00000000..5e38f69c --- /dev/null +++ b/src/quickcontrols2/basic/TabButton.qml @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.TabButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 24 + icon.height: 24 + icon.color: checked ? control.palette.windowText : control.palette.brightText + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.checked ? control.palette.windowText : control.palette.brightText + } + + background: Rectangle { + implicitHeight: 40 + color: Color.blend(control.checked ? control.palette.window : control.palette.dark, + control.palette.mid, control.down ? 0.5 : 0.0) + } +} diff --git a/src/quickcontrols2/basic/TextArea.qml b/src/quickcontrols2/basic/TextArea.qml new file mode 100644 index 00000000..fa6112f6 --- /dev/null +++ b/src/quickcontrols2/basic/TextArea.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.TextArea { + id: control + + implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, + implicitBackgroundWidth + leftInset + rightInset, + placeholder.implicitWidth + leftPadding + rightPadding) + implicitHeight: Math.max(contentHeight + topPadding + bottomPadding, + implicitBackgroundHeight + topInset + bottomInset, + placeholder.implicitHeight + topPadding + bottomPadding) + + padding: 6 + leftPadding: padding + 4 + + color: control.palette.text + placeholderTextColor: Color.transparent(control.color, 0.5) + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + + PlaceholderText { + id: placeholder + x: control.leftPadding + y: control.topPadding + width: control.width - (control.leftPadding + control.rightPadding) + height: control.height - (control.topPadding + control.bottomPadding) + + text: control.placeholderText + font: control.font + color: control.placeholderTextColor + verticalAlignment: control.verticalAlignment + visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) + elide: Text.ElideRight + renderType: control.renderType + } +} diff --git a/src/quickcontrols2/basic/TextField.qml b/src/quickcontrols2/basic/TextField.qml new file mode 100644 index 00000000..9c66e4ba --- /dev/null +++ b/src/quickcontrols2/basic/TextField.qml @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.TextField { + id: control + + implicitWidth: implicitBackgroundWidth + leftInset + rightInset + || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding, + placeholder.implicitHeight + topPadding + bottomPadding) + + padding: 6 + leftPadding: padding + 4 + + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + placeholderTextColor: Color.transparent(control.color, 0.5) + verticalAlignment: TextInput.AlignVCenter + + PlaceholderText { + id: placeholder + x: control.leftPadding + y: control.topPadding + width: control.width - (control.leftPadding + control.rightPadding) + height: control.height - (control.topPadding + control.bottomPadding) + + text: control.placeholderText + font: control.font + color: control.placeholderTextColor + verticalAlignment: control.verticalAlignment + visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) + elide: Text.ElideRight + renderType: control.renderType + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 40 + border.width: control.activeFocus ? 2 : 1 + color: control.palette.base + border.color: control.activeFocus ? control.palette.highlight : control.palette.mid + } +} diff --git a/src/quickcontrols2/basic/ToolBar.qml b/src/quickcontrols2/basic/ToolBar.qml new file mode 100644 index 00000000..1d21c51d --- /dev/null +++ b/src/quickcontrols2/basic/ToolBar.qml @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.ToolBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + background: Rectangle { + implicitHeight: 40 + color: control.palette.button + } +} diff --git a/src/quickcontrols2/basic/ToolButton.qml b/src/quickcontrols2/basic/ToolButton.qml new file mode 100644 index 00000000..8a4f8097 --- /dev/null +++ b/src/quickcontrols2/basic/ToolButton.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.ToolButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 24 + icon.height: 24 + icon.color: visualFocus ? control.palette.highlight : control.palette.buttonText + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.visualFocus ? control.palette.highlight : control.palette.buttonText + } + + background: Rectangle { + implicitWidth: 40 + implicitHeight: 40 + + opacity: control.down ? 1.0 : 0.5 + color: control.down || control.checked || control.highlighted ? control.palette.mid : control.palette.button + } +} diff --git a/src/quickcontrols2/basic/ToolSeparator.qml b/src/quickcontrols2/basic/ToolSeparator.qml new file mode 100644 index 00000000..774e41ec --- /dev/null +++ b/src/quickcontrols2/basic/ToolSeparator.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.ToolSeparator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: vertical ? 6 : 2 + verticalPadding: vertical ? 2 : 6 + + contentItem: Rectangle { + implicitWidth: vertical ? 1 : 30 + implicitHeight: vertical ? 30 : 1 + color: control.palette.mid + } +} diff --git a/src/quickcontrols2/basic/ToolTip.qml b/src/quickcontrols2/basic/ToolTip.qml new file mode 100644 index 00000000..9d10f7fa --- /dev/null +++ b/src/quickcontrols2/basic/ToolTip.qml @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.ToolTip { + id: control + + x: parent ? (parent.width - implicitWidth) / 2 : 0 + y: -implicitHeight - 3 + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + margins: 6 + padding: 6 + + closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent + + contentItem: Text { + text: control.text + font: control.font + wrapMode: Text.Wrap + color: control.palette.toolTipText + } + + background: Rectangle { + border.color: control.palette.dark + color: control.palette.toolTipBase + } +} diff --git a/src/quickcontrols2/basic/Tumbler.qml b/src/quickcontrols2/basic/Tumbler.qml new file mode 100644 index 00000000..a69df1f3 --- /dev/null +++ b/src/quickcontrols2/basic/Tumbler.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.Tumbler { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + delegate: Text { + text: modelData + color: control.visualFocus ? control.palette.highlight : control.palette.text + font: control.font + opacity: 1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + contentItem: TumblerView { + implicitWidth: 60 + implicitHeight: 200 + model: control.model + delegate: control.delegate + path: Path { + startX: control.contentItem.width / 2 + startY: -control.contentItem.delegateHeight / 2 + PathLine { + x: control.contentItem.width / 2 + y: (control.visibleItemCount + 1) * control.contentItem.delegateHeight - control.contentItem.delegateHeight / 2 + } + } + + property real delegateHeight: control.availableHeight / control.visibleItemCount + } +} diff --git a/src/quickcontrols2/basic/VerticalHeaderView.qml b/src/quickcontrols2/basic/VerticalHeaderView.qml new file mode 100644 index 00000000..7c057e01 --- /dev/null +++ b/src/quickcontrols2/basic/VerticalHeaderView.qml @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T + +T.VerticalHeaderView { + id: control + + implicitWidth: contentWidth + implicitHeight: syncView ? syncView.height : 0 + + delegate: Rectangle { + // Qt6: add cellPadding (and font etc) as public API in headerview + readonly property real cellPadding: 8 + + implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2)) + implicitHeight: text.implicitHeight + (cellPadding * 2) + color: "#f6f6f6" + border.color: "#e4e4e4" + + Text { + id: text + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] + : model[control.textRole]) + : modelData + width: parent.width + height: parent.height + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: "#ff26282a" + } + } +} diff --git a/src/quickcontrols2/basic/basic.pri b/src/quickcontrols2/basic/basic.pri new file mode 100644 index 00000000..337f7f36 --- /dev/null +++ b/src/quickcontrols2/basic/basic.pri @@ -0,0 +1,66 @@ +HEADERS += \ + $$PWD/qquickbasicstyle_p.h \ + $$PWD/qquickbasictheme_p.h + +SOURCES += \ + $$PWD/qquickbasicstyle.cpp \ + $$PWD/qquickbasictheme.cpp + +QML_FILES += \ + $$PWD/AbstractButton.qml \ + $$PWD/Action.qml \ + $$PWD/ActionGroup.qml \ + $$PWD/ApplicationWindow.qml \ + $$PWD/BusyIndicator.qml \ + $$PWD/Button.qml \ + $$PWD/ButtonGroup.qml \ + $$PWD/CheckBox.qml \ + $$PWD/CheckDelegate.qml \ + $$PWD/ComboBox.qml \ + $$PWD/Container.qml \ + $$PWD/Control.qml \ + $$PWD/DelayButton.qml \ + $$PWD/Dial.qml \ + $$PWD/Dialog.qml \ + $$PWD/DialogButtonBox.qml \ + $$PWD/Drawer.qml \ + $$PWD/Frame.qml \ + $$PWD/GroupBox.qml \ + $$PWD/HorizontalHeaderView.qml \ + $$PWD/ItemDelegate.qml \ + $$PWD/Label.qml \ + $$PWD/Menu.qml \ + $$PWD/MenuBar.qml \ + $$PWD/MenuBarItem.qml \ + $$PWD/MenuItem.qml \ + $$PWD/MenuSeparator.qml \ + $$PWD/Page.qml \ + $$PWD/PageIndicator.qml \ + $$PWD/Pane.qml \ + $$PWD/Popup.qml \ + $$PWD/ProgressBar.qml \ + $$PWD/RadioButton.qml \ + $$PWD/RadioDelegate.qml \ + $$PWD/RangeSlider.qml \ + $$PWD/RoundButton.qml \ + $$PWD/ScrollBar.qml \ + $$PWD/ScrollIndicator.qml \ + $$PWD/ScrollView.qml \ + $$PWD/Slider.qml \ + $$PWD/SpinBox.qml \ + $$PWD/SplitView.qml \ + $$PWD/StackView.qml \ + $$PWD/SwipeDelegate.qml \ + $$PWD/Switch.qml \ + $$PWD/SwitchDelegate.qml \ + $$PWD/SwipeView.qml \ + $$PWD/TabBar.qml \ + $$PWD/TabButton.qml \ + $$PWD/TextArea.qml \ + $$PWD/TextField.qml \ + $$PWD/ToolBar.qml \ + $$PWD/ToolButton.qml \ + $$PWD/ToolSeparator.qml \ + $$PWD/ToolTip.qml \ + $$PWD/Tumbler.qml \ + $$PWD/VerticalHeaderView.qml diff --git a/src/quickcontrols2/basic/images/arrow-indicator.png b/src/quickcontrols2/basic/images/arrow-indicator.png new file mode 100644 index 00000000..d833d52c Binary files /dev/null and b/src/quickcontrols2/basic/images/arrow-indicator.png differ diff --git a/src/quickcontrols2/basic/images/arrow-indicator@2x.png b/src/quickcontrols2/basic/images/arrow-indicator@2x.png new file mode 100644 index 00000000..55c7940a Binary files /dev/null and b/src/quickcontrols2/basic/images/arrow-indicator@2x.png differ diff --git a/src/quickcontrols2/basic/images/arrow-indicator@3x.png b/src/quickcontrols2/basic/images/arrow-indicator@3x.png new file mode 100644 index 00000000..c7067c5c Binary files /dev/null and b/src/quickcontrols2/basic/images/arrow-indicator@3x.png differ diff --git a/src/quickcontrols2/basic/images/arrow-indicator@4x.png b/src/quickcontrols2/basic/images/arrow-indicator@4x.png new file mode 100644 index 00000000..4c5cf351 Binary files /dev/null and b/src/quickcontrols2/basic/images/arrow-indicator@4x.png differ diff --git a/src/quickcontrols2/basic/images/check.png b/src/quickcontrols2/basic/images/check.png new file mode 100644 index 00000000..479a8442 Binary files /dev/null and b/src/quickcontrols2/basic/images/check.png differ diff --git a/src/quickcontrols2/basic/images/check@2x.png b/src/quickcontrols2/basic/images/check@2x.png new file mode 100644 index 00000000..79663c0b Binary files /dev/null and b/src/quickcontrols2/basic/images/check@2x.png differ diff --git a/src/quickcontrols2/basic/images/check@3x.png b/src/quickcontrols2/basic/images/check@3x.png new file mode 100644 index 00000000..fd0135ab Binary files /dev/null and b/src/quickcontrols2/basic/images/check@3x.png differ diff --git a/src/quickcontrols2/basic/images/check@4x.png b/src/quickcontrols2/basic/images/check@4x.png new file mode 100644 index 00000000..e7e0b640 Binary files /dev/null and b/src/quickcontrols2/basic/images/check@4x.png differ diff --git a/src/quickcontrols2/basic/images/dial-indicator.png b/src/quickcontrols2/basic/images/dial-indicator.png new file mode 100644 index 00000000..92357c51 Binary files /dev/null and b/src/quickcontrols2/basic/images/dial-indicator.png differ diff --git a/src/quickcontrols2/basic/images/dial-indicator@2x.png b/src/quickcontrols2/basic/images/dial-indicator@2x.png new file mode 100644 index 00000000..f436443b Binary files /dev/null and b/src/quickcontrols2/basic/images/dial-indicator@2x.png differ diff --git a/src/quickcontrols2/basic/images/dial-indicator@3x.png b/src/quickcontrols2/basic/images/dial-indicator@3x.png new file mode 100644 index 00000000..d883045b Binary files /dev/null and b/src/quickcontrols2/basic/images/dial-indicator@3x.png differ diff --git a/src/quickcontrols2/basic/images/dial-indicator@4x.png b/src/quickcontrols2/basic/images/dial-indicator@4x.png new file mode 100644 index 00000000..79477712 Binary files /dev/null and b/src/quickcontrols2/basic/images/dial-indicator@4x.png differ diff --git a/src/quickcontrols2/basic/images/double-arrow.png b/src/quickcontrols2/basic/images/double-arrow.png new file mode 100644 index 00000000..3ecd7f89 Binary files /dev/null and b/src/quickcontrols2/basic/images/double-arrow.png differ diff --git a/src/quickcontrols2/basic/images/double-arrow@2x.png b/src/quickcontrols2/basic/images/double-arrow@2x.png new file mode 100644 index 00000000..eeb03e28 Binary files /dev/null and b/src/quickcontrols2/basic/images/double-arrow@2x.png differ diff --git a/src/quickcontrols2/basic/images/double-arrow@3x.png b/src/quickcontrols2/basic/images/double-arrow@3x.png new file mode 100644 index 00000000..f0662d20 Binary files /dev/null and b/src/quickcontrols2/basic/images/double-arrow@3x.png differ diff --git a/src/quickcontrols2/basic/images/double-arrow@4x.png b/src/quickcontrols2/basic/images/double-arrow@4x.png new file mode 100644 index 00000000..10891e91 Binary files /dev/null and b/src/quickcontrols2/basic/images/double-arrow@4x.png differ diff --git a/src/quickcontrols2/basic/images/drop-indicator.png b/src/quickcontrols2/basic/images/drop-indicator.png new file mode 100644 index 00000000..80c1d958 Binary files /dev/null and b/src/quickcontrols2/basic/images/drop-indicator.png differ diff --git a/src/quickcontrols2/basic/images/drop-indicator@2x.png b/src/quickcontrols2/basic/images/drop-indicator@2x.png new file mode 100644 index 00000000..6e0f228c Binary files /dev/null and b/src/quickcontrols2/basic/images/drop-indicator@2x.png differ diff --git a/src/quickcontrols2/basic/images/drop-indicator@3x.png b/src/quickcontrols2/basic/images/drop-indicator@3x.png new file mode 100644 index 00000000..199752fb Binary files /dev/null and b/src/quickcontrols2/basic/images/drop-indicator@3x.png differ diff --git a/src/quickcontrols2/basic/images/drop-indicator@4x.png b/src/quickcontrols2/basic/images/drop-indicator@4x.png new file mode 100644 index 00000000..58311fbe Binary files /dev/null and b/src/quickcontrols2/basic/images/drop-indicator@4x.png differ diff --git a/src/quickcontrols2/basic/impl/CMakeLists.txt b/src/quickcontrols2/basic/impl/CMakeLists.txt new file mode 100644 index 00000000..a785a11f --- /dev/null +++ b/src/quickcontrols2/basic/impl/CMakeLists.txt @@ -0,0 +1,30 @@ +##################################################################### +## qtquickcontrols2basicstyleimplplugin Plugin: +##################################################################### + +qt_internal_add_qml_module(qtquickcontrols2basicstyleimplplugin + URI "QtQuick.Controls.Basic.impl" + VERSION "${PROJECT_VERSION}" + CLASS_NAME QtQuickControls2BasicStyleImplPlugin + PLUGIN_TARGET qtquickcontrols2basicstyleimplplugin + NO_PLUGIN_OPTIONAL + SOURCES + qquickbasicbusyindicator.cpp qquickbasicbusyindicator_p.h + qquickbasicdial.cpp qquickbasicdial_p.h + qquickbasicprogressbar.cpp qquickbasicprogressbar_p.h + DEFINES + QT_NO_CAST_FROM_ASCII + QT_NO_CAST_TO_ASCII + LIBRARIES + Qt::CorePrivate + Qt::Gui + Qt::QmlPrivate + Qt::QuickControls2ImplPrivate + Qt::QuickPrivate + Qt::QuickTemplates2Private + PUBLIC_LIBRARIES + Qt::Core + Qt::Gui + Qt::Qml + Qt::Quick +) diff --git a/src/quickcontrols2/basic/impl/qquickbasicbusyindicator.cpp b/src/quickcontrols2/basic/impl/qquickbasicbusyindicator.cpp new file mode 100644 index 00000000..7fb3b024 --- /dev/null +++ b/src/quickcontrols2/basic/impl/qquickbasicbusyindicator.cpp @@ -0,0 +1,223 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickbasicbusyindicator_p.h" + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +static const int CircleCount = 10; +static const int TotalDuration = 100 * CircleCount * 2; +static const QRgb TransparentColor = 0x00000000; + +static QPointF moveCircle(const QPointF &pos, qreal rotation, qreal distance) +{ + return pos - QTransform().rotate(rotation).map(QPointF(0, distance)); +} + +class QQuickBasicBusyIndicatorNode : public QQuickAnimatedNode +{ +public: + QQuickBasicBusyIndicatorNode(QQuickBasicBusyIndicator *item); + + void updateCurrentTime(int time) override; + void sync(QQuickItem *item) override; + +private: + QColor m_pen; + QColor m_fill; +}; + +QQuickBasicBusyIndicatorNode::QQuickBasicBusyIndicatorNode(QQuickBasicBusyIndicator *item) + : QQuickAnimatedNode(item) +{ + setLoopCount(Infinite); + setDuration(TotalDuration); + setCurrentTime(item->elapsed()); + + for (int i = 0; i < CircleCount; ++i) { + QSGTransformNode *transformNode = new QSGTransformNode; + appendChildNode(transformNode); + + QQuickItemPrivate *d = QQuickItemPrivate::get(item); + QSGInternalRectangleNode *rectNode = d->sceneGraphContext()->createInternalRectangleNode(); + rectNode->setAntialiasing(true); + transformNode->appendChildNode(rectNode); + } +} + +void QQuickBasicBusyIndicatorNode::updateCurrentTime(int time) +{ + const qreal percentageComplete = time / qreal(TotalDuration); + const qreal firstPhaseProgress = percentageComplete <= 0.5 ? percentageComplete * 2 : 0; + const qreal secondPhaseProgress = percentageComplete > 0.5 ? (percentageComplete - 0.5) * 2 : 0; + + QSGTransformNode *transformNode = static_cast(firstChild()); + Q_ASSERT(transformNode->type() == QSGNode::TransformNodeType); + for (int i = 0; i < CircleCount; ++i) { + QSGInternalRectangleNode *rectNode = static_cast(transformNode->firstChild()); + Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType); + + const bool fill = (firstPhaseProgress > qreal(i) / CircleCount) || (secondPhaseProgress > 0 && secondPhaseProgress < qreal(i) / CircleCount); + rectNode->setColor(fill ? m_fill : QColor::fromRgba(TransparentColor)); + rectNode->setPenColor(m_pen); + rectNode->setPenWidth(1); + rectNode->update(); + + transformNode = static_cast(transformNode->nextSibling()); + } +} + +void QQuickBasicBusyIndicatorNode::sync(QQuickItem *item) +{ + const qreal w = item->width(); + const qreal h = item->height(); + const qreal sz = qMin(w, h); + const qreal dx = (w - sz) / 2; + const qreal dy = (h - sz) / 2; + const int circleRadius = sz / 12; + + m_pen = static_cast(item)->pen(); + m_fill = static_cast(item)->fill(); + + QSGTransformNode *transformNode = static_cast(firstChild()); + for (int i = 0; i < CircleCount; ++i) { + Q_ASSERT(transformNode->type() == QSGNode::TransformNodeType); + + QSGInternalRectangleNode *rectNode = static_cast(transformNode->firstChild()); + Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType); + + QPointF pos = QPointF(sz / 2 - circleRadius, sz / 2 - circleRadius); + pos = moveCircle(pos, 360.0 / CircleCount * i, sz / 2 - circleRadius); + + QMatrix4x4 m; + m.translate(dx + pos.x(), dy + pos.y()); + transformNode->setMatrix(m); + + rectNode->setRect(QRectF(QPointF(), QSizeF(circleRadius * 2, circleRadius * 2))); + rectNode->setRadius(circleRadius); + + transformNode = static_cast(transformNode->nextSibling()); + } +} + +QQuickBasicBusyIndicator::QQuickBasicBusyIndicator(QQuickItem *parent) : + QQuickItem(parent) +{ + setFlag(ItemHasContents); +} + +QColor QQuickBasicBusyIndicator::pen() const +{ + return m_pen; +} + +void QQuickBasicBusyIndicator::setPen(const QColor &pen) +{ + if (pen == m_pen) + return; + + m_pen = pen; + update(); +} + +QColor QQuickBasicBusyIndicator::fill() const +{ + return m_fill; +} + +void QQuickBasicBusyIndicator::setFill(const QColor &fill) +{ + if (fill == m_fill) + return; + + m_fill = fill; + update(); +} + +bool QQuickBasicBusyIndicator::isRunning() const +{ + return isVisible(); +} + +void QQuickBasicBusyIndicator::setRunning(bool running) +{ + if (running) + setVisible(true); +} + +int QQuickBasicBusyIndicator::elapsed() const +{ + return m_elapsed; +} + +void QQuickBasicBusyIndicator::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data) +{ + QQuickItem::itemChange(change, data); + switch (change) { + case ItemOpacityHasChanged: + if (qFuzzyIsNull(data.realValue)) + setVisible(false); + break; + case ItemVisibleHasChanged: + update(); + break; + default: + break; + } +} + +QSGNode *QQuickBasicBusyIndicator::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *) +{ + QQuickBasicBusyIndicatorNode *node = static_cast(oldNode); + if (isRunning() && width() > 0 && height() > 0) { + if (!node) { + node = new QQuickBasicBusyIndicatorNode(this); + node->start(); + } + node->sync(this); + } else { + m_elapsed = node ? node->currentTime() : 0; + delete node; + node = nullptr; + } + return node; +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols2/basic/impl/qquickbasicbusyindicator_p.h b/src/quickcontrols2/basic/impl/qquickbasicbusyindicator_p.h new file mode 100644 index 00000000..7eea6656 --- /dev/null +++ b/src/quickcontrols2/basic/impl/qquickbasicbusyindicator_p.h @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKDEFAULTBUSYINDICATOR_P_H +#define QQUICKDEFAULTBUSYINDICATOR_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include + +QT_BEGIN_NAMESPACE + +class QQuickBasicBusyIndicator : public QQuickItem +{ + Q_OBJECT + Q_PROPERTY(QColor pen READ pen WRITE setPen FINAL) + Q_PROPERTY(QColor fill READ fill WRITE setFill FINAL) + Q_PROPERTY(bool running READ isRunning WRITE setRunning) + QML_NAMED_ELEMENT(BusyIndicatorImpl) + QML_ADDED_IN_VERSION(2, 0) + +public: + explicit QQuickBasicBusyIndicator(QQuickItem *parent = nullptr); + + QColor pen() const; + void setPen(const QColor &pen); + + QColor fill() const; + void setFill(const QColor &fill); + + bool isRunning() const; + void setRunning(bool running); + + int elapsed() const; + +protected: + void itemChange(ItemChange change, const ItemChangeData &data) override; + QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override; + +private: + int m_elapsed = 0; + QColor m_pen; + QColor m_fill; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickBasicBusyIndicator) + +#endif // QQUICKDEFAULTBUSYINDICATOR_P_H diff --git a/src/quickcontrols2/basic/impl/qquickbasicdial.cpp b/src/quickcontrols2/basic/impl/qquickbasicdial.cpp new file mode 100644 index 00000000..223e8042 --- /dev/null +++ b/src/quickcontrols2/basic/impl/qquickbasicdial.cpp @@ -0,0 +1,122 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickbasicdial_p.h" + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +QQuickBasicDial::QQuickBasicDial(QQuickItem *parent) : + QQuickPaintedItem(parent) +{ +} + +qreal QQuickBasicDial::progress() const +{ + return m_progress; +} + +void QQuickBasicDial::setProgress(qreal progress) +{ + if (progress == m_progress) + return; + + m_progress = progress; + update(); +} + +QColor QQuickBasicDial::color() const +{ + return m_color; +} + +void QQuickBasicDial::setColor(const QColor &color) +{ + if (color == m_color) + return; + + m_color = color; + update(); +} + +void QQuickBasicDial::paint(QPainter *painter) +{ + if (width() <= 0 || height() <= 0) + return; + + QPen pen(m_color); + pen.setWidth(8); + pen.setCapStyle(Qt::FlatCap); + painter->setPen(pen); + + const QRectF bounds = boundingRect(); + const qreal smallest = qMin(bounds.width(), bounds.height()); + QRectF rect = QRectF(pen.widthF() / 2.0 + 1, pen.widthF() / 2.0 + 1, smallest - pen.widthF() - 2, smallest - pen.widthF() - 2); + rect.moveCenter(bounds.center()); + + // Make sure the arc is aligned to whole pixels. + if (rect.x() - int(rect.x()) > 0) + rect.setX(qCeil(rect.x())); + if (rect.y() - int(rect.y()) > 0) + rect.setY(qCeil(rect.y())); + if (rect.width() - int(rect.width()) > 0) + rect.setWidth(qFloor(rect.width())); + if (rect.height() - int(rect.height()) > 0) + rect.setHeight(qFloor(rect.height())); + + painter->setRenderHint(QPainter::Antialiasing); + + const qreal startAngle = (140 + 90); + const qreal spanAngle = (m_progress * 280) * -1; + QPainterPath path; + path.arcMoveTo(rect, startAngle); + path.arcTo(rect, startAngle, spanAngle); + painter->drawPath(path); + + rect.adjust(-pen.widthF() / 2.0, -pen.widthF() / 2.0, pen.widthF() / 2.0, pen.widthF() / 2.0); + pen.setWidth(1); + painter->setPen(pen); + + path = QPainterPath(); + path.arcMoveTo(rect, 0); + path.arcTo(rect, 0, 360); + painter->drawPath(path); +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols2/basic/impl/qquickbasicdial_p.h b/src/quickcontrols2/basic/impl/qquickbasicdial_p.h new file mode 100644 index 00000000..bd9bbb72 --- /dev/null +++ b/src/quickcontrols2/basic/impl/qquickbasicdial_p.h @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKDEFAULTDIAL_P_H +#define QQUICKDEFAULTDIAL_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include + +QT_BEGIN_NAMESPACE + +class QQuickBasicDial : public QQuickPaintedItem +{ + Q_OBJECT + Q_PROPERTY(qreal progress READ progress WRITE setProgress FINAL) + Q_PROPERTY(QColor color READ color WRITE setColor FINAL) + QML_NAMED_ELEMENT(DialImpl) + QML_ADDED_IN_VERSION(2, 0) + +public: + explicit QQuickBasicDial(QQuickItem *parent = nullptr); + + qreal progress() const; + void setProgress(qreal progress); + + QColor color() const; + void setColor(const QColor &color); + + void paint(QPainter *painter) override; + +private: + qreal m_progress = 0; + QColor m_color = Qt::black; +}; + +QT_END_NAMESPACE + +#endif // QQUICKDEFAULTDIAL_P_H diff --git a/src/quickcontrols2/basic/impl/qquickbasicprogressbar.cpp b/src/quickcontrols2/basic/impl/qquickbasicprogressbar.cpp new file mode 100644 index 00000000..717082af --- /dev/null +++ b/src/quickcontrols2/basic/impl/qquickbasicprogressbar.cpp @@ -0,0 +1,280 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickbasicprogressbar_p.h" + +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +static const int Blocks = 4; +static const int BlockWidth = 16; +static const int BlockRestingSpacing = 4; +static const int BlockMovingSpacing = 48; +static const int BlockSpan = Blocks * (BlockWidth + BlockRestingSpacing) - BlockRestingSpacing; +static const int TotalDuration = 4000; +static const int SecondPhaseStart = TotalDuration * 0.4; +static const int ThirdPhaseStart = TotalDuration * 0.6; + +static inline qreal blockStartX(int blockIndex) +{ + return ((blockIndex + 1) * -BlockWidth) - (blockIndex * BlockMovingSpacing); +} + +static inline qreal blockRestX(int blockIndex, qreal availableWidth) +{ + const qreal spanRightEdgePos = availableWidth / 2 + BlockSpan / 2.0; + return spanRightEdgePos - (blockIndex + 1) * BlockWidth - (blockIndex * BlockRestingSpacing); +} + +static inline qreal blockEndX(int blockIndex, qreal availableWidth) +{ + return availableWidth - blockStartX(Blocks - 1 - blockIndex) - BlockWidth; +} + +class QQuickBasicProgressBarNode : public QQuickAnimatedNode +{ +public: + QQuickBasicProgressBarNode(QQuickBasicProgressBar *item); + + void updateCurrentTime(int time) override; + void sync(QQuickItem *item) override; + +private: + bool m_indeterminate = false; + qreal m_pixelsPerSecond = 0; +}; + +QQuickBasicProgressBarNode::QQuickBasicProgressBarNode(QQuickBasicProgressBar *item) + : QQuickAnimatedNode(item), + m_pixelsPerSecond(item->width()) +{ + setLoopCount(Infinite); + setDuration(TotalDuration); +} + +void QQuickBasicProgressBarNode::updateCurrentTime(int time) +{ + QSGTransformNode *transformNode = static_cast(firstChild()); + for (int i = 0; i < Blocks; ++i) { + Q_ASSERT(transformNode->type() == QSGNode::TransformNodeType); + + QMatrix4x4 m; + const qreal restX = blockRestX(i, m_pixelsPerSecond); + const qreal timeInSeconds = time / 1000.0; + + if (time < SecondPhaseStart) { + // Move into the resting position for the first phase. + QEasingCurve easingCurve(QEasingCurve::InQuad); + const qreal easedCompletion = easingCurve.valueForProgress(time / qreal(SecondPhaseStart)); + const qreal distance = m_pixelsPerSecond * (easedCompletion * (SecondPhaseStart / 1000.0)); + const qreal position = blockStartX(i) + distance; + const qreal destination = restX; + m.translate(qMin(position, destination), 0); + } else if (time < ThirdPhaseStart) { + // Stay in the same position for the second phase. + m.translate(restX, 0); + } else { + // Move out of view for the third phase. + const int thirdPhaseSubKickoff = (BlockMovingSpacing / m_pixelsPerSecond) * 1000; + const int subphase = (time - ThirdPhaseStart) / thirdPhaseSubKickoff; + // If we're not at this subphase yet, don't try to animate movement, + // because it will be incorrect. + if (subphase < i) + return; + + const qreal timeSinceSecondPhase = timeInSeconds - (ThirdPhaseStart / 1000.0); + // We only want to start keeping track of time once our subphase has started, + // otherwise we move too much because we account for time that has already elapsed. + // For example, if we were 60 milliseconds into the third subphase: + // + // 0 ..... 1 ..... 2 ... + // 100 100 60 + // + // i == 0, timeSinceOurKickoff == 260 + // i == 1, timeSinceOurKickoff == 160 + // i == 2, timeSinceOurKickoff == 60 + const qreal timeSinceOurKickoff = timeSinceSecondPhase - (thirdPhaseSubKickoff / 1000.0 * i); + const qreal position = restX + (m_pixelsPerSecond * (timeSinceOurKickoff)); + const qreal destination = blockEndX(i, m_pixelsPerSecond); + m.translate(qMin(position, destination), 0); + } + + transformNode->setMatrix(m); + + transformNode = static_cast(transformNode->nextSibling()); + } +} + +void QQuickBasicProgressBarNode::sync(QQuickItem *item) +{ + QQuickBasicProgressBar *bar = static_cast(item); + if (m_indeterminate != bar->isIndeterminate()) { + m_indeterminate = bar->isIndeterminate(); + if (m_indeterminate) + start(); + else + stop(); + } + m_pixelsPerSecond = item->width(); + + QQuickItemPrivate *d = QQuickItemPrivate::get(item); + + QMatrix4x4 m; + m.translate(0, (item->height() - item->implicitHeight()) / 2); + setMatrix(m); + + if (m_indeterminate) { + if (childCount() != Blocks) { + // This was previously a regular progress bar; remove the old nodes. + removeAllChildNodes(); + } + + QSGTransformNode *transformNode = static_cast(firstChild()); + for (int i = 0; i < Blocks; ++i) { + if (!transformNode) { + transformNode = new QSGTransformNode; + appendChildNode(transformNode); + } + + QSGInternalRectangleNode *rectNode = static_cast(transformNode->firstChild()); + if (!rectNode) { + rectNode = d->sceneGraphContext()->createInternalRectangleNode(); + rectNode->setColor(bar->color()); + transformNode->appendChildNode(rectNode); + } + + QMatrix4x4 m; + m.translate(blockStartX(i), 0); + transformNode->setMatrix(m); + + rectNode->setRect(QRectF(QPointF(0, 0), QSizeF(BlockWidth, item->implicitHeight()))); + rectNode->update(); + + transformNode = static_cast(transformNode->nextSibling()); + } + } else { + if (childCount() > 1) { + // This was previously an indeterminate progress bar; remove the old nodes. + removeAllChildNodes(); + } + + QSGInternalRectangleNode *rectNode = static_cast(firstChild()); + if (!rectNode) { + rectNode = d->sceneGraphContext()->createInternalRectangleNode(); + rectNode->setColor(bar->color()); + appendChildNode(rectNode); + } + + rectNode->setRect(QRectF(QPointF(0, 0), QSizeF(bar->progress() * item->width(), item->implicitHeight()))); + rectNode->update(); + } +} + +QQuickBasicProgressBar::QQuickBasicProgressBar(QQuickItem *parent) : + QQuickItem(parent) +{ + setFlag(ItemHasContents); +} + +qreal QQuickBasicProgressBar::progress() const +{ + return m_progress; +} + +void QQuickBasicProgressBar::setProgress(qreal progress) +{ + if (progress == m_progress) + return; + + m_progress = progress; + update(); +} + +bool QQuickBasicProgressBar::isIndeterminate() const +{ + return m_indeterminate; +} + +void QQuickBasicProgressBar::setIndeterminate(bool indeterminate) +{ + if (indeterminate == m_indeterminate) + return; + + m_indeterminate = indeterminate; + setClip(m_indeterminate); + update(); +} + +QColor QQuickBasicProgressBar::color() const +{ + return m_color; +} + +void QQuickBasicProgressBar::setColor(const QColor &color) +{ + if (color == m_color) + return; + + m_color = color; + update(); +} + +void QQuickBasicProgressBar::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data) +{ + QQuickItem::itemChange(change, data); + if (change == ItemVisibleHasChanged) + update(); +} + +QSGNode *QQuickBasicProgressBar::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *) +{ + QQuickBasicProgressBarNode *node = static_cast(oldNode); + if (isVisible() && width() > 0 && height() > 0) { + if (!node) + node = new QQuickBasicProgressBarNode(this); + node->sync(this); + } else { + delete node; + node = nullptr; + } + return node; +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols2/basic/impl/qquickbasicprogressbar_p.h b/src/quickcontrols2/basic/impl/qquickbasicprogressbar_p.h new file mode 100644 index 00000000..1d853ecb --- /dev/null +++ b/src/quickcontrols2/basic/impl/qquickbasicprogressbar_p.h @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKDEFAULTPROGRESSBAR_P_H +#define QQUICKDEFAULTPROGRESSBAR_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include + +QT_BEGIN_NAMESPACE + +class QQuickBasicProgressBar : public QQuickItem +{ + Q_OBJECT + Q_PROPERTY(bool indeterminate READ isIndeterminate WRITE setIndeterminate FINAL) + Q_PROPERTY(qreal progress READ progress WRITE setProgress FINAL) + Q_PROPERTY(QColor color READ color WRITE setColor FINAL) + QML_NAMED_ELEMENT(ProgressBarImpl) + QML_ADDED_IN_VERSION(2, 0) + +public: + explicit QQuickBasicProgressBar(QQuickItem *parent = nullptr); + + bool isIndeterminate() const; + void setIndeterminate(bool indeterminate); + + qreal progress() const; + void setProgress(qreal progress); + + QColor color() const; + void setColor(const QColor &color); + +protected: + void itemChange(ItemChange change, const ItemChangeData &data) override; + QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override; + +private: + qreal m_progress = 0; + bool m_indeterminate = false; + QColor m_color; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickBasicProgressBar) + +#endif // QQUICKDEFAULTPROGRESSBAR_P_H diff --git a/src/quickcontrols2/basic/qquickbasicstyle.cpp b/src/quickcontrols2/basic/qquickbasicstyle.cpp new file mode 100644 index 00000000..9dcb7c74 --- /dev/null +++ b/src/quickcontrols2/basic/qquickbasicstyle.cpp @@ -0,0 +1,246 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickbasicstyle_p.h" + +QT_BEGIN_NAMESPACE + +QQuickBasicStyle::QQuickBasicStyle(QObject *parent) : + QObject(parent) +{ +} + +QColor QQuickBasicStyle::backgroundColor() const +{ + return QColor::fromRgba(0xFFFFFFFF); +} + +QColor QQuickBasicStyle::overlayModalColor() const +{ + return QColor::fromRgba(0x7F28282A); +} + +QColor QQuickBasicStyle::overlayDimColor() const +{ + return QColor::fromRgba(0x1F28282A); +} + +QColor QQuickBasicStyle::textColor() const +{ + return QColor::fromRgba(0xFF353637); +} + +QColor QQuickBasicStyle::textDarkColor() const +{ + return QColor::fromRgba(0xFF26282A); +} + +QColor QQuickBasicStyle::textLightColor() const +{ + return QColor::fromRgba(0xFFFFFFFF); +} + +QColor QQuickBasicStyle::textLinkColor() const +{ + return QColor::fromRgba(0xFF45A7D7); +} + +QColor QQuickBasicStyle::textSelectionColor() const +{ + return QColor::fromRgba(0xFFFDDD5C); +} + +QColor QQuickBasicStyle::textDisabledColor() const +{ + return QColor::fromRgba(0xFFBDBEBF); +} + +QColor QQuickBasicStyle::textDisabledLightColor() const +{ + return QColor::fromRgba(0xFFC2C2C2); +} + +QColor QQuickBasicStyle::textPlaceholderColor() const +{ + return QColor::fromRgba(0xFF777777); +} + +QColor QQuickBasicStyle::focusColor() const +{ + return QColor::fromRgba(0xFF0066FF); +} + +QColor QQuickBasicStyle::focusLightColor() const +{ + return QColor::fromRgba(0xFFF0F6FF); +} + +QColor QQuickBasicStyle::focusPressedColor() const +{ + return QColor::fromRgba(0xFFCCE0FF); +} + +QColor QQuickBasicStyle::buttonColor() const +{ + return QColor::fromRgba(0xFFE0E0E0); +} + +QColor QQuickBasicStyle::buttonPressedColor() const +{ + return QColor::fromRgba(0xFFD0D0D0); +} + +QColor QQuickBasicStyle::buttonCheckedColor() const +{ + return QColor::fromRgba(0xFF353637); +} + +QColor QQuickBasicStyle::buttonCheckedPressedColor() const +{ + return QColor::fromRgba(0xFF585A5C); +} + +QColor QQuickBasicStyle::buttonCheckedFocusColor() const +{ + return QColor::fromRgba(0xFF599BFF); +} + +QColor QQuickBasicStyle::toolButtonColor() const +{ + return QColor::fromRgba(0x33333333); +} + +QColor QQuickBasicStyle::tabButtonColor() const +{ + return QColor::fromRgba(0xFF353637); +} + +QColor QQuickBasicStyle::tabButtonPressedColor() const +{ + return QColor::fromRgba(0xFF585A5C); +} + +QColor QQuickBasicStyle::tabButtonCheckedPressedColor() const +{ + return QColor::fromRgba(0xFFE4E4E4); +} + +QColor QQuickBasicStyle::delegateColor() const +{ + return QColor::fromRgba(0xFFEEEEEE); +} + +QColor QQuickBasicStyle::delegatePressedColor() const +{ + return QColor::fromRgba(0xFFBDBEBF); +} + +QColor QQuickBasicStyle::delegateFocusColor() const +{ + return QColor::fromRgba(0xFFE5EFFF); +} + +QColor QQuickBasicStyle::indicatorPressedColor() const +{ + return QColor::fromRgba(0xFFF6F6F6); +} + +QColor QQuickBasicStyle::indicatorDisabledColor() const +{ + return QColor::fromRgba(0xFFFDFDFD); +} + +QColor QQuickBasicStyle::indicatorFrameColor() const +{ + return QColor::fromRgba(0xFF909090); +} + +QColor QQuickBasicStyle::indicatorFramePressedColor() const +{ + return QColor::fromRgba(0xFF808080); +} + +QColor QQuickBasicStyle::indicatorFrameDisabledColor() const +{ + return QColor::fromRgba(0xFFD6D6D6); +} + +QColor QQuickBasicStyle::frameDarkColor() const +{ + return QColor::fromRgba(0xFF353637); +} + +QColor QQuickBasicStyle::frameLightColor() const +{ + return QColor::fromRgba(0xFFBDBEBF); +} + +QColor QQuickBasicStyle::scrollBarColor() const +{ + return QColor::fromRgba(0xFFBDBEBF); +} + +QColor QQuickBasicStyle::scrollBarPressedColor() const +{ + return QColor::fromRgba(0xFF28282A); +} + +QColor QQuickBasicStyle::progressBarColor() const +{ + return QColor::fromRgba(0xFFE4E4E4); +} + +QColor QQuickBasicStyle::pageIndicatorColor() const +{ + return QColor::fromRgba(0xFF28282A); +} + +QColor QQuickBasicStyle::separatorColor() const +{ + return QColor::fromRgba(0xFFCCCCCC); +} + +QColor QQuickBasicStyle::disabledDarkColor() const +{ + return QColor::fromRgba(0xFF353637); +} + +QColor QQuickBasicStyle::disabledLightColor() const +{ + return QColor::fromRgba(0xFFBDBEBF); +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols2/basic/qquickbasicstyle_p.h b/src/quickcontrols2/basic/qquickbasicstyle_p.h new file mode 100644 index 00000000..3f3d84b8 --- /dev/null +++ b/src/quickcontrols2/basic/qquickbasicstyle_p.h @@ -0,0 +1,151 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKBASICSTYLE_P_H +#define QQUICKBASICSTYLE_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QQuickBasicStyle : public QObject +{ + Q_OBJECT + Q_PROPERTY(QColor backgroundColor READ backgroundColor CONSTANT FINAL) + Q_PROPERTY(QColor overlayModalColor READ overlayModalColor CONSTANT FINAL) + Q_PROPERTY(QColor overlayDimColor READ overlayDimColor CONSTANT FINAL) + Q_PROPERTY(QColor textColor READ textColor CONSTANT FINAL) + Q_PROPERTY(QColor textDarkColor READ textDarkColor CONSTANT FINAL) + Q_PROPERTY(QColor textLightColor READ textLightColor CONSTANT FINAL) + Q_PROPERTY(QColor textLinkColor READ textLinkColor CONSTANT FINAL) + Q_PROPERTY(QColor textSelectionColor READ textSelectionColor CONSTANT FINAL) + Q_PROPERTY(QColor textDisabledColor READ textDisabledColor CONSTANT FINAL) + Q_PROPERTY(QColor textDisabledLightColor READ textDisabledLightColor CONSTANT FINAL) + Q_PROPERTY(QColor textPlaceholderColor READ textPlaceholderColor CONSTANT FINAL) + Q_PROPERTY(QColor focusColor READ focusColor CONSTANT FINAL) + Q_PROPERTY(QColor focusLightColor READ focusLightColor CONSTANT FINAL) + Q_PROPERTY(QColor focusPressedColor READ focusPressedColor CONSTANT FINAL) + Q_PROPERTY(QColor buttonColor READ buttonColor CONSTANT FINAL) + Q_PROPERTY(QColor buttonPressedColor READ buttonPressedColor CONSTANT FINAL) + Q_PROPERTY(QColor buttonCheckedColor READ buttonCheckedColor CONSTANT FINAL) + Q_PROPERTY(QColor buttonCheckedPressedColor READ buttonCheckedPressedColor CONSTANT FINAL) + Q_PROPERTY(QColor buttonCheckedFocusColor READ buttonCheckedFocusColor CONSTANT FINAL) + Q_PROPERTY(QColor toolButtonColor READ toolButtonColor CONSTANT FINAL) + Q_PROPERTY(QColor tabButtonColor READ tabButtonColor CONSTANT FINAL) + Q_PROPERTY(QColor tabButtonPressedColor READ tabButtonPressedColor CONSTANT FINAL) + Q_PROPERTY(QColor tabButtonCheckedPressedColor READ tabButtonCheckedPressedColor CONSTANT FINAL) + Q_PROPERTY(QColor delegateColor READ delegateColor CONSTANT FINAL) + Q_PROPERTY(QColor delegatePressedColor READ delegatePressedColor CONSTANT FINAL) + Q_PROPERTY(QColor delegateFocusColor READ delegateFocusColor CONSTANT FINAL) + Q_PROPERTY(QColor indicatorPressedColor READ indicatorPressedColor CONSTANT FINAL) + Q_PROPERTY(QColor indicatorDisabledColor READ indicatorDisabledColor CONSTANT FINAL) + Q_PROPERTY(QColor indicatorFrameColor READ indicatorFrameColor CONSTANT FINAL) + Q_PROPERTY(QColor indicatorFramePressedColor READ indicatorFramePressedColor CONSTANT FINAL) + Q_PROPERTY(QColor indicatorFrameDisabledColor READ indicatorFrameDisabledColor CONSTANT FINAL) + Q_PROPERTY(QColor frameDarkColor READ frameDarkColor CONSTANT FINAL) + Q_PROPERTY(QColor frameLightColor READ frameLightColor CONSTANT FINAL) + Q_PROPERTY(QColor scrollBarColor READ scrollBarColor CONSTANT FINAL) + Q_PROPERTY(QColor scrollBarPressedColor READ scrollBarPressedColor CONSTANT FINAL) + Q_PROPERTY(QColor progressBarColor READ progressBarColor CONSTANT FINAL) + Q_PROPERTY(QColor pageIndicatorColor READ pageIndicatorColor CONSTANT FINAL) + Q_PROPERTY(QColor separatorColor READ separatorColor CONSTANT FINAL) + Q_PROPERTY(QColor disabledDarkColor READ disabledDarkColor CONSTANT FINAL) + Q_PROPERTY(QColor disabledLightColor READ disabledLightColor CONSTANT FINAL) + QML_NAMED_ELEMENT(Basic) + QML_SINGLETON + QML_ADDED_IN_VERSION(2, 1) + +public: + explicit QQuickBasicStyle(QObject *parent = nullptr); + + QColor backgroundColor() const; + QColor overlayModalColor() const; + QColor overlayDimColor() const; + QColor textColor() const; + QColor textDarkColor() const; + QColor textLightColor() const; + QColor textLinkColor() const; + QColor textSelectionColor() const; + QColor textDisabledColor() const; + QColor textDisabledLightColor() const; + QColor textPlaceholderColor() const; + QColor focusColor() const; + QColor focusLightColor() const; + QColor focusPressedColor() const; + QColor buttonColor() const; + QColor buttonPressedColor() const; + QColor buttonCheckedColor() const; + QColor buttonCheckedPressedColor() const; + QColor buttonCheckedFocusColor() const; + QColor toolButtonColor() const; + QColor tabButtonColor() const; + QColor tabButtonPressedColor() const; + QColor tabButtonCheckedPressedColor() const; + QColor delegateColor() const; + QColor delegatePressedColor() const; + QColor delegateFocusColor() const; + QColor indicatorPressedColor() const; + QColor indicatorDisabledColor() const; + QColor indicatorFrameColor() const; + QColor indicatorFramePressedColor() const; + QColor indicatorFrameDisabledColor() const; + QColor frameDarkColor() const; + QColor frameLightColor() const; + QColor scrollBarColor() const; + QColor scrollBarPressedColor() const; + QColor progressBarColor() const; + QColor pageIndicatorColor() const; + QColor separatorColor() const; + QColor disabledDarkColor() const; + QColor disabledLightColor() const; +}; + +QT_END_NAMESPACE + +#endif // QQUICKBASICSTYLE_P_H diff --git a/src/quickcontrols2/basic/qquickbasictheme.cpp b/src/quickcontrols2/basic/qquickbasictheme.cpp new file mode 100644 index 00000000..1f876e3d --- /dev/null +++ b/src/quickcontrols2/basic/qquickbasictheme.cpp @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickbasictheme_p.h" + +#include + +QT_BEGIN_NAMESPACE + +void QQuickBasicTheme::initialize(QQuickTheme *theme) +{ + QPalette systemPalette; + + systemPalette.setColor(QPalette::Base, QColor::fromRgba(0xFFFFFFFF)); + systemPalette.setColor(QPalette::Disabled, QPalette::Base, QColor::fromRgba(0xFFD6D6D6)); + + systemPalette.setColor(QPalette::Button, QColor::fromRgba(0xFFE0E0E0)); + + systemPalette.setColor(QPalette::ButtonText, QColor::fromRgba(0xFF26282A)); + systemPalette.setColor(QPalette::Disabled, QPalette::ButtonText, QColor::fromRgba(0x4D26282A)); + + systemPalette.setColor(QPalette::BrightText, QColor::fromRgba(0xFFFFFFFF)); + systemPalette.setColor(QPalette::Disabled, QPalette::BrightText, QColor::fromRgba(0x4DFFFFFF)); + + systemPalette.setColor(QPalette::Dark, QColor::fromRgba(0xFF353637)); + + systemPalette.setColor(QPalette::Highlight, QColor::fromRgba(0xFF0066FF)); + systemPalette.setColor(QPalette::Disabled, QPalette::Highlight, QColor::fromRgba(0xFFF0F6FF)); + + systemPalette.setColor(QPalette::HighlightedText, QColor::fromRgba(0xFF090909)); + + systemPalette.setColor(QPalette::Light, QColor::fromRgba(0xFFF6F6F6)); + + systemPalette.setColor(QPalette::Link, QColor::fromRgba(0xFF45A7D7)); + + systemPalette.setColor(QPalette::Mid, QColor::fromRgba(0xFFBDBDBD)); + + systemPalette.setColor(QPalette::Midlight, QColor::fromRgba(0xFFE4E4E4)); + + systemPalette.setColor(QPalette::Text, QColor::fromRgba(0xFF353637)); + systemPalette.setColor(QPalette::Disabled, QPalette::Text, QColor::fromRgba(0x7F353637)); + + systemPalette.setColor(QPalette::Shadow, QColor::fromRgba(0xFF28282A)); + + systemPalette.setColor(QPalette::ToolTipBase, QColor::fromRgba(0xFFFFFFFF)); + systemPalette.setColor(QPalette::ToolTipText, QColor::fromRgba(0xFF000000)); + + systemPalette.setColor(QPalette::Window, QColor::fromRgba(0xFFFFFFFF)); + + systemPalette.setColor(QPalette::WindowText, QColor::fromRgba(0xFF26282A)); + systemPalette.setColor(QPalette::Disabled, QPalette::WindowText, QColor::fromRgba(0xFFBDBEBF)); + + theme->setPalette(QQuickTheme::System, systemPalette); +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols2/basic/qquickbasictheme_p.h b/src/quickcontrols2/basic/qquickbasictheme_p.h new file mode 100644 index 00000000..a0a29953 --- /dev/null +++ b/src/quickcontrols2/basic/qquickbasictheme_p.h @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKBASICTHEME_P_H +#define QQUICKBASICTHEME_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include + +QT_BEGIN_NAMESPACE + +class QQuickTheme; + +class QQuickBasicTheme +{ +public: + static void initialize(QQuickTheme *theme); +}; + +QT_END_NAMESPACE + +#endif // QQUICKBASICTHEME_P_H diff --git a/src/quickcontrols2/basic/qtquickcontrols2basicstyleplugin.cpp b/src/quickcontrols2/basic/qtquickcontrols2basicstyleplugin.cpp new file mode 100644 index 00000000..7786223c --- /dev/null +++ b/src/quickcontrols2/basic/qtquickcontrols2basicstyleplugin.cpp @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickbasicstyle_p.h" +#include "qquickbasictheme_p.h" + +#include +#include + +extern void qml_register_types_QtQuick_Controls_Basic(); + +QT_BEGIN_NAMESPACE + +class QtQuickControls2BasicStylePlugin: public QQuickStylePlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) + +public: + QtQuickControls2BasicStylePlugin(QObject *parent = nullptr); + + QString name() const override; + void initializeTheme(QQuickTheme *theme) override; + + QQuickBasicTheme theme; +}; + +QtQuickControls2BasicStylePlugin::QtQuickControls2BasicStylePlugin(QObject *parent) : QQuickStylePlugin(parent) +{ + volatile auto registration = &qml_register_types_QtQuick_Controls_Basic; + Q_UNUSED(registration); +} + +QString QtQuickControls2BasicStylePlugin::name() const +{ + return QStringLiteral("Basic"); +} + +void QtQuickControls2BasicStylePlugin::initializeTheme(QQuickTheme *theme) +{ + this->theme.initialize(theme); +} + +QT_END_NAMESPACE + +#include "qtquickcontrols2basicstyleplugin.moc" diff --git a/src/quickcontrols2/basic/qtquickcontrols2basicstyleplugin.qrc b/src/quickcontrols2/basic/qtquickcontrols2basicstyleplugin.qrc new file mode 100644 index 00000000..27fd6ac2 --- /dev/null +++ b/src/quickcontrols2/basic/qtquickcontrols2basicstyleplugin.qrc @@ -0,0 +1,24 @@ + + + images/arrow-indicator.png + images/arrow-indicator@2x.png + images/arrow-indicator@3x.png + images/arrow-indicator@4x.png + images/check.png + images/check@2x.png + images/check@3x.png + images/check@4x.png + images/dial-indicator.png + images/dial-indicator@2x.png + images/dial-indicator@3x.png + images/dial-indicator@4x.png + images/drop-indicator.png + images/drop-indicator@2x.png + images/drop-indicator@3x.png + images/drop-indicator@4x.png + images/double-arrow.png + images/double-arrow@2x.png + images/double-arrow@3x.png + images/double-arrow@4x.png + + diff --git a/src/quickcontrols2/designer/AbstractButtonSection.qml b/src/quickcontrols2/designer/AbstractButtonSection.qml new file mode 100644 index 00000000..2ccb8231 --- /dev/null +++ b/src/quickcontrols2/designer/AbstractButtonSection.qml @@ -0,0 +1,122 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Section { + caption: qsTr("AbstractButton") + + SectionLayout { + Label { + text: qsTr("Text") + tooltip: qsTr("The text displayed on the button.") + } + SecondColumnLayout { + LineEdit { + backendValue: backendValues.text + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Display") + tooltip: qsTr("Determines how the icon and text are displayed within the button.") + disabledState: !backendValues.display.isAvailable + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.display + model: [ "IconOnly", "TextOnly", "TextBesideIcon" ] + scope: "AbstractButton" + Layout.fillWidth: true + enabled: backendValue.isAvailable + } + } + + Label { + visible: checkable + text: qsTr("Checkable") + tooltip: qsTr("Whether the button is checkable.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.checkable.valueToString + backendValue: backendValues.checkable + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Checked") + tooltip: qsTr("Whether the button is checked.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.checked.valueToString + backendValue: backendValues.checked + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Exclusive") + tooltip: qsTr("Whether the button is exclusive.") + disabledState: !backendValues.autoExclusive.isAvailable + } + SecondColumnLayout { + CheckBox { + text: backendValues.autoExclusive.valueToString + backendValue: backendValues.autoExclusive + Layout.fillWidth: true + enabled: backendValue.isAvailable + } + } + + Label { + text: qsTr("Auto-Repeat") + tooltip: qsTr("Whether the button repeats pressed(), released() and clicked() signals while the button is pressed and held down.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.autoRepeat.valueToString + backendValue: backendValues.autoRepeat + Layout.fillWidth: true + } + } + } +} diff --git a/src/quickcontrols2/designer/BusyIndicatorSpecifics.qml b/src/quickcontrols2/designer/BusyIndicatorSpecifics.qml new file mode 100644 index 00000000..7b2899d3 --- /dev/null +++ b/src/quickcontrols2/designer/BusyIndicatorSpecifics.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("BusyIndicator") + + SectionLayout { + Label { + text: qsTr("Running") + tooltip: qsTr("Whether the busy indicator is currently indicating activity.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.running.valueToString + backendValue: backendValues.running + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/ButtonSection.qml b/src/quickcontrols2/designer/ButtonSection.qml new file mode 100644 index 00000000..ff70d52c --- /dev/null +++ b/src/quickcontrols2/designer/ButtonSection.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Section { + id: section + caption: qsTr("Button") + + SectionLayout { + + Label { + text: qsTr("Flat") + tooltip: qsTr("Whether the button is flat.") + disabledState: !backendValues.flat.isAvailable + } + SecondColumnLayout { + CheckBox { + text: backendValues.flat.valueToString + backendValue: backendValues.flat + Layout.fillWidth: true + enabled: backendValue.isAvailable + } + } + Label { + text: qsTr("Highlighted") + tooltip: qsTr("Whether the button is highlighted.") + disabledState: !backendValues.highlighted.isAvailable + } + SecondColumnLayout { + CheckBox { + text: backendValues.highlighted.valueToString + backendValue: backendValues.highlighted + Layout.fillWidth: true + enabled: backendValue.isAvailable + } + } + } +} diff --git a/src/quickcontrols2/designer/ButtonSpecifics.qml b/src/quickcontrols2/designer/ButtonSpecifics.qml new file mode 100644 index 00000000..5a46e72a --- /dev/null +++ b/src/quickcontrols2/designer/ButtonSpecifics.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + ButtonSection { + width: parent.width + } + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/CMakeLists.txt b/src/quickcontrols2/designer/CMakeLists.txt new file mode 100644 index 00000000..38d82ace --- /dev/null +++ b/src/quickcontrols2/designer/CMakeLists.txt @@ -0,0 +1,61 @@ +file(GLOB_RECURSE __aux_qml_glob_files + RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" + "images/*.png" +) + +qt_copy_or_install( + FILES + ${__aux_qml_glob_files} + DESTINATION "${INSTALL_QMLDIR}/QtQuick/Controls/designer/images" +) + +qt_copy_or_install( + FILES + AbstractButtonSection.qml + BusyIndicatorSpecifics.qml + ButtonSection.qml + ButtonSpecifics.qml + CheckBoxSpecifics.qml + CheckDelegateSpecifics.qml + CheckSection.qml + ComboBoxSpecifics.qml + ContainerSection.qml + ControlSection.qml + ControlSpecifics.qml + DelayButtonSpecifics.qml + DialSpecifics.qml + FrameSpecifics.qml + GroupBoxSpecifics.qml + InsetSection.qml + ItemDelegateSection.qml + ItemDelegateSpecifics.qml + LabelSpecifics.qml + PaddingSection.qml + PageIndicatorSpecifics.qml + PageSpecifics.qml + PaneSection.qml + PaneSpecifics.qml + ProgressBarSpecifics.qml + RadioButtonSpecifics.qml + RadioDelegateSpecifics.qml + RangeSliderSpecifics.qml + RoundButtonSpecifics.qml + ScrollViewSpecifics.qml + SliderSpecifics.qml + SpinBoxSpecifics.qml + StackViewSpecifics.qml + SwipeDelegateSpecifics.qml + SwipeViewSpecifics.qml + SwitchDelegateSpecifics.qml + SwitchSpecifics.qml + TabBarSpecifics.qml + TabButtonSpecifics.qml + TextAreaSpecifics.qml + TextFieldSpecifics.qml + ToolBarSpecifics.qml + ToolButtonSpecifics.qml + ToolSeparatorSpecifics.qml + TumblerSpecifics.qml + qtquickcontrols2.metainfo + DESTINATION "${INSTALL_QMLDIR}/QtQuick/Controls/designer" +) diff --git a/src/quickcontrols2/designer/CheckBoxSpecifics.qml b/src/quickcontrols2/designer/CheckBoxSpecifics.qml new file mode 100644 index 00000000..d3aae9b6 --- /dev/null +++ b/src/quickcontrols2/designer/CheckBoxSpecifics.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + CheckSection { + width: parent.width + caption: qsTr("CheckBox") + } + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/CheckDelegateSpecifics.qml b/src/quickcontrols2/designer/CheckDelegateSpecifics.qml new file mode 100644 index 00000000..8014480c --- /dev/null +++ b/src/quickcontrols2/designer/CheckDelegateSpecifics.qml @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + CheckSection { + width: parent.width + caption: qsTr("CheckDelegate") + } + + ItemDelegateSection { + width: parent.width + } + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/CheckSection.qml b/src/quickcontrols2/designer/CheckSection.qml new file mode 100644 index 00000000..0f49fa25 --- /dev/null +++ b/src/quickcontrols2/designer/CheckSection.qml @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Section { + SectionLayout { + Label { + text: qsTr("Check State") + tooltip: qsTr("The current check state.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.checkState + model: [ "Unchecked", "PartiallyChecked", "Checked" ] + scope: "Qt" + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Tri-state") + tooltip: qsTr("Whether the checkbox has three states.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.tristate.valueToString + backendValue: backendValues.tristate + Layout.fillWidth: true + } + } + } +} diff --git a/src/quickcontrols2/designer/ComboBoxSpecifics.qml b/src/quickcontrols2/designer/ComboBoxSpecifics.qml new file mode 100644 index 00000000..810f19b5 --- /dev/null +++ b/src/quickcontrols2/designer/ComboBoxSpecifics.qml @@ -0,0 +1,119 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("ComboBox") + + SectionLayout { + Label { + text: qsTr("Text Role") + tooltip: qsTr("The model role used for displaying text.") + } + SecondColumnLayout { + LineEdit { + backendValue: backendValues.textRole + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Current") + tooltip: qsTr("The index of the current item.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.currentIndex + Layout.fillWidth: true + } + } + Label { + text: qsTr("Editable") + tooltip: qsTr("Whether the combo box is editable.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.editable.valueToString + backendValue: backendValues.editable + Layout.fillWidth: true + } + } + Label { + text: qsTr("Flat") + tooltip: qsTr("Whether the combo box button is flat.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.flat.valueToString + backendValue: backendValues.flat + Layout.fillWidth: true + } + } + Label { + text: qsTr("DisplayText") + tooltip: qsTr("Holds the text that is displayed on the combo box button.") + } + SecondColumnLayout { + LineEdit { + backendValue: backendValues.displayText + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/ContainerSection.qml b/src/quickcontrols2/designer/ContainerSection.qml new file mode 100644 index 00000000..15d1ddf5 --- /dev/null +++ b/src/quickcontrols2/designer/ContainerSection.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Section { + caption: qsTr("Container") + + SectionLayout { + Label { + text: qsTr("Current") + tooltip: qsTr("The index of the current item.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.currentIndex + Layout.fillWidth: true + } + } + } +} diff --git a/src/quickcontrols2/designer/ControlSection.qml b/src/quickcontrols2/designer/ControlSection.qml new file mode 100644 index 00000000..12033eea --- /dev/null +++ b/src/quickcontrols2/designer/ControlSection.qml @@ -0,0 +1,114 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Section { + caption: qsTr("Control") + + SectionLayout { + Label { + text: qsTr("Enabled") + tooltip: qsTr("Whether the control is enabled.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.enabled.valueToString + backendValue: backendValues.enabled + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Focus Policy") + tooltip: qsTr("Focus policy of the control.") + disabledState: !backendValues.focusPolicy.isAvailable + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.focusPolicy + model: [ "TabFocus", "ClickFocus", "StrongFocus", "WheelFocus", "NoFocus" ] + scope: "Qt" + Layout.fillWidth: true + enabled: backendValue.isAvailable + } + } + + Label { + text: qsTr("Hover") + tooltip: qsTr("Whether control accepts hover events.") + disabledState: !backendValues.hoverEnabled.isAvailable + } + SecondColumnLayout { + CheckBox { + text: backendValues.hoverEnabled.valueToString + backendValue: backendValues.hoverEnabled + Layout.fillWidth: true + enabled: backendValue.isAvailable + } + } + + Label { + text: qsTr("Spacing") + tooltip: qsTr("Spacing between internal elements of the control.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.spacing + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Wheel") + tooltip: qsTr("Whether control accepts wheel events.") + disabledState: !backendValues.wheelEnabled.isAvailable + } + SecondColumnLayout { + CheckBox { + text: backendValues.wheelEnabled.valueToString + backendValue: backendValues.wheelEnabled + Layout.fillWidth: true + enabled: backendValue.isAvailable + } + } + } +} diff --git a/src/quickcontrols2/designer/ControlSpecifics.qml b/src/quickcontrols2/designer/ControlSpecifics.qml new file mode 100644 index 00000000..3937437b --- /dev/null +++ b/src/quickcontrols2/designer/ControlSpecifics.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/DelayButtonSpecifics.qml b/src/quickcontrols2/designer/DelayButtonSpecifics.qml new file mode 100644 index 00000000..024fe589 --- /dev/null +++ b/src/quickcontrols2/designer/DelayButtonSpecifics.qml @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("DelayButton") + + SectionLayout { + Label { + text: qsTr("Delay") + tooltip: qsTr("The delay in milliseconds.") + } + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 9999999 + decimals: 0 + stepSize: 1 + backendValue: backendValues.delay + Layout.fillWidth: true + } + } + } + } + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/DialSpecifics.qml b/src/quickcontrols2/designer/DialSpecifics.qml new file mode 100644 index 00000000..026cb2b1 --- /dev/null +++ b/src/quickcontrols2/designer/DialSpecifics.qml @@ -0,0 +1,172 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("Dial") + + SectionLayout { + Label { + text: qsTr("Value") + tooltip: qsTr("The current value of the dial.") + } + SecondColumnLayout { + SpinBox { + minimumValue: Math.min(backendValues.from.value, backendValues.to.value) + maximumValue: Math.max(backendValues.from.value, backendValues.to.value) + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.value + Layout.fillWidth: true + } + } + + Label { + text: qsTr("From") + tooltip: qsTr("The starting value of the dial range.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.from + Layout.fillWidth: true + } + } + + Label { + text: qsTr("To") + tooltip: qsTr("The ending value of the dial range.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.to + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Step Size") + tooltip: qsTr("The step size of the dial.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.stepSize + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Snap Mode") + tooltip: qsTr("The snap mode of the dial.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.snapMode + model: [ "NoSnap", "SnapOnRelease", "SnapAlways" ] + scope: "Dial" + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Live") + tooltip: qsTr("Whether the dial provides live value updates.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.live.valueToString + backendValue: backendValues.live + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Input Mode") + tooltip: qsTr("How the dial tracks movement.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.inputMode + model: [ "Circular", "Horizontal", "Vertical" ] + scope: "Dial" + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Wrap") + tooltip: qsTr("Whether the dial wraps when dragged.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.wrap.valueToString + backendValue: backendValues.wrap + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/FrameSpecifics.qml b/src/quickcontrols2/designer/FrameSpecifics.qml new file mode 100644 index 00000000..36739956 --- /dev/null +++ b/src/quickcontrols2/designer/FrameSpecifics.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + PaneSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/GroupBoxSpecifics.qml b/src/quickcontrols2/designer/GroupBoxSpecifics.qml new file mode 100644 index 00000000..f808b001 --- /dev/null +++ b/src/quickcontrols2/designer/GroupBoxSpecifics.qml @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("GroupBox") + + SectionLayout { + Label { + text: qsTr("Title") + tooltip: qsTr("The title of the group box.") + } + SecondColumnLayout { + LineEdit { + backendValue: backendValues.title + Layout.fillWidth: true + } + } + } + } + + PaneSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/InsetSection.qml b/src/quickcontrols2/designer/InsetSection.qml new file mode 100644 index 00000000..45a4df4f --- /dev/null +++ b/src/quickcontrols2/designer/InsetSection.qml @@ -0,0 +1,119 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Section { + caption: qsTr("Inset") + + SectionLayout { + Label { + text: qsTr("Vertical") + } + SecondColumnLayout { + Label { + text: qsTr("Top") + tooltip: qsTr("Top inset for the background.") + width: 42 + } + SpinBox { + maximumValue: 10000 + minimumValue: -10000 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.topInset + Layout.fillWidth: true + } + Item { + width: 4 + height: 4 + } + + Label { + text: qsTr("Bottom") + tooltip: qsTr("Bottom inset for the background.") + width: 42 + } + SpinBox { + maximumValue: 10000 + minimumValue: -10000 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.bottomInset + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Horizontal") + } + SecondColumnLayout { + Label { + text: qsTr("Left") + tooltip: qsTr("Left inset for the background.") + width: 42 + } + SpinBox { + maximumValue: 10000 + minimumValue: -10000 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.leftInset + Layout.fillWidth: true + } + Item { + width: 4 + height: 4 + } + + Label { + text: qsTr("Right") + tooltip: qsTr("Right inset for the background.") + width: 42 + } + SpinBox { + maximumValue: 10000 + minimumValue: -10000 + realDragRange: 5000 + decimals: 0 + backendValue: backendValues.rightInset + Layout.fillWidth: true + } + } + } +} diff --git a/src/quickcontrols2/designer/ItemDelegateSection.qml b/src/quickcontrols2/designer/ItemDelegateSection.qml new file mode 100644 index 00000000..448a20d9 --- /dev/null +++ b/src/quickcontrols2/designer/ItemDelegateSection.qml @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Section { + id: section + caption: qsTr("ItemDelegate") + + SectionLayout { + Label { + text: qsTr("Highlighted") + tooltip: qsTr("Whether the delegate is highlighted.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.highlighted.valueToString + backendValue: backendValues.highlighted + Layout.fillWidth: true + } + } + } +} diff --git a/src/quickcontrols2/designer/ItemDelegateSpecifics.qml b/src/quickcontrols2/designer/ItemDelegateSpecifics.qml new file mode 100644 index 00000000..1757521d --- /dev/null +++ b/src/quickcontrols2/designer/ItemDelegateSpecifics.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + ItemDelegateSection { + width: parent.width + } + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/LabelSpecifics.qml b/src/quickcontrols2/designer/LabelSpecifics.qml new file mode 100644 index 00000000..569b44c8 --- /dev/null +++ b/src/quickcontrols2/designer/LabelSpecifics.qml @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + StandardTextSection { + width: parent.width + showIsWrapping: true + showFormatProperty: true + showVerticalAlignment: true + } + + Section { + anchors.left: parent.left + anchors.right: parent.right + caption: qsTr("Text Color") + + ColorEditor { + caption: qsTr("Text Color") + backendValue: backendValues.color + supportGradient: false + } + } + + Section { + anchors.left: parent.left + anchors.right: parent.right + caption: qsTr("Style Color") + + ColorEditor { + caption: qsTr("Style Color") + backendValue: backendValues.styleColor + supportGradient: false + } + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } + + InsetSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/PaddingSection.qml b/src/quickcontrols2/designer/PaddingSection.qml new file mode 100644 index 00000000..325c5698 --- /dev/null +++ b/src/quickcontrols2/designer/PaddingSection.qml @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Section { + caption: qsTr("Padding") + + SectionLayout { + Label { + text: qsTr("Top") + tooltip: qsTr("Padding between the content and the top edge of the control.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.topPadding + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Left") + tooltip: qsTr("Padding between the content and the left edge of the control.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.leftPadding + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Right") + tooltip: qsTr("Padding between the content and the right edge of the control.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.rightPadding + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Bottom") + tooltip: qsTr("Padding between the content and the bottom edge of the control.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.bottomPadding + Layout.fillWidth: true + } + } + } +} diff --git a/src/quickcontrols2/designer/PageIndicatorSpecifics.qml b/src/quickcontrols2/designer/PageIndicatorSpecifics.qml new file mode 100644 index 00000000..c73652e9 --- /dev/null +++ b/src/quickcontrols2/designer/PageIndicatorSpecifics.qml @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("PageIndicator") + + SectionLayout { + Label { + text: qsTr("Count") + tooltip: qsTr("The number of pages.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.count + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Current") + tooltip: qsTr("The index of the current page.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.currentIndex + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Interactive") + tooltip: qsTr("Whether the control is interactive.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.interactive.valueToString + backendValue: backendValues.interactive + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/PageSpecifics.qml b/src/quickcontrols2/designer/PageSpecifics.qml new file mode 100644 index 00000000..965ed655 --- /dev/null +++ b/src/quickcontrols2/designer/PageSpecifics.qml @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("Page") + + SectionLayout { + Label { + text: qsTr("Title") + tooltip: qsTr("Title of the page.") + } + SecondColumnLayout { + LineEdit { + backendValue: backendValues.title + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Content Width") + tooltip: qsTr("Content height used for calculating the total implicit width.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.contentWidth + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Content Height") + tooltip: qsTr("Content height used for calculating the total implicit height.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.contentHeight + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/PaneSection.qml b/src/quickcontrols2/designer/PaneSection.qml new file mode 100644 index 00000000..9dcc2097 --- /dev/null +++ b/src/quickcontrols2/designer/PaneSection.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Section { + caption: qsTr("Pane") + + SectionLayout { + Label { + text: qsTr("Content Width") + tooltip: qsTr("Content height used for calculating the total implicit width.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.contentWidth + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Content Height") + tooltip: qsTr("Content height used for calculating the total implicit height.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.contentHeight + Layout.fillWidth: true + } + } + } +} diff --git a/src/quickcontrols2/designer/PaneSpecifics.qml b/src/quickcontrols2/designer/PaneSpecifics.qml new file mode 100644 index 00000000..36739956 --- /dev/null +++ b/src/quickcontrols2/designer/PaneSpecifics.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + PaneSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/ProgressBarSpecifics.qml b/src/quickcontrols2/designer/ProgressBarSpecifics.qml new file mode 100644 index 00000000..14f87925 --- /dev/null +++ b/src/quickcontrols2/designer/ProgressBarSpecifics.qml @@ -0,0 +1,121 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("ProgressBar") + + SectionLayout { + Label { + text: qsTr("Indeterminate") + tooltip: qsTr("Whether the progress is indeterminate.") + disabledState: !backendValues.indeterminate.isAvailable + } + SecondColumnLayout { + CheckBox { + text: backendValues.indeterminate.valueToString + backendValue: backendValues.indeterminate + Layout.fillWidth: true + enabled: backendValue.isAvailable + } + } + + Label { + text: qsTr("Value") + tooltip: qsTr("The current value of the progress.") + } + SecondColumnLayout { + SpinBox { + minimumValue: Math.min(backendValues.from.value, backendValues.to.value) + maximumValue: Math.max(backendValues.from.value, backendValues.to.value) + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.value + Layout.fillWidth: true + } + } + + Label { + text: qsTr("From") + tooltip: qsTr("The starting value for the progress.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.from + Layout.fillWidth: true + } + } + + Label { + text: qsTr("To") + tooltip: qsTr("The ending value for the progress.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.to + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/RadioButtonSpecifics.qml b/src/quickcontrols2/designer/RadioButtonSpecifics.qml new file mode 100644 index 00000000..df0af7e7 --- /dev/null +++ b/src/quickcontrols2/designer/RadioButtonSpecifics.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/RadioDelegateSpecifics.qml b/src/quickcontrols2/designer/RadioDelegateSpecifics.qml new file mode 100644 index 00000000..1757521d --- /dev/null +++ b/src/quickcontrols2/designer/RadioDelegateSpecifics.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + ItemDelegateSection { + width: parent.width + } + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/RangeSliderSpecifics.qml b/src/quickcontrols2/designer/RangeSliderSpecifics.qml new file mode 100644 index 00000000..577033ed --- /dev/null +++ b/src/quickcontrols2/designer/RangeSliderSpecifics.qml @@ -0,0 +1,189 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("RangeSlider") + + SectionLayout { + Label { + text: qsTr("First Value") + tooltip: qsTr("The value of the first range slider handle.") + } + SecondColumnLayout { + SpinBox { + minimumValue: Math.min(backendValues.from.value, backendValues.to.value) + maximumValue: Math.max(backendValues.from.value, backendValues.to.value) + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.first_value + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Second Value") + tooltip: qsTr("The value of the second range slider handle.") + } + SecondColumnLayout { + SpinBox { + minimumValue: Math.min(backendValues.from.value, backendValues.to.value) + maximumValue: Math.max(backendValues.from.value, backendValues.to.value) + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.second_value + Layout.fillWidth: true + } + } + + Label { + text: qsTr("From") + tooltip: qsTr("The starting value of the range slider range.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.from + Layout.fillWidth: true + } + } + + Label { + text: qsTr("To") + tooltip: qsTr("The ending value of the range slider range.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.to + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Step Size") + tooltip: qsTr("The step size of the range slider.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.stepSize + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Snap Mode") + tooltip: qsTr("The snap mode of the range slider.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.snapMode + model: [ "NoSnap", "SnapOnRelease", "SnapAlways" ] + scope: "RangeSlider" + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Orientation") + tooltip: qsTr("The orientation of the range slider.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.orientation + model: [ "Horizontal", "Vertical" ] + scope: "Qt" + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Live") + tooltip: qsTr("Whether the range slider provides live value updates.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.live.valueToString + backendValue: backendValues.live + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Touch drag threshold") + tooltip: qsTr("The threshold (in logical pixels) at which a touch drag event will be initiated.") + } + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10000 + decimals: 0 + backendValue: backendValues.touchDragThreshold + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/RoundButtonSpecifics.qml b/src/quickcontrols2/designer/RoundButtonSpecifics.qml new file mode 100644 index 00000000..58d34689 --- /dev/null +++ b/src/quickcontrols2/designer/RoundButtonSpecifics.qml @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("RoundButton") + + SectionLayout { + Label { + text: qsTr("Radius") + tooltip: qsTr("Radius of the button.") + } + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10000 + decimals: 0 + backendValue: backendValues.radius + Layout.fillWidth: true + } + } + } + } + + ButtonSection { + width: parent.width + } + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/ScrollViewSpecifics.qml b/src/quickcontrols2/designer/ScrollViewSpecifics.qml new file mode 100644 index 00000000..ae525b74 --- /dev/null +++ b/src/quickcontrols2/designer/ScrollViewSpecifics.qml @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("ScrollView") + + SectionLayout { + Label { + text: qsTr("Content Width") + tooltip: qsTr("Content height used for calculating the total implicit width.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.contentWidth + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Content Height") + tooltip: qsTr("Content height used for calculating the total implicit height.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.contentHeight + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/SliderSpecifics.qml b/src/quickcontrols2/designer/SliderSpecifics.qml new file mode 100644 index 00000000..3af20540 --- /dev/null +++ b/src/quickcontrols2/designer/SliderSpecifics.qml @@ -0,0 +1,180 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("Slider") + + SectionLayout { + Label { + text: qsTr("Value") + tooltip: qsTr("The current value of the slider.") + } + SecondColumnLayout { + SpinBox { + minimumValue: Math.min(backendValues.from.value, backendValues.to.value) + maximumValue: Math.max(backendValues.from.value, backendValues.to.value) + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.value + Layout.fillWidth: true + } + } + + Label { + text: qsTr("From") + tooltip: qsTr("The starting value of the slider range.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.from + Layout.fillWidth: true + } + } + + Label { + text: qsTr("To") + tooltip: qsTr("The ending value of the slider range.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.to + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Step Size") + tooltip: qsTr("The step size of the slider.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + stepSize: 0.1 + backendValue: backendValues.stepSize + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Snap Mode") + tooltip: qsTr("The snap mode of the slider.") + disabledState: !backendValues.snapMode.isAvailable + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.snapMode + model: [ "NoSnap", "SnapOnRelease", "SnapAlways" ] + scope: "Slider" + Layout.fillWidth: true + enabled: backendValue.isAvailable + } + } + + Label { + text: qsTr("Orientation") + tooltip: qsTr("The orientation of the slider.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.orientation + model: [ "Horizontal", "Vertical" ] + scope: "Qt" + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Live") + tooltip: qsTr("Whether the slider provides live value updates.") + disabledState: !backendValues.live.isAvailable + } + SecondColumnLayout { + CheckBox { + text: backendValues.live.valueToString + backendValue: backendValues.live + Layout.fillWidth: true + enabled: backendValue.isAvailable + } + } + + Label { + text: qsTr("Touch drag threshold") + tooltip: qsTr("The threshold (in logical pixels) at which a touch drag event will be initiated.") + disabledState: !backendValues.touchDragThreshold.isAvailable + } + SecondColumnLayout { + SpinBox { + minimumValue: 0 + maximumValue: 10000 + decimals: 0 + backendValue: backendValues.touchDragThreshold + Layout.fillWidth: true + enabled: backendValue.isAvailable + } + } + } + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/SpinBoxSpecifics.qml b/src/quickcontrols2/designer/SpinBoxSpecifics.qml new file mode 100644 index 00000000..9c07e8c5 --- /dev/null +++ b/src/quickcontrols2/designer/SpinBoxSpecifics.qml @@ -0,0 +1,142 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("SpinBox") + + SectionLayout { + Label { + text: qsTr("Value") + tooltip: qsTr("The current value of the spinbox.") + } + SecondColumnLayout { + SpinBox { + minimumValue: Math.min(backendValues.from.value, backendValues.to.value) + maximumValue: Math.max(backendValues.from.value, backendValues.to.value) + decimals: 2 + backendValue: backendValues.value + Layout.fillWidth: true + } + } + + Label { + text: qsTr("From") + tooltip: qsTr("The starting value of the spinbox range.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + backendValue: backendValues.from + Layout.fillWidth: true + } + } + + Label { + text: qsTr("To") + tooltip: qsTr("The ending value of the spinbox range.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + backendValue: backendValues.to + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Step Size") + tooltip: qsTr("The step size of the spinbox.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 2 + backendValue: backendValues.stepSize + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Editable") + tooltip: qsTr("Whether the spinbox is editable.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.editable.valueToString + backendValue: backendValues.editable + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Wrap") + tooltip: qsTr("Whether the spinbox wraps.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.wrap.valueToString + backendValue: backendValues.wrap + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/StackViewSpecifics.qml b/src/quickcontrols2/designer/StackViewSpecifics.qml new file mode 100644 index 00000000..3937437b --- /dev/null +++ b/src/quickcontrols2/designer/StackViewSpecifics.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/SwipeDelegateSpecifics.qml b/src/quickcontrols2/designer/SwipeDelegateSpecifics.qml new file mode 100644 index 00000000..1757521d --- /dev/null +++ b/src/quickcontrols2/designer/SwipeDelegateSpecifics.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + ItemDelegateSection { + width: parent.width + } + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/SwipeViewSpecifics.qml b/src/quickcontrols2/designer/SwipeViewSpecifics.qml new file mode 100644 index 00000000..a28a2917 --- /dev/null +++ b/src/quickcontrols2/designer/SwipeViewSpecifics.qml @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("SwipeView") + + SectionLayout { + Label { + text: qsTr("Interactive") + tooltip: qsTr("Whether the view is interactive.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.interactive.valueToString + backendValue: backendValues.interactive + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Orientation") + tooltip: qsTr("Orientation of the view.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.orientation + model: [ "Horizontal", "Vertical" ] + scope: "Qt" + Layout.fillWidth: true + } + } + } + } + + ContainerSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/SwitchDelegateSpecifics.qml b/src/quickcontrols2/designer/SwitchDelegateSpecifics.qml new file mode 100644 index 00000000..4236de67 --- /dev/null +++ b/src/quickcontrols2/designer/SwitchDelegateSpecifics.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + ItemDelegateSection { + width: parent.width + } + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/SwitchSpecifics.qml b/src/quickcontrols2/designer/SwitchSpecifics.qml new file mode 100644 index 00000000..df0af7e7 --- /dev/null +++ b/src/quickcontrols2/designer/SwitchSpecifics.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/TabBarSpecifics.qml b/src/quickcontrols2/designer/TabBarSpecifics.qml new file mode 100644 index 00000000..6f02cdaa --- /dev/null +++ b/src/quickcontrols2/designer/TabBarSpecifics.qml @@ -0,0 +1,107 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("TabBar") + + SectionLayout { + Label { + text: qsTr("Position") + tooltip: qsTr("Position of the tabbar.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.position + model: [ "Header", "Footer" ] + scope: "TabBar" + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Content Width") + tooltip: qsTr("Content height used for calculating the total implicit width.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.contentWidth + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Content Height") + tooltip: qsTr("Content height used for calculating the total implicit height.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.contentHeight + Layout.fillWidth: true + } + } + } + } + + ContainerSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/TabButtonSpecifics.qml b/src/quickcontrols2/designer/TabButtonSpecifics.qml new file mode 100644 index 00000000..df0af7e7 --- /dev/null +++ b/src/quickcontrols2/designer/TabButtonSpecifics.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/TextAreaSpecifics.qml b/src/quickcontrols2/designer/TextAreaSpecifics.qml new file mode 100644 index 00000000..785d7a50 --- /dev/null +++ b/src/quickcontrols2/designer/TextAreaSpecifics.qml @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("TextArea") + + SectionLayout { + Label { + text: qsTr("Placeholder") + tooltip: qsTr("Placeholder text displayed when the editor is empty.") + } + SecondColumnLayout { + LineEdit { + backendValue: backendValues.placeholderText + Layout.fillWidth: true + } + + } + + Label { + text: qsTr("Hover") + tooltip: qsTr("Whether text area accepts hover events.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.hoverEnabled.valueToString + backendValue: backendValues.hoverEnabled + Layout.fillWidth: true + } + } + } + } + + Section { + width: parent.width + caption: qsTr("Placeholder Text Color") + + ColorEditor { + caption: qsTr("Placeholder Text Color") + backendValue: backendValues.placeholderTextColor + supportGradient: false + } + } + + StandardTextSection { + width: parent.width + showIsWrapping: true + showFormatProperty: true + showVerticalAlignment: true + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } + + InsetSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/TextFieldSpecifics.qml b/src/quickcontrols2/designer/TextFieldSpecifics.qml new file mode 100644 index 00000000..33a90f2a --- /dev/null +++ b/src/quickcontrols2/designer/TextFieldSpecifics.qml @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("TextField") + + SectionLayout { + Label { + text: qsTr("Placeholder") + tooltip: qsTr("Placeholder text displayed when the editor is empty.") + } + SecondColumnLayout { + LineEdit { + backendValue: backendValues.placeholderText + Layout.fillWidth: true + } + + } + + Label { + text: qsTr("Hover") + tooltip: qsTr("Whether text field accepts hover events.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.hoverEnabled.valueToString + backendValue: backendValues.hoverEnabled + Layout.fillWidth: true + } + } + } + } + + Section { + width: parent.width + caption: qsTr("Placeholder Text Color") + + ColorEditor { + caption: qsTr("Placeholder Text Color") + backendValue: backendValues.placeholderTextColor + supportGradient: false + } + } + + StandardTextSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } + + InsetSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/ToolBarSpecifics.qml b/src/quickcontrols2/designer/ToolBarSpecifics.qml new file mode 100644 index 00000000..2b1b17d2 --- /dev/null +++ b/src/quickcontrols2/designer/ToolBarSpecifics.qml @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("ToolBar") + + SectionLayout { + Label { + text: qsTr("Position") + tooltip: qsTr("Position of the toolbar.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.position + model: [ "Header", "Footer" ] + scope: "ToolBar" + Layout.fillWidth: true + } + } + } + } + + PaneSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/ToolButtonSpecifics.qml b/src/quickcontrols2/designer/ToolButtonSpecifics.qml new file mode 100644 index 00000000..5a46e72a --- /dev/null +++ b/src/quickcontrols2/designer/ToolButtonSpecifics.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + ButtonSection { + width: parent.width + } + + AbstractButtonSection { + width: parent.width + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/ToolSeparatorSpecifics.qml b/src/quickcontrols2/designer/ToolSeparatorSpecifics.qml new file mode 100644 index 00000000..a62147ec --- /dev/null +++ b/src/quickcontrols2/designer/ToolSeparatorSpecifics.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("ToolSeparator") + + SectionLayout { + Label { + text: qsTr("Orientation") + tooltip: qsTr("The orientation of the separator.") + } + SecondColumnLayout { + ComboBox { + backendValue: backendValues.orientation + model: [ "Horizontal", "Vertical" ] + scope: "Qt" + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/TumblerSpecifics.qml b/src/quickcontrols2/designer/TumblerSpecifics.qml new file mode 100644 index 00000000..25fb9275 --- /dev/null +++ b/src/quickcontrols2/designer/TumblerSpecifics.qml @@ -0,0 +1,102 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import HelperWidgets +import QtQuick.Layouts + +Column { + width: parent.width + + Section { + width: parent.width + caption: qsTr("Tumbler") + + SectionLayout { + Label { + text: qsTr("Visible Count") + tooltip: qsTr("The count of visible items.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.visibleItemCount + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Current") + tooltip: qsTr("The index of the current item.") + } + SecondColumnLayout { + SpinBox { + maximumValue: 9999999 + minimumValue: -9999999 + decimals: 0 + backendValue: backendValues.currentIndex + Layout.fillWidth: true + } + } + + Label { + text: qsTr("Wrap") + tooltip: qsTr("Whether the tumbler wrap.") + } + SecondColumnLayout { + CheckBox { + text: backendValues.wrap.valueToString + backendValue: backendValues.wrap + Layout.fillWidth: true + } + } + } + } + + ControlSection { + width: parent.width + } + + FontSection { + width: parent.width + } + + PaddingSection { + width: parent.width + } +} diff --git a/src/quickcontrols2/designer/designer.pri b/src/quickcontrols2/designer/designer.pri new file mode 100644 index 00000000..6692b203 --- /dev/null +++ b/src/quickcontrols2/designer/designer.pri @@ -0,0 +1,52 @@ +AUX_QML_FILES += \ + $$PWD/qtquickcontrols2.metainfo + +AUX_QML_FILES += \ + $$PWD/AbstractButtonSection.qml \ + $$PWD/BusyIndicatorSpecifics.qml \ + $$PWD/ButtonSection.qml \ + $$PWD/ButtonSpecifics.qml \ + $$PWD/CheckBoxSpecifics.qml \ + $$PWD/CheckDelegateSpecifics.qml \ + $$PWD/CheckSection.qml \ + $$PWD/ComboBoxSpecifics.qml \ + $$PWD/ContainerSection.qml \ + $$PWD/ControlSection.qml \ + $$PWD/ControlSpecifics.qml \ + $$PWD/DelayButtonSpecifics.qml \ + $$PWD/DialSpecifics.qml \ + $$PWD/FrameSpecifics.qml \ + $$PWD/GroupBoxSpecifics.qml \ + $$PWD/InsetSection.qml \ + $$PWD/ItemDelegateSection.qml \ + $$PWD/ItemDelegateSpecifics.qml \ + $$PWD/LabelSpecifics.qml \ + $$PWD/PaddingSection.qml \ + $$PWD/PageSpecifics.qml \ + $$PWD/PageIndicatorSpecifics.qml \ + $$PWD/PaneSection.qml \ + $$PWD/PaneSpecifics.qml \ + $$PWD/ProgressBarSpecifics.qml \ + $$PWD/RadioButtonSpecifics.qml \ + $$PWD/RadioDelegateSpecifics.qml \ + $$PWD/RangeSliderSpecifics.qml \ + $$PWD/RoundButtonSpecifics.qml \ + $$PWD/ScrollViewSpecifics.qml \ + $$PWD/SliderSpecifics.qml \ + $$PWD/SpinBoxSpecifics.qml \ + $$PWD/StackViewSpecifics.qml \ + $$PWD/SwipeDelegateSpecifics.qml \ + $$PWD/SwipeViewSpecifics.qml \ + $$PWD/SwitchSpecifics.qml \ + $$PWD/SwitchDelegateSpecifics.qml \ + $$PWD/TabBarSpecifics.qml \ + $$PWD/TabButtonSpecifics.qml \ + $$PWD/TextAreaSpecifics.qml \ + $$PWD/TextFieldSpecifics.qml \ + $$PWD/ToolBarSpecifics.qml \ + $$PWD/ToolButtonSpecifics.qml \ + $$PWD/ToolSeparatorSpecifics.qml \ + $$PWD/TumblerSpecifics.qml + +AUX_QML_FILES += \ + $$files($$PWD/images/*.png) diff --git a/src/quickcontrols2/designer/images/busyindicator-icon.png b/src/quickcontrols2/designer/images/busyindicator-icon.png new file mode 100644 index 00000000..666d1ed9 Binary files /dev/null and b/src/quickcontrols2/designer/images/busyindicator-icon.png differ diff --git a/src/quickcontrols2/designer/images/busyindicator-icon16.png b/src/quickcontrols2/designer/images/busyindicator-icon16.png new file mode 100644 index 00000000..5aa57d7f Binary files /dev/null and b/src/quickcontrols2/designer/images/busyindicator-icon16.png differ diff --git a/src/quickcontrols2/designer/images/busyindicator-icon@2x.png b/src/quickcontrols2/designer/images/busyindicator-icon@2x.png new file mode 100644 index 00000000..bb2278ff Binary files /dev/null and b/src/quickcontrols2/designer/images/busyindicator-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/button-icon.png b/src/quickcontrols2/designer/images/button-icon.png new file mode 100644 index 00000000..c44909f6 Binary files /dev/null and b/src/quickcontrols2/designer/images/button-icon.png differ diff --git a/src/quickcontrols2/designer/images/button-icon16.png b/src/quickcontrols2/designer/images/button-icon16.png new file mode 100644 index 00000000..5c921deb Binary files /dev/null and b/src/quickcontrols2/designer/images/button-icon16.png differ diff --git a/src/quickcontrols2/designer/images/button-icon@2x.png b/src/quickcontrols2/designer/images/button-icon@2x.png new file mode 100644 index 00000000..f90a1ba7 Binary files /dev/null and b/src/quickcontrols2/designer/images/button-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/checkbox-icon.png b/src/quickcontrols2/designer/images/checkbox-icon.png new file mode 100644 index 00000000..ee669b3a Binary files /dev/null and b/src/quickcontrols2/designer/images/checkbox-icon.png differ diff --git a/src/quickcontrols2/designer/images/checkbox-icon16.png b/src/quickcontrols2/designer/images/checkbox-icon16.png new file mode 100644 index 00000000..8d89eab8 Binary files /dev/null and b/src/quickcontrols2/designer/images/checkbox-icon16.png differ diff --git a/src/quickcontrols2/designer/images/checkbox-icon@2x.png b/src/quickcontrols2/designer/images/checkbox-icon@2x.png new file mode 100644 index 00000000..51c5601d Binary files /dev/null and b/src/quickcontrols2/designer/images/checkbox-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/combobox-icon.png b/src/quickcontrols2/designer/images/combobox-icon.png new file mode 100644 index 00000000..2d31b17c Binary files /dev/null and b/src/quickcontrols2/designer/images/combobox-icon.png differ diff --git a/src/quickcontrols2/designer/images/combobox-icon16.png b/src/quickcontrols2/designer/images/combobox-icon16.png new file mode 100644 index 00000000..15fc3505 Binary files /dev/null and b/src/quickcontrols2/designer/images/combobox-icon16.png differ diff --git a/src/quickcontrols2/designer/images/combobox-icon@2x.png b/src/quickcontrols2/designer/images/combobox-icon@2x.png new file mode 100644 index 00000000..5f823905 Binary files /dev/null and b/src/quickcontrols2/designer/images/combobox-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/delaybutton-icon.png b/src/quickcontrols2/designer/images/delaybutton-icon.png new file mode 100644 index 00000000..5a55bd9f Binary files /dev/null and b/src/quickcontrols2/designer/images/delaybutton-icon.png differ diff --git a/src/quickcontrols2/designer/images/delaybutton-icon16.png b/src/quickcontrols2/designer/images/delaybutton-icon16.png new file mode 100644 index 00000000..cd21394e Binary files /dev/null and b/src/quickcontrols2/designer/images/delaybutton-icon16.png differ diff --git a/src/quickcontrols2/designer/images/delaybutton-icon@2x.png b/src/quickcontrols2/designer/images/delaybutton-icon@2x.png new file mode 100644 index 00000000..7beee2fa Binary files /dev/null and b/src/quickcontrols2/designer/images/delaybutton-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/dial-icon.png b/src/quickcontrols2/designer/images/dial-icon.png new file mode 100644 index 00000000..b3b63e35 Binary files /dev/null and b/src/quickcontrols2/designer/images/dial-icon.png differ diff --git a/src/quickcontrols2/designer/images/dial-icon16.png b/src/quickcontrols2/designer/images/dial-icon16.png new file mode 100644 index 00000000..8d8c7c09 Binary files /dev/null and b/src/quickcontrols2/designer/images/dial-icon16.png differ diff --git a/src/quickcontrols2/designer/images/dial-icon@2x.png b/src/quickcontrols2/designer/images/dial-icon@2x.png new file mode 100644 index 00000000..22547a16 Binary files /dev/null and b/src/quickcontrols2/designer/images/dial-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/frame-icon.png b/src/quickcontrols2/designer/images/frame-icon.png new file mode 100644 index 00000000..32abc8bf Binary files /dev/null and b/src/quickcontrols2/designer/images/frame-icon.png differ diff --git a/src/quickcontrols2/designer/images/frame-icon16.png b/src/quickcontrols2/designer/images/frame-icon16.png new file mode 100644 index 00000000..e5b65ad5 Binary files /dev/null and b/src/quickcontrols2/designer/images/frame-icon16.png differ diff --git a/src/quickcontrols2/designer/images/frame-icon@2x.png b/src/quickcontrols2/designer/images/frame-icon@2x.png new file mode 100644 index 00000000..8b876f38 Binary files /dev/null and b/src/quickcontrols2/designer/images/frame-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/groupbox-icon.png b/src/quickcontrols2/designer/images/groupbox-icon.png new file mode 100644 index 00000000..5542ecf8 Binary files /dev/null and b/src/quickcontrols2/designer/images/groupbox-icon.png differ diff --git a/src/quickcontrols2/designer/images/groupbox-icon16.png b/src/quickcontrols2/designer/images/groupbox-icon16.png new file mode 100644 index 00000000..9cf43248 Binary files /dev/null and b/src/quickcontrols2/designer/images/groupbox-icon16.png differ diff --git a/src/quickcontrols2/designer/images/groupbox-icon@2x.png b/src/quickcontrols2/designer/images/groupbox-icon@2x.png new file mode 100644 index 00000000..80dab3c7 Binary files /dev/null and b/src/quickcontrols2/designer/images/groupbox-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/itemdelegate-icon.png b/src/quickcontrols2/designer/images/itemdelegate-icon.png new file mode 100644 index 00000000..822cf3e7 Binary files /dev/null and b/src/quickcontrols2/designer/images/itemdelegate-icon.png differ diff --git a/src/quickcontrols2/designer/images/itemdelegate-icon16.png b/src/quickcontrols2/designer/images/itemdelegate-icon16.png new file mode 100644 index 00000000..b3ed007a Binary files /dev/null and b/src/quickcontrols2/designer/images/itemdelegate-icon16.png differ diff --git a/src/quickcontrols2/designer/images/itemdelegate-icon@2x.png b/src/quickcontrols2/designer/images/itemdelegate-icon@2x.png new file mode 100644 index 00000000..cb81308f Binary files /dev/null and b/src/quickcontrols2/designer/images/itemdelegate-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/label-icon.png b/src/quickcontrols2/designer/images/label-icon.png new file mode 100644 index 00000000..788bef07 Binary files /dev/null and b/src/quickcontrols2/designer/images/label-icon.png differ diff --git a/src/quickcontrols2/designer/images/label-icon16.png b/src/quickcontrols2/designer/images/label-icon16.png new file mode 100644 index 00000000..b68d3845 Binary files /dev/null and b/src/quickcontrols2/designer/images/label-icon16.png differ diff --git a/src/quickcontrols2/designer/images/label-icon@2x.png b/src/quickcontrols2/designer/images/label-icon@2x.png new file mode 100644 index 00000000..7001413d Binary files /dev/null and b/src/quickcontrols2/designer/images/label-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/page-icon.png b/src/quickcontrols2/designer/images/page-icon.png new file mode 100644 index 00000000..b5ac87e8 Binary files /dev/null and b/src/quickcontrols2/designer/images/page-icon.png differ diff --git a/src/quickcontrols2/designer/images/page-icon16.png b/src/quickcontrols2/designer/images/page-icon16.png new file mode 100644 index 00000000..bc6810b6 Binary files /dev/null and b/src/quickcontrols2/designer/images/page-icon16.png differ diff --git a/src/quickcontrols2/designer/images/page-icon@2x.png b/src/quickcontrols2/designer/images/page-icon@2x.png new file mode 100644 index 00000000..23db032f Binary files /dev/null and b/src/quickcontrols2/designer/images/page-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/pageindicator-icon.png b/src/quickcontrols2/designer/images/pageindicator-icon.png new file mode 100644 index 00000000..edb6b377 Binary files /dev/null and b/src/quickcontrols2/designer/images/pageindicator-icon.png differ diff --git a/src/quickcontrols2/designer/images/pageindicator-icon16.png b/src/quickcontrols2/designer/images/pageindicator-icon16.png new file mode 100644 index 00000000..0fb89675 Binary files /dev/null and b/src/quickcontrols2/designer/images/pageindicator-icon16.png differ diff --git a/src/quickcontrols2/designer/images/pageindicator-icon@2x.png b/src/quickcontrols2/designer/images/pageindicator-icon@2x.png new file mode 100644 index 00000000..7be0ee81 Binary files /dev/null and b/src/quickcontrols2/designer/images/pageindicator-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/pane-icon.png b/src/quickcontrols2/designer/images/pane-icon.png new file mode 100644 index 00000000..62ebe487 Binary files /dev/null and b/src/quickcontrols2/designer/images/pane-icon.png differ diff --git a/src/quickcontrols2/designer/images/pane-icon16.png b/src/quickcontrols2/designer/images/pane-icon16.png new file mode 100644 index 00000000..2b804844 Binary files /dev/null and b/src/quickcontrols2/designer/images/pane-icon16.png differ diff --git a/src/quickcontrols2/designer/images/pane-icon@2x.png b/src/quickcontrols2/designer/images/pane-icon@2x.png new file mode 100644 index 00000000..55bb116a Binary files /dev/null and b/src/quickcontrols2/designer/images/pane-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/progressbar-icon.png b/src/quickcontrols2/designer/images/progressbar-icon.png new file mode 100644 index 00000000..a023f73c Binary files /dev/null and b/src/quickcontrols2/designer/images/progressbar-icon.png differ diff --git a/src/quickcontrols2/designer/images/progressbar-icon16.png b/src/quickcontrols2/designer/images/progressbar-icon16.png new file mode 100644 index 00000000..6fede21d Binary files /dev/null and b/src/quickcontrols2/designer/images/progressbar-icon16.png differ diff --git a/src/quickcontrols2/designer/images/progressbar-icon@2x.png b/src/quickcontrols2/designer/images/progressbar-icon@2x.png new file mode 100644 index 00000000..00694003 Binary files /dev/null and b/src/quickcontrols2/designer/images/progressbar-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/radiobutton-icon.png b/src/quickcontrols2/designer/images/radiobutton-icon.png new file mode 100644 index 00000000..d38170e2 Binary files /dev/null and b/src/quickcontrols2/designer/images/radiobutton-icon.png differ diff --git a/src/quickcontrols2/designer/images/radiobutton-icon16.png b/src/quickcontrols2/designer/images/radiobutton-icon16.png new file mode 100644 index 00000000..07b46a8a Binary files /dev/null and b/src/quickcontrols2/designer/images/radiobutton-icon16.png differ diff --git a/src/quickcontrols2/designer/images/radiobutton-icon@2x.png b/src/quickcontrols2/designer/images/radiobutton-icon@2x.png new file mode 100644 index 00000000..4bbddda4 Binary files /dev/null and b/src/quickcontrols2/designer/images/radiobutton-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/rangeslider-icon.png b/src/quickcontrols2/designer/images/rangeslider-icon.png new file mode 100644 index 00000000..1c4c7b29 Binary files /dev/null and b/src/quickcontrols2/designer/images/rangeslider-icon.png differ diff --git a/src/quickcontrols2/designer/images/rangeslider-icon16.png b/src/quickcontrols2/designer/images/rangeslider-icon16.png new file mode 100644 index 00000000..3be4624d Binary files /dev/null and b/src/quickcontrols2/designer/images/rangeslider-icon16.png differ diff --git a/src/quickcontrols2/designer/images/rangeslider-icon@2x.png b/src/quickcontrols2/designer/images/rangeslider-icon@2x.png new file mode 100644 index 00000000..aee69b33 Binary files /dev/null and b/src/quickcontrols2/designer/images/rangeslider-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/roundbutton-icon.png b/src/quickcontrols2/designer/images/roundbutton-icon.png new file mode 100644 index 00000000..d4b470dc Binary files /dev/null and b/src/quickcontrols2/designer/images/roundbutton-icon.png differ diff --git a/src/quickcontrols2/designer/images/roundbutton-icon16.png b/src/quickcontrols2/designer/images/roundbutton-icon16.png new file mode 100644 index 00000000..f6f36666 Binary files /dev/null and b/src/quickcontrols2/designer/images/roundbutton-icon16.png differ diff --git a/src/quickcontrols2/designer/images/roundbutton-icon@2x.png b/src/quickcontrols2/designer/images/roundbutton-icon@2x.png new file mode 100644 index 00000000..4553e165 Binary files /dev/null and b/src/quickcontrols2/designer/images/roundbutton-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/scrollview-icon.png b/src/quickcontrols2/designer/images/scrollview-icon.png new file mode 100644 index 00000000..5ef73ff1 Binary files /dev/null and b/src/quickcontrols2/designer/images/scrollview-icon.png differ diff --git a/src/quickcontrols2/designer/images/scrollview-icon16.png b/src/quickcontrols2/designer/images/scrollview-icon16.png new file mode 100644 index 00000000..f8ca7a36 Binary files /dev/null and b/src/quickcontrols2/designer/images/scrollview-icon16.png differ diff --git a/src/quickcontrols2/designer/images/scrollview-icon@2x.png b/src/quickcontrols2/designer/images/scrollview-icon@2x.png new file mode 100644 index 00000000..0eb7f966 Binary files /dev/null and b/src/quickcontrols2/designer/images/scrollview-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/slider-icon.png b/src/quickcontrols2/designer/images/slider-icon.png new file mode 100644 index 00000000..bd0a9729 Binary files /dev/null and b/src/quickcontrols2/designer/images/slider-icon.png differ diff --git a/src/quickcontrols2/designer/images/slider-icon16.png b/src/quickcontrols2/designer/images/slider-icon16.png new file mode 100644 index 00000000..a08622df Binary files /dev/null and b/src/quickcontrols2/designer/images/slider-icon16.png differ diff --git a/src/quickcontrols2/designer/images/slider-icon@2x.png b/src/quickcontrols2/designer/images/slider-icon@2x.png new file mode 100644 index 00000000..93842e4c Binary files /dev/null and b/src/quickcontrols2/designer/images/slider-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/spinbox-icon.png b/src/quickcontrols2/designer/images/spinbox-icon.png new file mode 100644 index 00000000..37277c5e Binary files /dev/null and b/src/quickcontrols2/designer/images/spinbox-icon.png differ diff --git a/src/quickcontrols2/designer/images/spinbox-icon16.png b/src/quickcontrols2/designer/images/spinbox-icon16.png new file mode 100644 index 00000000..f88711dd Binary files /dev/null and b/src/quickcontrols2/designer/images/spinbox-icon16.png differ diff --git a/src/quickcontrols2/designer/images/spinbox-icon@2x.png b/src/quickcontrols2/designer/images/spinbox-icon@2x.png new file mode 100644 index 00000000..b62a3bad Binary files /dev/null and b/src/quickcontrols2/designer/images/spinbox-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/stackview-icon.png b/src/quickcontrols2/designer/images/stackview-icon.png new file mode 100644 index 00000000..a6ced349 Binary files /dev/null and b/src/quickcontrols2/designer/images/stackview-icon.png differ diff --git a/src/quickcontrols2/designer/images/stackview-icon16.png b/src/quickcontrols2/designer/images/stackview-icon16.png new file mode 100644 index 00000000..0f19d0ef Binary files /dev/null and b/src/quickcontrols2/designer/images/stackview-icon16.png differ diff --git a/src/quickcontrols2/designer/images/stackview-icon@2x.png b/src/quickcontrols2/designer/images/stackview-icon@2x.png new file mode 100644 index 00000000..9b5ef951 Binary files /dev/null and b/src/quickcontrols2/designer/images/stackview-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/swipeview-icon.png b/src/quickcontrols2/designer/images/swipeview-icon.png new file mode 100644 index 00000000..031cb27c Binary files /dev/null and b/src/quickcontrols2/designer/images/swipeview-icon.png differ diff --git a/src/quickcontrols2/designer/images/swipeview-icon16.png b/src/quickcontrols2/designer/images/swipeview-icon16.png new file mode 100644 index 00000000..446c4696 Binary files /dev/null and b/src/quickcontrols2/designer/images/swipeview-icon16.png differ diff --git a/src/quickcontrols2/designer/images/swipeview-icon@2x.png b/src/quickcontrols2/designer/images/swipeview-icon@2x.png new file mode 100644 index 00000000..0ccb978c Binary files /dev/null and b/src/quickcontrols2/designer/images/swipeview-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/switch-icon.png b/src/quickcontrols2/designer/images/switch-icon.png new file mode 100644 index 00000000..e0181592 Binary files /dev/null and b/src/quickcontrols2/designer/images/switch-icon.png differ diff --git a/src/quickcontrols2/designer/images/switch-icon16.png b/src/quickcontrols2/designer/images/switch-icon16.png new file mode 100644 index 00000000..9abd2756 Binary files /dev/null and b/src/quickcontrols2/designer/images/switch-icon16.png differ diff --git a/src/quickcontrols2/designer/images/switch-icon@2x.png b/src/quickcontrols2/designer/images/switch-icon@2x.png new file mode 100644 index 00000000..787f54ca Binary files /dev/null and b/src/quickcontrols2/designer/images/switch-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/textarea-icon.png b/src/quickcontrols2/designer/images/textarea-icon.png new file mode 100644 index 00000000..f1b2dc0f Binary files /dev/null and b/src/quickcontrols2/designer/images/textarea-icon.png differ diff --git a/src/quickcontrols2/designer/images/textarea-icon16.png b/src/quickcontrols2/designer/images/textarea-icon16.png new file mode 100644 index 00000000..4afc1fba Binary files /dev/null and b/src/quickcontrols2/designer/images/textarea-icon16.png differ diff --git a/src/quickcontrols2/designer/images/textarea-icon@2x.png b/src/quickcontrols2/designer/images/textarea-icon@2x.png new file mode 100644 index 00000000..c32ecc71 Binary files /dev/null and b/src/quickcontrols2/designer/images/textarea-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/textfield-icon.png b/src/quickcontrols2/designer/images/textfield-icon.png new file mode 100644 index 00000000..ba5537ac Binary files /dev/null and b/src/quickcontrols2/designer/images/textfield-icon.png differ diff --git a/src/quickcontrols2/designer/images/textfield-icon16.png b/src/quickcontrols2/designer/images/textfield-icon16.png new file mode 100644 index 00000000..c4a62a65 Binary files /dev/null and b/src/quickcontrols2/designer/images/textfield-icon16.png differ diff --git a/src/quickcontrols2/designer/images/textfield-icon@2x.png b/src/quickcontrols2/designer/images/textfield-icon@2x.png new file mode 100644 index 00000000..e05fd41b Binary files /dev/null and b/src/quickcontrols2/designer/images/textfield-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/toolbar-icon.png b/src/quickcontrols2/designer/images/toolbar-icon.png new file mode 100644 index 00000000..5cb5b2e1 Binary files /dev/null and b/src/quickcontrols2/designer/images/toolbar-icon.png differ diff --git a/src/quickcontrols2/designer/images/toolbar-icon16.png b/src/quickcontrols2/designer/images/toolbar-icon16.png new file mode 100644 index 00000000..569373af Binary files /dev/null and b/src/quickcontrols2/designer/images/toolbar-icon16.png differ diff --git a/src/quickcontrols2/designer/images/toolbar-icon@2x.png b/src/quickcontrols2/designer/images/toolbar-icon@2x.png new file mode 100644 index 00000000..fd9e6cee Binary files /dev/null and b/src/quickcontrols2/designer/images/toolbar-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/toolbutton-icon.png b/src/quickcontrols2/designer/images/toolbutton-icon.png new file mode 100644 index 00000000..3298f695 Binary files /dev/null and b/src/quickcontrols2/designer/images/toolbutton-icon.png differ diff --git a/src/quickcontrols2/designer/images/toolbutton-icon16.png b/src/quickcontrols2/designer/images/toolbutton-icon16.png new file mode 100644 index 00000000..9ab7861c Binary files /dev/null and b/src/quickcontrols2/designer/images/toolbutton-icon16.png differ diff --git a/src/quickcontrols2/designer/images/toolbutton-icon@2x.png b/src/quickcontrols2/designer/images/toolbutton-icon@2x.png new file mode 100644 index 00000000..e5958cde Binary files /dev/null and b/src/quickcontrols2/designer/images/toolbutton-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/toolseparator-icon.png b/src/quickcontrols2/designer/images/toolseparator-icon.png new file mode 100644 index 00000000..5e99f06f Binary files /dev/null and b/src/quickcontrols2/designer/images/toolseparator-icon.png differ diff --git a/src/quickcontrols2/designer/images/toolseparator-icon16.png b/src/quickcontrols2/designer/images/toolseparator-icon16.png new file mode 100644 index 00000000..68f22c5d Binary files /dev/null and b/src/quickcontrols2/designer/images/toolseparator-icon16.png differ diff --git a/src/quickcontrols2/designer/images/toolseparator-icon@2x.png b/src/quickcontrols2/designer/images/toolseparator-icon@2x.png new file mode 100644 index 00000000..549c11c6 Binary files /dev/null and b/src/quickcontrols2/designer/images/toolseparator-icon@2x.png differ diff --git a/src/quickcontrols2/designer/images/tumbler-icon.png b/src/quickcontrols2/designer/images/tumbler-icon.png new file mode 100644 index 00000000..98eb8232 Binary files /dev/null and b/src/quickcontrols2/designer/images/tumbler-icon.png differ diff --git a/src/quickcontrols2/designer/images/tumbler-icon16.png b/src/quickcontrols2/designer/images/tumbler-icon16.png new file mode 100644 index 00000000..ff5f95cf Binary files /dev/null and b/src/quickcontrols2/designer/images/tumbler-icon16.png differ diff --git a/src/quickcontrols2/designer/images/tumbler-icon@2x.png b/src/quickcontrols2/designer/images/tumbler-icon@2x.png new file mode 100644 index 00000000..236abf0c Binary files /dev/null and b/src/quickcontrols2/designer/images/tumbler-icon@2x.png differ diff --git a/src/quickcontrols2/designer/qtquickcontrols2.metainfo b/src/quickcontrols2/designer/qtquickcontrols2.metainfo new file mode 100644 index 00000000..d27f1b90 --- /dev/null +++ b/src/quickcontrols2/designer/qtquickcontrols2.metainfo @@ -0,0 +1,522 @@ +MetaInfo { + Type { + name: "QtQuick.Controls.BusyIndicator" + icon: "images/busyindicator-icon16.png" + + ItemLibraryEntry { + name: "Busy Indicator" + category: "Qt Quick - Controls 2" + libraryIcon: "images/busyindicator-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + } + } + + Type { + name: "QtQuick.Controls.Button" + icon: "images/button-icon16.png" + + ItemLibraryEntry { + name: "Button" + category: "Qt Quick - Controls 2" + libraryIcon: "images/button-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Button\")" } + } + } + + Type { + name: "QtQuick.Controls.CheckBox" + icon: "images/checkbox-icon16.png" + + ItemLibraryEntry { + name: "Check Box" + category: "Qt Quick - Controls 2" + libraryIcon: "images/checkbox-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Check Box\")" } + } + } + + Type { + name: "QtQuick.Controls.CheckDelegate" + icon: "images/checkbox-icon16.png" + + ItemLibraryEntry { + name: "Check Delegate" + category: "Qt Quick - Controls 2" + libraryIcon: "images/checkbox-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Check Delegate\")" } + } + } + + Type { + name: "QtQuick.Controls.ComboBox" + icon: "images/combobox-icon16.png" + + ItemLibraryEntry { + name: "Combo Box" + category: "Qt Quick - Controls 2" + libraryIcon: "images/combobox-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + } + } + + Type { + name: "QtQuick.Controls.DelayButton" + icon: "images/button-icon16.png" + + ItemLibraryEntry { + name: "Delay Button" + category: "Qt Quick - Controls 2" + libraryIcon: "images/delaybutton-icon.png" + version: "2.2" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Delay Button\")" } + } + } + + Type { + name: "QtQuick.Controls.Dial" + icon: "images/dial-icon16.png" + + ItemLibraryEntry { + name: "Dial" + category: "Qt Quick - Controls 2" + libraryIcon: "images/dial-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + } + } + + Type { + name: "QtQuick.Controls.Frame" + icon: "images/frame-icon16.png" + + ItemLibraryEntry { + name: "Frame" + category: "Qt Quick - Controls 2" + libraryIcon: "images/frame-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "width"; type: "int"; value: 200 } + Property { name: "height"; type: "int"; value: 200 } + } + } + + Type { + name: "QtQuick.Controls.GroupBox" + icon: "images/groupbox-icon16.png" + + ItemLibraryEntry { + name: "Group Box" + category: "Qt Quick - Controls 2" + libraryIcon: "images/groupbox-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "width"; type: "int"; value: 200 } + Property { name: "height"; type: "int"; value: 200 } + Property { name: "title"; type: "binding"; value: "qsTr(\"Group Box\")" } + } + } + + Type { + name: "QtQuick.Controls.ItemDelegate" + icon: "images/itemdelegate-icon16.png" + + ItemLibraryEntry { + name: "Item Delegate" + category: "Qt Quick - Controls 2" + libraryIcon: "images/itemdelegate-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Item Delegate\")" } + } + } + + Type { + name: "QtQuick.Controls.Label" + icon: "images/label-icon16.png" + + ItemLibraryEntry { + name: "Label" + category: "Qt Quick - Controls 2" + libraryIcon: "images/label-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Label\")" } + } + } + + Type { + name: "QtQuick.Controls.Page" + icon: "images/page-icon16.png" + + ItemLibraryEntry { + name: "Page" + category: "Qt Quick - Controls 2" + libraryIcon: "images/page-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "width"; type: "int"; value: 200 } + Property { name: "height"; type: "int"; value: 200 } + } + } + + Type { + name: "QtQuick.Controls.PageIndicator" + icon: "images/pageindicator-icon16.png" + + ItemLibraryEntry { + name: "Page Indicator" + category: "Qt Quick - Controls 2" + libraryIcon: "images/pageindicator-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "count"; type: "int"; value: 3 } + } + } + + Type { + name: "QtQuick.Controls.Pane" + icon: "images/pane-icon16.png" + + ItemLibraryEntry { + name: "Pane" + category: "Qt Quick - Controls 2" + libraryIcon: "images/pane-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "width"; type: "int"; value: 200 } + Property { name: "height"; type: "int"; value: 200 } + } + } + + Type { + name: "QtQuick.Controls.ProgressBar" + icon: "images/progressbar-icon16.png" + + ItemLibraryEntry { + name: "Progress Bar" + category: "Qt Quick - Controls 2" + libraryIcon: "images/progressbar-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "value"; type: "real"; value: 0.5 } + } + } + + Type { + name: "QtQuick.Controls.RadioButton" + icon: "images/radiobutton-icon16.png" + + ItemLibraryEntry { + name: "Radio Button" + category: "Qt Quick - Controls 2" + libraryIcon: "images/radiobutton-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Radio Button\")" } + } + } + + Type { + name: "QtQuick.Controls.RadioDelegate" + icon: "images/radiobutton-icon16.png" + + ItemLibraryEntry { + name: "Radio Delegate" + category: "Qt Quick - Controls 2" + libraryIcon: "images/radiobutton-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Radio Delegate\")" } + } + } + + Type { + name: "QtQuick.Controls.RangeSlider" + icon: "images/rangeslider-icon16.png" + + ItemLibraryEntry { + name: "Range Slider" + category: "Qt Quick - Controls 2" + libraryIcon: "images/rangeslider-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "first.value"; type: "real"; value: 0.25 } + Property { name: "second.value"; type: "real"; value: 0.75 } + } + } + + Type { + name: "QtQuick.Controls.RoundButton" + icon: "images/roundbutton-icon16.png" + + ItemLibraryEntry { + name: "Round Button" + category: "Qt Quick - Controls 2" + libraryIcon: "images/roundbutton-icon.png" + version: "2.1" + requiredImport: "QtQuick.Controls" + Property { name: "text"; type: "string"; value: "+" } + } + } + + Type { + name: "QtQuick.Controls.Slider" + icon: "images/slider-icon16.png" + + ItemLibraryEntry { + name: "Slider" + category: "Qt Quick - Controls 2" + libraryIcon: "images/slider-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "value"; type: "real"; value: 0.5 } + } + } + + Type { + name: "QtQuick.Controls.SpinBox" + icon: "images/spinbox-icon16.png" + + ItemLibraryEntry { + name: "Spin Box" + category: "Qt Quick - Controls 2" + libraryIcon: "images/spinbox-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + } + } + + Type { + name: "QtQuick.Controls.ScrollView" + icon: "images/scrollview-icon16.png" + + ItemLibraryEntry { + name: "Scroll View" + category: "Qt Quick - Controls 2" + libraryIcon: "images/scrollview-icon.png" + version: "2.2" + requiredImport: "QtQuick.Controls" + + Property { name: "width"; type: "int"; value: 200 } + Property { name: "height"; type: "int"; value: 200 } + } + } + + Type { + name: "QtQuick.Controls.StackView" + icon: "images/stackview-icon16.png" + + ItemLibraryEntry { + name: "Stack View" + category: "Qt Quick - Controls 2" + libraryIcon: "images/stackview-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "width"; type: "int"; value: 200 } + Property { name: "height"; type: "int"; value: 200 } + } + } + + Type { + name: "QtQuick.Controls.SwipeDelegate" + icon: "images/itemdelegate-icon16.png" + + ItemLibraryEntry { + name: "Swipe Delegate" + category: "Qt Quick - Controls 2" + libraryIcon: "images/itemdelegate-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Swipe Delegate\")" } + } + } + + Type { + name: "QtQuick.Controls.SwipeView" + icon: "images/swipeview-icon16.png" + + ItemLibraryEntry { + name: "Swipe View" + category: "Qt Quick - Controls 2" + libraryIcon: "images/swipeview-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "width"; type: "int"; value: 200 } + Property { name: "height"; type: "int"; value: 200 } + } + } + + Type { + name: "QtQuick.Controls.Switch" + icon: "images/switch-icon16.png" + + ItemLibraryEntry { + name: "Switch" + category: "Qt Quick - Controls 2" + libraryIcon: "images/switch-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Switch\")" } + } + } + + Type { + name: "QtQuick.Controls.SwitchDelegate" + icon: "images/switch-icon16.png" + + ItemLibraryEntry { + name: "Switch Delegate" + category: "Qt Quick - Controls 2" + libraryIcon: "images/switch-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Switch Delegate\")" } + } + } + + Type { + name: "QtQuick.Controls.TabBar" + icon: "images/toolbar-icon16.png" + + ItemLibraryEntry { + name: "Tab Bar" + category: "Qt Quick - Controls 2" + libraryIcon: "images/toolbar-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + Property { name: "width"; type: "int"; value: 240 } + } + } + + Type { + name: "QtQuick.Controls.TabButton" + icon: "images/toolbutton-icon16.png" + + ItemLibraryEntry { + name: "Tab Button" + category: "Qt Quick - Controls 2" + libraryIcon: "images/toolbutton-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + Property { name: "text"; type: "binding"; value: "qsTr(\"Tab Button\")" } + } + } + + Type { + name: "QtQuick.Controls.TextArea" + icon: "images/textarea-icon16.png" + + ItemLibraryEntry { + name: "Text Area" + category: "Qt Quick - Controls 2" + libraryIcon: "images/textarea-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "placeholderText"; type: "binding"; value: "qsTr(\"Text Area\")" } + } + } + + Type { + name: "QtQuick.Controls.TextField" + icon: "images/textfield-icon16.png" + + ItemLibraryEntry { + name: "Text Field" + category: "Qt Quick - Controls 2" + libraryIcon: "images/textfield-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "placeholderText"; type: "binding"; value: "qsTr(\"Text Field\")" } + } + } + + Type { + name: "QtQuick.Controls.ToolBar" + icon: "images/toolbar-icon16.png" + + ItemLibraryEntry { + name: "Tool Bar" + category: "Qt Quick - Controls 2" + libraryIcon: "images/toolbar-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "width"; type: "int"; value: 360 } + } + } + + Type { + name: "QtQuick.Controls.ToolButton" + icon: "images/toolbutton-icon16.png" + + ItemLibraryEntry { + name: "Tool Button" + category: "Qt Quick - Controls 2" + libraryIcon: "images/toolbutton-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "text"; type: "binding"; value: "qsTr(\"Tool Button\")" } + } + } + + Type { + name: "QtQuick.Controls.ToolSeparator" + icon: "images/toolseparator-icon16.png" + + ItemLibraryEntry { + name: "Tool Separator" + category: "Qt Quick - Controls 2" + libraryIcon: "images/toolseparator-icon.png" + version: "2.1" + requiredImport: "QtQuick.Controls" + } + } + + Type { + name: "QtQuick.Controls.Tumbler" + icon: "images/tumbler-icon16.png" + + ItemLibraryEntry { + name: "Tumbler" + category: "Qt Quick - Controls 2" + libraryIcon: "images/tumbler-icon.png" + version: "2.0" + requiredImport: "QtQuick.Controls" + + Property { name: "model"; type: "int"; value: "10" } + } + } +} diff --git a/src/quickcontrols2/doc/doc.pri b/src/quickcontrols2/doc/doc.pri new file mode 100644 index 00000000..4bd8bd95 --- /dev/null +++ b/src/quickcontrols2/doc/doc.pri @@ -0,0 +1,6 @@ +QMAKE_DOCS = $$PWD/qtquickcontrols.qdocconf + +OTHER_FILES += \ + $$files($$PWD/snippets/*.qml) \ + $$files($$PWD/src/*.qdoc) \ + $$files($$PWD/src/templates/*.qdoc) diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-applicationwindow-wireframe.png b/src/quickcontrols2/doc/images/qtquickcontrols2-applicationwindow-wireframe.png new file mode 100644 index 00000000..f3137800 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-applicationwindow-wireframe.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-basic-thumbnail.png b/src/quickcontrols2/doc/images/qtquickcontrols2-basic-thumbnail.png new file mode 100644 index 00000000..e971a7aa Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-basic-thumbnail.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-basic.png b/src/quickcontrols2/doc/images/qtquickcontrols2-basic.png new file mode 100644 index 00000000..099db170 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-basic.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-busyindicator-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-busyindicator-custom.png new file mode 100644 index 00000000..fefae223 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-busyindicator-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-busyindicator.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-busyindicator.gif new file mode 100644 index 00000000..653d200f Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-busyindicator.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-busyindicator.png b/src/quickcontrols2/doc/images/qtquickcontrols2-busyindicator.png new file mode 100644 index 00000000..4be09579 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-busyindicator.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-button-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-button-custom.png new file mode 100644 index 00000000..46d3e3eb Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-button-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-button-flat.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-button-flat.gif new file mode 100644 index 00000000..e2bd8b6f Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-button-flat.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-button-highlighted.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-button-highlighted.gif new file mode 100644 index 00000000..7de076d3 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-button-highlighted.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-button-icononly.png b/src/quickcontrols2/doc/images/qtquickcontrols2-button-icononly.png new file mode 100644 index 00000000..9c8dd0f4 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-button-icononly.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-button-textbesideicon.png b/src/quickcontrols2/doc/images/qtquickcontrols2-button-textbesideicon.png new file mode 100644 index 00000000..3dc64fb9 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-button-textbesideicon.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-button-textonly.png b/src/quickcontrols2/doc/images/qtquickcontrols2-button-textonly.png new file mode 100644 index 00000000..737beb16 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-button-textonly.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-button-textundericon.png b/src/quickcontrols2/doc/images/qtquickcontrols2-button-textundericon.png new file mode 100644 index 00000000..37c40c7c Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-button-textundericon.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-button.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-button.gif new file mode 100644 index 00000000..10d626a3 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-button.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-checkbox-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-checkbox-custom.png new file mode 100644 index 00000000..c6c3d1bc Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-checkbox-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-checkbox-group.png b/src/quickcontrols2/doc/images/qtquickcontrols2-checkbox-group.png new file mode 100644 index 00000000..d5a0d51b Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-checkbox-group.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-checkbox-tristate.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-checkbox-tristate.gif new file mode 100644 index 00000000..56a15867 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-checkbox-tristate.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-checkbox.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-checkbox.gif new file mode 100644 index 00000000..d70c0ee4 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-checkbox.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-checkdelegate-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-checkdelegate-custom.png new file mode 100644 index 00000000..c0dd0689 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-checkdelegate-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-checkdelegate-tristate.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-checkdelegate-tristate.gif new file mode 100644 index 00000000..8d058d6c Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-checkdelegate-tristate.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-checkdelegate.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-checkdelegate.gif new file mode 100644 index 00000000..da3fab98 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-checkdelegate.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-combobox-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-combobox-custom.png new file mode 100644 index 00000000..4f7206dc Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-combobox-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-combobox-delegate.png b/src/quickcontrols2/doc/images/qtquickcontrols2-combobox-delegate.png new file mode 100644 index 00000000..cf310648 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-combobox-delegate.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-combobox-popup.png b/src/quickcontrols2/doc/images/qtquickcontrols2-combobox-popup.png new file mode 100644 index 00000000..cf310648 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-combobox-popup.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-combobox.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-combobox.gif new file mode 100644 index 00000000..966a2d4a Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-combobox.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-control.png b/src/quickcontrols2/doc/images/qtquickcontrols2-control.png new file mode 100644 index 00000000..0f004a89 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-control.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-control.svg b/src/quickcontrols2/doc/images/qtquickcontrols2-control.svg new file mode 100644 index 00000000..4b2057d1 --- /dev/null +++ b/src/quickcontrols2/doc/images/qtquickcontrols2-control.svg @@ -0,0 +1,936 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Background  + Content item Width + + Height Popup Bottompadding Toppadding Right padding Left padding + + Top inset Left inset + + Bottom inset + Right inset + + + + Window + + Topmargin Rightmargin + Bottommargin + Leftmargin + diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-customize-buttons.png b/src/quickcontrols2/doc/images/qtquickcontrols2-customize-buttons.png new file mode 100644 index 00000000..551e8a0c Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-customize-buttons.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-delaybutton-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-delaybutton-custom.png new file mode 100644 index 00000000..a7bd7c19 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-delaybutton-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-delaybutton.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-delaybutton.gif new file mode 100644 index 00000000..16a198f9 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-delaybutton.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-dial-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-dial-custom.png new file mode 100644 index 00000000..6312c999 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-dial-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-dial-handle.png b/src/quickcontrols2/doc/images/qtquickcontrols2-dial-handle.png new file mode 100644 index 00000000..9e22b2e7 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-dial-handle.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-dial-inputMode.svgz b/src/quickcontrols2/doc/images/qtquickcontrols2-dial-inputMode.svgz new file mode 100644 index 00000000..005ab7b3 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-dial-inputMode.svgz differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-dial-inputmode.png b/src/quickcontrols2/doc/images/qtquickcontrols2-dial-inputmode.png new file mode 100644 index 00000000..5bbc41a4 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-dial-inputmode.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-dial-no-wrap.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-dial-no-wrap.gif new file mode 100644 index 00000000..24f6790b Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-dial-no-wrap.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-dial-wrap.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-dial-wrap.gif new file mode 100644 index 00000000..cfb1fb5b Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-dial-wrap.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-dial.png b/src/quickcontrols2/doc/images/qtquickcontrols2-dial.png new file mode 100644 index 00000000..71c54113 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-dial.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-dialogbuttonbox-attached.png b/src/quickcontrols2/doc/images/qtquickcontrols2-dialogbuttonbox-attached.png new file mode 100644 index 00000000..c17f38ac Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-dialogbuttonbox-attached.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-dialogbuttonbox.png b/src/quickcontrols2/doc/images/qtquickcontrols2-dialogbuttonbox.png new file mode 100644 index 00000000..33b5f45f Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-dialogbuttonbox.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-drawer-expanded-wireframe.png b/src/quickcontrols2/doc/images/qtquickcontrols2-drawer-expanded-wireframe.png new file mode 100644 index 00000000..0c92f865 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-drawer-expanded-wireframe.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-drawer-wireframe.png b/src/quickcontrols2/doc/images/qtquickcontrols2-drawer-wireframe.png new file mode 100644 index 00000000..74806f17 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-drawer-wireframe.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-drawer.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-drawer.gif new file mode 100644 index 00000000..736f34f6 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-drawer.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-frame-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-frame-custom.png new file mode 100644 index 00000000..f628b20c Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-frame-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-frame.png b/src/quickcontrols2/doc/images/qtquickcontrols2-frame.png new file mode 100644 index 00000000..e3cb31dc Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-frame.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-fusion-palettes.png b/src/quickcontrols2/doc/images/qtquickcontrols2-fusion-palettes.png new file mode 100644 index 00000000..d8061161 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-fusion-palettes.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-fusion-thumbnail.png b/src/quickcontrols2/doc/images/qtquickcontrols2-fusion-thumbnail.png new file mode 100644 index 00000000..c270c6ef Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-fusion-thumbnail.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-fusion-violet.png b/src/quickcontrols2/doc/images/qtquickcontrols2-fusion-violet.png new file mode 100644 index 00000000..99e5b597 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-fusion-violet.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-fusion.png b/src/quickcontrols2/doc/images/qtquickcontrols2-fusion.png new file mode 100644 index 00000000..7119ef22 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-fusion.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-groupbox-checkable.png b/src/quickcontrols2/doc/images/qtquickcontrols2-groupbox-checkable.png new file mode 100644 index 00000000..820ad79c Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-groupbox-checkable.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-groupbox-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-groupbox-custom.png new file mode 100644 index 00000000..029679ce Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-groupbox-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-groupbox-label.png b/src/quickcontrols2/doc/images/qtquickcontrols2-groupbox-label.png new file mode 100644 index 00000000..c26795a7 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-groupbox-label.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-groupbox.png b/src/quickcontrols2/doc/images/qtquickcontrols2-groupbox.png new file mode 100644 index 00000000..ea2f9ea5 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-groupbox.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-4x.png b/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-4x.png new file mode 100644 index 00000000..bab99a5e Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-4x.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-inset-boundaries.png b/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-inset-boundaries.png new file mode 100644 index 00000000..c42df81e Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-inset-boundaries.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-inset.png b/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-inset.png new file mode 100644 index 00000000..0627d085 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-inset.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-resized-padding.png b/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-resized-padding.png new file mode 100644 index 00000000..0a606c99 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-resized-padding.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-resized-stretchable.png b/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-resized-stretchable.png new file mode 100644 index 00000000..9598b13a Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-resized-stretchable.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-size.png b/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-size.png new file mode 100644 index 00000000..db645375 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch-size.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch.svgz b/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch.svgz new file mode 100644 index 00000000..5a1a1094 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-9-patch.svgz differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-customization-dark.png b/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-customization-dark.png new file mode 100644 index 00000000..144ac97c Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-customization-dark.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-customization.svgz b/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-customization.svgz new file mode 100644 index 00000000..fb830563 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-customization.svgz differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-thumbnail.png b/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-thumbnail.png new file mode 100644 index 00000000..ecf2bb16 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-imagine-thumbnail.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-imagine.png b/src/quickcontrols2/doc/images/qtquickcontrols2-imagine.png new file mode 100644 index 00000000..ffe2c267 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-imagine.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-itemdelegate-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-itemdelegate-custom.png new file mode 100644 index 00000000..35f8892f Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-itemdelegate-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-itemdelegate.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-itemdelegate.gif new file mode 100644 index 00000000..dccb6efc Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-itemdelegate.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-itemdelegate.png b/src/quickcontrols2/doc/images/qtquickcontrols2-itemdelegate.png new file mode 100644 index 00000000..7242f343 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-itemdelegate.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-label-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-label-custom.png new file mode 100644 index 00000000..5730ff23 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-label-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-label.png b/src/quickcontrols2/doc/images/qtquickcontrols2-label.png new file mode 100644 index 00000000..0bafcf86 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-label.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-macos-dark.png b/src/quickcontrols2/doc/images/qtquickcontrols2-macos-dark.png new file mode 100644 index 00000000..97d8a5a4 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-macos-dark.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-macos-light.png b/src/quickcontrols2/doc/images/qtquickcontrols2-macos-light.png new file mode 100644 index 00000000..4a598ad4 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-macos-light.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-macos-thumbnail.png b/src/quickcontrols2/doc/images/qtquickcontrols2-macos-thumbnail.png new file mode 100644 index 00000000..57fd98d6 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-macos-thumbnail.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-material-accent.png b/src/quickcontrols2/doc/images/qtquickcontrols2-material-accent.png new file mode 100644 index 00000000..a85afc68 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-material-accent.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-material-attributes.png b/src/quickcontrols2/doc/images/qtquickcontrols2-material-attributes.png new file mode 100644 index 00000000..bb54071d Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-material-attributes.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-material-background.png b/src/quickcontrols2/doc/images/qtquickcontrols2-material-background.png new file mode 100644 index 00000000..62028f52 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-material-background.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-material-dark.png b/src/quickcontrols2/doc/images/qtquickcontrols2-material-dark.png new file mode 100644 index 00000000..f6e45b3b Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-material-dark.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-material-elevation.png b/src/quickcontrols2/doc/images/qtquickcontrols2-material-elevation.png new file mode 100644 index 00000000..d152f145 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-material-elevation.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-material-foreground.png b/src/quickcontrols2/doc/images/qtquickcontrols2-material-foreground.png new file mode 100644 index 00000000..0d0e1b65 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-material-foreground.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-material-light.png b/src/quickcontrols2/doc/images/qtquickcontrols2-material-light.png new file mode 100644 index 00000000..c9abe2cb Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-material-light.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-material-purple.png b/src/quickcontrols2/doc/images/qtquickcontrols2-material-purple.png new file mode 100644 index 00000000..b955736b Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-material-purple.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-material-theme.png b/src/quickcontrols2/doc/images/qtquickcontrols2-material-theme.png new file mode 100644 index 00000000..1d09a825 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-material-theme.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-material-thumbnail.png b/src/quickcontrols2/doc/images/qtquickcontrols2-material-thumbnail.png new file mode 100644 index 00000000..d758ff18 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-material-thumbnail.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-material-variant-dense.png b/src/quickcontrols2/doc/images/qtquickcontrols2-material-variant-dense.png new file mode 100644 index 00000000..02f39b78 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-material-variant-dense.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-material-variant-normal.png b/src/quickcontrols2/doc/images/qtquickcontrols2-material-variant-normal.png new file mode 100644 index 00000000..c1e366c5 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-material-variant-normal.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-menu-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-menu-custom.png new file mode 100644 index 00000000..922bf591 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-menu-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-menu.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-menu.gif new file mode 100644 index 00000000..93a873a3 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-menu.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-menu.png b/src/quickcontrols2/doc/images/qtquickcontrols2-menu.png new file mode 100644 index 00000000..926c33ee Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-menu.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-menubar-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-menubar-custom.png new file mode 100644 index 00000000..b6007e46 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-menubar-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-menubar.png b/src/quickcontrols2/doc/images/qtquickcontrols2-menubar.png new file mode 100644 index 00000000..873b7a19 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-menubar.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-menuseparator-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-menuseparator-custom.png new file mode 100644 index 00000000..78635b9c Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-menuseparator-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-menuseparator.png b/src/quickcontrols2/doc/images/qtquickcontrols2-menuseparator.png new file mode 100644 index 00000000..35307817 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-menuseparator.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-page-wireframe.png b/src/quickcontrols2/doc/images/qtquickcontrols2-page-wireframe.png new file mode 100644 index 00000000..f612c243 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-page-wireframe.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-pageindicator-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-pageindicator-custom.png new file mode 100644 index 00000000..a767a51a Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-pageindicator-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-pageindicator-delegate.png b/src/quickcontrols2/doc/images/qtquickcontrols2-pageindicator-delegate.png new file mode 100644 index 00000000..95acde70 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-pageindicator-delegate.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-pageindicator.png b/src/quickcontrols2/doc/images/qtquickcontrols2-pageindicator.png new file mode 100644 index 00000000..e2a0a157 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-pageindicator.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-pane-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-pane-custom.png new file mode 100644 index 00000000..03a0369f Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-pane-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-pane.png b/src/quickcontrols2/doc/images/qtquickcontrols2-pane.png new file mode 100644 index 00000000..3801cc3e Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-pane.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-popup-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-popup-custom.png new file mode 100644 index 00000000..cb7813d3 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-popup-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-popup-settings.png b/src/quickcontrols2/doc/images/qtquickcontrols2-popup-settings.png new file mode 100644 index 00000000..5122158e Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-popup-settings.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-popup-transformorigin.png b/src/quickcontrols2/doc/images/qtquickcontrols2-popup-transformorigin.png new file mode 100644 index 00000000..16d26177 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-popup-transformorigin.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-popup.png b/src/quickcontrols2/doc/images/qtquickcontrols2-popup.png new file mode 100644 index 00000000..8fc424a8 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-popup.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-popup.svg b/src/quickcontrols2/doc/images/qtquickcontrols2-popup.svg new file mode 100644 index 00000000..e39f3dce --- /dev/null +++ b/src/quickcontrols2/doc/images/qtquickcontrols2-popup.svg @@ -0,0 +1,712 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + Background  + Content item Width + + Height Control Bottompadding Toppadding Right padding Left padding + + Top inset Left inset + + Bottom inset + Right inset + + + + diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-progressbar-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-progressbar-custom.png new file mode 100644 index 00000000..9d73df2c Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-progressbar-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-progressbar-indeterminate.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-progressbar-indeterminate.gif new file mode 100644 index 00000000..d6756d16 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-progressbar-indeterminate.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-progressbar.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-progressbar.gif new file mode 100644 index 00000000..49af5f45 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-progressbar.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-radiobutton-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-radiobutton-custom.png new file mode 100644 index 00000000..5c85179f Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-radiobutton-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-radiobutton.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-radiobutton.gif new file mode 100644 index 00000000..4cbf3ed9 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-radiobutton.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-radiodelegate-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-radiodelegate-custom.png new file mode 100644 index 00000000..7d32699b Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-radiodelegate-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-radiodelegate.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-radiodelegate.gif new file mode 100644 index 00000000..b6afd6fe Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-radiodelegate.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-rangeslider-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-rangeslider-custom.png new file mode 100644 index 00000000..47379a30 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-rangeslider-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-rangeslider.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-rangeslider.gif new file mode 100644 index 00000000..db565b0a Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-rangeslider.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-roundbutton.png b/src/quickcontrols2/doc/images/qtquickcontrols2-roundbutton.png new file mode 100644 index 00000000..4dce37f2 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-roundbutton.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar-custom.png new file mode 100644 index 00000000..690bc8be Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar-non-attached.png b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar-non-attached.png new file mode 100644 index 00000000..eba363dd Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar-non-attached.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar-nosnap.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar-nosnap.gif new file mode 100644 index 00000000..f61ac5b4 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar-nosnap.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar-snapalways.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar-snapalways.gif new file mode 100644 index 00000000..438d4a33 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar-snapalways.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar-snaponrelease.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar-snaponrelease.gif new file mode 100644 index 00000000..c2fa67b0 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar-snaponrelease.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar.gif new file mode 100644 index 00000000..ed3ab607 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollbar.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-scrollindicator-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollindicator-custom.png new file mode 100644 index 00000000..b1183bc5 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollindicator-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-scrollindicator-non-attached.png b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollindicator-non-attached.png new file mode 100644 index 00000000..a61e0487 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollindicator-non-attached.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-scrollindicator.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollindicator.gif new file mode 100644 index 00000000..73007820 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollindicator.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-scrollview-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollview-custom.png new file mode 100644 index 00000000..8f4bd928 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollview-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-scrollview-wireframe.png b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollview-wireframe.png new file mode 100644 index 00000000..8a39056a Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollview-wireframe.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-scrollview.png b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollview.png new file mode 100644 index 00000000..1a4039e1 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-scrollview.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-slider-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-slider-custom.png new file mode 100644 index 00000000..dbbacb34 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-slider-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-slider-handle.png b/src/quickcontrols2/doc/images/qtquickcontrols2-slider-handle.png new file mode 100644 index 00000000..5450d574 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-slider-handle.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-slider-nosnap.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-slider-nosnap.gif new file mode 100644 index 00000000..ab233c5b Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-slider-nosnap.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-slider-snapalways.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-slider-snapalways.gif new file mode 100644 index 00000000..8eb4011f Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-slider-snapalways.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-slider-snaponrelease.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-slider-snaponrelease.gif new file mode 100644 index 00000000..f3b1d5c7 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-slider-snaponrelease.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-slider.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-slider.gif new file mode 100644 index 00000000..2ee56334 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-slider.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-spinbox-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-spinbox-custom.png new file mode 100644 index 00000000..d1e883fc Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-spinbox-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-spinbox-double.png b/src/quickcontrols2/doc/images/qtquickcontrols2-spinbox-double.png new file mode 100644 index 00000000..d3f5876c Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-spinbox-double.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-spinbox-down.png b/src/quickcontrols2/doc/images/qtquickcontrols2-spinbox-down.png new file mode 100644 index 00000000..1d5dcf7b Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-spinbox-down.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-spinbox-textual.png b/src/quickcontrols2/doc/images/qtquickcontrols2-spinbox-textual.png new file mode 100644 index 00000000..5513d6e6 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-spinbox-textual.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-spinbox-up.png b/src/quickcontrols2/doc/images/qtquickcontrols2-spinbox-up.png new file mode 100644 index 00000000..1ee1c479 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-spinbox-up.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-spinbox.png b/src/quickcontrols2/doc/images/qtquickcontrols2-spinbox.png new file mode 100644 index 00000000..835bb1d6 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-spinbox.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-splitview-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-splitview-custom.png new file mode 100644 index 00000000..da820cca Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-splitview-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-stackview-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-stackview-custom.png new file mode 100644 index 00000000..5ee6049e Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-stackview-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-stackview-pop.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-stackview-pop.gif new file mode 100644 index 00000000..1971c2e0 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-stackview-pop.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-stackview-push.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-stackview-push.gif new file mode 100644 index 00000000..0218cc0f Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-stackview-push.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-stackview-replace.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-stackview-replace.gif new file mode 100644 index 00000000..63a6b2b4 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-stackview-replace.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-stackview-unwind.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-stackview-unwind.gif new file mode 100644 index 00000000..28c051d8 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-stackview-unwind.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-stackview-visible.png b/src/quickcontrols2/doc/images/qtquickcontrols2-stackview-visible.png new file mode 100644 index 00000000..d937b417 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-stackview-visible.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-stackview-wireframe.png b/src/quickcontrols2/doc/images/qtquickcontrols2-stackview-wireframe.png new file mode 100644 index 00000000..f28b5c67 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-stackview-wireframe.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-styles.png b/src/quickcontrols2/doc/images/qtquickcontrols2-styles.png new file mode 100644 index 00000000..992dd47e Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-styles.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-swipedelegate-behind.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-swipedelegate-behind.gif new file mode 100644 index 00000000..97d6a592 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-swipedelegate-behind.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-swipedelegate-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-swipedelegate-custom.png new file mode 100644 index 00000000..5813b73c Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-swipedelegate-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-swipedelegate-leading-trailing.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-swipedelegate-leading-trailing.gif new file mode 100644 index 00000000..0641bd14 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-swipedelegate-leading-trailing.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-swipedelegate.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-swipedelegate.gif new file mode 100644 index 00000000..86c380b7 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-swipedelegate.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-swipeview-indicator.png b/src/quickcontrols2/doc/images/qtquickcontrols2-swipeview-indicator.png new file mode 100644 index 00000000..998ec9f7 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-swipeview-indicator.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-swipeview-wireframe.png b/src/quickcontrols2/doc/images/qtquickcontrols2-swipeview-wireframe.png new file mode 100644 index 00000000..3cc2b83c Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-swipeview-wireframe.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-swipeview.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-swipeview.gif new file mode 100644 index 00000000..4af26c10 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-swipeview.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-switch-checked.png b/src/quickcontrols2/doc/images/qtquickcontrols2-switch-checked.png new file mode 100644 index 00000000..7a0cde1b Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-switch-checked.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-switch-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-switch-custom.png new file mode 100644 index 00000000..6d535ef9 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-switch-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-switch.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-switch.gif new file mode 100644 index 00000000..5f956304 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-switch.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-switch.png b/src/quickcontrols2/doc/images/qtquickcontrols2-switch.png new file mode 100644 index 00000000..7f613f33 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-switch.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-switchdelegate-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-switchdelegate-custom.png new file mode 100644 index 00000000..f5337e2c Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-switchdelegate-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-switchdelegate.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-switchdelegate.gif new file mode 100644 index 00000000..950b1073 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-switchdelegate.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-tabbar-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-tabbar-custom.png new file mode 100644 index 00000000..8c8e4acc Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-tabbar-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-tabbar-explicit.png b/src/quickcontrols2/doc/images/qtquickcontrols2-tabbar-explicit.png new file mode 100644 index 00000000..b1de5f71 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-tabbar-explicit.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-tabbar-flickable.png b/src/quickcontrols2/doc/images/qtquickcontrols2-tabbar-flickable.png new file mode 100644 index 00000000..0c253f82 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-tabbar-flickable.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-tabbar-wireframe.png b/src/quickcontrols2/doc/images/qtquickcontrols2-tabbar-wireframe.png new file mode 100644 index 00000000..35a64ae2 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-tabbar-wireframe.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-tabbar.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-tabbar.gif new file mode 100644 index 00000000..31db1f9e Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-tabbar.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-tabbar.png b/src/quickcontrols2/doc/images/qtquickcontrols2-tabbar.png new file mode 100644 index 00000000..9f113497 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-tabbar.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-tabbutton.png b/src/quickcontrols2/doc/images/qtquickcontrols2-tabbutton.png new file mode 100644 index 00000000..3df2f531 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-tabbutton.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-textarea-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-textarea-custom.png new file mode 100644 index 00000000..6220a13f Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-textarea-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-textarea-scrollable.png b/src/quickcontrols2/doc/images/qtquickcontrols2-textarea-scrollable.png new file mode 100644 index 00000000..ae868a27 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-textarea-scrollable.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-textarea.png b/src/quickcontrols2/doc/images/qtquickcontrols2-textarea.png new file mode 100644 index 00000000..fc221bd7 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-textarea.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-textfield-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-textfield-custom.png new file mode 100644 index 00000000..91023170 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-textfield-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-textfield-disabled.png b/src/quickcontrols2/doc/images/qtquickcontrols2-textfield-disabled.png new file mode 100644 index 00000000..b143d210 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-textfield-disabled.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-textfield-focused.png b/src/quickcontrols2/doc/images/qtquickcontrols2-textfield-focused.png new file mode 100644 index 00000000..de7f9599 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-textfield-focused.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-textfield-normal.png b/src/quickcontrols2/doc/images/qtquickcontrols2-textfield-normal.png new file mode 100644 index 00000000..4229c706 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-textfield-normal.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-textfield.png b/src/quickcontrols2/doc/images/qtquickcontrols2-textfield.png new file mode 100644 index 00000000..a008383a Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-textfield.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-toolbar-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-toolbar-custom.png new file mode 100644 index 00000000..425e5f8c Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-toolbar-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-toolbar.png b/src/quickcontrols2/doc/images/qtquickcontrols2-toolbar.png new file mode 100644 index 00000000..e5a33eee Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-toolbar.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-toolbutton-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-toolbutton-custom.png new file mode 100644 index 00000000..b78269d0 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-toolbutton-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-toolbutton.png b/src/quickcontrols2/doc/images/qtquickcontrols2-toolbutton.png new file mode 100644 index 00000000..610c1a7c Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-toolbutton.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-toolseparator-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-toolseparator-custom.png new file mode 100644 index 00000000..6703eeba Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-toolseparator-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-toolseparator.png b/src/quickcontrols2/doc/images/qtquickcontrols2-toolseparator.png new file mode 100644 index 00000000..88ced123 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-toolseparator.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-tooltip-delay.png b/src/quickcontrols2/doc/images/qtquickcontrols2-tooltip-delay.png new file mode 100644 index 00000000..59813835 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-tooltip-delay.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-tooltip-hover.png b/src/quickcontrols2/doc/images/qtquickcontrols2-tooltip-hover.png new file mode 100644 index 00000000..62a9cf84 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-tooltip-hover.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-tooltip-pressandhold.png b/src/quickcontrols2/doc/images/qtquickcontrols2-tooltip-pressandhold.png new file mode 100644 index 00000000..62a9cf84 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-tooltip-pressandhold.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-tooltip-slider.png b/src/quickcontrols2/doc/images/qtquickcontrols2-tooltip-slider.png new file mode 100644 index 00000000..a15e723a Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-tooltip-slider.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-tooltip.png b/src/quickcontrols2/doc/images/qtquickcontrols2-tooltip.png new file mode 100644 index 00000000..4238d52a Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-tooltip.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-tumbler-custom.png b/src/quickcontrols2/doc/images/qtquickcontrols2-tumbler-custom.png new file mode 100644 index 00000000..bbfa9b0c Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-tumbler-custom.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-tumbler-delegate.png b/src/quickcontrols2/doc/images/qtquickcontrols2-tumbler-delegate.png new file mode 100644 index 00000000..a28da93e Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-tumbler-delegate.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-tumbler-wrap.gif b/src/quickcontrols2/doc/images/qtquickcontrols2-tumbler-wrap.gif new file mode 100644 index 00000000..8f59eedc Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-tumbler-wrap.gif differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-tumbler.png b/src/quickcontrols2/doc/images/qtquickcontrols2-tumbler.png new file mode 100644 index 00000000..38339dfa Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-tumbler.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-universal-accent.png b/src/quickcontrols2/doc/images/qtquickcontrols2-universal-accent.png new file mode 100644 index 00000000..e1d74f7a Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-universal-accent.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-universal-attributes.png b/src/quickcontrols2/doc/images/qtquickcontrols2-universal-attributes.png new file mode 100644 index 00000000..7a7ef347 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-universal-attributes.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-universal-background.png b/src/quickcontrols2/doc/images/qtquickcontrols2-universal-background.png new file mode 100644 index 00000000..4f1bfbd2 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-universal-background.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-universal-button.png b/src/quickcontrols2/doc/images/qtquickcontrols2-universal-button.png new file mode 100644 index 00000000..6c764ec9 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-universal-button.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-universal-dark.png b/src/quickcontrols2/doc/images/qtquickcontrols2-universal-dark.png new file mode 100644 index 00000000..952651dc Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-universal-dark.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-universal-foreground.png b/src/quickcontrols2/doc/images/qtquickcontrols2-universal-foreground.png new file mode 100644 index 00000000..b0ecf23a Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-universal-foreground.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-universal-light.png b/src/quickcontrols2/doc/images/qtquickcontrols2-universal-light.png new file mode 100644 index 00000000..e65447a4 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-universal-light.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-universal-theme.png b/src/quickcontrols2/doc/images/qtquickcontrols2-universal-theme.png new file mode 100644 index 00000000..d1281346 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-universal-theme.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-universal-thumbnail.png b/src/quickcontrols2/doc/images/qtquickcontrols2-universal-thumbnail.png new file mode 100644 index 00000000..db7fe5b0 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-universal-thumbnail.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-universal-violet.png b/src/quickcontrols2/doc/images/qtquickcontrols2-universal-violet.png new file mode 100644 index 00000000..ec459457 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-universal-violet.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-windows-thumbnail.png b/src/quickcontrols2/doc/images/qtquickcontrols2-windows-thumbnail.png new file mode 100644 index 00000000..15408d3b Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-windows-thumbnail.png differ diff --git a/src/quickcontrols2/doc/images/qtquickcontrols2-windows.png b/src/quickcontrols2/doc/images/qtquickcontrols2-windows.png new file mode 100644 index 00000000..324a0341 Binary files /dev/null and b/src/quickcontrols2/doc/images/qtquickcontrols2-windows.png differ diff --git a/src/quickcontrols2/doc/manifest-meta.qdocconf b/src/quickcontrols2/doc/manifest-meta.qdocconf new file mode 100644 index 00000000..30400da5 --- /dev/null +++ b/src/quickcontrols2/doc/manifest-meta.qdocconf @@ -0,0 +1,31 @@ +# Additional meta information (attributes for matched entries, as well as tags) +# to be added to manifest.xml files. +# +# manifestmeta.filters = ,,... +# +# manifestmeta..names = /,/,.. +# manifestmeta..attributes = ,,.. +# manifestmeta..tags = ,,.. +# +# .names specify all the module/name combinations to apply the +# attributes/tags to. You can use simple wildcard matching by appending +# '*' at the end of name. +# +# Note: You cannot use operators (+, =, -) in the names. +# +# Examples: add a 'isHighlighted' attribute for two 'Analog Clock' examples, +# add a 'database' tag for QtSql examples, and a 'qt5' tag for all examples +# +# manifestmeta.filters = highlighted sql global +# +# manifestmeta.highlighted.names = "QtGui/Analog Clock Window Example" \ +# "QtWidgets/Analog Clock Example" +# manifestmeta.highlighted.attributes = isHighlighted:true +# +# manifestmeta.sql.names = "QtSql/*" +# manifestmeta.sql.tags = database +# +# manifestmeta.global.names = * +# manifestmeta.global.tags = qt5 + +manifestmeta.highlighted.names = "QtQuickControls/Qt Quick Controls - Gallery" diff --git a/src/quickcontrols2/doc/qtquickcontrols.qdocconf b/src/quickcontrols2/doc/qtquickcontrols.qdocconf new file mode 100644 index 00000000..3078730c --- /dev/null +++ b/src/quickcontrols2/doc/qtquickcontrols.qdocconf @@ -0,0 +1,104 @@ +include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf) +include($QT_INSTALL_DOCS/config/exampleurl-qtquickcontrols2.qdocconf) +include(manifest-meta.qdocconf) + +moduleheader = QtQuickControls2 + +project = QtQuickControls +description = Qt Quick Controls Reference Documentation +version = $QT_VERSION + +qhp.projects = QtQuickControls + +qhp.QtQuickControls.file = qtquickcontrols.qhp +qhp.QtQuickControls.namespace = org.qt-project.qtquickcontrols.$QT_VERSION_TAG +qhp.QtQuickControls.virtualFolder = qtquickcontrols +qhp.QtQuickControls.indexTitle = Qt Quick Controls +qhp.QtQuickControls.indexRoot = + +qhp.QtQuickControls.filterAttributes = qtquickcontrols $QT_VERSION qtrefdoc +qhp.QtQuickControls.customFilters.Qt.name = QtQuickControls $QT_VERSION +qhp.QtQuickControls.customFilters.Qt.filterAttributes = qtquickcontrols $QT_VERSION + +qhp.QtQuickControls.subprojects = qmltypes classes examples +qhp.QtQuickControls.subprojects.qmltypes.title = QML Types +qhp.QtQuickControls.subprojects.qmltypes.indexTitle = Qt Quick Controls QML Types +qhp.QtQuickControls.subprojects.qmltypes.selectors = qmlclass +qhp.QtQuickControls.subprojects.qmltypes.sortPages = true +qhp.QtQuickControls.subprojects.classes.title = C++ Classes +qhp.QtQuickControls.subprojects.classes.indexTitle = Qt Quick Controls C++ Classes +qhp.QtQuickControls.subprojects.classes.selectors = class fake:headerfile +qhp.QtQuickControls.subprojects.classes.sortPages = true +qhp.QtQuickControls.subprojects.examples.title = Examples +qhp.QtQuickControls.subprojects.examples.indexTitle = Qt Quick Controls Examples +qhp.QtQuickControls.subprojects.examples.selectors = fake:example + +depends = qtcore qtgui qtdoc qtqml qtqmlmodels qtquick qtsql qtwidgets qtlabsplatform qmake qtcmake + +# Specify the install path under QT_INSTALL_EXAMPLES +# Note: paths passed to \example command must contain the parent directory, e.g. +# \example controls/tabs +exampledirs += ../../../examples/quickcontrols2 \ + ../../quicktemplates2 \ + snippets + +examples.fileextensions += "*.conf" + +examplesinstallpath = quickcontrols2 + +headerdirs += ../../quicktemplates2 \ + .. + +sourcedirs += ../../quicktemplates2 \ + .. \ + ../../quicktemplates2/doc/src \ + src + +# Exclude .qml files from the doc build to prevent conflicts with .qml files +# in style-specific directories; all types are documented in .cpp/.qdoc files +sources.fileextensions = "*.c++ *.cc *.cpp *.cxx *.mm *.qdoc" + +imagedirs += images \ + .. + +navigation.landingpage = "Qt Quick Controls" +navigation.qmltypespage = "Qt Quick Controls QML Types" +navigation.cppclassespage = "Qt Quick Controls C++ Classes" + +tagfile = qtquickcontrols.tags + +# \styleimport {QtQuick.Controls.Universal 2.0} +macro.styleimport.HTML = "
Import Statement: import \1
Since: \2
" + +# \styleproperty {Universal.accent} {enumeration} {html-target-id} +# \target html-target-id +# This property holds ... +# (empty line) +# \endstyleproperty +macro.styleproperty.HTML = "

\1 : \2

" +macro.endstyleproperty = "\\br" + +# \stylemethod {returntype} {methodname} {argtype} {argname} {html-target-id} +# \target html-target-id +# This property holds ... +# (empty line) +# \endstylemethod +macro.stylemethod.HTML = "

\1 \2(\3 \4)

" +macro.endstylemethod = "\\br" + +# \stylemethod2 {returntype} {methodname} {arg1type} {arg1name} {arg2type} {arg2name} {html-target-id} +# \target html-target-id +# This method returns ... +# (empty line) +# \endstylemethod2 +macro.stylemethod2.HTML = "

\1 \2(\3 \4, \5 \6)

" +macro.endstylemethod2 = "\\br" + +# \stylecolor {#6A00FF} {(default)} +macro.stylecolor.HTML = "
\1 \2
" + +macro.nbsp.HTML = " " + +#Add output suffix to the html filenames +outputsuffixes = QML +outputsuffixes.QML = 2 diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-action.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-action.qml new file mode 100644 index 00000000..1b65a824 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-action.qml @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +Item { + //! [action] + Action { + id: copyAction + text: qsTr("&Copy") + icon.name: "edit-copy" + shortcut: StandardKey.Copy + onTriggered: window.activeFocusItem.copy() + } + //! [action] + + //! [toolbutton] + ToolButton { + id: toolButton + action: copyAction + } + //! [toolbutton] + + //! [menuitem] + MenuItem { + id: menuItem + action: copyAction + text: qsTr("&Copy selected Text") + } + //! [menuitem] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-busyindicator-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-busyindicator-custom.qml new file mode 100644 index 00000000..8daffed7 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-busyindicator-custom.qml @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +BusyIndicator { + id: control + + contentItem: Item { + implicitWidth: 64 + implicitHeight: 64 + + Item { + id: item + x: parent.width / 2 - 32 + y: parent.height / 2 - 32 + width: 64 + height: 64 + opacity: control.running ? 1 : 0 + + Behavior on opacity { + OpacityAnimator { + duration: 250 + } + } + + RotationAnimator { + target: item + running: control.visible && control.running + from: 0 + to: 360 + loops: Animation.Infinite + duration: 1250 + } + + Repeater { + id: repeater + model: 6 + + Rectangle { + x: item.width / 2 - width / 2 + y: item.height / 2 - height / 2 + implicitWidth: 10 + implicitHeight: 10 + radius: 5 + color: "#21be2b" + transform: [ + Translate { + y: -Math.min(item.width, item.height) * 0.5 + 5 + }, + Rotation { + angle: index / repeater.count * 360 + origin.x: 5 + origin.y: 5 + } + ] + } + } + } + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-button-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-button-custom.qml new file mode 100644 index 00000000..095657b5 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-button-custom.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +Button { + id: control + text: qsTr("Button") + + contentItem: Text { + text: control.text + font: control.font + opacity: enabled ? 1.0 : 0.3 + color: control.down ? "#17a81a" : "#21be2b" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 40 + opacity: enabled ? 1 : 0.3 + border.color: control.down ? "#17a81a" : "#21be2b" + border.width: 1 + radius: 2 + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-button-icononly.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-button-icononly.qml new file mode 100644 index 00000000..d7400005 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-button-icononly.qml @@ -0,0 +1,34 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +Button { + icon.source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png" + display: Button.IconOnly +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-button-textbesideicon.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-button-textbesideicon.qml new file mode 100644 index 00000000..3e2aa619 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-button-textbesideicon.qml @@ -0,0 +1,35 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +Button { + text: "Button" + icon.source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png" + display: Button.TextBesideIcon +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-button-textonly.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-button-textonly.qml new file mode 100644 index 00000000..59054f77 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-button-textonly.qml @@ -0,0 +1,34 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +Button { + text: "Button" + display: Button.TextOnly +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-checkbox-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-checkbox-custom.qml new file mode 100644 index 00000000..93ebe46d --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-checkbox-custom.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +CheckBox { + id: control + text: qsTr("CheckBox") + checked: true + + indicator: Rectangle { + implicitWidth: 26 + implicitHeight: 26 + x: control.leftPadding + y: parent.height / 2 - height / 2 + radius: 3 + border.color: control.down ? "#17a81a" : "#21be2b" + + Rectangle { + width: 14 + height: 14 + x: 6 + y: 6 + radius: 2 + color: control.down ? "#17a81a" : "#21be2b" + visible: control.checked + } + } + + contentItem: Text { + text: control.text + font: control.font + opacity: enabled ? 1.0 : 0.3 + color: control.down ? "#17a81a" : "#21be2b" + verticalAlignment: Text.AlignVCenter + leftPadding: control.indicator.width + control.spacing + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-checkbox-group.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-checkbox-group.qml new file mode 100644 index 00000000..c5032165 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-checkbox-group.qml @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [1] +Column { + ButtonGroup { + id: childGroup + exclusive: false + checkState: parentBox.checkState + } + + CheckBox { + id: parentBox + text: qsTr("Parent") + checkState: childGroup.checkState + } + + CheckBox { + checked: true + text: qsTr("Child 1") + leftPadding: indicator.width + ButtonGroup.group: childGroup + } + + CheckBox { + text: qsTr("Child 2") + leftPadding: indicator.width + ButtonGroup.group: childGroup + } +} +//! [1] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-checkdelegate-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-checkdelegate-custom.qml new file mode 100644 index 00000000..91970f52 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-checkdelegate-custom.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +CheckDelegate { + id: control + text: qsTr("CheckDelegate") + checked: true + + contentItem: Text { + rightPadding: control.indicator.width + control.spacing + text: control.text + font: control.font + opacity: enabled ? 1.0 : 0.3 + color: control.down ? "#17a81a" : "#21be2b" + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + + indicator: Rectangle { + implicitWidth: 26 + implicitHeight: 26 + x: control.width - width - control.rightPadding + y: control.topPadding + control.availableHeight / 2 - height / 2 + radius: 3 + color: "transparent" + border.color: control.down ? "#17a81a" : "#21be2b" + + Rectangle { + width: 14 + height: 14 + x: 6 + y: 6 + radius: 2 + color: control.down ? "#17a81a" : "#21be2b" + visible: control.checked + } + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 40 + visible: control.down || control.highlighted + color: control.down ? "#bdbebf" : "#eeeeee" + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-combobox-accepted.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-combobox-accepted.qml new file mode 100644 index 00000000..b420e3a5 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-combobox-accepted.qml @@ -0,0 +1,45 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [combobox] +ComboBox { + editable: true + model: ListModel { + id: model + ListElement { text: "Banana" } + ListElement { text: "Apple" } + ListElement { text: "Coconut" } + } + onAccepted: { + if (find(editText) === -1) + model.append({text: editText}) + } +} +//! [combobox] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-combobox-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-combobox-custom.qml new file mode 100644 index 00000000..fea7e6d5 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-combobox-custom.qml @@ -0,0 +1,112 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +ComboBox { + id: control + model: ["First", "Second", "Third"] + + delegate: ItemDelegate { + width: control.width + contentItem: Text { + text: modelData + color: "#21be2b" + font: control.font + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + highlighted: control.highlightedIndex === index + } + + indicator: Canvas { + id: canvas + x: control.width - width - control.rightPadding + y: control.topPadding + (control.availableHeight - height) / 2 + width: 12 + height: 8 + contextType: "2d" + + Connections { + target: control + function onPressedChanged() { canvas.requestPaint(); } + } + + onPaint: { + context.reset(); + context.moveTo(0, 0); + context.lineTo(width, 0); + context.lineTo(width / 2, height); + context.closePath(); + context.fillStyle = control.pressed ? "#17a81a" : "#21be2b"; + context.fill(); + } + } + + contentItem: Text { + leftPadding: 0 + rightPadding: control.indicator.width + control.spacing + + text: control.displayText + font: control.font + color: control.pressed ? "#17a81a" : "#21be2b" + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + background: Rectangle { + implicitWidth: 120 + implicitHeight: 40 + border.color: control.pressed ? "#17a81a" : "#21be2b" + border.width: control.visualFocus ? 2 : 1 + radius: 2 + } + + popup: Popup { + y: control.height - 1 + width: control.width + implicitHeight: contentItem.implicitHeight + padding: 1 + + contentItem: ListView { + clip: true + implicitHeight: contentHeight + model: control.popup.visible ? control.delegateModel : null + currentIndex: control.highlightedIndex + + ScrollIndicator.vertical: ScrollIndicator { } + } + + background: Rectangle { + border.color: "#21be2b" + radius: 2 + } + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-combobox-valuerole.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-combobox-valuerole.qml new file mode 100644 index 00000000..a4c40c0f --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-combobox-valuerole.qml @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [file] +ApplicationWindow { + width: 640 + height: 480 + visible: true + + // Used as an example of a backend - this would usually be + // e.g. a C++ type exposed to QML. + QtObject { + id: backend + property int modifier + } + + ComboBox { + textRole: "text" + valueRole: "value" + // When an item is selected, update the backend. + onActivated: backend.modifier = currentValue + // Set the initial currentIndex to the value stored in the backend. + Component.onCompleted: currentIndex = indexOfValue(backend.modifier) + model: [ + { value: Qt.NoModifier, text: qsTr("No modifier") }, + { value: Qt.ShiftModifier, text: qsTr("Shift") }, + { value: Qt.ControlModifier, text: qsTr("Control") } + ] + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-delaybutton-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-delaybutton-custom.qml new file mode 100644 index 00000000..0b86f1d0 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-delaybutton-custom.qml @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +DelayButton { + id: control + checked: true + text: qsTr("Delay\nButton") + + contentItem: Text { + text: control.text + font: control.font + opacity: enabled ? 1.0 : 0.3 + color: "white" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 100 + opacity: enabled ? 1 : 0.3 + color: control.down ? "#17a81a" : "#21be2b" + radius: size / 2 + + readonly property real size: Math.min(control.width, control.height) + width: size + height: size + anchors.centerIn: parent + + Canvas { + id: canvas + anchors.fill: parent + + Connections { + target: control + function onProgressChanged() { canvas.requestPaint(); } + } + + onPaint: { + var ctx = getContext("2d") + ctx.clearRect(0, 0, width, height) + ctx.strokeStyle = "white" + ctx.lineWidth = parent.size / 20 + ctx.beginPath() + var startAngle = Math.PI / 5 * 3 + var endAngle = startAngle + control.progress * Math.PI / 5 * 9 + ctx.arc(width / 2, height / 2, width / 2 - ctx.lineWidth / 2 - 2, startAngle, endAngle) + ctx.stroke() + } + } + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-dial-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-dial-custom.qml new file mode 100644 index 00000000..170e9ccf --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-dial-custom.qml @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +Dial { + id: control + background: Rectangle { + x: control.width / 2 - width / 2 + y: control.height / 2 - height / 2 + width: Math.max(64, Math.min(control.width, control.height)) + height: width + color: "transparent" + radius: width / 2 + border.color: control.pressed ? "#17a81a" : "#21be2b" + opacity: control.enabled ? 1 : 0.3 + } + + handle: Rectangle { + id: handleItem + x: control.background.x + control.background.width / 2 - width / 2 + y: control.background.y + control.background.height / 2 - height / 2 + width: 16 + height: 16 + color: control.pressed ? "#17a81a" : "#21be2b" + radius: 8 + antialiasing: true + opacity: control.enabled ? 1 : 0.3 + transform: [ + Translate { + y: -Math.min(control.background.width, control.background.height) * 0.4 + handleItem.height / 2 + }, + Rotation { + angle: control.angle + origin.x: handleItem.width / 2 + origin.y: handleItem.height / 2 + } + ] + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-dialog-modal.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-dialog-modal.qml new file mode 100644 index 00000000..d60e4e30 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-dialog-modal.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +Item { + width: dialog.implicitWidth + height: dialog.implicitHeight +//! [1] +Dialog { + id: dialog + modal: true + standardButtons: Dialog.Ok +} +//! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-dialog-modeless.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-dialog-modeless.qml new file mode 100644 index 00000000..6acb74e5 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-dialog-modeless.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +Item { + width: dialog.implicitWidth + height: dialog.implicitHeight +//! [1] +Dialog { + id: dialog + modal: false + standardButtons: Dialog.Ok +} +//! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-dialog.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-dialog.qml new file mode 100644 index 00000000..13fbb0e8 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-dialog.qml @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +Item { + width: dialog.implicitWidth + height: dialog.implicitHeight +//! [1] +Dialog { + id: dialog + title: "Title" + standardButtons: Dialog.Ok | Dialog.Cancel + + onAccepted: console.log("Ok clicked") + onRejected: console.log("Cancel clicked") +} +//! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-dialogbuttonbox-attached.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-dialogbuttonbox-attached.qml new file mode 100644 index 00000000..45a0b9e9 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-dialogbuttonbox-attached.qml @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [1] +DialogButtonBox { + Button { + text: qsTr("Save") + DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole + } + Button { + text: qsTr("Close") + DialogButtonBox.buttonRole: DialogButtonBox.DestructiveRole + } +} +//! [1] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-dialogbuttonbox.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-dialogbuttonbox.qml new file mode 100644 index 00000000..bcfd405b --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-dialogbuttonbox.qml @@ -0,0 +1,38 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [1] +DialogButtonBox { + standardButtons: DialogButtonBox.Ok | DialogButtonBox.Cancel + + onAccepted: console.log("Ok clicked") + onRejected: console.log("Cancel clicked") +} +//! [1] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-frame-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-frame-custom.qml new file mode 100644 index 00000000..798f95da --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-frame-custom.qml @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +Frame { + background: Rectangle { + color: "transparent" + border.color: "#21be2b" + radius: 2 + } + + Label { + text: qsTr("Content goes here!") + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-frame.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-frame.qml new file mode 100644 index 00000000..71b9b310 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-frame.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Layouts +import QtQuick.Controls + +//! [1] +Frame { + ColumnLayout { + anchors.fill: parent + CheckBox { text: qsTr("E-mail") } + CheckBox { text: qsTr("Calendar") } + CheckBox { text: qsTr("Contacts") } + } +} +//! [1] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-groupbox-checkable.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-groupbox-checkable.qml new file mode 100644 index 00000000..91689d9f --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-groupbox-checkable.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Layouts +import QtQuick.Controls + +//! [1] +GroupBox { + label: CheckBox { + id: checkBox + checked: true + text: qsTr("Synchronize") + } + + ColumnLayout { + anchors.fill: parent + enabled: checkBox.checked + CheckBox { text: qsTr("E-mail") } + CheckBox { text: qsTr("Calendar") } + CheckBox { text: qsTr("Contacts") } + } +} +//! [1] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-groupbox-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-groupbox-custom.qml new file mode 100644 index 00000000..e3355b23 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-groupbox-custom.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +GroupBox { + id: control + title: qsTr("GroupBox") + + background: Rectangle { + y: control.topPadding - control.bottomPadding + width: parent.width + height: parent.height - control.topPadding + control.bottomPadding + color: "transparent" + border.color: "#21be2b" + radius: 2 + } + + label: Label { + x: control.leftPadding + width: control.availableWidth + text: control.title + color: "#21be2b" + elide: Text.ElideRight + } + + Label { + text: qsTr("Content goes here!") + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-groupbox.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-groupbox.qml new file mode 100644 index 00000000..e9f1c7dc --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-groupbox.qml @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Layouts +import QtQuick.Controls + +//! [1] +GroupBox { + title: qsTr("Synchronize") + ColumnLayout { + anchors.fill: parent + CheckBox { text: qsTr("E-mail") } + CheckBox { text: qsTr("Calendar") } + CheckBox { text: qsTr("Contacts") } + } +} +//! [1] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-headerview-simple.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-headerview-simple.qml new file mode 100644 index 00000000..6878904f --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-headerview-simple.qml @@ -0,0 +1,119 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** BSD License Usage +** Alternatively, you may use this file under the terms of the BSD license +** as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of The Qt Company Ltd nor the names of its +** contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//![file] +import QtQuick +import QtQuick.Controls +import Qt.labs.qmlmodels + +ApplicationWindow { + visible: true + width: 640 + height: 480 + + //! [horizontal] + HorizontalHeaderView { + id: horizontalHeader + syncView: tableView + anchors.left: tableView.left + } + //! [horizontal] + + //! [vertical] + VerticalHeaderView { + id: verticalHeader + syncView: tableView + anchors.top: tableView.top + } + //! [vertical] + + TableView { + id: tableView + anchors.fill: parent + anchors.topMargin: horizontalHeader.height + anchors.leftMargin: verticalHeader.width + columnSpacing: 1 + rowSpacing: 1 + clip: true + + model: TableModel { + TableModelColumn { display: "name" } + TableModelColumn { display: "color" } + + rows: [ + { + "name": "cat", + "color": "black" + }, + { + "name": "dog", + "color": "brown" + }, + { + "name": "bird", + "color": "white" + } + ] + } + + delegate: Rectangle { + implicitWidth: 100 + implicitHeight: 50 + border.width: 1 + + Text { + text: display + anchors.centerIn: parent + } + } + } +} + +//![file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-itemdelegate-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-itemdelegate-custom.qml new file mode 100644 index 00000000..fd52b46f --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-itemdelegate-custom.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +ItemDelegate { + id: control + text: qsTr("ItemDelegate") + + contentItem: Text { + rightPadding: control.spacing + text: control.text + font: control.font + color: control.enabled ? (control.down ? "#17a81a" : "#21be2b") : "#bdbebf" + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 40 + opacity: enabled ? 1 : 0.3 + color: control.down ? "#dddedf" : "#eeeeee" + + Rectangle { + width: parent.width + height: 1 + color: control.down ? "#17a81a" : "#21be2b" + anchors.bottom: parent.bottom + } + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-itemdelegate.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-itemdelegate.qml new file mode 100644 index 00000000..70d6104f --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-itemdelegate.qml @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [1] +ListView { + width: 160 + height: 240 + + model: Qt.fontFamilies() + + delegate: ItemDelegate { + text: modelData + width: parent.width + onClicked: console.log("clicked:", modelData) + } + + ScrollIndicator.vertical: ScrollIndicator { } +} +//! [1] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-label-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-label-custom.qml new file mode 100644 index 00000000..cc88d00f --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-label-custom.qml @@ -0,0 +1,36 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +Label { + text: qsTr("Label") + color: "#21be2b" +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-label.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-label.qml new file mode 100644 index 00000000..c492af50 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-label.qml @@ -0,0 +1,35 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [1] +Label { + text: "Label" +} +//! [1] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-material-accent.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-material-accent.qml new file mode 100644 index 00000000..aa4c62b8 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-material-accent.qml @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Layouts +import QtQuick.Controls +import QtQuick.Controls.Material + +Pane { + padding: 4 + +//! [1] +Button { + text: qsTr("Button") + highlighted: true + Material.accent: Material.Orange +} +//! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-material-background.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-material-background.qml new file mode 100644 index 00000000..f64e48d2 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-material-background.qml @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls +import QtQuick.Controls.Material + +Pane { + padding: 4 + +//! [1] +Button { + text: qsTr("Button") + highlighted: true + Material.background: Material.Teal +} +//! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-material-elevation.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-material-elevation.qml new file mode 100644 index 00000000..f9e189f1 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-material-elevation.qml @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls +import QtQuick.Controls.Material + +Pane { + contentWidth: 120 + contentHeight: 120 + padding: 10 + bottomPadding: 20 + +//! [1] +Pane { + width: 120 + height: 120 + + Material.elevation: 6 + + Label { + text: qsTr("I'm a card!") + anchors.centerIn: parent + } +} +//! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-material-foreground.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-material-foreground.qml new file mode 100644 index 00000000..070576f5 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-material-foreground.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls +import QtQuick.Controls.Material + +Pane { + padding: 4 + +//! [1] +Button { + text: qsTr("Button") + Material.foreground: Material.Pink +} +//! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-material-theme.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-material-theme.qml new file mode 100644 index 00000000..586433c3 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-material-theme.qml @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls +import QtQuick.Controls.Material + +Pane { + padding: 10 + +//! [1] +Pane { + Material.theme: Material.Dark + + Button { + text: qsTr("Button") + } +} +//! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-material-variant.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-material-variant.qml new file mode 100644 index 00000000..1283fb43 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-material-variant.qml @@ -0,0 +1,212 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls +import QtQuick.Controls.Material +import QtQuick.Layouts + +Pane { + implicitWidth: 400 + implicitHeight: 600 + padding: 10 + + readonly property color measurementColor: "darkorange" + readonly property int barLeftMargin: 10 + readonly property int textTopMargin: 12 + + Component { + id: measurementComponent + + Rectangle { + color: measurementColor + width: 1 + height: parent.height + + Rectangle { + width: 5 + height: 1 + color: measurementColor + anchors.horizontalCenter: parent.horizontalCenter + } + + Rectangle { + width: 5 + height: 1 + color: measurementColor + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: parent.bottom + } + + Text { + x: 8 + text: parent.height + height: parent.height + color: measurementColor + verticalAlignment: Text.AlignVCenter + } + } + } + + ColumnLayout { + anchors.fill: parent + spacing: 20 + + ColumnLayout { + spacing: textTopMargin + + Button { + id: button + text: qsTr("Button") + + Loader { + sourceComponent: measurementComponent + height: parent.height + anchors.left: parent.right + anchors.leftMargin: barLeftMargin + } + + } + Text { + text: "Roboto " + button.font.pixelSize + color: measurementColor + } + } + + ColumnLayout { + spacing: textTopMargin + + ItemDelegate { + id: itemDelegate + text: qsTr("ItemDelegate") + + Loader { + sourceComponent: measurementComponent + height: parent.height + anchors.left: parent.right + anchors.leftMargin: barLeftMargin + } + + } + Text { + text: "Roboto " + itemDelegate.font.pixelSize + color: measurementColor + } + } + + ColumnLayout { + spacing: textTopMargin + + CheckDelegate { + id: checkDelegate + text: qsTr("CheckDelegate") + + Loader { + sourceComponent: measurementComponent + height: parent.height + anchors.left: parent.right + anchors.leftMargin: barLeftMargin + } + + } + Text { + text: "Roboto " + checkDelegate.font.pixelSize + color: measurementColor + } + } + + ColumnLayout { + spacing: textTopMargin + + RadioDelegate { + id: radioDelegate + text: qsTr("RadioDelegate") + + Loader { + sourceComponent: measurementComponent + height: parent.height + anchors.left: parent.right + anchors.leftMargin: barLeftMargin + } + + } + Text { + text: "Roboto " + radioDelegate.font.pixelSize + color: measurementColor + } + } + + ColumnLayout { + spacing: textTopMargin + + ComboBox { + id: comboBox + model: [ qsTr("ComboBox") ] + + Loader { + sourceComponent: measurementComponent + height: parent.height + anchors.left: parent.right + anchors.leftMargin: barLeftMargin + } + + } + Text { + text: "Roboto " + comboBox.font.pixelSize + color: measurementColor + } + } + + ColumnLayout { + spacing: textTopMargin + + Item { + implicitWidth: groupBox.implicitWidth + implicitHeight: groupBox.implicitHeight + + GroupBox { + id: groupBox + title: qsTr("GroupBox") + } + Loader { + sourceComponent: measurementComponent + height: parent.height + anchors.left: parent.right + anchors.leftMargin: barLeftMargin + } + } + Text { + text: "Roboto " + groupBox.font.pixelSize + color: measurementColor + } + } + + Item { + Layout.fillHeight: true + } + } +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-menu-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-menu-custom.qml new file mode 100644 index 00000000..3e766e8a --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-menu-custom.qml @@ -0,0 +1,133 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +ApplicationWindow { + id: window + width: menu.width + height: menu.height + visible: true + + Component.onCompleted: menu.popup(menu.itemAt(1)) + +// Indent it like this so that the indenting in the generated doc is normal. +Menu { + id: menu + + Action { text: qsTr("Tool Bar"); checkable: true } + Action { text: qsTr("Side Bar"); checkable: true; checked: true } + Action { text: qsTr("Status Bar"); checkable: true; checked: true } + + MenuSeparator { + contentItem: Rectangle { + implicitWidth: 200 + implicitHeight: 1 + color: "#21be2b" + } + } + + Menu { + title: qsTr("Advanced") + // ... + } + + topPadding: 2 + bottomPadding: 2 + + delegate: MenuItem { + id: menuItem + implicitWidth: 200 + implicitHeight: 40 + + arrow: Canvas { + x: parent.width - width + implicitWidth: 40 + implicitHeight: 40 + visible: menuItem.subMenu + onPaint: { + var ctx = getContext("2d") + ctx.fillStyle = menuItem.highlighted ? "#ffffff" : "#21be2b" + ctx.moveTo(15, 15) + ctx.lineTo(width - 15, height / 2) + ctx.lineTo(15, height - 15) + ctx.closePath() + ctx.fill() + } + } + + indicator: Item { + implicitWidth: 40 + implicitHeight: 40 + Rectangle { + width: 26 + height: 26 + anchors.centerIn: parent + visible: menuItem.checkable + border.color: "#21be2b" + radius: 3 + Rectangle { + width: 14 + height: 14 + anchors.centerIn: parent + visible: menuItem.checked + color: "#21be2b" + radius: 2 + } + } + } + + contentItem: Text { + leftPadding: menuItem.indicator.width + rightPadding: menuItem.arrow.width + text: menuItem.text + font: menuItem.font + opacity: enabled ? 1.0 : 0.3 + color: menuItem.highlighted ? "#ffffff" : "#21be2b" + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 40 + opacity: enabled ? 1 : 0.3 + color: menuItem.highlighted ? "#21be2b" : "transparent" + } + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 40 + color: "#ffffff" + border.color: "#21be2b" + radius: 2 + } +} +} //! [eof] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-menubar-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-menubar-custom.qml new file mode 100644 index 00000000..4b3d641e --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-menubar-custom.qml @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +ApplicationWindow { + id: window + visible: true + width: menuBar.implicitWidth + height: menuBar.height + + Component.onCompleted: menuBar.itemAt(1).highlighted = true + + header: + +// Indent it like this so that the indenting in the generated doc is normal. +MenuBar { + id: menuBar + + Menu { title: qsTr("File") } + Menu { title: qsTr("Edit") } + Menu { title: qsTr("View") } + Menu { title: qsTr("Help") } + + delegate: MenuBarItem { + id: menuBarItem + + contentItem: Text { + text: menuBarItem.text + font: menuBarItem.font + opacity: enabled ? 1.0 : 0.3 + color: menuBarItem.highlighted ? "#ffffff" : "#21be2b" + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + background: Rectangle { + implicitWidth: 40 + implicitHeight: 40 + opacity: enabled ? 1 : 0.3 + color: menuBarItem.highlighted ? "#21be2b" : "transparent" + } + } + + background: Rectangle { + implicitWidth: 40 + implicitHeight: 40 + color: "#ffffff" + + Rectangle { + color: "#21be2b" + width: parent.width + height: 1 + anchors.bottom: parent.bottom + } + } +} +} //! [eof] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-menubar.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-menubar.qml new file mode 100644 index 00000000..7ae22ae8 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-menubar.qml @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [begin] +ApplicationWindow { + id: window + width: 320 + height: 260 + visible: true + + //! [skipfrom] + Component.onCompleted: { + menuBar.itemAt(0).triggered() + menuBar.itemAt(0).menu.itemAt(2).highlighted = true + } + //! [skipto] + + menuBar: MenuBar { + Menu { + title: qsTr("&File") + Action { text: qsTr("&New...") } + Action { text: qsTr("&Open...") } + Action { text: qsTr("&Save") } + Action { text: qsTr("Save &As...") } + MenuSeparator { } + Action { text: qsTr("&Quit") } + } + Menu { + title: qsTr("&Edit") + Action { text: qsTr("Cu&t") } + Action { text: qsTr("&Copy") } + Action { text: qsTr("&Paste") } + } + Menu { + title: qsTr("&Help") + Action { text: qsTr("&About") } + } + } +} +//! [end] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-menuseparator-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-menuseparator-custom.qml new file mode 100644 index 00000000..fa7fa14a --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-menuseparator-custom.qml @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +Item { + id: window + width: menu.contentItem.width + height: menu.contentItem.height + visible: true + +// Indent it like this so that the indenting in the generated doc is normal. +Menu { + id: menu + contentItem.parent: window + + MenuItem { + text: qsTr("New...") + } + MenuItem { + text: qsTr("Open...") + } + MenuItem { + text: qsTr("Save") + } + + MenuSeparator { + padding: 0 + topPadding: 12 + bottomPadding: 12 + contentItem: Rectangle { + implicitWidth: 200 + implicitHeight: 1 + color: "#1E000000" + } + } + + MenuItem { + text: qsTr("Exit") + } +} +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-menuseparator.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-menuseparator.qml new file mode 100644 index 00000000..cd5d5441 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-menuseparator.qml @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +Item { + id: window + width: menu.contentItem.width + height: menu.contentItem.height + visible: true + +// Indent it like this so that the indenting in the generated doc is normal. +Menu { + id: menu + contentItem.parent: window + + MenuItem { + text: qsTr("New...") + } + MenuItem { + text: qsTr("Open...") + } + MenuItem { + text: qsTr("Save") + } + + MenuSeparator {} + + MenuItem { + text: qsTr("Exit") + } +} +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-overlay-modal.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-overlay-modal.qml new file mode 100644 index 00000000..9751f057 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-overlay-modal.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls +import QtQuick.Window + +Item { + id: root + width: 200 + height: 200 + + Binding { + target: popup + property: "visible" + value: root.Window.active + } +//! [1] +Popup { + id: popup + width: 400 + height: 400 + modal: true + visible: true + + Overlay.modal: Rectangle { + color: "#aacfdbe7" + } +} +//! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-overlay-modeless.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-overlay-modeless.qml new file mode 100644 index 00000000..a4951d13 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-overlay-modeless.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls +import QtQuick.Window + +Item { + id: root + width: 200 + height: 200 + + Binding { + target: popup + property: "visible" + value: root.Window.active + } +//! [1] +Popup { + id: popup + width: 400 + height: 400 + dim: true + visible: true + + Overlay.modeless: Rectangle { + color: "#aacfdbe7" + } +} +//! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-overview.cmake b/src/quickcontrols2/doc/snippets/qtquickcontrols2-overview.cmake new file mode 100644 index 00000000..5bbbcff5 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-overview.cmake @@ -0,0 +1,4 @@ +#! [0] +find_package(Qt6 COMPONENTS QuickControls2 REQUIRED) +target_link_libraries(mytarget PRIVATE Qt6::QuickControls2) +#! [0] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-pageindicator-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-pageindicator-custom.qml new file mode 100644 index 00000000..ba0d2db9 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-pageindicator-custom.qml @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +PageIndicator { + id: control + count: 5 + currentIndex: 2 + + delegate: Rectangle { + implicitWidth: 8 + implicitHeight: 8 + + radius: width / 2 + color: "#21be2b" + + opacity: index === control.currentIndex ? 0.95 : pressed ? 0.7 : 0.45 + + Behavior on opacity { + OpacityAnimator { + duration: 100 + } + } + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-pageindicator-interactive.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-pageindicator-interactive.qml new file mode 100644 index 00000000..8f2221ee --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-pageindicator-interactive.qml @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick.Controls + +Pane { +//! [1] +SwipeView { + id: view + currentIndex: pageIndicator.currentIndex + anchors.fill: parent + + Page { + title: qsTr("Home") + } + Page { + title: qsTr("Discover") + } + Page { + title: qsTr("Activity") + } +} + +PageIndicator { + id: pageIndicator + interactive: true + count: view.count + currentIndex: view.currentIndex + + anchors.bottom: parent.bottom + anchors.horizontalCenter: parent.horizontalCenter +} +//! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-pageindicator.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-pageindicator.qml new file mode 100644 index 00000000..b3912efe --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-pageindicator.qml @@ -0,0 +1,35 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick +import QtQuick.Controls + +//! [1] +PageIndicator { + count: 5 + currentIndex: 2 +} +//! [1] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-pane-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-pane-custom.qml new file mode 100644 index 00000000..855423c4 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-pane-custom.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +Pane { + background: Rectangle { + color: "#eeeeee" + } + + Label { + text: qsTr("Content goes here!") + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-pane.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-pane.qml new file mode 100644 index 00000000..a8c8672e --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-pane.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Layouts +import QtQuick.Controls + +//! [1] +Pane { + ColumnLayout { + anchors.fill: parent + CheckBox { text: qsTr("E-mail") } + CheckBox { text: qsTr("Calendar") } + CheckBox { text: qsTr("Contacts") } + } +} +//! [1] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-popup-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-popup-custom.qml new file mode 100644 index 00000000..ad5481e3 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-popup-custom.qml @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls +import QtQuick.Window + +Item { + id: root + width: 200 + height: 200 + + Binding { + target: popup + property: "visible" + value: root.Window.active + } +//! [1] +Popup { + id: popup + background: Rectangle { + implicitWidth: 200 + implicitHeight: 200 + border.color: "#444" + } + contentItem: Column {} +} +//! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-popup.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-popup.qml new file mode 100644 index 00000000..76ec20cd --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-popup.qml @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +Item { +//! [centerIn] +ApplicationWindow { + id: window + // ... + + Pane { + // ... + + Popup { + anchors.centerIn: Overlay.overlay + } + } +} +//! [centerIn] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-progressbar-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-progressbar-custom.qml new file mode 100644 index 00000000..d9616157 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-progressbar-custom.qml @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +ProgressBar { + id: control + value: 0.5 + padding: 2 + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 6 + color: "#e6e6e6" + radius: 3 + } + + contentItem: Item { + implicitWidth: 200 + implicitHeight: 4 + + Rectangle { + width: control.visualPosition * parent.width + height: parent.height + radius: 2 + color: "#17a81a" + } + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-radiobutton-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-radiobutton-custom.qml new file mode 100644 index 00000000..b33ce6b6 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-radiobutton-custom.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +RadioButton { + id: control + text: qsTr("RadioButton") + checked: true + + indicator: Rectangle { + implicitWidth: 26 + implicitHeight: 26 + x: control.leftPadding + y: parent.height / 2 - height / 2 + radius: 13 + border.color: control.down ? "#17a81a" : "#21be2b" + + Rectangle { + width: 14 + height: 14 + x: 6 + y: 6 + radius: 7 + color: control.down ? "#17a81a" : "#21be2b" + visible: control.checked + } + } + + contentItem: Text { + text: control.text + font: control.font + opacity: enabled ? 1.0 : 0.3 + color: control.down ? "#17a81a" : "#21be2b" + verticalAlignment: Text.AlignVCenter + leftPadding: control.indicator.width + control.spacing + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-radiodelegate-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-radiodelegate-custom.qml new file mode 100644 index 00000000..ed3dae67 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-radiodelegate-custom.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +RadioDelegate { + id: control + text: qsTr("RadioDelegate") + checked: true + + contentItem: Text { + rightPadding: control.indicator.width + control.spacing + text: control.text + font: control.font + opacity: enabled ? 1.0 : 0.3 + color: control.down ? "#17a81a" : "#21be2b" + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + + indicator: Rectangle { + implicitWidth: 26 + implicitHeight: 26 + x: control.width - width - control.rightPadding + y: parent.height / 2 - height / 2 + radius: 13 + color: "transparent" + border.color: control.down ? "#17a81a" : "#21be2b" + + Rectangle { + width: 14 + height: 14 + x: 6 + y: 6 + radius: 7 + color: control.down ? "#17a81a" : "#21be2b" + visible: control.checked + } + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 40 + visible: control.down || control.highlighted + color: control.down ? "#bdbebf" : "#eeeeee" + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-rangeslider-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-rangeslider-custom.qml new file mode 100644 index 00000000..fcddc400 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-rangeslider-custom.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +RangeSlider { + id: control + first.value: 0.25 + second.value: 0.75 + + background: Rectangle { + x: control.leftPadding + y: control.topPadding + control.availableHeight / 2 - height / 2 + implicitWidth: 200 + implicitHeight: 4 + width: control.availableWidth + height: implicitHeight + radius: 2 + color: "#bdbebf" + + Rectangle { + x: control.first.visualPosition * parent.width + width: control.second.visualPosition * parent.width - x + height: parent.height + color: "#21be2b" + radius: 2 + } + } + + first.handle: Rectangle { + x: control.leftPadding + control.first.visualPosition * (control.availableWidth - width) + y: control.topPadding + control.availableHeight / 2 - height / 2 + implicitWidth: 26 + implicitHeight: 26 + radius: 13 + color: control.first.pressed ? "#f0f0f0" : "#f6f6f6" + border.color: "#bdbebf" + } + + second.handle: Rectangle { + x: control.leftPadding + control.second.visualPosition * (control.availableWidth - width) + y: control.topPadding + control.availableHeight / 2 - height / 2 + implicitWidth: 26 + implicitHeight: 26 + radius: 13 + color: control.second.pressed ? "#f0f0f0" : "#f6f6f6" + border.color: "#bdbebf" + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-roundbutton.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-roundbutton.qml new file mode 100644 index 00000000..201ee244 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-roundbutton.qml @@ -0,0 +1,36 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [1] +RoundButton { + text: "\u2713" // Unicode Character 'CHECK MARK' + onClicked: textArea.readOnly = true +} +//! [1] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollbar-active.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollbar-active.qml new file mode 100644 index 00000000..bd417955 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollbar-active.qml @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +Item { + width: 100 + height: 100 + + //! [1] + Flickable { + anchors.fill: parent + + contentWidth: parent.width * 2 + contentHeight: parent.height * 2 + + ScrollBar.horizontal: ScrollBar { id: hbar; active: vbar.active } + ScrollBar.vertical: ScrollBar { id: vbar; active: hbar.active } + } + //! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollbar-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollbar-custom.qml new file mode 100644 index 00000000..0aea2572 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollbar-custom.qml @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +ScrollBar { + id: control + size: 0.3 + position: 0.2 + active: true + orientation: Qt.Vertical + + contentItem: Rectangle { + implicitWidth: 6 + implicitHeight: 100 + radius: width / 2 + color: control.pressed ? "#81e889" : "#c2f4c6" + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollbar-non-attached.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollbar-non-attached.qml new file mode 100644 index 00000000..7ca66615 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollbar-non-attached.qml @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +Item { + width: 200 + height: 200 + +//! [1] +Rectangle { + id: frame + clip: true + width: 160 + height: 160 + border.color: "black" + anchors.centerIn: parent + + Text { + id: content + text: "ABC" + font.pixelSize: 160 + x: -hbar.position * width + y: -vbar.position * height + } + + ScrollBar { + id: vbar + hoverEnabled: true + active: hovered || pressed + orientation: Qt.Vertical + size: frame.height / content.height + anchors.top: parent.top + anchors.right: parent.right + anchors.bottom: parent.bottom + } + + ScrollBar { + id: hbar + hoverEnabled: true + active: hovered || pressed + orientation: Qt.Horizontal + size: frame.width / content.width + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + } +} +//! [1] + +Component.onCompleted: { + hbar.active = true + vbar.active = true +} +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollbar-policy.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollbar-policy.qml new file mode 100644 index 00000000..c608dac4 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollbar-policy.qml @@ -0,0 +1,38 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [1] +Flickable { + contentHeight: 2000 + ScrollBar.vertical: ScrollBar { + policy: ScrollBar.AlwaysOn + } +} +//! [1] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollindicator-active.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollindicator-active.qml new file mode 100644 index 00000000..719b9393 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollindicator-active.qml @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +Item { + width: 100 + height: 100 + + //! [1] + Flickable { + anchors.fill: parent + + contentWidth: parent.width * 2 + contentHeight: parent.height * 2 + + ScrollIndicator.horizontal: ScrollIndicator { id: hbar; active: vbar.active } + ScrollIndicator.vertical: ScrollIndicator { id: vbar; active: hbar.active } + } + //! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollindicator-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollindicator-custom.qml new file mode 100644 index 00000000..b18d391c --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollindicator-custom.qml @@ -0,0 +1,45 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +ScrollIndicator { + id: control + size: 0.3 + position: 0.2 + active: true + orientation: Qt.Vertical + + contentItem: Rectangle { + implicitWidth: 2 + implicitHeight: 100 + color: "#c2f4c6" + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollindicator-non-attached.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollindicator-non-attached.qml new file mode 100644 index 00000000..0d6c4529 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollindicator-non-attached.qml @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +Item { + width: 200 + height: 200 + +//! [1] +Rectangle { + id: frame + clip: true + width: 160 + height: 160 + border.color: "black" + anchors.centerIn: parent + + Text { + id: content + text: "ABC" + font.pixelSize: 169 + + MouseArea { + id: mouseArea + drag.target: content + drag.minimumX: frame.width - width + drag.minimumY: frame.height - height + drag.maximumX: 0 + drag.maximumY: 0 + anchors.fill: content + } + } + + ScrollIndicator { + id: verticalIndicator + active: mouseArea.pressed + orientation: Qt.Vertical + size: frame.height / content.height + position: -content.y / content.height + anchors { top: parent.top; right: parent.right; bottom: parent.bottom } + } + + ScrollIndicator { + id: horizontalIndicator + active: mouseArea.pressed + orientation: Qt.Horizontal + size: frame.width / content.width + position: -content.x / content.width + anchors { left: parent.left; right: parent.right; bottom: parent.bottom } + } +} +//! [1] + +Component.onCompleted: { + horizontalIndicator.active = true; + verticalIndicator.active = true; +} +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollview-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollview-custom.qml new file mode 100644 index 00000000..1a80d263 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollview-custom.qml @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +Item { + width: 200 + height: 200 + + Binding { + target: control.ScrollBar.horizontal + property: "active" + value: true + } + + Binding { + target: control.ScrollBar.vertical + property: "active" + value: true + } + +//! [file] +ScrollView { + id: control + + width: 200 + height: 200 + focus: true + + Label { + text: "ABC" + font.pixelSize: 224 + } + + ScrollBar.vertical: ScrollBar { + parent: control + x: control.mirrored ? 0 : control.width - width + y: control.topPadding + height: control.availableHeight + active: control.ScrollBar.horizontal.active + } + + ScrollBar.horizontal: ScrollBar { + parent: control + x: control.leftPadding + y: control.height - height + width: control.availableWidth + active: control.ScrollBar.vertical.active + } + + background: Rectangle { + border.color: control.activeFocus ? "#21be2b" : "#bdbebf" + } +} +//! [file] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollview-interactive.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollview-interactive.qml new file mode 100644 index 00000000..83861720 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollview-interactive.qml @@ -0,0 +1,38 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [file] +ScrollView { + // ... + ScrollBar.horizontal.interactive: true + ScrollBar.vertical.interactive: true +} +//! [file] + diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollview-listview.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollview-listview.qml new file mode 100644 index 00000000..f1fbb627 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollview-listview.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +Item { + id: root + width: 200 + height: 200 + + Binding { + target: root.children[0].ScrollBar.horizontal + property: "active" + value: true + } + + Binding { + target: root.children[0].ScrollBar.vertical + property: "active" + value: true + } + +//! [file] +ScrollView { + width: 200 + height: 200 + + ListView { + model: 20 + delegate: ItemDelegate { + text: "Item " + index + } + } +} +//! [file] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollview-policy.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollview-policy.qml new file mode 100644 index 00000000..78098eaa --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollview-policy.qml @@ -0,0 +1,38 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [file] +ScrollView { + // ... + ScrollBar.horizontal.policy: ScrollBar.AlwaysOff + ScrollBar.vertical.policy: ScrollBar.AlwaysOn +} +//! [file] + diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollview.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollview.qml new file mode 100644 index 00000000..c96ae1ed --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-scrollview.qml @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +Rectangle { + id: root + width: 200 + height: 200 + border.color: "#ddd" + + Binding { + target: root.children[0].ScrollBar.horizontal + property: "active" + value: true + } + + Binding { + target: root.children[0].ScrollBar.vertical + property: "active" + value: true + } + +//! [file] +ScrollView { + width: 200 + height: 200 + + Label { + text: "ABC" + font.pixelSize: 224 + } +} +//! [file] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-slider-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-slider-custom.qml new file mode 100644 index 00000000..c3d7f4b2 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-slider-custom.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +Slider { + id: control + value: 0.5 + + background: Rectangle { + x: control.leftPadding + y: control.topPadding + control.availableHeight / 2 - height / 2 + implicitWidth: 200 + implicitHeight: 4 + width: control.availableWidth + height: implicitHeight + radius: 2 + color: "#bdbebf" + + Rectangle { + width: control.visualPosition * parent.width + height: parent.height + color: "#21be2b" + radius: 2 + } + } + + handle: Rectangle { + x: control.leftPadding + control.visualPosition * (control.availableWidth - width) + y: control.topPadding + control.availableHeight / 2 - height / 2 + implicitWidth: 26 + implicitHeight: 26 + radius: 13 + color: control.pressed ? "#f0f0f0" : "#f6f6f6" + border.color: "#bdbebf" + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-spinbox-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-spinbox-custom.qml new file mode 100644 index 00000000..89f6244f --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-spinbox-custom.qml @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +SpinBox { + id: control + value: 50 + editable: true + + contentItem: TextInput { + z: 2 + text: control.textFromValue(control.value, control.locale) + + font: control.font + color: "#21be2b" + selectionColor: "#21be2b" + selectedTextColor: "#ffffff" + horizontalAlignment: Qt.AlignHCenter + verticalAlignment: Qt.AlignVCenter + + readOnly: !control.editable + validator: control.validator + inputMethodHints: Qt.ImhFormattedNumbersOnly + } + + up.indicator: Rectangle { + x: control.mirrored ? 0 : parent.width - width + height: parent.height + implicitWidth: 40 + implicitHeight: 40 + color: control.up.pressed ? "#e4e4e4" : "#f6f6f6" + border.color: enabled ? "#21be2b" : "#bdbebf" + + Text { + text: "+" + font.pixelSize: control.font.pixelSize * 2 + color: "#21be2b" + anchors.fill: parent + fontSizeMode: Text.Fit + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + + down.indicator: Rectangle { + x: control.mirrored ? parent.width - width : 0 + height: parent.height + implicitWidth: 40 + implicitHeight: 40 + color: control.down.pressed ? "#e4e4e4" : "#f6f6f6" + border.color: enabled ? "#21be2b" : "#bdbebf" + + Text { + text: "-" + font.pixelSize: control.font.pixelSize * 2 + color: "#21be2b" + anchors.fill: parent + fontSizeMode: Text.Fit + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + + background: Rectangle { + implicitWidth: 140 + border.color: "#bdbebf" + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-spinbox-double.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-spinbox-double.qml new file mode 100644 index 00000000..852ee5be --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-spinbox-double.qml @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [1] +SpinBox { + id: spinbox + from: 0 + value: 110 + to: 100 * 100 + stepSize: 100 + anchors.centerIn: parent + + property int decimals: 2 + property real realValue: value / 100 + + validator: DoubleValidator { + bottom: Math.min(spinbox.from, spinbox.to) + top: Math.max(spinbox.from, spinbox.to) + } + + textFromValue: function(value, locale) { + return Number(value / 100).toLocaleString(locale, 'f', spinbox.decimals) + } + + valueFromText: function(text, locale) { + return Number.fromLocaleString(locale, text) * 100 + } +} +//! [1] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-spinbox-textual.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-spinbox-textual.qml new file mode 100644 index 00000000..c1879d93 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-spinbox-textual.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [1] +SpinBox { + from: 0 + to: items.length - 1 + value: 1 // "Medium" + + property var items: ["Small", "Medium", "Large"] + + validator: RegularExpressionValidator { + regularExpression: new RegExp("(Small|Medium|Large)", "i") + } + + textFromValue: function(value) { + return items[value]; + } + + valueFromText: function(text) { + for (var i = 0; i < items.length; ++i) { + if (items[i].toLowerCase().indexOf(text.toLowerCase()) === 0) + return i + } + return sb.value + } +} +//! [1] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-spinbox.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-spinbox.qml new file mode 100644 index 00000000..87722749 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-spinbox.qml @@ -0,0 +1,35 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [1] +SpinBox { + value: 50 +} +//! [1] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-splitview-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-splitview-custom.qml new file mode 100644 index 00000000..570c3acd --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-splitview-custom.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +Item { + width: 200 + height: 100 + + //! [1] + SplitView { + id: splitView + anchors.fill: parent + + handle: Rectangle { + implicitWidth: 4 + implicitHeight: 4 + color: SplitHandle.pressed ? "#81e889" + : (SplitHandle.hovered ? Qt.lighter("#c2f4c6", 1.1) : "#c2f4c6") + } + + Rectangle { + implicitWidth: 150 + color: "#444" + } + Rectangle { + implicitWidth: 50 + color: "#666" + } + } + //! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-stackview-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-stackview-custom.qml new file mode 100644 index 00000000..64cdb3ce --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-stackview-custom.qml @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +StackView { + id: control + + popEnter: Transition { + XAnimator { + from: (control.mirrored ? -1 : 1) * -control.width + to: 0 + duration: 400 + easing.type: Easing.OutCubic + } + } + + popExit: Transition { + XAnimator { + from: 0 + to: (control.mirrored ? -1 : 1) * control.width + duration: 400 + easing.type: Easing.OutCubic + } + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-stackview-visible.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-stackview-visible.qml new file mode 100644 index 00000000..0e1a0dd4 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-stackview-visible.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [1] +StackView { + id: stackView + property real offset: 10 + width: 100; height: 100 + + initialItem: Component { + id: page + Rectangle { + property real pos: StackView.index * stackView.offset + property real hue: Math.random() + color: Qt.hsla(hue, 0.5, 0.8, 0.6) + border.color: Qt.hsla(hue, 0.5, 0.5, 0.9) + StackView.visible: true + } + } + + pushEnter: Transition { + id: pushEnter + ParallelAnimation { + PropertyAction { property: "x"; value: pushEnter.ViewTransition.item.pos } + NumberAnimation { properties: "y"; from: pushEnter.ViewTransition.item.pos + stackView.offset; to: pushEnter.ViewTransition.item.pos; duration: 400; easing.type: Easing.OutCubic } + NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 400; easing.type: Easing.OutCubic } + } + } + popExit: Transition { + id: popExit + ParallelAnimation { + PropertyAction { property: "x"; value: popExit.ViewTransition.item.pos } + NumberAnimation { properties: "y"; from: popExit.ViewTransition.item.pos; to: popExit.ViewTransition.item.pos + stackView.offset; duration: 400; easing.type: Easing.OutCubic } + NumberAnimation { property: "opacity"; from: 1; to: 0; duration: 400; easing.type: Easing.OutCubic } + } + } + + pushExit: Transition { + id: pushExit + PropertyAction { property: "x"; value: pushExit.ViewTransition.item.pos } + PropertyAction { property: "y"; value: pushExit.ViewTransition.item.pos } + } + popEnter: Transition { + id: popEnter + PropertyAction { property: "x"; value: popEnter.ViewTransition.item.pos } + PropertyAction { property: "y"; value: popEnter.ViewTransition.item.pos } + } +} +//! [1] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-swipedelegate-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-swipedelegate-custom.qml new file mode 100644 index 00000000..c89b96a4 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-swipedelegate-custom.qml @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +SwipeDelegate { + id: control + text: qsTr("SwipeDelegate") + + Component { + id: component + + Rectangle { + color: SwipeDelegate.pressed ? "#333" : "#444" + width: parent.width + height: parent.height + clip: true + + Label { + text: qsTr("Press me!") + color: "#21be2b" + anchors.centerIn: parent + } + } + } + + swipe.left: component + swipe.right: component + + contentItem: Text { + text: control.text + font: control.font + color: control.enabled ? (control.down ? "#17a81a" : "#21be2b") : "#bdbebf" + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + + Behavior on x { + enabled: !control.down + NumberAnimation { + easing.type: Easing.InOutCubic + duration: 400 + } + } + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-swipedelegate-transition.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-swipedelegate-transition.qml new file mode 100644 index 00000000..dc0d58a2 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-swipedelegate-transition.qml @@ -0,0 +1,37 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [1] +SwipeDelegate { + swipe.transition: Transition { + SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } + } +} +//! [1] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-swipedelegate.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-swipedelegate.qml new file mode 100644 index 00000000..dcab908e --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-swipedelegate.qml @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [1] +ListView { + id: listView + anchors.fill: parent + model: ListModel { + ListElement { sender: "Bob Bobbleton"; title: "How are you going?" } + ListElement { sender: "Rug Emporium"; title: "SALE! All rugs MUST go!" } + ListElement { sender: "Electric Co."; title: "Electricity bill 15/07/2016 overdue" } + ListElement { sender: "Tips"; title: "Five ways this tip will save your life" } + } + delegate: SwipeDelegate { + id: swipeDelegate + text: model.sender + " - " + model.title + width: parent.width + + ListView.onRemove: SequentialAnimation { + PropertyAction { + target: swipeDelegate + property: "ListView.delayRemove" + value: true + } + NumberAnimation { + target: swipeDelegate + property: "height" + to: 0 + easing.type: Easing.InOutQuad + } + PropertyAction { + target: swipeDelegate + property: "ListView.delayRemove" + value: false + } + } + + swipe.right: Label { + id: deleteLabel + text: qsTr("Delete") + color: "white" + verticalAlignment: Label.AlignVCenter + padding: 12 + height: parent.height + anchors.right: parent.right + + SwipeDelegate.onClicked: listView.model.remove(index) + + background: Rectangle { + color: deleteLabel.SwipeDelegate.pressed ? Qt.darker("tomato", 1.1) : "tomato" + } + } + } +} +//! [1] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-swipeview-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-swipeview-custom.qml new file mode 100644 index 00000000..b8cddb31 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-swipeview-custom.qml @@ -0,0 +1,39 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +SwipeView { + id: control + + background: Rectangle { + color: "#eeeeee" + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-swipeview-indicator.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-swipeview-indicator.qml new file mode 100644 index 00000000..98b381f1 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-swipeview-indicator.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +Item { + width: 200 + height: 320 + + //! [1] + SwipeView { + id: view + + currentIndex: 1 + anchors.fill: parent + + Item { + id: firstPage + } + Item { + id: secondPage + } + Item { + id: thirdPage + } + } + + PageIndicator { + id: indicator + + count: view.count + currentIndex: view.currentIndex + + anchors.bottom: view.bottom + anchors.horizontalCenter: parent.horizontalCenter + } + //! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-switch-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-switch-custom.qml new file mode 100644 index 00000000..9adccbed --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-switch-custom.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +Switch { + id: control + text: qsTr("Switch") + + indicator: Rectangle { + implicitWidth: 48 + implicitHeight: 26 + x: control.leftPadding + y: parent.height / 2 - height / 2 + radius: 13 + color: control.checked ? "#17a81a" : "#ffffff" + border.color: control.checked ? "#17a81a" : "#cccccc" + + Rectangle { + x: control.checked ? parent.width - width : 0 + width: 26 + height: 26 + radius: 13 + color: control.down ? "#cccccc" : "#ffffff" + border.color: control.checked ? (control.down ? "#17a81a" : "#21be2b") : "#999999" + } + } + + contentItem: Text { + text: control.text + font: control.font + opacity: enabled ? 1.0 : 0.3 + color: control.down ? "#17a81a" : "#21be2b" + verticalAlignment: Text.AlignVCenter + leftPadding: control.indicator.width + control.spacing + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-switchdelegate-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-switchdelegate-custom.qml new file mode 100644 index 00000000..bea35f29 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-switchdelegate-custom.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +SwitchDelegate { + id: control + text: qsTr("SwitchDelegate") + checked: true + + contentItem: Text { + rightPadding: control.indicator.width + control.spacing + text: control.text + font: control.font + opacity: enabled ? 1.0 : 0.3 + color: control.down ? "#17a81a" : "#21be2b" + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + + indicator: Rectangle { + implicitWidth: 48 + implicitHeight: 26 + x: control.width - width - control.rightPadding + y: parent.height / 2 - height / 2 + radius: 13 + color: control.checked ? "#17a81a" : "transparent" + border.color: control.checked ? "#17a81a" : "#cccccc" + + Rectangle { + x: control.checked ? parent.width - width : 0 + width: 26 + height: 26 + radius: 13 + color: control.down ? "#cccccc" : "#ffffff" + border.color: control.checked ? (control.down ? "#17a81a" : "#21be2b") : "#999999" + } + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 40 + visible: control.down || control.highlighted + color: control.down ? "#bdbebf" : "#eeeeee" + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-tabbar-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tabbar-custom.qml new file mode 100644 index 00000000..eba48256 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tabbar-custom.qml @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +TabBar { + id: control + + background: Rectangle { + color: "#eeeeee" + } + + TabButton { + text: qsTr("Home") + } + TabButton { + text: qsTr("Discover") + } + TabButton { + text: qsTr("Activity") + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-tabbar-explicit.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tabbar-explicit.qml new file mode 100644 index 00000000..5f548255 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tabbar-explicit.qml @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +Item { + width: 360 + height: childrenRect.height + +//! [1] +TabBar { + width: parent.width + TabButton { + text: "First" + width: implicitWidth + } + TabButton { + text: "Second" + width: implicitWidth + } + TabButton { + text: "Third" + width: implicitWidth + } +} +//! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-tabbar-flickable.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tabbar-flickable.qml new file mode 100644 index 00000000..8e41bbf0 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tabbar-flickable.qml @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +Item { + width: 360 + height: bar.height + +//! [1] +TabBar { + id: bar + width: parent.width + + Repeater { + model: ["First", "Second", "Third", "Fourth", "Fifth"] + + TabButton { + text: modelData + width: Math.max(100, bar.width / 5) + } + } +} +//! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-tabbar.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tabbar.qml new file mode 100644 index 00000000..7a02f375 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tabbar.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Layouts +import QtQuick.Controls + +Column { + width: 300 + + //! [1] + TabBar { + id: bar + width: parent.width + TabButton { + text: qsTr("Home") + } + TabButton { + text: qsTr("Discover") + } + TabButton { + text: qsTr("Activity") + } + } + + StackLayout { + width: parent.width + currentIndex: bar.currentIndex + Item { + id: homeTab + } + Item { + id: discoverTab + } + Item { + id: activityTab + } + } + //! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-tabbutton.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tabbutton.qml new file mode 100644 index 00000000..e7240db4 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tabbutton.qml @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [1] +TabBar { + TabButton { + text: qsTr("Home") + } + TabButton { + text: qsTr("Discover") + } + TabButton { + text: qsTr("Activity") + } +} +//! [1] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-textarea-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-textarea-custom.qml new file mode 100644 index 00000000..e4f1b397 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-textarea-custom.qml @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +TextArea { + id: control + placeholderText: qsTr("Enter description") + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 40 + border.color: control.enabled ? "#21be2b" : "transparent" + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-textarea-scrollable.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-textarea-scrollable.qml new file mode 100644 index 00000000..52d9996e --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-textarea-scrollable.qml @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +Item { + width: 100 + height: 100 + + Binding { target: view.ScrollBar.vertical; property: "active"; value: true } + + //! [1] + ScrollView { + id: view + anchors.fill: parent + + TextArea { + text: "TextArea\n...\n...\n...\n...\n...\n...\n" + } + } + //! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-textfield-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-textfield-custom.qml new file mode 100644 index 00000000..8f1aba23 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-textfield-custom.qml @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +TextField { + id: control + placeholderText: qsTr("Enter description") + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 40 + color: control.enabled ? "transparent" : "#353637" + border.color: control.enabled ? "#21be2b" : "transparent" + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-textfield-disabled.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-textfield-disabled.qml new file mode 100644 index 00000000..3d92b647 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-textfield-disabled.qml @@ -0,0 +1,35 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +TextField { + width: 80 + text: "Disabled" + enabled: false +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-textfield-focused.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-textfield-focused.qml new file mode 100644 index 00000000..f2761988 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-textfield-focused.qml @@ -0,0 +1,35 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +TextField { + width: 80 + text: "Focused" + focus: true +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-textfield-normal.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-textfield-normal.qml new file mode 100644 index 00000000..c9208c0e --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-textfield-normal.qml @@ -0,0 +1,34 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +TextField { + width: 80 + text: "Normal" +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-toolbar-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-toolbar-custom.qml new file mode 100644 index 00000000..2cb9d0c5 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-toolbar-custom.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Layouts +import QtQuick.Controls + +//! [file] +ToolBar { + id: control + + background: Rectangle { + implicitHeight: 40 + color: "#eeeeee" + + Rectangle { + width: parent.width + height: 1 + anchors.bottom: parent.bottom + color: "transparent" + border.color: "#21be2b" + } + } + + RowLayout { + anchors.fill: parent + ToolButton { + text: qsTr("Undo") + } + ToolButton { + text: qsTr("Redo") + } + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-toolbar.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-toolbar.qml new file mode 100644 index 00000000..2ed5c23f --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-toolbar.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Layouts +import QtQuick.Controls + +Item { + width: children[0].implicitWidth * 2 + height: children[0].implicitHeight + Binding { + target: children[0] + property: "width" + value: width + } +//! [1] +ToolBar { + RowLayout { + anchors.fill: parent + ToolButton { + text: qsTr("‹") + onClicked: stack.pop() + } + Label { + text: "Title" + elide: Label.ElideRight + horizontalAlignment: Qt.AlignHCenter + verticalAlignment: Qt.AlignVCenter + Layout.fillWidth: true + } + ToolButton { + text: qsTr("â‹®") + onClicked: menu.open() + } + } +} +//! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-toolbutton-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-toolbutton-custom.qml new file mode 100644 index 00000000..8eb27430 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-toolbutton-custom.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +ToolButton { + id: control + text: qsTr("ToolButton") + width: 120 + + contentItem: Text { + text: control.text + font: control.font + opacity: enabled ? 1.0 : 0.3 + color: control.down ? "#17a81a" : "#21be2b" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + background: Rectangle { + implicitWidth: 40 + implicitHeight: 40 + color: Qt.darker("#33333333", control.enabled && (control.checked || control.highlighted) ? 1.5 : 1.0) + opacity: enabled ? 1 : 0.3 + visible: control.down || (control.enabled && (control.checked || control.highlighted)) + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-toolseparator-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-toolseparator-custom.qml new file mode 100644 index 00000000..f630256d --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-toolseparator-custom.qml @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Layouts +import QtQuick.Window +import QtQuick.Controls + +//! [file] +ToolBar { + RowLayout { + anchors.fill: parent + + ToolButton { + text: qsTr("Action 1") + } + ToolButton { + text: qsTr("Action 2") + } + + ToolSeparator { + padding: vertical ? 10 : 2 + topPadding: vertical ? 2 : 10 + bottomPadding: vertical ? 2 : 10 + + contentItem: Rectangle { + implicitWidth: parent.vertical ? 1 : 24 + implicitHeight: parent.vertical ? 24 : 1 + color: "#c3c3c3" + } + } + + ToolButton { + text: qsTr("Action 3") + } + ToolButton { + text: qsTr("Action 4") + } + + Item { + Layout.fillWidth: true + } + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-toolseparator.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-toolseparator.qml new file mode 100644 index 00000000..514b97fa --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-toolseparator.qml @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Layouts +import QtQuick.Window +import QtQuick.Controls + +//! [1] +ToolBar { + RowLayout { + anchors.fill: parent + + ToolButton { + text: qsTr("Action 1") + } + ToolButton { + text: qsTr("Action 2") + } + + ToolSeparator {} + + ToolButton { + text: qsTr("Action 3") + } + ToolButton { + text: qsTr("Action 4") + } + + ToolSeparator {} + + ToolButton { + text: qsTr("Action 5") + } + ToolButton { + text: qsTr("Action 6") + } + + Item { + Layout.fillWidth: true + } + } +} +//! [1] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-tooltip-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tooltip-custom.qml new file mode 100644 index 00000000..7b40c974 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tooltip-custom.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +Item { +ToolTip { + id: control + text: qsTr("A descriptive tool tip of what the button does") + + contentItem: Text { + text: control.text + font: control.font + color: "#21be2b" + } + + background: Rectangle { + border.color: "#21be2b" + } +} +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-tooltip-hover.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tooltip-hover.qml new file mode 100644 index 00000000..6d1ee4c4 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tooltip-hover.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [1] +Button { + text: qsTr("Button") + hoverEnabled: true + + ToolTip.delay: 1000 + ToolTip.timeout: 5000 + ToolTip.visible: hovered + ToolTip.text: qsTr("This tool tip is shown after hovering the button for a second.") +} +//! [1] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-tooltip-pressandhold.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tooltip-pressandhold.qml new file mode 100644 index 00000000..cea49553 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tooltip-pressandhold.qml @@ -0,0 +1,39 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [1] +Button { + text: qsTr("Button") + + ToolTip.visible: pressed + ToolTip.delay: Qt.styleHints.mousePressAndHoldInterval + ToolTip.text: qsTr("This tool tip is shown after pressing and holding the button down.") +} +//! [1] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-tooltip-slider.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tooltip-slider.qml new file mode 100644 index 00000000..5f408224 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tooltip-slider.qml @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Window +import QtQuick.Controls + +Item { + id: root + width: slider.width + height: slider.height * 2.0 + + Binding { target: slider.anchors; property: "centerIn"; value: root } + Binding { target: slider.anchors; property: "verticalCenterOffset"; value: slider.height / 2 } + Binding { target: slider; property: "pressed"; value: root.Window.active } + + //! [1] + Slider { + id: slider + value: 0.5 + + ToolTip { + parent: slider.handle + visible: slider.pressed + text: slider.value.toFixed(1) + } + } + //! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-tooltip.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tooltip.qml new file mode 100644 index 00000000..2e5231dc --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tooltip.qml @@ -0,0 +1,51 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Window +import QtQuick.Controls + +Item { + id: root + width: 360 + height: button.height * 2 + + property Button button: children[0] + + Binding { target: button; property: "down"; value: root.Window.active } + Binding { target: button.anchors; property: "bottom"; value: root.bottom } + Binding { target: button.anchors; property: "horizontalCenter"; value: root.horizontalCenter } + + //! [1] + Button { + text: qsTr("Save") + + ToolTip.visible: down + ToolTip.text: qsTr("Save the active project") + } + //! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-tumbler-custom.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tumbler-custom.qml new file mode 100644 index 00000000..792e0e14 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tumbler-custom.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [file] +import QtQuick +import QtQuick.Controls + +Tumbler { + id: control + model: 15 + + background: Item { + Rectangle { + opacity: control.enabled ? 0.2 : 0.1 + border.color: "#000000" + width: parent.width + height: 1 + anchors.top: parent.top + } + + Rectangle { + opacity: control.enabled ? 0.2 : 0.1 + border.color: "#000000" + width: parent.width + height: 1 + anchors.bottom: parent.bottom + } + } + + delegate: Text { + text: qsTr("Item %1").arg(modelData + 1) + font: control.font + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + opacity: 1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2) + } + + Rectangle { + anchors.horizontalCenter: control.horizontalCenter + y: control.height * 0.4 + width: 40 + height: 1 + color: "#21be2b" + } + + Rectangle { + anchors.horizontalCenter: control.horizontalCenter + y: control.height * 0.6 + width: 40 + height: 1 + color: "#21be2b" + } +} +//! [file] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-tumbler-listView.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tumbler-listView.qml new file mode 100644 index 00000000..54ce78af --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tumbler-listView.qml @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [contentItem] +Tumbler { + id: tumbler + + contentItem: ListView { + model: tumbler.model + delegate: tumbler.delegate + + snapMode: ListView.SnapToItem + highlightRangeMode: ListView.StrictlyEnforceRange + preferredHighlightBegin: height / 2 - (height / tumbler.visibleItemCount / 2) + preferredHighlightEnd: height / 2 + (height / tumbler.visibleItemCount / 2) + clip: true + } +} +//! [contentItem] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-tumbler-pathView.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tumbler-pathView.qml new file mode 100644 index 00000000..408b7479 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tumbler-pathView.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls + +//! [contentItem] +Tumbler { + id: tumbler + + contentItem: PathView { + id: pathView + model: tumbler.model + delegate: tumbler.delegate + clip: true + pathItemCount: tumbler.visibleItemCount + 1 + preferredHighlightBegin: 0.5 + preferredHighlightEnd: 0.5 + dragMargin: width / 2 + + path: Path { + startX: pathView.width / 2 + startY: -pathView.delegateHeight / 2 + PathLine { + x: pathView.width / 2 + y: pathView.pathItemCount * pathView.delegateHeight - pathView.delegateHeight / 2 + } + } + + property real delegateHeight: tumbler.availableHeight / tumbler.visibleItemCount + } +} +//! [contentItem] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-tumbler-timePicker.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tumbler-timePicker.qml new file mode 100644 index 00000000..d9edb2cb --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-tumbler-timePicker.qml @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [tumbler] +import QtQuick +import QtQuick.Window +import QtQuick.Controls + +Rectangle { + width: frame.implicitWidth + 10 + height: frame.implicitHeight + 10 + + function formatText(count, modelData) { + var data = count === 12 ? modelData + 1 : modelData; + return data.toString().length < 2 ? "0" + data : data; + } + + FontMetrics { + id: fontMetrics + } + + Component { + id: delegateComponent + + Label { + text: formatText(Tumbler.tumbler.count, modelData) + opacity: 1.0 - Math.abs(Tumbler.displacement) / (Tumbler.tumbler.visibleItemCount / 2) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + font.pixelSize: fontMetrics.font.pixelSize * 1.25 + } + } + + Frame { + id: frame + padding: 0 + anchors.centerIn: parent + + Row { + id: row + + Tumbler { + id: hoursTumbler + model: 12 + delegate: delegateComponent + } + + Tumbler { + id: minutesTumbler + model: 60 + delegate: delegateComponent + } + + Tumbler { + id: amPmTumbler + model: ["AM", "PM"] + delegate: delegateComponent + } + } + } +} +//! [tumbler] diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-universal-accent.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-universal-accent.qml new file mode 100644 index 00000000..f429359e --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-universal-accent.qml @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Layouts +import QtQuick.Controls +import QtQuick.Controls.Universal + +Pane { + padding: 10 + +//! [1] +Button { + text: qsTr("Button") + highlighted: true + Universal.accent: Universal.Orange +} +//! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-universal-background.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-universal-background.qml new file mode 100644 index 00000000..558618e6 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-universal-background.qml @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls +import QtQuick.Controls.Universal + +Pane { + padding: 10 + +//! [1] +Pane { + Universal.background: Universal.Steel + + Button { + text: qsTr("Button") + } +} +//! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-universal-foreground.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-universal-foreground.qml new file mode 100644 index 00000000..39a292d8 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-universal-foreground.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls +import QtQuick.Controls.Universal + +Pane { + padding: 10 + +//! [1] +Button { + text: qsTr("Button") + Universal.foreground: Universal.Pink +} +//! [1] +} diff --git a/src/quickcontrols2/doc/snippets/qtquickcontrols2-universal-theme.qml b/src/quickcontrols2/doc/snippets/qtquickcontrols2-universal-theme.qml new file mode 100644 index 00000000..b55bf188 --- /dev/null +++ b/src/quickcontrols2/doc/snippets/qtquickcontrols2-universal-theme.qml @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls +import QtQuick.Controls.Universal + +Pane { + padding: 10 + +//! [1] +Pane { + Universal.theme: Universal.Dark + + Button { + text: qsTr("Button") + } +} +//! [1] +} diff --git a/src/quickcontrols2/doc/src/external-pages.qdoc b/src/quickcontrols2/doc/src/external-pages.qdoc new file mode 100644 index 00000000..05005798 --- /dev/null +++ b/src/quickcontrols2/doc/src/external-pages.qdoc @@ -0,0 +1,36 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \externalpage https://doc.qt.io/qt-5/qtquickcontrols2-differences.html + \title Qt 5.15: Qt Quick Controls vs Qt Quick Controls 1 +*/ + +/*! + \externalpage https://doc.qt.io/qtcreator/creator-project-creating.html#selecting-project-type + \title Qt Creator: Project Types +*/ diff --git a/src/quickcontrols2/doc/src/includes/customize-button-background.qdocinc b/src/quickcontrols2/doc/src/includes/customize-button-background.qdocinc new file mode 100644 index 00000000..0acad02d --- /dev/null +++ b/src/quickcontrols2/doc/src/includes/customize-button-background.qdocinc @@ -0,0 +1,25 @@ +//! [file] +\qml +import QtQuick +import QtQuick.Controls + +ApplicationWindow { + width: 400 + height: 400 + visible: true + + Button { + id: button + text: "A Special Button" + background: Rectangle { + implicitWidth: 100 + implicitHeight: 40 + color: button.down ? "#d6d6d6" : "#f6f6f6" + border.color: "#26282a" + border.width: 1 + radius: 4 + } + } +} +\endqml +//! [file] diff --git a/src/quickcontrols2/doc/src/includes/inputmethodhints.qdocinc b/src/quickcontrols2/doc/src/includes/inputmethodhints.qdocinc new file mode 100644 index 00000000..73710e1e --- /dev/null +++ b/src/quickcontrols2/doc/src/includes/inputmethodhints.qdocinc @@ -0,0 +1,38 @@ +//! [flags] +The value is a bit-wise combination of flags or \c Qt.ImhNone if no hints are set. + +Flags that alter behavior are: + +\list +\li Qt.ImhHiddenText - Characters should be hidden, as is typically used when entering passwords. +\li Qt.ImhSensitiveData - Typed text should not be stored by the active input method + in any persistent storage like predictive user dictionary. +\li Qt.ImhNoAutoUppercase - The input method should not try to automatically switch to upper case + when a sentence ends. +\li Qt.ImhPreferNumbers - Numbers are preferred (but not required). +\li Qt.ImhPreferUppercase - Upper case letters are preferred (but not required). +\li Qt.ImhPreferLowercase - Lower case letters are preferred (but not required). +\li Qt.ImhNoPredictiveText - Do not use predictive text (i.e. dictionary lookup) while typing. + +\li Qt.ImhDate - The text editor functions as a date field. +\li Qt.ImhTime - The text editor functions as a time field. +\endlist + +Flags that restrict input (exclusive flags) are: + +\list +\li Qt.ImhDigitsOnly - Only digits are allowed. +\li Qt.ImhFormattedNumbersOnly - Only number input is allowed. This includes decimal point and minus sign. +\li Qt.ImhUppercaseOnly - Only upper case letter input is allowed. +\li Qt.ImhLowercaseOnly - Only lower case letter input is allowed. +\li Qt.ImhDialableCharactersOnly - Only characters suitable for phone dialing are allowed. +\li Qt.ImhEmailCharactersOnly - Only characters suitable for email addresses are allowed. +\li Qt.ImhUrlCharactersOnly - Only characters suitable for URLs are allowed. +\endlist + +Masks: + +\list +\li Qt.ImhExclusiveInputMask - This mask yields nonzero if any of the exclusive flags are used. +\endlist +//! [flags] diff --git a/src/quickcontrols2/doc/src/includes/qquickcontrol-background.qdocinc b/src/quickcontrols2/doc/src/includes/qquickcontrol-background.qdocinc new file mode 100644 index 00000000..02d92de0 --- /dev/null +++ b/src/quickcontrols2/doc/src/includes/qquickcontrol-background.qdocinc @@ -0,0 +1,13 @@ +//! [notes] + +\note If the background item has no explicit size specified, it automatically + follows the control's size. In most cases, there is no need to specify + width or height for a background item. + +\note Most controls use the implicit size of the background item to calculate +the implicit size of the control itself. If you replace the background item +with a custom one, you should also consider providing a sensible implicit +size for it (unless it is an item like \l Image which has its own implicit +size). + +//! [notes] diff --git a/src/quickcontrols2/doc/src/includes/qquickcontrol-focusreason.qdocinc b/src/quickcontrols2/doc/src/includes/qquickcontrol-focusreason.qdocinc new file mode 100644 index 00000000..b69e9e60 --- /dev/null +++ b/src/quickcontrols2/doc/src/includes/qquickcontrol-focusreason.qdocinc @@ -0,0 +1,15 @@ +This property holds the reason of the last focus change. + +\note This property does not indicate whether the control has \l {Item::activeFocus} + {active focus}, but the reason why the control either gained or lost focus. + +\value Qt.MouseFocusReason A mouse action occurred. +\value Qt.TabFocusReason The Tab key was pressed. +\value Qt.BacktabFocusReason A Backtab occurred. The input for this may include the Shift or Control keys; e.g. Shift+Tab. +\value Qt.ActiveWindowFocusReason The window system made this window either active or inactive. +\value Qt.PopupFocusReason The application opened/closed a pop-up that grabbed/released the keyboard focus. +\value Qt.ShortcutFocusReason The user typed a label's buddy shortcut +\value Qt.MenuBarFocusReason The menu bar took focus. +\value Qt.OtherFocusReason Another reason, usually application-specific. + +\sa Item::activeFocus diff --git a/src/quickcontrols2/doc/src/includes/qquickdial.qdocinc b/src/quickcontrols2/doc/src/includes/qquickdial.qdocinc new file mode 100644 index 00000000..3370b3d8 --- /dev/null +++ b/src/quickcontrols2/doc/src/includes/qquickdial.qdocinc @@ -0,0 +1,13 @@ +//! [inputMode] +Dial supports three \l {inputMode}{input modes}: \c Dial.Circular, +\c Dial.Horizontal and \c Dial.Vertical. The circular input mode operates on an +absolute input system, where the position of the cursor within the dial +directly reflects its value. The horizontal and vertical input modes use a +relative input system, where changes in the cursor's position are "added" to +the value of the dial. + +The following image illustrates the directions in which the various input modes +track movement: + +\image qtquickcontrols2-dial-inputmode.png +//! [inputMode] diff --git a/src/quickcontrols2/doc/src/includes/qquickicon.qdocinc b/src/quickcontrols2/doc/src/includes/qquickicon.qdocinc new file mode 100644 index 00000000..beef5624 --- /dev/null +++ b/src/quickcontrols2/doc/src/includes/qquickicon.qdocinc @@ -0,0 +1,50 @@ +//! [grouped-properties] +\table +\header + \li Name + \li Description +\row + \li name + \li This property holds the name of the icon to use. + + The icon will be loaded from the platform theme. If the icon is found + in the theme, it will always be used; even if \l icon.source is also set. + If the icon is not found, \l icon.source will be used instead. + + For more information on theme icons, see \l {QIcon::fromTheme()}. +\row + \li source + \li This property holds the name of the icon to use. + + The icon will be loaded as a regular image. + + If \l icon.name is set and refers to a valid theme icon, it will always + be used instead of this property. +\row + \li width + \li This property holds the width of the icon. + + The icon's width will never exceed this value, though it will + shrink when necessary. +\row + \li height + \li This property holds the height of the icon. + + The icon's height will never exceed this value, though it will + shrink when necessary. +\row + \li color + \li This property holds the color of the icon. + + The icon is tinted with the specified color, unless the color is + set to \c "transparent". + +\row + \li cache + \li This property specifies whether the icon should be cached. + + The default value is true. + + This property was introduced in QtQuick.Controls 2.13. +\endtable +//! [grouped-properties] diff --git a/src/quickcontrols2/doc/src/includes/qquickimaginestyle.qdocinc b/src/quickcontrols2/doc/src/includes/qquickimaginestyle.qdocinc new file mode 100644 index 00000000..f6fe5a97 --- /dev/null +++ b/src/quickcontrols2/doc/src/includes/qquickimaginestyle.qdocinc @@ -0,0 +1,57 @@ +//! [conf] +\table + \header + \li Variable + \li Description + \row + \li \c Path + \li Specifies the \l {imagine-path-attached-prop}{path} to the directory that contains + the Imagine style assets. If not specified, the built-in assets are used. + + For example, to specify a path to a directory stored in the + \l {The Qt Resource System}{resource system}: + + \badcode + [Imagine] + Path=:/imagine-assets + \endcode + + To specify a relative path to a local directory: + + \badcode + [Imagine] + Path=imagine-assets + \endcode + + \note Due to a technical limitation, the path should not be named + \e "imagine" if it is relative to the \c qtquickcontrols2.conf file. +\endtable +//! [conf] + +//! [env] +\table + \header + \li Variable + \li Description + \row + \li \c QT_QUICK_CONTROLS_IMAGINE_PATH + \li Specifies the path to the directory that contains the Imagine style assets. + If not specified, the built-in assets are used. + + For example, to specify a path to a directory stored in the + \l {The Qt Resource System}{resource system}: + + \badcode + QT_QUICK_CONTROLS_IMAGINE_PATH=:/imagine-assets + \endcode + + To specify a relative path to a local directory: + + \badcode + QT_QUICK_CONTROLS_IMAGINE_PATH=imagine-assets + \endcode + + \note Due to a technical limitation, the path should not be named + \e "imagine" if it is relative to the \c qtquickcontrols2.conf file. +\endtable +//! [env] diff --git a/src/quickcontrols2/doc/src/includes/qquickmaterialstyle.qdocinc b/src/quickcontrols2/doc/src/includes/qquickmaterialstyle.qdocinc new file mode 100644 index 00000000..72c97bb6 --- /dev/null +++ b/src/quickcontrols2/doc/src/includes/qquickmaterialstyle.qdocinc @@ -0,0 +1,79 @@ +//! [conf] +\table + \header + \li Variable + \li Description + \row + \li \c Theme + \li Specifies the default \l {material-theme-attached-prop}{Material theme}. + The value can be one of the available themes, for example \c "Dark". + \row + \li \c Variant + \li Specifies the Material variant. The Material Design has two + variants: a normal variant designed for touch devices, and a dense + variant for desktop. The dense variant uses smaller sizes for + controls and their fonts. + + The value can be \c "Normal" or \c "Dense". + \row + \li \c Accent + \li Specifies the default \l {material-accent-attached-prop}{Material accent color}. + The value can be any \l {colorbasictypedocs}{color}, but it is recommended to use + one of the \l {pre-defined Material colors}, for example \c "Teal". + \row + \li \c Primary + \li Specifies the default \l {material-primary-attached-prop}{Material primary color}. + The value can be any \l {colorbasictypedocs}{color}, but it is recommended to use + one of the \l {pre-defined Material colors}, for example \c "BlueGrey". + \row + \li \c Foreground + \li Specifies the default \l {material-foreground-attached-prop}{Material foreground color}. + The value can be any \l {colorbasictypedocs}{color}, or one of the \l {pre-defined Material colors}, + for example \c "Brown". + \row + \li \c Background + \li Specifies the default \l {material-background-attached-prop}{Material background color}. + The value can be any \l {colorbasictypedocs}{color}, or one of the \l {pre-defined Material colors}, + for example \c "Grey". +\endtable +//! [conf] + +//! [env] +\table + \header + \li Variable + \li Description + \row + \li \c QT_QUICK_CONTROLS_MATERIAL_THEME + \li Specifies the default \l {material-theme-attached-prop}{Material theme}. + The value can be one of the available themes, for example \c "Dark". + \row + \li \c QT_QUICK_CONTROLS_MATERIAL_VARIANT + \li Specifies the Material variant. The Material Design has two + variants: a normal variant designed for touch devices, and a dense + variant for desktop. The dense variant uses smaller sizes for + controls and their fonts. + + The value can be \c "Normal" or \c "Dense". + \row + \li \c QT_QUICK_CONTROLS_MATERIAL_ACCENT + \li Specifies the default \l {material-accent-attached-prop}{Material accent color}. + The value can be any \l {colorbasictypedocs}{color}, but it is recommended to use + one of the \l {pre-defined Material colors}, for example \c "Teal". + \row + \li \c QT_QUICK_CONTROLS_MATERIAL_PRIMARY + \li Specifies the default \l {material-primary-attached-prop}{Material primary color}. + The value can be any \l {colorbasictypedocs}{color}, but it is recommended to use + one of the \l {pre-defined Material colors}, for example \c "BlueGrey". + \row + \li \c QT_QUICK_CONTROLS_MATERIAL_FOREGROUND + \li Specifies the default \l {material-foreground-attached-prop}{Material foreground color}. + The value can be any \l {colorbasictypedocs}{color}, or one of the \l {pre-defined Material colors}, + for example \c "Brown". + \row + \li \c QT_QUICK_CONTROLS_MATERIAL_BACKGROUND + \li Specifies the default \l {material-background-attached-prop}{Material background color}. + The value can be any \l {colorbasictypedocs}{color}, or one of the \l {pre-defined Material colors}, + for example \c "Grey". +\endtable +//! [env] diff --git a/src/quickcontrols2/doc/src/includes/qquickoverlay-popup-parent.qdocinc b/src/quickcontrols2/doc/src/includes/qquickoverlay-popup-parent.qdocinc new file mode 100644 index 00000000..5562f6a0 --- /dev/null +++ b/src/quickcontrols2/doc/src/includes/qquickoverlay-popup-parent.qdocinc @@ -0,0 +1,20 @@ +The following example uses the attached \l {Overlay::overlay}{Overlay.overlay} +property to position a popup in the center of the window, despite the position +of the button that opens the popup: + +\code +Button { + onClicked: popup.open() + + Popup { + id: popup + + parent: Overlay.overlay + + x: Math.round((parent.width - width) / 2) + y: Math.round((parent.height - height) / 2) + width: 100 + height: 100 + } +} +\endcode diff --git a/src/quickcontrols2/doc/src/includes/qquickpopup-padding.qdocinc b/src/quickcontrols2/doc/src/includes/qquickpopup-padding.qdocinc new file mode 100644 index 00000000..31f5d2db --- /dev/null +++ b/src/quickcontrols2/doc/src/includes/qquickpopup-padding.qdocinc @@ -0,0 +1,10 @@ +//! [padding] + +The padding properties are used to control the geometry of the +\l {contentItem}{content item}. + +Popup uses the same approach to padding as \l {Control::padding}{Control}. +For a visual explanation of the padding system, see the \l {Control Layout} +section of the documentation. + +//! [padding] diff --git a/src/quickcontrols2/doc/src/includes/qquickstackview.qdocinc b/src/quickcontrols2/doc/src/includes/qquickstackview.qdocinc new file mode 100644 index 00000000..20c9bdc3 --- /dev/null +++ b/src/quickcontrols2/doc/src/includes/qquickstackview.qdocinc @@ -0,0 +1,5 @@ +//! [pop-ownership] +Only items that StackView created itself (from a \l Component or \l [QML] +url) will be destroyed when popped. See \l {Item Ownership} for more +information. +//! [pop-ownership] diff --git a/src/quickcontrols2/doc/src/includes/qquickswipedelegate-interaction.qdocinc b/src/quickcontrols2/doc/src/includes/qquickswipedelegate-interaction.qdocinc new file mode 100644 index 00000000..05aeadb6 --- /dev/null +++ b/src/quickcontrols2/doc/src/includes/qquickswipedelegate-interaction.qdocinc @@ -0,0 +1,5 @@ +Both interactive and non-interactive items can be used here. Normal +event handling rules apply; if an interactive control like \l Button +is used, interaction signals of SwipeDelegate such as +\l {AbstractButton::}{clicked()} will not get emitted if the button +is clicked. diff --git a/src/quickcontrols2/doc/src/includes/qquickswitch.qdocinc b/src/quickcontrols2/doc/src/includes/qquickswitch.qdocinc new file mode 100644 index 00000000..985f85d9 --- /dev/null +++ b/src/quickcontrols2/doc/src/includes/qquickswitch.qdocinc @@ -0,0 +1,28 @@ +//! [position] + +This property holds the logical position of the thumb indicator. + +The position is expressed as a fraction of the indicator's size, in the range +\c 0.0 - \c 1.0. The position can be used for example to determine whether +the thumb has been dragged past the halfway point. For visualizing a thumb +indicator, the right-to-left aware \l visualPosition should be used instead. + +\sa visualPosition + +//! [position] + + +//! [visualPosition] + +This property holds the visual position of the thumb indicator. + +The position is expressed as a fraction of the indicator's size, in the range +\c 0.0 - \c 1.0. When the control is \l {Control::mirrored}{mirrored}, the +value is equal to \c {1.0 - position}. This makes the value suitable for +visualizing the thumb indicator taking right-to-left support into account. +In order to for example determine whether the thumb has been dragged past +the halfway point, the logical \l position should be used instead. + +\sa position + +//! [visualPosition] diff --git a/src/quickcontrols2/doc/src/includes/qquickuniversalstyle.qdocinc b/src/quickcontrols2/doc/src/includes/qquickuniversalstyle.qdocinc new file mode 100644 index 00000000..a7ecbaef --- /dev/null +++ b/src/quickcontrols2/doc/src/includes/qquickuniversalstyle.qdocinc @@ -0,0 +1,53 @@ +//! [conf] +\table + \header + \li Variable + \li Description + \row + \li \c Theme + \li Specifies the default \l {universal-theme-attached-prop}{Universal theme}. + The value can be one of the available themes, for example \c "Dark". + \row + \li \c Accent + \li Specifies the default \l {universal-accent-attached-prop}{Universal accent color}. + The value can be any \l {colorbasictypedocs}{color}, but it is recommended to use + one of the \l {pre-defined Universal colors}, for example \c "Violet". + \row + \li \c Foreground + \li Specifies the default \l {universal-foreground-attached-prop}{Universal foreground color}. + The value can be any \l {colorbasictypedocs}{color}, or one of the \l {pre-defined Universal colors}, + for example \c "Brown". + \row + \li \c Background + \li Specifies the default \l {universal-background-attached-prop}{Universal background color}. + The value can be any \l {colorbasictypedocs}{color}, or one of the \l {pre-defined Universal colors}, + for example \c "Steel". +\endtable +//! [conf] + +//! [env] +\table + \header + \li Variable + \li Description + \row + \li \c QT_QUICK_CONTROLS_UNIVERSAL_THEME + \li Specifies the default \l {universal-theme-attached-prop}{Universal theme}. + The value can be one of the available themes, for example \c "Dark". + \row + \li \c QT_QUICK_CONTROLS_UNIVERSAL_ACCENT + \li Specifies the default \l {universal-accent-attached-prop}{Universal accent color}. + The value can be any \l {colorbasictypedocs}{color}, but it is recommended to use + one of the \l {pre-defined Universal colors}, for example \c "Violet". + \row + \li \c QT_QUICK_CONTROLS_UNIVERSAL_FOREGROUND + \li Specifies the default \l {universal-foreground-attached-prop}{Universal foreground color}. + The value can be any \l {colorbasictypedocs}{color}, or one of the \l {pre-defined Universal colors}, + for example \c "Brown". + \row + \li \c QT_QUICK_CONTROLS_UNIVERSAL_BACKGROUND + \li Specifies the default \l {universal-background-attached-prop}{Universal background color}. + The value can be any \l {colorbasictypedocs}{color}, or one of the \l {pre-defined Universal colors}, + for example \c "Steel". +\endtable +//! [env] diff --git a/src/quickcontrols2/doc/src/qt6-changes.qdoc b/src/quickcontrols2/doc/src/qt6-changes.qdoc new file mode 100644 index 00000000..efc1b84b --- /dev/null +++ b/src/quickcontrols2/doc/src/qt6-changes.qdoc @@ -0,0 +1,305 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols-changes-qt6.html + \title Changes to Qt Quick Controls + \ingroup changes-qt-5-to-6 + \brief Migrate Qt Quick Controls to Qt 6. + + Qt 6 is a result of the conscious effort to make the framework more + efficient and easy to use. + + We try to maintain compatibility for all the public APIs in each release. + Some changes were inevitable in an effort to make Qt a better framework. + + In this topic we summarize those changes in Qt Quick Controls, and provide + guidance to handle them. + + \section1 Migrating from Qt Quick Controls 1 + + Qt Quick Controls 1 was deprecated in Qt 5.11 and is removed from + Qt 6.0. Use Qt Quick Controls (previously known as Qt Quick Controls 2) + instead. For more information, refer to the + \l{Qt 5.15: Qt Quick Controls vs Qt Quick Controls 1} topic in the Qt 5 + documentation. + + \section1 Type registration changes + + Qt Quick Controls has undergone some large, mostly internal changes in Qt + 6. By making use of the improved type registration introduced in Qt 5.15, + we pave the way for compilation of the module's QML files to C++ and enable + tooling to become more effective. In particular, Qt Creator's QML code + model should have a more complete picture of types, making its completion + and error checking of Qt Quick Controls code more reliable. Static analysis + tools like qmllint and qmlformat also benefit by becoming aware of the + types that are now declared at compile time in C++. + + As a result of these changes, some things are done a little differently. + + \section2 Custom styles are now proper QML modules + + To enable compile time type registration, each Qt Quick Controls style is + now a proper QML module. Previously, a single \c Button.qml was sufficient + to create your own style. While convenient, this required some non-standard + API, which in turn required adaptation in tooling like Qt Designer. + + Now, all QML types that a style implements must be declared in that style's + qmldir file: + + \code + module MyStyle + Button 1.0 Button.qml + \endcode + + \omit + TODO: Once we have documentation for the CMake function qt6_add_qml_module, + this would be a good place to link to it, stating that you don't have to + manually write the qmldir files. + \endomit + + By unifying this with the rest of the QML world, styles become more + familiar to developers and hopefully easier to understand for beginners. As + a consequence, the following API had to be removed: + + \list + \li QQuickStyle::addStylePath() + \li QQuickStyle::availableStyles() + \li QQuickStyle::path() + \li QQuickStyle::stylePathList() + \li QT_QUICK_CONTROLS_STYLE_PATH + \endlist + + Now that the styles are required to be found in the QML engine's import + path like any other QML module, it is no longer necessary or possible to + support this API. + + \section3 Style names + + In addition, there is now only one valid, case-sensitive form for style + names: "Material", "MyStyle", and so on. That is: the style name must + exactly match the name of the QML module. This also applies to file + selectors, where previously, all style names were lower case. For example, + where the following was a valid structure for a Qt 5 project: + + \badcode + MyProject + ├── main.qml + ├── HomePage.qml + └── +material + └───HomePage.qml + \endcode + + In Qt 6, \c +material becomes \c +Material: + + \badcode + MyProject + ├── main.qml + ├── HomePage.qml + └── +Material + └───HomePage.qml + \endcode + + All of the existing ways to \l {Using Styles in Qt Quick Controls}{run an + application with a specific style} are still supported. + + \section2 Runtime and compile time style selection + + Importing a style now has extra meaning due to the way that imports work + internally. Previously, importing \c QtQuick.Controls would register the + control types from the current style with the QML engine: + + \qml + import QtQuick.Controls + \endqml + + We refer to this as runtime style selection, as the style is selected at + runtime. + + Explicitly importing \c QtQuick.Controls.Material would then simply expose + any extra API provided by that style (for example, the attached Material + type): + + \qml + import QtQuick.Controls.Material + \endqml + + Now, explicitly importing a style does both. + + This effectively means that the control types (like Button) from the last + imported style will be used. We refer to this as compile time style + selection. + + This has implications for existing code. Namely, if your application + supports more than one style, move these imports into their own QML files + that are file-selected. + + For example, if you have the following \c main.qml: + + \qml + import QtQuick.Controls + import QtQuick.Controls.Material + import QtQuick.Controls.Universal + + ApplicationWindow { + width: 600 + height: 400 + visible: true + + Material.theme: darkMode ? Material.Dark : Material.Light + Universal.theme: darkMode ? Universal.Dark : Universal.Light + + // Child items, etc. + } + \endqml + + You can move the common code into a "base" component: + + \qml + // MainWindow.qml + + import QtQuick.Controls + + ApplicationWindow {} + \endqml + + Then, add a \c +Material subdirectory, and in it, add the Material-specific code into \c MainWindow.qml: + + \qml + // +Material/MainWindow.qml + + import QtQuick.Controls.Material + + ApplicationWindow { + Material.theme: darkMode ? Material.Dark : Material.Light + } + \endqml + + Do the same for Universal: + + \qml + // +Universal/MainWindow.qml + + import QtQuick.Controls.Universal + + ApplicationWindow { + Universal.theme: darkMode ? Universal.Dark : Universal.Light + } + \endqml + + Then, in \c main.qml: + + \qml + import QtQuick.Controls + + MainWindow { + width: 600 + height: 400 + visible: true + + // Child items, etc. + } + \endqml + + See also: \l {Using File Selectors with Qt Quick Controls}. + + \section1 Default Style + + The Default style was renamed to "Basic", as it is no longer the default + style. Instead, the default style is now chosen based on the platform + that Qt was built for: + + \list + \li Android: \l {Material Style} + \li Linux: \l {Fusion Style} + \li macOS: \macos Style + \li Windows: Windows Style + \li All other platforms: \l {Basic Style} + \endlist + + Therefore, applications that didn't specify a style in Qt 5 and have customized + controls should \l {Using Styles in Qt Quick Controls}{explicitly specify} + the Basic style in Qt 6 to ensure that those controls look and behave as + they did with Qt 5. + + \section1 Palette + + The palette API was moved to QQuickItem. The various APIs that use palettes + in Qt Quick Controls are unchanged. + + \section1 Controls + + \section2 ApplicationWindow + + The deprecated overlay properties and attached API were removed. Use the + \l Overlay attached type instead. + + \section2 ComboBox + + The \l {ComboBox::}{pressed} property is now read-only. To modify the + visual pressed state of a ComboBox, use the \l {ComboBox::}{down} property + instead. + + \section2 Container + + The deprecated \c removeItem(var) function was removed. + \l {Container::}{removeItem(Item)} or \l {Container::}{takeItem(int)} can + be used instead. + + \section2 Dialog + + \l {Dialog}'s \l {Dialog::}{accepted()} and \l {Dialog::}{rejected()} + signals are now emitted before \l {Popup::}{closed()} when calling + \l {Dialog::}{done()}, \l {Dialog::}{accept()} and \l {Dialog::}{reject()}. + + \section2 Menu + + The deprecated \c removeItem(var) function was removed. + \l {Menu::}{removeItem(Item)} or \l {Menu::}{takeItem(int)} can be used + instead. + + \section2 ToolTip + + \l {ToolTip}'s timeout now begins only after \l {Popup::}{opened()} has + been emitted. This results in tooltips with enter transitions being visible + for the entire duration of the timeout property. This means that they are + visible slightly longer than they were before, so it may be worthwhile to + visually check tooltips in your application and adjust timeouts if + necessary. + + \section2 StackView + + The StackView.Transition enum value was deprecated. The operation argument + can be omitted in order to use the default transition for any given + operation. + + \section2 Tumbler + + \l {Item::}{implicitWidth} and \l {Item::}{implicitHeight} must now be + provided for \l {Tumbler}'s \l {Control::}{contentItem}, making it + consistent with all other controls. +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-basic.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-basic.qdoc new file mode 100644 index 00000000..ee8d3ce4 --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-basic.qdoc @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-basic.html + \title Basic Style + + The Basic style is a basic all-round style. + + The Basic style is a simple and light-weight style that offers the maximum + performance for Qt Quick Controls. It is built with a minimal amount of Qt + Quick primitives, and keeps animations and transitions to the minimum. + + \image qtquickcontrols2-basic.png + + The style is selected by default when running Qt Quick Controls applications. + It is built into the module's resources, so by default it is shipped with + any application that depends on the Qt Quick Controls module + + \note The Basic style is used as a fallback for other styles. If a style + does not implement a certain control, the Basic style implementation of + that control is selected. + + \b {See also} \l {Material Style}, \l {Universal Style} + + \section1 Related Information + + \list + \li \l{Styling Qt Quick Controls} + \endlist +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-buttons.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-buttons.qdoc new file mode 100644 index 00000000..6a4c5926 --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-buttons.qdoc @@ -0,0 +1,191 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-buttons.html + \title Button Controls + \ingroup qtquickcontrols2-guidelines + \brief Guidelines for button controls + + Qt Quick Controls offers a selection of button-like controls. + + \annotatedlist qtquickcontrols2-buttons + + Each type of button has its own specific use case. The following + sections offer guidelines for choosing the appropriate type of button, + depending on the use case. + + \section1 Button Control + + \l Button is a clickable control that starts an action, or opens or + closes a popup. A button usually has a text label but it can also + contain an icon. + + Button is a very suitable control when a popup or dialog needs + to perform an action. The most common examples are Apply, Cancel, + Save, Close and Help. + + \image qtquickcontrols2-button.gif + + Recommendations: + + \list + \li The button's text should be a verb describing the action, or a noun matching + the title of the popup that will be opened. + \li Don't use a button to set state. \l Switch is more suitable for that. + \li Use the default font unless you have UI guidelines specifying otherwise. + \li If the text is localized, consider the influence of a longer text on the layout. + \endlist + + \b {See also} \l Button and \l AbstractButton + + \section1 CheckBox Control + + \image qtquickcontrols2-checkbox.gif + + \l CheckBox is used to build multi-selection option lists. Any number of + options can be selected, including none, but the options should + not be mutually exclusive. + + Use a single CheckBox for a yes/no choice, such as when you have + to accept the terms of service agreement in a form. + + For a single yes/no choice, it is also possible to use a switch. If the choice + concerns an option, it is best to use a CheckBox. If it concerns action to + be taken, a switch is recommended. + + When options can be grouped, you can use a partially checked CheckBox to + represent the whole group. Use the checkbox's + \l {CheckBox::checkState}{partially checked state} when a user selects + some, but not all, sub-items in the group. + + The three availables check states are: checked, partially checked and + unchecked. + + The checkable options are often listed vertically. + + Recommendations: + \list + \li The checkbox label should be a statement that the check mark makes true, + and that the absence of a check mark makes false. + \li The checkbox label should not contain a negative statement. + \li Use the default font, unless you have UI guidelines specifying otherwise. + \li If the text is localized, consider the influence of a longer text on the layout. + \endlist + + \b {See also} \l CheckBox + + \section1 DelayButton Control + + \l DelayButton is a button that incorporates a delay before triggering an action. + This delay prevents accidental presses. + + \image qtquickcontrols2-delaybutton.gif + + Recommendations: + \list + \li Use in touch user interfaces. + \li Use for actions that must be triggered with care. + \endlist + + \b {See also} \l Button and \l AbstractButton + + \section1 RadioButton Control + + \image qtquickcontrols2-radiobutton.gif + + \l RadioButton is used to select only one option from a set of options. + Selecting one option automatically deselects the one selected before. + + If there are only two mutually exclusive options, combine them into a + single checkbox or a switch. + + Recommendations: + + \list + \li Limit the label text to one line. + \li Ensure that a sensible default option is checked. + \li List RadioButton options vertically. + \li If the text is localized, consider the influence of a longer text on the layout. + \li Use the default font, unless you have UI guidelines that specify otherwise. + \li Just like with CheckBox, do not make the list too large. + \li In order to avoid confusion, do not put two groups of radio buttons next to each + other. + \endlist + + \b {See also} \l RadioButton + + \section1 RoundButton Control + + \l RoundButton is a clickable control that starts an action, or opens or + closes a popup. A round button with a square image icon or one-letter font + icon is circular. A circular RoundButton takes less space than a normal + \l Button, and can also be used as a floating action button. + + \image qtquickcontrols2-roundbutton.png + + Recommendations: + + \list + \li Keep labels short and concise. + \li If the text is localized, consider the influence of a longer text on the layout. + \endlist + + \b {See also} \l RoundButton + + \section1 Switch Control + + \image qtquickcontrols2-switch.png + + \l Switch represents a physical switch that allows users to choose between an "on" + or "off" state. + Use a switch for binary operations that take effect immediately after it has been + switched on. For example, a switch to turn WIFI on or off. + + Recommendations: + + \list + \li Keep labels short and concise. + \li If the text is localized, consider the influence of a longer text on the layout. + \endlist + + \b {See also} \l Switch + + \section1 ToolButton Control + + \image qtquickcontrols2-toolbutton.png + + \l ToolButton is nearly identical to \l Button, but it has a graphical + appearance that makes it more suitable for insertion into a \l ToolBar. + + \b {See also} \l ToolButton + + \section1 Related Information + \list + \li \l {Qt Quick Controls Guidelines} + \endlist +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-configuration.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-configuration.qdoc new file mode 100644 index 00000000..8ac2b275 --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-configuration.qdoc @@ -0,0 +1,204 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-configuration.html + \keyword Qt Quick Controls Configuration File + \title Qt Quick Controls Configuration File + \keyword Qt Quick Controls 2 Configuration File + + Qt Quick Controls support a special configuration file, \c qtquickcontrols2.conf, + which is built into an application's resources. + + The configuration file can specify the preferred style and certain style-specific + attributes. The following example specifies that the preferred style is the \l {Material style}. + Furthermore, when the application is run with the Material style, its theme is light and the + accent and primary colors are teal and blue grey, respectively. However, if the application + is run with the \l {Universal style} instead, the accent color is red and the appropriate theme + is chosen based on the system theme colors. + + \code + [Controls] + Style=Material + + [Universal] + Theme=System + Accent=Red + + [Material] + Theme=Light + Accent=Teal + Primary=BlueGrey + \endcode + + It is possible to specify a custom location for the configuration file with + the \l {Supported Environment Variables in Qt Quick Controls} + {QT_QUICK_CONTROLS_CONF} environment variable. + + \section1 Controls Section + + The following values can be specified in a \c Controls section of the + configuration file: + + \table + \header + \li Variable + \li Description + \row + \li \c Style + \li Specifies the style to run the application with. + The value can be the name of one of the \l {Available Styles}{built-in styles} + or a \l {Creating a Custom Style}{custom style}. + \row + \li \c FallbackStyle + \li Specifies the style to use for controls that are not implemented. + The style must be one of the \l {Available Styles}{built-in styles}. + By default, the \l {Basic Style}{Basic} style is used. + \endtable + + \section1 Imagine Section + + The following table lists values that can be used to configure the + \l {Imagine style} in an \c Imagine section of the configuration file: + + \include qquickimaginestyle.qdocinc conf + + \section1 Material Section + + The following table lists values that can be used to configure the + \l {Material style} in a \c Material section of the configuration file: + + \include qquickmaterialstyle.qdocinc conf + + \section1 Universal Section + + The following table lists values that can be used to configure the + \l {Universal style} in a \c Universal section of the configuration file: + + \include qquickuniversalstyle.qdocinc conf + + \section1 Font Configuration + + The default \l {Control::font}{font} can be specified in a \c Font sub-group + in each style's section in the configuration file. The \c Font sub-group can + be defined in two alternative ways: + + \code + [Basic] + Font\Family=Open Sans + Font\PixelSize=20 + + [Material\Font] + Family=Open Sans + PixelSize=20 + \endcode + + Supported font attributes: + \table + \header + \li Variable + \li Description + \row + \li \c Family + \li The \l {QFont::family}{font family}. + \row + \li \c PointSize + \li The \l {QFont::pointSizeF}{point size}. + \row + \li \c PixelSize + \li The \l {QFont::pixelSize}{pixel size}. + \row + \li \c StyleHint + \li The \l {QFont::styleHint}{style hint}. + Available values: \c SansSerif, \c Helvetica, \c Serif, \c Times, \c TypeWriter, \c Courier, + \c OldEnglish, \c Decorative, \c Monospace, \c Fantasy, \c Cursive. + \row + \li \c Weight + \li The \l {QFont::}{weight}. Qt uses a weighting scale from \c 1 to \c 1000 compatible with OpenType. A weight of \c 1 will be thin, + whilst \c 1000 will be extremely black. + Available pre-defined weights: \c Thin (100), \c ExtraLight (200), \c Light (300), \c Normal (400), + \c Medium (500), \c DemiBold (600), \c Bold (700), \c ExtraBold (800), + \c Black (900). + \row + \li \c Style + \li The \l {QFont::}{style}. + Available values: \c StyleNormal, \c StyleItalic, \c StyleOblique. + \endtable + + \section1 Palette Configuration + + The default \c palette can be configured for each style using the + \c Palette sub-group in the configuration file. The \c Palette sub-group can be + defined in two alternative ways: + + \code + [Fusion] + Palette\Window=#dedede + Palette\WindowText=#212121 + \endcode + + or: + \code + [Fusion\Palette] + Window=#dedede + WindowText=#212121 + \endcode + + See \l [QtQuick]{Palette} QML type for more information. + + \section1 Using the Configuration File in a Project + + In order to make it possible for Qt Quick Controls to find the configuration file, + it must be built into application's resources using the \l {The Qt Resource System}. + Here's an example \c .qrc file: + + \code + + + qtquickcontrols2.conf + + + \endcode + + \note Qt Quick Controls uses a file selector to load the configuration file. It + is possible to provide a different configuration file for different platforms and + locales. See \l QFileSelector documentation for more details. + + Finally, the \c .qrc file must be listed in the application's \c .pro file so that + the build system knows about it. For example: + + \code + RESOURCES = application.qrc + \endcode + + \section1 Related Information + + \list + \li \l{Styling Qt Quick Controls} + \li \l{Supported Environment Variables in Qt Quick Controls} + \endlist +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-containers.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-containers.qdoc new file mode 100644 index 00000000..81e24c26 --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-containers.qdoc @@ -0,0 +1,113 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-containers.html + \title Container Controls + \ingroup qtquickcontrols2-guidelines + \brief Guidelines for container controls + + Qt Quick Controls offers a selection of container-like controls. + + \annotatedlist qtquickcontrols2-containers + + Each type of container can be used to group a set of controls together. + The following sections offer guidelines for choosing the appropriate type + of container, depending on the use case. + + \section1 ApplicationWindow Control + + \image qtquickcontrols2-applicationwindow-wireframe.png + + \l ApplicationWindow creates the root window of an application, and makes + it easy to add an optional header and footer to that window. + + \section1 Frame Control + + \image qtquickcontrols2-frame.png + + \l Frame is used to layout a logical group of controls together, within + a visual frame. + + \section1 GroupBox Control + + \image qtquickcontrols2-groupbox.png + + \l GroupBox is used to layout a logical group of controls together, + within a titled visual frame. + + \section1 Page Control + + \image qtquickcontrols2-page-wireframe.png + + \l Page provides page-specific header and footer items. + It is perfectly possible to use ApplicationWindow for setting the header + and the footer, but if you have a header and footer which varies per + screen, then it is better to use \l Page. + + \section1 Pane Control + + \image qtquickcontrols2-pane.png + + \l Pane provides a background color that matches with the application + style and theme. Pane does not provide a layout of its own, but requires + you to position its contents, for instance by using a \l RowLayout or + a \l ColumnLayout. + + \section1 ScrollView Control + + \image qtquickcontrols2-scrollview-wireframe.png + + \l ScrollView provides scrolling for user-defined content. + + \section1 StackView Control + + \image qtquickcontrols2-stackview-wireframe.png + + \l StackView organizes content pages into a stack using a last-in-first-out + principle: the last item to be "pushed" onto the stack is the first one to + be removed, and the top-most item is always the one that is visible. + + \section1 SwipeView Control + + \image qtquickcontrols2-swipeview-wireframe.png + + \l SwipeView organizes content pages into a swipable strip. + + \section1 TabBar Control + + \image qtquickcontrols2-tabbar-wireframe.png + + \l TabBar organizes content pages into tabs. + + \section1 ToolBar Control + + \image qtquickcontrols2-toolbar.png + + \l ToolBar is a container of application-wide and context-sensitive + actions and controls. +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-cppclasses.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-cppclasses.qdoc new file mode 100644 index 00000000..293ac6de --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-cppclasses.qdoc @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \module QtQuickControls2 + \keyword Qt Quick Controls C++ Classes + \title Qt Quick Controls C++ Classes + \keyword Qt Quick Controls 2 C++ Classes + \ingroup modules + \qtcmakepackage QuickControls2 + \qtvariable quickcontrols2 + + \brief Provides classes for setting up the controls from C++. + + The C++ types can be included into your application using the following + include statement: + + \code + #include + \endcode + + \note If you are using a few classes from this module, we recommend including + those specific classes only instead of the module. + + To link against the corresponding C++ libraries, add the following to your + qmake project file: + + \code + QT += quickcontrols2 + \endcode + + The \l{Qt Quick Controls} page contains information about how to use the + module. +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-customize.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-customize.qdoc new file mode 100644 index 00000000..ba62425f --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-customize.qdoc @@ -0,0 +1,986 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-customize.html + \keyword Customizing Qt Quick Controls 2 + \title Customizing Qt Quick Controls + \brief A set of UI controls to create user interfaces in Qt Quick + + Qt Quick Controls consist of a hierarchy (tree) of items. In order to + provide a custom look and feel, the default QML implementation of each + item can be replaced with a custom one. + + \section1 Customizing a Control + + Sometimes you'll want to create a "one-off" look for a specific part of + your UI, and use a complete style everywhere else. Perhaps you're happy + with the style you're using, but there's a certain button that has some + special significance. + + The first way to create this button is to simply define it in-place, + wherever it is needed. For example, perhaps you're not satisfied with the + Basic style's Button having square corners. To make them rounded, you + can override the \l {Control::}{background} item and set the radius + property of Rectangle: + + \include customize-button-background.qdocinc file + + The second way to create the button is good if you plan to use your rounded + button in several places. It involves moving the code into its own QML file + within your project. + + For this approach, we'll copy the background code from the Basic style's + \c Button.qml. This file can be found in the following path in your Qt + installation: + + \c {$QTDIR/qml/QtQuick/Controls/Basic/Button.qml} + + After doing that, we'll simply add the following line: + + \code + radius: 4 + \endcode + + To avoid confusion with the controls in the + module itself, we'll call the file \c MyButton.qml. To use the control in + your application, refer to it by its filename: + + \qml + import QtQuick.Controls + + ApplicationWindow { + MyButton { + text: qsTr("A Special Button") + } + } + \endqml + + The third way to create the button is a bit more structured, both in terms + of where the file sits in the file system and how it is used in QML. First, + copy an existing file as you did above, but this time, put it into a + subfolder in your project named (for example) \c controls. To use the + control, first import the folder into a namespace: + + \qml + import QtQuick.Controls + import "controls" as MyControls + + ApplicationWindow { + MyControls.Button { + text: qsTr("A Special Button") + } + } + \endqml + + As you now have the \c MyControls namespace, you can name the controls after + their actual counterparts in the Qt Quick Controls module. You can repeat + this process for any control that you wish to add. + + An added benefit of these three methods is that it's not necessary to + implement the template from scratch. + + \section1 Creating a Custom Style + + There are several ways to go about creating your own styles. Below, we'll + explain the various approaches. + + \section2 Definition of a Style + + In Qt Quick Controls, a style is essentially a set of QML files within a + single directory. There are four requirements for a style to be + \l {Using Styles in Qt Quick Controls}{usable}: + + \list + \li At least one QML file whose name matches a control (for example, + \c Button.qml) must exist. + \li Each QML file must contain the relevant type from the \l {Qt Quick Templates 2} + {QtQuick.Templates} import as the root item. For example, + Button.qml must contain a Button template as its root item. + + If we instead used the corresponding type from the \l {Qt Quick Controls} + {QtQuick.Controls} import as we did in the previous section, it would not work: + the control we were defining would try to derive from itself. + \li A \l {Module Definition qmldir Files}{qmldir} file must exist alongside + the QML file(s). Below is an example of a simple \c qmldir file for a style that + provides a button: + + \badcode + module MyStyle + Button 2.15 Button.qml + \endcode + + If you're using \l {Compile-Time Style Selection}{compile-time style + selection}, the qmldir should also import the fallback style: + + \badcode + # ... + import QtQuick.Controls.Basic auto + \endcode + + This can also be done for \l {Run-Time Style Selection}{run-time style selection} + instead of using, for example, \l QQuickStyle::setFallbackStyle(). + + The directory structure for such a style looks like this: + + \badcode + MyStyle + ├─── Button.qml + └─── qmldir + \endcode + \li The files must be in a directory that is findable via the \l {QML Import Path}. + + For example, if the path to \e MyStyle directory mentioned above was + \c /home/user/MyApp/MyStyle, then \c /home/user/MyApp must be added to + the QML import path. + + To \l {Using Styles in Qt Quick Controls}{use} \e MyStyle in \e MyApp, + refer to it by name: + + \list + \li \c {./MyApp -style MyStyle} + \endlist + + The style name must match the casing of the style directory; passing + \e mystyle or \e MYSTYLE is not supported. + \endlist + + By default, the styling system uses the Basic style as a fallback for + controls that aren't implemented. To customize or extend any other built-in + style, it is possible to specify a different fallback style using + \l[QtQuickControls2]{QQuickStyle}. + + What this means is that you can implement as many controls as you like for + your custom style, and place them almost anywhere. It also allows users to + create their own styles for your application. + + \section3 Previewing Custom Styles in Qt Quick Designer + + Using the approach above, it is possible to preview a custom style + in Qt Quick Designer. In order to do so, + ensure that the project has a + \l {Qt Quick Controls Configuration File}{qtquickcontrols2.conf} file, + and that the following entry exists: + + \badcode + [Controls] + Style=MyStyle + \endcode + + For more information, take a look at the + \l {Qt Quick Controls - Flat Style}{Flat Style example}. + + \section2 Style-specific C++ Extensions + + Sometimes you may need to use C++ to extend your custom style. There are two + ways to expose such types to QML: + + \list + \li If the style that uses the type is the only style used by an application, + it's enough to register it with the QML engine via qmlRegisterType(): + + \code + qmlRegisterType("MyApp", 1, 0, "ACoolItem"); + \endcode + + See \l {Using C++ Data From QML} for more information about this. + \li If the style that uses the type is one of many styles used by an + application, it may be better to only register it when necessary. This + is the point at which it would make sense to implement your own + \l {Creating C++ Plugins for QML}{QML plugin}. + + Using a plugin as part of your style is not that much different from + using a set of QML files. The only difference is that the plugin and + its \c qmldir file must be present in the same directory as the QML + files. + \endlist + + \section3 Considerations for custom styles + + When implementing your own style and customizing controls, there are some + points to keep in mind to ensure that your application is as performant as + possible. + + \section4 Avoid assigning an id to styles' implementations of item delegates + + As explained in \l {Definition of a Style}, when you implement your + own style for a control, you start off with the relevant template for + that control. For example, a style's \c Button.qml will be structured + similarly to this: + + \qml + T.Button { + // ... + + background: Rectangle { + // ... + } + + contentItem: Text { + // ... + } + + // ... + } + \endqml + + When you use a Button in your application, the \c background and + \c contentItem items will be created and parented to the root \c Button + item: + + \qml + // Creates the Button root item, the Rectangle background, + // and the Text contentItem. + Button { + text: qsTr("Confirm") + } + \endqml + + Suppose you then needed to do a one-off customization of the Button (as + explained in \l {Customizing a Control}): + + \include customize-button-background.qdocinc file + + In QML, this would normally result in both the default \c background + implementation and the one-off, custom \c background items being created. + Qt Quick Controls uses a technique that avoids creating both items, and + instead only creates the custom \c background, greatly improving the + creation performance of controls. + + This technique relies on the absence of an \l {The id Attribute}{id} in the + style's implementation of that item. If an id is assigned, the technique + cannot work, and both items will be created. For example, it can be + tempting to assign an id to the \c background or \c contentItem so that + other objects within the file can refer to those items: + + \qml + T.Button { + // ... + + background: Rectangle { + id: backgroundRect + // ... + } + + contentItem: Text { + // Use backgroundRect in some way... + } + + // ... + } + \endqml + + With this code, every time a Button instance with a customized background + is created, both backgrounds will be created, resulting in sub-optimal + creation performance. + + Prior to Qt 5.15, the old, unused background would be deleted to release + the resources associated with it. However, as the control does not own the + items, it should not delete them. As of Qt 5.15, old items are no longer + deleted, and so the \c backgroundRect item will live longer than it needs + to—typically until the application exits. Although the old item will be + hidden, visually unparented from the control, and removed from the + accessibility tree, it is important to keep the creation time and memory + usage of these unused items in mind when assigning an id in this context. + + \section4 Avoid imperative assignments of custom items + + The technique mentioned in the section above only works when an item is + \l {Prefer Declarative Bindings Over Imperative Assignments}{declaratively} + assigned for the first time, and so imperative assignments will result in + orphaned items. Always use declarative bindings to assign custom items + when possible. + + \section3 Attached properties + + It is common for a style to have certain properties or attributes that + apply to all controls. \l {Attached Properties and Attached Signal + Handlers}{Attached properties} are a great way of extending an item in QML + without having to modify any existing C++ belonging to that item. For + example, both the \l {Material Style}{Material} and \l {Universal + Style}{Universal} styles have an attached theme property that controls + whether an item and its children will be rendered in a light or dark theme. + + As an example, let's add an attached property that controls elevation. Our + style will illustrate the elevation with a drop shadow; the higher the + elevation, the larger the shadow. + + The first step is to \l {Qt Creator: Project Types}{create a new Qt Quick + Controls application} in Qt Creator. After that, we + \l {Qt Creator: Creating C++ Classes}{add a C++ type} that stores the elevation. Since + the type will be used for every control supported by our style, and because + we may wish to add other attached properties later on, we'll call it + MyStyle. Here is \c MyStyle.h: + + \code + #ifndef MYSTYLE_H + #define MYSTYLE_H + + #include + #include + + class MyStyle : public QObject + { + Q_OBJECT + Q_PROPERTY(int elevation READ elevation WRITE setElevation NOTIFY elevationChanged) + + public: + explicit MyStyle(QObject *parent = nullptr); + + static MyStyle *qmlAttachedProperties(QObject *object); + + int elevation() const; + void setElevation(int elevation); + + signals: + void elevationChanged(); + + private: + int m_elevation; + }; + + QML_DECLARE_TYPEINFO(MyStyle, QML_HAS_ATTACHED_PROPERTIES) + + #endif // MYSTYLE_H + \endcode + + \c MyStyle.cpp: + + \code + #include "mystyle.h" + + MyStyle::MyStyle(QObject *parent) : + QObject(parent), + m_elevation(0) + { + } + + MyStyle *MyStyle::qmlAttachedProperties(QObject *object) + { + return new MyStyle(object); + } + + int MyStyle::elevation() const + { + return m_elevation; + } + + void MyStyle::setElevation(int elevation) + { + if (elevation == m_elevation) + return; + + m_elevation = elevation; + emit elevationChanged(); + } + \endcode + + The \c MyStyle type is special in the sense that it shouldn't be + instantiated, but rather used for its attached properties. For that reason, + we register it in the following manner in \c main.cpp: + + \code + #include + #include + + #include "mystyle.h" + + int main(int argc, char *argv[]) + { + QGuiApplication app(argc, argv); + + qmlRegisterUncreatableType("MyStyle", 1, 0, "MyStyle", "MyStyle is an attached property"); + + QQmlApplicationEngine engine; + // Make the directory containing our style known to the QML engine. + engine.addImportPath(":/"); + engine.load(QUrl(QLatin1String("qrc:/main.qml"))); + + return app.exec(); + } + \endcode + + We then copy \c Button.qml from the Basic style in + \c {$QTDIR/qml/QtQuick/Controls/Basic/} into a new \c myproject folder in our + project directory. Add the newly copied \c Button.qml to \c qml.qrc, which is + the resource file that contains our QML files. + + Next, we add a drop shadow to the \l {Control::}{background} delegate of + the Button: + + \code + // ... + import QtGraphicalEffects + import MyStyle + // ... + + background: Rectangle { + // ... + + layer.enabled: control.enabled && control.MyStyle.elevation > 0 + layer.effect: DropShadow { + verticalOffset: 1 + color: control.visualFocus ? "#330066ff" : "#aaaaaa" + samples: control.MyStyle.elevation + spread: 0.5 + } + } + \endcode + + Note that we: + + \list + \li Don't bother using the drop shadow when the elevation is \c 0 + \li Change the shadow's color depending on whether or not the button has + focus + \li Make the size of the shadow depend on the elevation + \endlist + + To try out the attached property, we create a \l Row with two Buttons in + \c main.qml: + + \qml + import QtQuick + import QtQuick.Controls + + import MyStyle 1.0 + + ApplicationWindow { + id: window + width: 400 + height: 400 + visible: true + + Row { + spacing: 20 + anchors.centerIn: parent + + Button { + text: "Button 1" + } + Button { + text: "Button 2" + MyStyle.elevation: 10 + } + } + } + \endqml + + One button has no elevation, and the other has an elevation of \c 10. + + With that in place, we can run our example. To tell the application to + use our new style, we pass \c {-style MyStyle} as an application + argument, but there are \l {Using Styles in Qt Quick Controls}{many + ways} to specify the style to use. + + The end result: + + \image qtquickcontrols2-customize-buttons.png + + Note that the \c {import MyStyle 1.0} statement is only necessary + because we are using the attached property belonging to \c MyStyle. + Both buttons will use our custom style, even if we were to remove the + import. + + \section1 Customization Reference + + The following snippets present examples where the Basic style's controls + have been customized using the same approach as the + \l {Customizing a Control} section. The code can be used as a starting + point to implement a custom look and feel. + + \section2 Customizing ApplicationWindow + + ApplicationWindow consists of one visual item: + \l {ApplicationWindow::background}{background}. + + \code + import + import QtQuick.Controls + + ApplicationWindow { + visible: true + + background: Rectangle { + gradient: Gradient { + GradientStop { position: 0; color: "#ffffff" } + GradientStop { position: 1; color: "#c1bbf9" } + } + } + } + \endcode + + + \section2 Customizing BusyIndicator + + BusyIndicator consists of two visual items: \l {Control::background}{background} + and \l {Control::contentItem}{contentItem}. + + \image qtquickcontrols2-busyindicator-custom.png + + \snippet qtquickcontrols2-busyindicator-custom.qml file + + + \section2 Customizing Button + + Button consists of two visual items: \l {Control::background}{background} + and \l {Control::contentItem}{content item}. + + \image qtquickcontrols2-button-custom.png + + \snippet qtquickcontrols2-button-custom.qml file + + + \section2 Customizing CheckBox + + CheckBox consists of three visual items: \l {Control::background}{background}, + \l {Control::contentItem}{contentItem} and \l {AbstractButton::indicator}{indicator}. + + \image qtquickcontrols2-checkbox-custom.png + + \snippet qtquickcontrols2-checkbox-custom.qml file + + \section2 Customizing CheckDelegate + + CheckDelegate consists of three visual items: \l {Control::background}{background}, + \l {Control::contentItem}{contentItem} and \l {AbstractButton::indicator}{indicator}. + + \image qtquickcontrols2-checkdelegate-custom.png + + \snippet qtquickcontrols2-checkdelegate-custom.qml file + + + \section2 Customizing ComboBox + + ComboBox consists of \l {Control::background}{background}, + \l {Control::contentItem}{content item}, \l {ComboBox::popup}{popup}, + \l {ComboBox::indicator}{indicator}, and \l {ComboBox::delegate}{delegate}. + + \image qtquickcontrols2-combobox-custom.png + + \snippet qtquickcontrols2-combobox-custom.qml file + + + \section2 Customizing DelayButton + + DelayButton consists of two visual items: \l {Control::background}{background} + and \l {Control::contentItem}{content item}. + + \image qtquickcontrols2-delaybutton-custom.png + + \snippet qtquickcontrols2-delaybutton-custom.qml file + + + \section2 Customizing Dial + + Dial consists of two visual items: \l {Control::background}{background} + and \l {Dial::handle}{handle}. + + \image qtquickcontrols2-dial-custom.png + + \snippet qtquickcontrols2-dial-custom.qml file + + + \section2 Customizing Drawer + + Drawer can have a visual \l {Control::background}{background} + item. + + \code + background: Rectangle { + Rectangle { + x: parent.width - 1 + width: 1 + height: parent.height + color: "#21be2b" + } + } + \endcode + + + \section2 Customizing Frame + + Frame consists of one visual item: \l {Control::background}{background}. + + \image qtquickcontrols2-frame-custom.png + + \snippet qtquickcontrols2-frame-custom.qml file + + + \section2 Customizing GroupBox + + GroupBox consists of two visual items: \l {Control::background}{background} + and \l {GroupBox::label}{label}. + + \image qtquickcontrols2-groupbox-custom.png + + \snippet qtquickcontrols2-groupbox-custom.qml file + + + \section2 Customizing ItemDelegate + + ItemDelegate consists of two visual items: \l {Control::background}{background} + and \l {Control::contentItem}{content item}. + + \image qtquickcontrols2-itemdelegate-custom.png + + \snippet qtquickcontrols2-itemdelegate-custom.qml file + + + \section2 Customizing Label + + Label can have a visual \l {Label::background}{background} item. + + \image qtquickcontrols2-label-custom.png + + \snippet qtquickcontrols2-label-custom.qml file + + + \section2 Customizing Menu + + \list + \li \l Menu consists of a visual \l {Popup::background}{background} item. + \li \l MenuItem consists of four visual items: \l {Control::background}{background}, + \l {Control::contentItem}{content item}, \l {AbstractButton::}{indicator}, and + \l {MenuItem::}{arrow}. + \li \l MenuSeparator consists of a visual \l {Control::background}{background} and + \l {Control::contentItem}{content item}. + \endlist + + \image qtquickcontrols2-menu-custom.png + + \quotefromfile qtquickcontrols2-menu-custom.qml + \skipto import QtQuick + \printuntil import QtQuick.Controls + \skipto Menu + \printto eof + + + \section2 Customizing MenuBar + + MenuBar can have a visual \l {Control::background}{background} item, + and MenuBarItem consists of two visual items: \l {Control::background} + {background} and \l {Control::contentItem}{content item}. + + \image qtquickcontrols2-menubar-custom.png + + \quotefromfile qtquickcontrols2-menubar-custom.qml + \skipto import QtQuick + \printuntil import QtQuick.Controls + \skipto MenuBar + \printto eof + + + \section2 Customizing PageIndicator + + PageIndicator consists of a \l {Control::background}{background}, \l {Control::contentItem}{content item}, and \l {PageIndicator::delegate}{delegate}. + + \image qtquickcontrols2-pageindicator-custom.png + + \snippet qtquickcontrols2-pageindicator-custom.qml file + + + \section2 Customizing Pane + + Pane consists of a \l {Control::background}{background}. + + \image qtquickcontrols2-pane-custom.png + + \snippet qtquickcontrols2-pane-custom.qml file + + + \section2 Customizing Popup + + Popup consists of a \l {Popup::background}{background} and + \l {Popup::contentItem}{content item}. + + \image qtquickcontrols2-popup-custom.png + + \quotefromfile qtquickcontrols2-popup-custom.qml + \skipto import QtQuick + \printuntil import QtQuick.Controls + \codeline + \skipto Popup + \printuntil { + \printuntil } + \printuntil } + \printuntil } + + + \section2 Customizing ProgressBar + + ProgressBar consists of two visual items: \l {Control::background}{background} + and \l {Control::contentItem}{content item}. + + \image qtquickcontrols2-progressbar-custom.png + + \snippet qtquickcontrols2-progressbar-custom.qml file + + + \section2 Customizing RadioButton + + RadioButton consists of three visual items: \l {Control::background}{background}, + \l {Control::contentItem}{content item} and \l {AbstractButton::indicator}{indicator}. + + \image qtquickcontrols2-radiobutton-custom.png + + \snippet qtquickcontrols2-radiobutton-custom.qml file + + + \section2 Customizing RadioDelegate + + RadioDelegate consists of three visual items: \l {Control::background}{background}, + \l {Control::contentItem}{contentItem} and \l {AbstractButton::indicator}{indicator}. + + \image qtquickcontrols2-radiodelegate-custom.png + + \snippet qtquickcontrols2-radiodelegate-custom.qml file + + + \section2 Customizing RangeSlider + + RangeSlider consists of three visual items: + \l {Control::background}{background}, + \l {RangeSlider::first}{first.handle} and + \l {RangeSlider::second.handle}{second.handle}. + + \image qtquickcontrols2-rangeslider-custom.png + + \snippet qtquickcontrols2-rangeslider-custom.qml file + + + \section2 Customizing RoundButton + + RoundButton can be customized in the same manner as + \l {Customizing Button}{Button}. + + + \section2 Customizing ScrollBar + + ScrollBar consists of two visual items: \l {Control::background}{background} + and \l {Control::contentItem}{content item}. + + \image qtquickcontrols2-scrollbar-custom.png + + \snippet qtquickcontrols2-scrollbar-custom.qml file + + + \section2 Customizing ScrollIndicator + + ScrollIndicator consists of two visual items: \l {Control::background}{background} + and \l {Control::contentItem}{content item}. + + \image qtquickcontrols2-scrollindicator-custom.png + + \snippet qtquickcontrols2-scrollindicator-custom.qml file + + + \section2 Customizing ScrollView + + ScrollView consists of a \l {Control::background}{background} item, + and horizontal and vertical scroll bars. + + \image qtquickcontrols2-scrollview-custom.png + + \snippet qtquickcontrols2-scrollview-custom.qml file + + + \section2 Customizing Slider + + Slider consists of two visual items: \l {Control::background}{background}, + and \l {Slider::handle}{handle}. + + \image qtquickcontrols2-slider-custom.png + + \snippet qtquickcontrols2-slider-custom.qml file + + + \section2 Customizing SpinBox + + SpinBox consists of four visual items: \l {Control::background}{background}, + \l {Control::contentItem}{contentItem}, \l {SpinBox::up.indicator}{up indicator}, + and \l {SpinBox::down.indicator}{down indicator}. + + \image qtquickcontrols2-spinbox-custom.png + + \snippet qtquickcontrols2-spinbox-custom.qml file + + + \section2 Customizing SplitView + + SplitView consists of a visual \l {SplitView::handle}{handle} delegate. + + \image qtquickcontrols2-splitview-custom.png + + \snippet qtquickcontrols2-splitview-custom.qml 1 + + + \section2 Customizing StackView + + StackView can have a visual \l {Control::background}{background} + item, and it allows customizing the transitions that are used for + push, pop, and replace operations. + + \snippet qtquickcontrols2-stackview-custom.qml file + + + \section2 Customizing SwipeDelegate + + SwipeDelegate consists of six visual items: \l {Control::background}{background}, + \l {Control::contentItem}{content item}, \l {AbstractButton::indicator}{indicator}, + \c swipe.left, \c swipe.right, and \c swipe.behind. + + \image qtquickcontrols2-swipedelegate-custom.png + + \snippet qtquickcontrols2-swipedelegate-custom.qml file + + + \section2 Customizing SwipeView + + SwipeView can have a visual \l {Control::background}{background} + item. The navigation is implemented by the \l {Control::contentItem} + {content item}. + + \snippet qtquickcontrols2-swipeview-custom.qml file + + + \section2 Customizing Switch + + Switch consists of three visual items: \l {Control::background}{background}, + \l {Control::contentItem}{content item} and \l {AbstractButton::indicator}{indicator}. + + \image qtquickcontrols2-switch-custom.png + + \snippet qtquickcontrols2-switch-custom.qml file + + \section2 Customizing SwitchDelegate + + SwitchDelegate consists of three visual items: \l {Control::background}{background}, + \l {Control::contentItem}{contentItem} and \l {AbstractButton::indicator}{indicator}. + + \image qtquickcontrols2-switchdelegate-custom.png + + \snippet qtquickcontrols2-switchdelegate-custom.qml file + + + \section2 Customizing TabBar + + TabBar consists of two visual items: \l {Control::background}{background}, + and \l {Control::contentItem}{contentItem}. + + \image qtquickcontrols2-tabbar-custom.png + + \snippet qtquickcontrols2-tabbar-custom.qml file + + + \section2 Customizing TabButton + + TabButton can be customized in the same manner as + \l {Customizing Button}{Button}. + + + \section2 Customizing TextArea + + TextArea consists of a \l {TextArea::background}{background} item. + + \image qtquickcontrols2-textarea-custom.png + + \snippet qtquickcontrols2-textarea-custom.qml file + + + \section2 Customizing TextField + + TextField consists of a \l {TextField::background}{background} item. + + \image qtquickcontrols2-textfield-custom.png + + \snippet qtquickcontrols2-textfield-custom.qml file + + + \section2 Customizing ToolBar + + ToolBar consists of one visual item: \l {Control::background}{background}. + + \image qtquickcontrols2-toolbar-custom.png + + \snippet qtquickcontrols2-toolbar-custom.qml file + + + \section2 Customizing ToolButton + + ToolButton consists of two visual items: \l {Control::background}{background} + and \l {Control::contentItem}{content item}. + + \image qtquickcontrols2-toolbutton-custom.png + + \snippet qtquickcontrols2-toolbutton-custom.qml file + + + \section2 Customizing ToolSeparator + + ToolSeparator consists of two visual items: \l {Control::background}{background} + and \l {Control::contentItem}{content item}. + + \image qtquickcontrols2-toolseparator-custom.png + + \snippet qtquickcontrols2-toolseparator-custom.qml file + + + \section2 Customizing ToolTip + + ToolTip consists of two visual items: \l {Popup::background}{background} + and \l {Popup::contentItem}{content item}. + + \quotefromfile qtquickcontrols2-tooltip-custom.qml + \skipto import QtQuick + \printuntil import QtQuick.Controls + \skipto ToolTip + \printuntil } + \printuntil } + \printuntil } + + + \section2 Customizing Tumbler + + Tumbler consists of three visual items: + \l {Control::background}{background}, + \l {Control::contentItem}{contentItem}, and + \l {Tumbler::delegate}{delegate}. + + \image qtquickcontrols2-tumbler-custom.png + + \snippet qtquickcontrols2-tumbler-custom.qml file + + If you want to define your own contentItem, use either a \l ListView or + \l PathView as the root item. For a wrapping Tumbler, use PathView: + + \snippet qtquickcontrols2-tumbler-pathView.qml contentItem + + For a non-wrapping Tumbler, use ListView: + + \snippet qtquickcontrols2-tumbler-listView.qml contentItem +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-delegates.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-delegates.qdoc new file mode 100644 index 00000000..bea87abf --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-delegates.qdoc @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-delegates.html + \title Delegate Controls + \ingroup qtquickcontrols2-guidelines + \brief Guidelines for delegate controls + + Qt Quick Controls offers a selection of controls that are used as + delegates in views. + + \annotatedlist qtquickcontrols2-delegates + + Each type of delegate has its own specific target use case. The following + sections offer guidelines for choosing the appropriate type of delegate, + depending on the use case. + + \section1 ItemDelegate Control + + \image qtquickcontrols2-itemdelegate.gif + + \l ItemDelegate presents a checkable control that can be pressed and + clicked by the user. + + \section1 RadioDelegate Control + + \image qtquickcontrols2-radiodelegate.gif + + \l RadioDelegate presents a checkable control that can be toggled on + (checked) or off (unchecked). Radio delegates are typically used to select + one option from a set of options. + + \b {See also} \l {RadioButton Control}. + + \section1 SwipeDelegate Control + + \image qtquickcontrols2-swipedelegate.gif + + \l SwipeDelegate presents a view item that can be swiped left or right to + expose more options or information. + + \section1 SwitchDelegate Control + + \image qtquickcontrols2-switchdelegate.gif + + \l SwitchDelegate presents a switchable delegate that can be toggled on or off. + + \b {See also} \l {Switch Control}. + + \section1 Related Information + \list + \li \l {Qt Quick Controls Guidelines} + \endlist +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-deployment.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-deployment.qdoc new file mode 100644 index 00000000..a84d0d87 --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-deployment.qdoc @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-deployment.html + \title Deploying Qt Quick Controls Applications + + Deployment of Qt Quick Controls applications is very similar to + deployment of other types of Qt applications. However, there are a few + factors to consider. + + \section1 Deploying an Application with Several Styles + + Suppose you have an application that will be deployed to both Android and + Windows devices. To ensure that only the minimum set of files that are + necessary for the application to run are deployed to each device, you can + use file selectors. For example, your directory structure could look like + this: + + \code + resources.qrc + main.qml + +windows/MyPage.qml + +windows/qtquickcontrols2.conf + +android/MyPage.qml + +android/qtquickcontrols2.conf + \endcode + + In the project above, \c main.qml would import \c QtQuick.Controls, for + example, but shouldn't import, say, \c QtQuick.Controls.Material. Any code + that is style-specific is moved out into separate files; just as we've done + for \c MyPage.qml. + + The \c +windows/qtquickcontrols2.conf file would contain configuration + options specific to the Universal style: + + \code + [Controls] + Style=Universal + + [Universal] + Theme=Dark + Accent=Red + \endcode + + The \c +android/qtquickcontrols2.conf file would contain configuration + options specific to the Material style: + + \code + [Controls] + Style=Material + + [Material] + Theme=Light + Accent=Brown + \endcode + + \section1 Static Builds + + For dynamically built applications, it is not necessary to import a + specific style that should be usable by that application. For statically + built applications, Qt's build system must be involved to ensure that + QML plugins function as expected. Specifically, \c qmake uses + \c qmlimportscanner to scan the QML files in your application for import + statements. For this reason, any styles that should be usable by a + statically built application must explicitly import that style. Where the + import occurs is up to the developer, but it is recommended to follow the + approach mentioned in the \l {Deploying an Application with Several Styles} + section, so that only the minimum set of files that are necessary for a + particular device are deployed. + + \sa {Deploying Qt Applications}, {Using Styles in Qt Quick Controls} +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-environment.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-environment.qdoc new file mode 100644 index 00000000..4484acf3 --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-environment.qdoc @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-environment.html + \title Supported Environment Variables in Qt Quick Controls + + This page contains a list of all environment variables that Qt Quick Controls + supports. The environment variables are primarily meant for testing purposes, but + they can also be used to set system-wide defaults. + + \table + \header + \li Variable + \li Description + \row + \li \c QT_QUICK_CONTROLS_STYLE + \li Specifies the default \l {Styling Qt Quick Controls}{Qt Quick Controls style}. + The value can be either one of the built-in styles, for example \c "Material", + or a custom style such as \c "MyStyle". + \row + \li \c QT_QUICK_CONTROLS_FALLBACK_STYLE + \li Specifies a fallback style for \l {Creating a Custom Style}{custom styles}. + The value can be one of the built-in styles, for example \c "Material", + \row + \li \c QT_QUICK_CONTROLS_CONF + \li Specifies the location of the \l {Qt Quick Controls configuration file}. + By default, the configuration file is loaded from the application's + resources in \c ":/qtquickcontrols2.conf". + \row + \li \c QT_QUICK_CONTROLS_HOVER_ENABLED + \li Specifies whether Qt Quick Controls use \l {Control::hoverEnabled}{hover effects}. + The value can be set to \c 0 or \c 1 to disable or enable hover effects, respectively. + \endtable + + \l {Imagine style} specific environment variables: + + \include qquickimaginestyle.qdocinc env + + \l {Material style} specific environment variables: + + \include qquickmaterialstyle.qdocinc env + + \l {Universal style} specific environment variables: + + \include qquickuniversalstyle.qdocinc env + + \section1 Related Information + + \list + \li \l{Styling Qt Quick Controls} + \li \l{Qt Quick Controls Configuration File} + \endlist +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-examples.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-examples.qdoc new file mode 100644 index 00000000..2924114f --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-examples.qdoc @@ -0,0 +1,37 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \group qtquickcontrols2-examples + \ingroup all-examples + \keyword Qt Quick Controls Examples + \title Qt Quick Controls Examples + \keyword Qt Quick Controls 2 Examples + \brief A collection of examples for \l {Qt Quick Controls} + + These examples demonstrate creating user interfaces using \l {Qt Quick Controls}. +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-fileselectors.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-fileselectors.qdoc new file mode 100644 index 00000000..4c782de1 --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-fileselectors.qdoc @@ -0,0 +1,140 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-fileselectors.html + \title Using File Selectors with Qt Quick Controls + + \l {QFileSelector}{File selectors} provide a convenient way of selecting + file variants. Qt offers the platform name and the locale as built-in + selectors. Qt Quick Controls extends the built-in selectors with the name + (lowercase) of the style that an application is running with. + + By using file selectors, style-specific tweaks can be applied without + creating a hard dependency to a style. From the available file variants, + only the selected QML file is loaded by the QML engine. Each file variant + can assume the context, that is, a specific style. This typically leads + to some code duplication, but on the other hand, cuts the aforementioned + hard dependency to the style, and leads to simpler and more efficient + QML code. + + The following example demonstrates a custom rounded button that has a + styled drop shadow in the \l {Material Style}{Material style}, and looks + flat in other styles. The files are organized so that the Material version + of \c CustomButton.qml is placed into a \c +Material sub-directory. + + \code + :/main.qml + :/CustomButton.qml + :/+Material/CustomButton.qml + \endcode + + By default, \c main.qml will use \c CustomButton.qml for the \c CustomButton + type. However, when the application is run with the Material style, the + \c Material selector will be present and the \c +Material/CustomButton.qml + version will be used instead. + + \code + // main.qml + import QtQuick + import QtQuick.Controls + + ApplicationWindow { + id: window + visible: true + + CustomButton { + text: "Button" + anchors.centerIn: parent + } + } + \endcode + + The base implementation of the custom button is a simple rounded + flat button. + + \code + // CustomButton.qml + import QtQuick + import QtQuick.Controls + + Button { + id: control + + background: Rectangle { + radius: width / 2 + implicitWidth: 36 + implicitHeight: 36 + color: control.pressed ? "#ccc" : "#eee" + } + } + \endcode + + The Material style's implementation of the custom button imports the + Material style, requests a dark theme to get light text, and creates + a drop shadow for the background. + + \code + // +Material/CustomButton.qml + import QtQuick + import QtGraphicalEffects + import QtQuick.Controls + import QtQuick.Controls.Material + + Button { + id: control + + Material.theme: Material.Dark + + background: Rectangle { + implicitWidth: 48 + implicitHeight: 48 + color: Material.accentColor + radius: width / 2 + + layer.enabled: control.enabled + layer.effect: DropShadow { + verticalOffset: 1 + color: Material.dropShadowColor + samples: control.pressed ? 20 : 10 + spread: 0.5 + } + } + } + \endcode + + \note It is recommended to use \l QQmlApplicationEngine, which internally + creates a \l QQmlFileSelector instance. This is all that is needed to take + QML file selectors into use. + + \section1 Related Information + \list + \li \l {QFileSelector} + \li \l {QQmlFileSelector} + \li \l {Styling Qt Quick Controls} + \endlist +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-focus.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-focus.qdoc new file mode 100644 index 00000000..77bc9883 --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-focus.qdoc @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-focus.html + \keyword Focus Management in Qt Quick Controls 2 + \title Focus Management in Qt Quick Controls + \brief Overview of focus handling with Qt Quick Controls + + Qt Quick Controls follows the standard + \l {Keyboard Focus in Qt Quick}{Qt Quick focus system}, while also + providing some added convenience. For example, the + \l {Control::}{focusPolicy} property can be used to control the ways in + which a control receives focus. + + \section1 Focus Scope Controls + + Qt Quick Controls offers a selection of controls that act as + \l {Acquiring Focus and Focus Scopes}{focus scopes}: + + \annotatedlist qtquickcontrols2-focusscopes + + \sa {Keyboard Focus in Qt Quick} +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-fusion.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-fusion.qdoc new file mode 100644 index 00000000..ca67985f --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-fusion.qdoc @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-fusion.html + \title Fusion Style + + The Fusion style is a desktop-oriented style. + + The Fusion style is a platform-agnostic style that offers a desktop-oriented + look and feel. It implements the same design language as the + \l {Qt Widget Gallery}{Fusion style for Qt Widgets}. + + \image qtquickcontrols2-fusion.png + + To run an application with the Fusion style, see + \l {Using Styles in Qt Quick Controls}. + + \note The Fusion style is not a native desktop style. The style runs on any + platform, and looks similar everywhere. Minor differences may occur due to + differences in the standard system palettes, available fonts, and font + rendering engines. + + \section2 Customization + + The Fusion style uses the standard system \l[QtQuick]{Palette} + to provide colors that match the desktop environment. + + \image qtquickcontrols2-fusion-palettes.png + + Custom palettes can be specified for any control, + \l{Popup::palette}{popup}, or \l{Window::palette}{application window}. + Explicit palette attributes are automatically propagated from parent to children, + overriding any system defaults for that attribute. In the following example, + the window and all three switches appear with a violet highlight color: + + \table + \row + \li + \qml + import QtQuick 2.12 + import QtQuick.Controls 2.12 + + ApplicationWindow { + visible: true + + palette.highlight: "violet" + + Column { + anchors.centerIn: parent + + Switch { text: qsTr("First"); checked: true } + Switch { text: qsTr("Second"); checked: true } + Switch { text: qsTr("Third") } + } + } + \endqml + \li + \image qtquickcontrols2-fusion-violet.png + \endtable + + \b {See also} \l {Basic Style}, \l {Material Style}, \l {Universal Style} + + \section1 Related Information + + \list + \li \l{Styling Qt Quick Controls} + \endlist +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-gettingstarted.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-gettingstarted.qdoc new file mode 100644 index 00000000..09209d21 --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-gettingstarted.qdoc @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-gettingstarted.html + \keyword Getting Started with Qt Quick Controls 2 + \title Getting Started with Qt Quick Controls + + A basic example of a QML file that makes use of controls is shown here: + + \qml + import QtQuick + import QtQuick.Controls + + ApplicationWindow { + title: "My Application" + width: 640 + height: 480 + visible: true + + Button { + text: "Push Me" + anchors.centerIn: parent + } + } + \endqml + + \section1 Setting Up Controls from C++ + + Although QQuickView has traditionally been used to display QML files in a + C++ application, doing this means you can only set window properties from + C++. + + With Qt Quick Controls, declare an ApplicationWindow as the root item of + your application and launch it by using QQmlApplicationEngine instead. + This ensures that you can control top level window properties from QML. + + A basic example of a source file that makes use of controls is shown here: + + \code + #include + #include + + int main(int argc, char *argv[]) + { + QGuiApplication app(argc, argv); + QQmlApplicationEngine engine; + engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); + return app.exec(); + } + \endcode + + \section2 Using C++ Data From QML + + If you need to register a C++ class to use from QML, you can call + qmlRegisterType() before declaring your QQmlApplicationEngine. + See \l [QtQml] {Defining QML Types from C++} for more information. + + If you need to expose data to QML components, you need to make them + available to the context of the current QML engine. See QQmlContext for + more information. +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-guidelines.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-guidelines.qdoc new file mode 100644 index 00000000..83d6db93 --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-guidelines.qdoc @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-guidelines.html + \keyword Qt Quick Controls Guidelines + \title Qt Quick Controls Guidelines + \keyword Qt Quick Controls 2 Guidelines + + Qt Quick Controls offers a selection of controls that can be used to + build complete interfaces in Qt Quick. + + Below you will find practical guidelines on how and when to use + the controls. + + \annotatedlist qtquickcontrols2-guidelines + + \section1 Related Information + \list + \li \l{Qt Quick Controls QML Types}{All Qt Quick Controls QML Types} + \endlist +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-icons.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-icons.qdoc new file mode 100644 index 00000000..ea8579dc --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-icons.qdoc @@ -0,0 +1,166 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-icons.html + \keyword Icons in Qt Quick Controls 2 + \title Icons in Qt Quick Controls + + Qt Quick Controls comes with support for icons since Qt 5.10. This means, + Buttons, item delegates, and menu items are now capable of presenting an + icon in addition to a text label. + + \section1 Using Icons + + \l {AbstractButton::icon}{AbstractButton} and \l {Action::icon}{Action} provide + the following properties through which icons can be set: + \list + \li \c icon.name + \li \c icon.source + \li \c icon.width + \li \c icon.height + \li \c icon.color + \li \c icon.cache + \endlist + + Theme icons are referenced by a name, and regular icons by a source URL. Both + \c icon.name and \c icon.source can be set to ensure that an icon will always + be found. If the icon is found in the theme, it will always be used; even if + \c icon.source is also set. If the icon is not found in the theme, \c icon.source + will be used instead. + + \code + Button { + icon.name: "edit-cut" + icon.source: "images/cut.png" + } + \endcode + + Each \l {Styling Qt Quick Controls}{Qt Quick Controls 2 style} requests a + default icon size and color according to their guidelines, but it is possible + to override these by setting the \c icon.width, \c icon.height, and \c icon.color + properties. + + The image that is loaded by an icon whose \c width and \c height are not set + depends on the type of icon in use. For theme icons, the closest available size + will be chosen. For regular icons, the behavior is the same as the \l {Image::} + {sourceSize} property of \l Image. + + The icon color is specified by default so that it matches the text color in + different states. In order to use an icon with the original colors, set the + color to \c "transparent". + + \code + Button { + icon.color: "transparent" + icon.source: "images/logo.png" + } + \endcode + + For buttons, the \l {AbstractButton::}{display} property can be used to control + how the icon and text are displayed within the button. + + \section1 Icon Themes + + Compliant icon themes must follow the freedesktop icon theme specification, + which can be obtained here: \l {http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html}. + + Traditionally, only Linux and UNIX support icon themes on the platform level, + but it is possible to bundle a compliant icon theme in an application to use + themed icons on any platform. + + The default \l {QIcon::themeSearchPaths()}{icon theme search paths} depend on + the platform. On Linux and UNIX, the search path will use the \c XDG_DATA_DIRS + environment variable if available. All platforms have the resource directory + \c :/icons as a fallback. Custom icon theme search paths can be set with + \l QIcon::setThemeSearchPaths(). + + The following example bundles an icon theme called \e mytheme into the application's + resources using \l {The Qt Resource System}{Qt's resource system}. + + \badcode + + + icons/mytheme/index.theme + icons/mytheme/32x32/myicon.png + icons/mytheme/32x32@2/myicon.png + + + \endcode + + The \c index.theme file describes the general attributes of the icon theme, and + lists the available theme icon directories: + + \badcode + [Icon Theme] + Name=mytheme + Comment=My Icon Theme + + Directories=32x32,32x32@2 + + [32x32] + Size=32 + Type=Fixed + + [32x32@2] + Size=32 + Scale=2 + Type=Fixed + \endcode + + In order to use the bundled icon theme, an application should call \l QIcon::setThemeName() + before loading the main QML file: + + \code + #include + #include + #include + + int main(int argc, char *argv[]) + { + QGuiApplication app(argc, argv); + + QIcon::setThemeName("mytheme"); // <-- + + QQmlApplicationEngine engine; + engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); + return app.exec(); + } + \endcode + + Now it is possible to use named icons from the bundled icon theme without having + to specify any fallback source: + + \code + Button { + icon.name: "myicon" + } + \endcode + + The \l {Qt Quick Controls - Gallery}{Gallery example} and \l {Qt Quick Controls 2 - Wearable Demo} + {Wearable Demo} provide complete runnable applications with a bundled icon theme. +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-imagine.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-imagine.qdoc new file mode 100644 index 00000000..aed0f894 --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-imagine.qdoc @@ -0,0 +1,2524 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-imagine.html + \title Imagine Style + + The Imagine Style is based on configurable image assets. \l{detailed-desc-imagine}{More...} + + \styleimport {QtQuick.Controls.Imagine 2.12} {Qt 5.10} + + \section1 Attached Properties + + \list + \li \l {imagine-path-attached-prop}{\b path} : string + \endlist + + \section1 Detailed Description + \target detailed-desc-imagine + + The Imagine style is based on image assets. The style comes with a default + set of images, but the images can be easily changed by providing a directory + with images using a predefined naming convention. + + \image qtquickcontrols2-imagine.png + \caption The Imagine style with the default images + + To run an application with the Imagine style, see + \l {Using Styles in Qt Quick Controls}. + + \section2 File Names + + The image files are named using the following convention: + + \c -- + + The \c and \c sections are mandatory, but the + \c section is optional. For example, if a single file named + \c "button-background.9.png" is provided for \l {Button}, it will be used + for every state that \c Button supports. It is up to the developer to + decide the set of states that they will provide images for. However, it + is recommended to provide images for the most common control states where + possible, such as \c disabled, \c pressed, etc. This will ensure that + interactive controls visually behave as the end user would expect them to. + + \section2 Element Reference + + The following table lists which elements are supported for each control, + along with the possible states for that element, and the file extension + that it expects. An element is an image that represents a certain visual + part of the control. For example, \c {Button}'s \c "background" element + represents its \l {Control::}{background}. + + \table + \header + \li Control + \li Element + \li States + \li Extension + \row + \li \l ApplicationWindow + \li background + \li active + \li .9.png (or .png) + \row + \li \l BusyIndicator + \li animation + \li disabled, running, mirrored, hovered + \li .webp + \row + \li + \li background + \li same as above + \li .webp + \row + \li \l Button + \li background + \li disabled, pressed, checked, checkable, focused, highlighted, flat, mirrored, hovered + \li .9.png + \row + \li \l CheckBox + \li background + \li disabled, pressed, checked, partially-checked, focused, mirrored, hovered + \li .9.png (or .png) + \row + \li + \li indicator + \li same as above + \li .png + \row + \li \l CheckDelegate + \li background + \li disabled, pressed, checked, partially-checked, focused, highlighted, mirrored, hovered + \li .9.png (or .png) + \row + \li + \li indicator + \li same as above + \li .png + \row + \li \l ComboBox + \li background + \li disabled, pressed, editable, open, focused, mirrored, hovered, flat + \li .9.png (or .png) + \row + \li + \li indicator + \li same as above + \li .png + \row + \li + \li popup + \li same as above + \li .9.png (or .png) + \row + \li \l DelayButton + \li background + \li disabled, pressed, checked, checkable, focused, mirrored, hovered + \li .9.png (or .png) + \row + \li + \li progress + \li same as above + \li .9.png (or .png) + \row + \li + \li mask + \li same as above + \li .9.png (or .png) + \row + \li \l Dial + \li background + \li disabled, pressed, focused, mirrored, hovered + \li .9.png (or .png) + \row + \li + \li handle + \li same as above + \li .9.png (or .png) + \row + \li \l Dialog + \li background + \li modal, dim + \li .9.png (or .png) + \row + \li + \li title + \li same as above + \li .9.png (or .png) + \row + \li + \li overlay + \li modal + \li .9.png (or .png) + \row + \li \l DialogButtonBox + \li background + \li disabled, mirrored + \li .9.png (or .png) + \row + \li \l Drawer + \li background + \li modal, dim, top, left, right, bottom + \li .9.png (or .png) + \row + \li + \li overlay + \li modal + \li .9.png (or .png) + \row + \li \l Frame + \li background + \li disabled, mirrored + \li .9.png (or .png) + \row + \li \l GroupBox + \li background + \li disabled, mirrored + \li .9.png (or .png) + \row + \li + \li title + \li same as above + \li .9.png (or .png) + \row + \li \l ItemDelegate + \li background + \li disabled, pressed, focused, highlighted, mirrored, hovered + \li .9.png (or .png) + \row + \li \l Label + \li background + \li disabled, mirrored, hovered + \li .9.png (or .png) + \row + \li \l Menu + \li background + \li modal, dim + \li .9.png (or .png) + \row + \li + \li overlay + \li modal + \li .9.png (or .png) + \row + \li \l MenuItem + \li arrow + \li disabled, pressed, checked, focused, highlighted, mirrored, hovered + \li .png + \row + \li + \li background + \li same as above + \li .9.png (or .png) + \row + \li + \li indicator + \li same as above + \li .png + \row + \li \l MenuSeparator + \li background + \li disabled, mirrored + \li .9.png (or .png) + \row + \li + \li separator + \li same as above + \li .9.png (or .png) + \row + \li \l Page + \li background + \li disabled, mirrored + \li .9.png (or .png) + \row + \li \l PageIndicator + \li background + \li disabled, mirrored, hovered + \li .9.png (or .png) + \row + \li + \li delegate + \li disabled, pressed, current, mirrored, hovered + \li .png + \row + \li \l Pane + \li background + \li disabled, mirrored + \li .9.png (or .png) + \row + \li \l Popup + \li background + \li modal, dim + \li .9.png (or .png) + \row + \li + \li overlay + \li modal + \li .9.png (or .png) + \row + \li \l ProgressBar + \li animation + \li disabled, mirrored, hovered + \li .png + \row + \li + \li background + \li disabled, indeterminate, mirrored, hovered + \li .9.png (or .png) + \row + \li + \li mask + \li same as above + \li .9.png (or .png) + \row + \li + \li progress + \li same as above + \li .9.png (or .png) + \row + \li \l RadioButton + \li background + \li disabled, pressed, checked, focused, mirrored, hovered + \li .9.png (or .png) + \row + \li + \li indicator + \li same as above + \li .png + \row + \li \l RadioDelegate + \li background + \li disabled, pressed, checked, focused, highlighted, mirrored, hovered + \li .9.png (or .png) + \row + \li + \li indicator + \li same as above + \li .png + \row + \li \l RangeSlider + \li background + \li vertical, horizontal, disabled, focused, mirrored, hovered + \li .9.png (or .png) + \row + \li \l RangeSlider + \li progress + \li same as above + \li .9.png (or .png) + \row + \li + \li handle + \li first, second, vertical, horizontal, disabled, pressed, focused, mirrored, hovered + \li .png + \row + \li \l RoundButton + \li background + \li disabled, pressed, checked, checkable, focused, highlighted, flat, mirrored, hovered + \li .9.png (or .png) + \row + \li \l ScrollBar + \li background + \li vertical, horizontal, disabled, interactive, pressed, mirrored, hovered + \li .9.png (or .png) + \row + \li + \li handle + \li same as above + \li .9.png (or .png) + \row + \li \l ScrollIndicator + \li background + \li vertical, horizontal, disabled, mirrored, hovered + \li .9.png (or .png) + \row + \li + \li handle + \li same as above + \li .9.png (or .png) + \row + \li \l ScrollView + \li background + \li disabled, mirrored + \li .9.png (or .png) + \row + \li \l Slider + \li background + \li vertical, horizontal, disabled, pressed, focused, mirrored, hovered + \li .9.png (or .png) + \row + \li + \li handle + \li same as above + \li .9.png (or .png) + \row + \li + \li progress + \li same as above + \li .9.png (or .png) + \row + \li \l SpinBox + \li background + \li disabled, editable, focused, mirrored, hovered + \li .9.png (or .png) + \row + \li + \li editor + \li disabled, focused, mirrored, hovered + \li .9.png (or .png) + \row + \li + \li indicator + \li up, down, disabled, editable, pressed, focused, mirrored, hovered + \li .9.png (or .png) + \row + \li \l StackView + \li background + \li disabled, mirrored + \li .9.png (or .png) + \row + \li \l SwipeDelegate + \li background + \li disabled, pressed, focused, highlighted, mirrored, hovered + \li .9.png (or .png) + \row + \li \l SwipeView + \li background + \li vertical, horizontal, disabled, interactive, focused, mirrored + \li .9.png (or .png) + \row + \li \l Switch + \li background + \li disabled, pressed, checked, focused, mirrored, hovered + \li .9.png (or .png) + \row + \li + \li handle + \li same as above + \li .9.png (or .png) + \row + \li + \li indicator + \li same as above + \li .9.png (or .png) + \row + \li \l SwitchDelegate + \li background + \li disabled, pressed, checked, focused, highlighted, mirrored, hovered + \li .9.png (or .png) + \row + \li + \li handle + \li same as above + \li .9.png (or .png) + \row + \li + \li indicator + \li same as above + \li .9.png (or .png) + \row + \li \l TabBar + \li background + \li disabled, header, footer, mirrored + \li .9.png (or .png) + \row + \li \l TabButton + \li background + \li disabled, pressed, checked, focused, mirrored, hovered + \li .9.png (or .png) + \row + \li \l TextArea + \li background + \li disabled, focused, mirrored, hovered + \li .9.png (or .png) + \row + \li \l TextField + \li background + \li disabled, focused, mirrored, hovered + \li .9.png (or .png) + \row + \li \l ToolBar + \li background + \li disabled, header, footer, mirrored + \li .9.png (or .png) + \row + \li \l ToolButton + \li background + \li disabled, pressed, checked, checkable, focused, highlighted, flat, mirrored, hovered + \li .9.png (or .png) + \row + \li \l ToolSeparator + \li background + \li vertical, horizontal, disabled, mirrored + \li .9.png (or .png) + \row + \li + \li separator + \li same as above + \li .9.png (or .png) + \row + \li \l ToolTip + \li background + \li + \li .9.png (or .png) + \row + \li \l Tumbler + \li background + \li disabled, focused, mirrored, hovered + \li .9.png (or .png) + \endtable + + \section2 Asset Examples + + The following table lists examples of assets (taken from the default + Imagine style assets) for all controls. The list is not exhaustive, + as not all elements need assets, but it can be used as a guide + when creating your own assets. + + \table + \header + \li Control + \li Element + \li States + \li Asset + \li Notes + \row + \li \l ApplicationWindow + \li background + \li + \li \image imagine/images/applicationwindow-background.png + \li \l {sup1}{See footnote} \sup 1 + \row + \li + \li overlay + \li + \li \image imagine/images/applicationwindow-overlay.png + \li \l {sup1}{See footnote} \sup 1 + \row + \li + \li overlay + \li modal + \li \image imagine/images/applicationwindow-overlay-modal.png + \li \l {sup1}{See footnote} \sup 1 + \row + \li \l Button + \li background + \li + \li \image imagine/images/button-background.9.png + \li + \row + \li + \li background + \li disabled + \li \image imagine/images/button-background-disabled.9.png + \li + \row + \li + \li background + \li focused + \li \image imagine/images/button-background-focused.9.png + \li + \row + \li + \li background + \li pressed + \li \image imagine/images/button-background-pressed.9.png + \li + \row + \li + \li background + \li checked + \li \image imagine/images/button-background-checked.9.png + \li + \row + \li + \li background + \li checked, disabled + \li \image imagine/images/button-background-checked-disabled.9.png + \li + \row + \li + \li background + \li checked, focused + \li \image imagine/images/button-background-checked-focused.9.png + \li + \row + \li + \li background + \li checked, hovered + \li \image imagine/images/button-background-checked-hovered.9.png + \li + \row + \li + \li background + \li highlighted + \li \image imagine/images/button-background-highlighted.9.png + \li + \row + \li + \li background + \li highlighted, disabled + \li \image imagine/images/button-background-highlighted-disabled.9.png + \li + \row + \li + \li background + \li highlighted, focused + \li \image imagine/images/button-background-highlighted-focused.9.png + \li + \row + \li + \li background + \li highlighted, hovered + \li \image imagine/images/button-background-highlighted-hovered.9.png + \li + \row + \li + \li background + \li highlighted, pressed + \li \image imagine/images/button-background-highlighted-pressed.9.png + \li + \row + \li + \li background + \li highlighted, checked + \li \image imagine/images/button-background-highlighted-checked.9.png + \li + \row + \li + \li background + \li hovered + \li \image imagine/images/button-background-hovered.9.png + \li + \row + \li + \li background + \li flat + \li \image imagine/images/button-background-flat.9.png + \li + \row + \li + \li background + \li flat, disabled + \li \image imagine/images/button-background-flat-disabled.9.png + \li + \row + \li + \li background + \li flat, hovered + \li \image imagine/images/button-background-flat-hovered.9.png + \li + \row + \li + \li background + \li flat, pressed + \li \image imagine/images/button-background-flat-pressed.9.png + \li + \row + \li + \li background + \li flat, checked + \li \image imagine/images/button-background-flat-checked.9.png + \li + \row + \li \l CheckBox + \li indicator + \li + \li \image imagine/images/checkbox-indicator.png + \li + \row + \li + \li indicator + \li disabled + \li \image imagine/images/checkbox-indicator-disabled.png + \li + \row + \li + \li indicator + \li pressed + \li \image imagine/images/checkbox-indicator-pressed.png + \li + \row + \li + \li indicator + \li checked + \li \image imagine/images/checkbox-indicator-checked.png + \li + \row + \li + \li indicator + \li checked, pressed + \li \image imagine/images/checkbox-indicator-checked-pressed.png + \li + \row + \li + \li indicator + \li checked, hovered + \li \image imagine/images/checkbox-indicator-checked-hovered.png + \li + \row + \li + \li indicator + \li checked, focused + \li \image imagine/images/checkbox-indicator-checked-focused.png + \li + \row + \li + \li indicator + \li partially, checked + \li \image imagine/images/checkbox-indicator-partially-checked.png + \li + \row + \li + \li indicator + \li partially, checked, pressed + \li \image imagine/images/checkbox-indicator-partially-checked-pressed.png + \li + \row + \li + \li indicator + \li partially, checked, focused + \li \image imagine/images/checkbox-indicator-partially-checked-focused.png + \li + \row + \li + \li indicator + \li partially, checked, hovered + \li \image imagine/images/checkbox-indicator-partially-checked-hovered.png + \li + \row + \li + \li indicator + \li focused + \li \image imagine/images/checkbox-indicator-focused.png + \li + \row + \li + \li indicator + \li hovered + \li \image imagine/images/checkbox-indicator-hovered.png + \li + \row + \li \l CheckDelegate + \li background + \li + \li \image imagine/images/checkdelegate-background.9.png + \li + \row + \li + \li background + \li disabled + \li \image imagine/images/checkdelegate-background-disabled.9.png + \li + \row + \li + \li background + \li pressed + \li \image imagine/images/checkdelegate-background-pressed.9.png + \li + \row + \li + \li background + \li focused + \li \image imagine/images/checkdelegate-background-focused.9.png + \li + \row + \li + \li background + \li hovered + \li \image imagine/images/checkdelegate-background-hovered.9.png + \li + \row + \li + \li indicator + \li + \li \image imagine/images/checkdelegate-indicator.png + \li + \row + \li + \li indicator + \li disabled + \li \image imagine/images/checkdelegate-indicator-disabled.png + \li + \row + \li + \li indicator + \li pressed + \li \image imagine/images/checkdelegate-indicator-pressed.png + \li + \row + \li + \li indicator + \li checked + \li \image imagine/images/checkdelegate-indicator-checked.png + \li + \row + \li + \li indicator + \li checked, pressed + \li \image imagine/images/checkdelegate-indicator-checked-pressed.png + \li + \row + \li + \li indicator + \li checked, focused + \li \image imagine/images/checkdelegate-indicator-checked-focused.png + \li + \row + \li + \li indicator + \li checked, hovered + \li \image imagine/images/checkdelegate-indicator-checked-hovered.png + \li + \row + \li + \li indicator + \li focused + \li \image imagine/images/checkdelegate-indicator-focused.png + \li + \row + \li + \li indicator + \li hovered + \li \image imagine/images/checkdelegate-indicator-hovered.png + \li + \row + \li + \li indicator + \li partially, checked + \li \image imagine/images/checkdelegate-indicator-partially-checked.png + \li + \row + \li + \li indicator + \li partially, checked, pressed + \li \image imagine/images/checkdelegate-indicator-partially-checked-pressed.png + \li + \row + \li + \li indicator + \li partially, checked, focused + \li \image imagine/images/checkdelegate-indicator-partially-checked-focused.png + \li + \row + \li + \li indicator + \li partially, checked, hovered + \li \image imagine/images/checkdelegate-indicator-partially-checked-hovered.png + \li + \row + \li + \li indicator + \li hovered + \li \image imagine/images/checkdelegate-indicator-hovered.png + \li + \row + \li \l ComboBox + \li background + \li + \li \image imagine/images/combobox-background.9.png + \li + \row + \li + \li background + \li disabled + \li \image imagine/images/combobox-background-disabled.9.png + \li + \row + \li + \li background + \li focused + \li \image imagine/images/combobox-background-focused.9.png + \li + \row + \li + \li background + \li hovered + \li \image imagine/images/combobox-background-hovered.9.png + \li + \row + \li + \li background + \li pressed + \li \image imagine/images/combobox-background-pressed.9.png + \li + \row + \li + \li background + \li open + \li \image imagine/images/combobox-background-open.9.png + \li + \row + \li + \li background + \li editable + \li \image imagine/images/combobox-background-editable.9.png + \li + \row + \li + \li background + \li editable, focused + \li \image imagine/images/combobox-background-editable-focused.9.png + \li + \row + \li + \li background + \li editable, disabled + \li \image imagine/images/combobox-background-editable-disabled.9.png + \li + \row + \li + \li indicator + \li + \li \image imagine/images/combobox-indicator.png + \li + \row + \li + \li indicator + \li disabled + \li \image imagine/images/combobox-indicator-disabled.png + \li + \row + \li + \li indicator + \li editable + \li \image imagine/images/combobox-indicator-editable.png + \li + \row + \li + \li indicator + \li editable, disabled + \li \image imagine/images/combobox-indicator-editable-disabled.png + \li + \row + \li + \li indicator + \li editable, mirrored + \li \image imagine/images/combobox-indicator-editable-mirrored.png + \li + \row + \li + \li indicator + \li editable, mirrored, disabled + \li \image imagine/images/combobox-indicator-editable-mirrored-disabled.png + \li + \row + \li + \li popup + \li + \li \image imagine/images/combobox-popup.9.png + \li + \row + \li \l DelayButton + \li background + \li + \li \image imagine/images/delaybutton-background.9.png + \li + \row + \li + \li background + \li disabled + \li \image imagine/images/delaybutton-background-disabled.9.png + \li + \row + \li + \li background + \li disabled, checked + \li \image imagine/images/delaybutton-background-disabled-checked.9.png + \li + \row + \li + \li background + \li focused + \li \image imagine/images/delaybutton-background-focused.9.png + \li + \row + \li + \li background + \li pressed + \li \image imagine/images/delaybutton-background-pressed.9.png + \li + \row + \li + \li background + \li checked + \li \image imagine/images/delaybutton-background-checked.9.png + \li + \row + \li + \li background + \li checked, focused + \li \image imagine/images/delaybutton-background-checked-focused.9.png + \li + \row + \li + \li background + \li checked, hovered + \li \image imagine/images/delaybutton-background-checked-hovered.9.png + \li + \row + \li + \li background + \li hovered + \li \image imagine/images/delaybutton-background-hovered.9.png + \li + \row + \li + \li progress + \li + \li \image imagine/images/delaybutton-progress.9.png + \li + \row + \li + \li progress + \li disabled + \li \image imagine/images/delaybutton-progress-disabled.9.png + \li + \row + \li + \li mask + \li + \li \image imagine/images/delaybutton-mask.9.png + \li + \row + \li \l Dial + \li background + \li + \li \image imagine/images/dial-background.png + \li + \row + \li + \li background + \li disabled + \li \image imagine/images/dial-background-disabled.png + \li + \row + \li + \li background + \li focused + \li \image imagine/images/dial-background-focused.png + \li + \row + \li + \li handle + \li + \li \image imagine/images/dial-handle.png + \li + \row + \li + \li handle + \li disabled + \li \image imagine/images/dial-handle-disabled.png + \li + \row + \li + \li handle + \li focused + \li \image imagine/images/dial-handle-focused.png + \li + \row + \li + \li handle + \li focused, pressed + \li \image imagine/images/dial-handle-focused-pressed.png + \li + \row + \li + \li handle + \li focused, hovered + \li \image imagine/images/dial-handle-focused-hovered.png + \li + \row + \li + \li handle + \li pressed + \li \image imagine/images/dial-handle-pressed.png + \li + \row + \li + \li handle + \li hovered + \li \image imagine/images/dial-handle-hovered.png + \li + \row + \li \l Dialog + \li background + \li + \li \image imagine/images/dialog-background.9.png + \li + \row + \li + \li overlay + \li + \li \image imagine/images/dialog-overlay.png + \li \l {sup1}{See footnote} \sup 1 + \row + \li + \li overlay + \li modal + \li \image imagine/images/dialog-overlay-modal.png + \li \l {sup1}{See footnote} \sup 1 + \row + \li \l DialogButtonBox + \li background + \li + \li \image imagine/images/dialogbuttonbox-background.9.png + \li + \row + \li \l Drawer + \li background + \li left + \li \image imagine/images/drawer-background-left.9.png + \li + \row + \li + \li background + \li right + \li \image imagine/images/drawer-background-right.9.png + \li + \row + \li + \li background + \li top + \li \image imagine/images/drawer-background-top.9.png + \li + \row + \li + \li background + \li bottom + \li \image imagine/images/drawer-background-bottom.9.png + \li + \row + \li + \li overlay + \li + \li \image imagine/images/drawer-overlay.png + \li \l {sup1}{See footnote} \sup 1 + \row + \li + \li overlay + \li modal + \li \image imagine/images/drawer-overlay-modal.png + \li \l {sup1}{See footnote} \sup 1 + \row + \li \l Frame + \li background + \li + \li \image imagine/images/frame-background.9.png + \li + \row + \li \l GroupBox + \li background + \li + \li \image imagine/images/groupbox-background.9.png + \li + \row + \li + \li title + \li + \li \image imagine/images/groupbox-title.9.png + \li + \row + \li \l ItemDelegate + \li background + \li + \li \image imagine/images/itemdelegate-background.9.png + \li + \row + \li + \li background + \li disabled + \li \image imagine/images/itemdelegate-background-disabled.9.png + \li + \row + \li + \li background + \li pressed + \li \image imagine/images/itemdelegate-background-pressed.9.png + \li + \row + \li + \li background + \li focused + \li \image imagine/images/itemdelegate-background-focused.9.png + \li + \row + \li + \li background + \li hovered + \li \image imagine/images/itemdelegate-background-hovered.9.png + \li + \row + \li + \li background + \li highlighted + \li \image imagine/images/itemdelegate-background-highlighted.9.png + \li + \row + \li \l Menu + \li background + \li + \li \image imagine/images/menu-background.9.png + \li + \row + \li \l MenuItem + \li background + \li + \li \image imagine/images/menuitem-background.9.png + \li + \row + \li + \li background + \li highlighted + \li \image imagine/images/menuitem-background-highlighted.9.png + \li + \row + \li + \li arrow + \li + \li \image imagine/images/menuitem-arrow.png + \li + \row + \li + \li arrow + \li mirrored + \li \image imagine/images/menuitem-arrow-mirrored.png + \li + \row + \li + \li arrow + \li disabled + \li \image imagine/images/menuitem-arrow-disabled.png + \li + \row + \li + \li arrow + \li mirrored, disabled + \li \image imagine/images/menuitem-arrow-mirrored-disabled.png + \li + \row + \li + \li indicator + \li + \li \image imagine/images/menuitem-indicator.png + \li + \row + \li + \li indicator + \li disabled + \li \image imagine/images/menuitem-indicator-disabled.png + \li + \row + \li + \li indicator + \li pressed + \li \image imagine/images/menuitem-indicator-pressed.png + \li + \row + \li + \li indicator + \li checked + \li \image imagine/images/menuitem-indicator-checked.png + \li + \row + \li + \li indicator + \li checked, pressed + \li \image imagine/images/menuitem-indicator-checked-pressed.png + \li + \row + \li + \li indicator + \li checked, focused + \li \image imagine/images/menuitem-indicator-checked-focused.png + \li + \row + \li + \li indicator + \li checked, hovered + \li \image imagine/images/menuitem-indicator-checked-hovered.png + \li + \row + \li + \li indicator + \li focused + \li \image imagine/images/menuitem-indicator-focused.png + \li + \row + \li + \li indicator + \li hovered + \li \image imagine/images/menuitem-indicator-hovered.png + \li + \row + \li \l MenuSeparator + \li separator + \li + \li \image imagine/images/menuseparator-separator.9.png + \li + \row + \li \l Page + \li background + \li + \li \image imagine/images/page-background.png + \li \l {sup1}{See footnote} \sup 1 + \row + \li \l PageIndicator + \li delegate + \li + \li \image imagine/images/pageindicator-delegate.png + \li + \row + \li + \li delegate + \li disabled + \li \image imagine/images/pageindicator-delegate-disabled.png + \li + \row + \li + \li delegate + \li disabled, current + \li \image imagine/images/pageindicator-delegate-disabled-current.png + \li + \row + \li + \li delegate + \li pressed + \li \image imagine/images/pageindicator-delegate-pressed.png + \li + \row + \li + \li delegate + \li current + \li \image imagine/images/pageindicator-delegate-current.png + \li + \row + \li \l Pane + \li background + \li + \li \image imagine/images/pane-background.9.png + \li + \row + \li \l Popup + \li background + \li + \li \image imagine/images/popup-background.9.png + \li \l {sup1}{See footnote} \sup 1 + \row + \li + \li overlay + \li + \li \image imagine/images/popup-overlay.png + \li \l {sup1}{See footnote} \sup 1 + \row + \li + \li overlay + \li modal + \li \image imagine/images/popup-overlay-modal.png + \li + \row + \li \l ProgressBar + \li background + \li + \li \image imagine/images/progressbar-background.9.png + \li + \row + \li + \li progress + \li + \li \image imagine/images/progressbar-progress.png + \li + \row + \li + \li mask + \li + \li \image imagine/images/progressbar-mask.9.png + \li + \row + \li \l RadioButton + \li indicator + \li + \li \image imagine/images/radiobutton-indicator.png + \li + \row + \li + \li indicator + \li disabled + \li \image imagine/images/radiobutton-indicator-disabled.png + \li + \row + \li + \li indicator + \li pressed + \li \image imagine/images/radiobutton-indicator-pressed.png + \li + \row + \li + \li indicator + \li checked + \li \image imagine/images/radiobutton-indicator-checked.png + \li + \row + \li + \li indicator + \li checked, focused + \li \image imagine/images/radiobutton-indicator-checked-focused.png + \li + \row + \li + \li indicator + \li checked, hovered + \li \image imagine/images/radiobutton-indicator-checked-hovered.png + \li + \row + \li + \li indicator + \li checked, pressed + \li \image imagine/images/radiobutton-indicator-checked-pressed.png + \li + \row + \li + \li indicator + \li focused + \li \image imagine/images/radiobutton-indicator-focused.png + \li + \row + \li + \li indicator + \li hovered + \li \image imagine/images/radiobutton-indicator-hovered.png + \li + \row + \li \l RadioDelegate + \li background + \li + \li \image imagine/images/radiodelegate-background.9.png + \li + \row + \li + \li background + \li disabled + \li \image imagine/images/radiodelegate-background-disabled.9.png + \li + \row + \li + \li background + \li pressed + \li \image imagine/images/radiodelegate-background-pressed.9.png + \li + \row + \li + \li background + \li focused + \li \image imagine/images/radiodelegate-background-focused.9.png + \li + \row + \li + \li background + \li hovered + \li \image imagine/images/radiodelegate-background-hovered.9.png + \li + \row + \li + \li indicator + \li + \li \image imagine/images/radiodelegate-indicator.png + \li + \row + \li + \li indicator + \li disabled + \li \image imagine/images/radiodelegate-indicator-disabled.png + \li + \row + \li + \li indicator + \li pressed + \li \image imagine/images/radiodelegate-indicator-pressed.png + \li + \row + \li + \li indicator + \li checked + \li \image imagine/images/radiodelegate-indicator-checked.png + \li + \row + \li + \li indicator + \li checked, focused + \li \image imagine/images/radiodelegate-indicator-checked-focused.png + \li + \row + \li + \li indicator + \li checked, hovered + \li \image imagine/images/radiodelegate-indicator-checked-hovered.png + \li + \row + \li + \li indicator + \li checked, pressed + \li \image imagine/images/radiodelegate-indicator-checked-pressed.png + \li + \row + \li + \li indicator + \li focused + \li \image imagine/images/radiodelegate-indicator-focused.png + \li + \row + \li + \li indicator + \li hovered + \li \image imagine/images/radiodelegate-indicator-hovered.png + \li + \row + \li \l RangeSlider + \li background + \li vertical + \li \image imagine/images/rangeslider-background-vertical.9.png + \li + \row + \li + \li background + \li horizontal + \li \image imagine/images/rangeslider-background-horizontal.9.png + \li + \row + \li + \li progress + \li vertical + \li \image imagine/images/rangeslider-progress-vertical.9.png + \li + \row + \li + \li progress + \li vertical, disabled + \li \image imagine/images/rangeslider-progress-vertical-disabled.9.png + \li + \row + \li + \li progress + \li horizontal + \li \image imagine/images/rangeslider-progress-horizontal.9.png + \li + \row + \li + \li progress + \li horizontal, disabled + \li \image imagine/images/rangeslider-progress-horizontal-disabled.9.png + \li + \row + \li + \li handle + \li + \li \image imagine/images/rangeslider-handle.png + \li + \row + \li + \li handle + \li disabled + \li \image imagine/images/rangeslider-handle-disabled.png + \li + \row + \li + \li handle + \li focused + \li \image imagine/images/rangeslider-handle-focused.png + \li + \row + \li + \li handle + \li focused, hovered + \li \image imagine/images/rangeslider-handle-focused-hovered.png + \li + \row + \li + \li handle + \li focused, pressed + \li \image imagine/images/rangeslider-handle-focused-pressed.png + \li + \row + \li + \li handle + \li hovered + \li \image imagine/images/rangeslider-handle-hovered.png + \li + \row + \li + \li handle + \li pressed + \li \image imagine/images/rangeslider-handle-pressed.png + \li + \row + \li \l RoundButton + \li background + \li + \li \image imagine/images/roundbutton-background.png + \li + \row + \li + \li background + \li disabled + \li \image imagine/images/roundbutton-background-disabled.png + \li + \row + \li + \li background + \li disabled, checked + \li \image imagine/images/roundbutton-background-disabled-checked.png + \li + \row + \li + \li background + \li focused + \li \image imagine/images/roundbutton-background-focused.png + \li + \row + \li + \li background + \li pressed + \li \image imagine/images/roundbutton-background-pressed.png + \li + \row + \li + \li background + \li checked + \li \image imagine/images/roundbutton-background-checked.png + \li + \row + \li + \li background + \li checked, focused + \li \image imagine/images/roundbutton-background-checked-focused.png + \li + \row + \li + \li background + \li checked, hovered + \li \image imagine/images/roundbutton-background-checked-hovered.png + \li + \row + \li + \li background + \li highlighted + \li \image imagine/images/roundbutton-background-highlighted.png + \li + \row + \li + \li background + \li highlighted, pressed + \li \image imagine/images/roundbutton-background-highlighted-pressed.png + \li + \row + \li + \li background + \li highlighted, focused + \li \image imagine/images/roundbutton-background-highlighted-focused.png + \li + \row + \li + \li background + \li highlighted, hovered + \li \image imagine/images/roundbutton-background-highlighted-hovered.png + \li + \row + \li + \li background + \li hovered + \li \image imagine/images/roundbutton-background-hovered.png + \li + \row + \li \l ScrollBar + \li handle + \li + \li \image imagine/images/scrollbar-handle.png + \li + \row + \li + \li handle + \li disabled + \li \image imagine/images/scrollbar-handle-disabled.png + \li + \row + \li + \li handle + \li interactive + \li \image imagine/images/scrollbar-handle-interactive.png + \li + \row + \li + \li handle + \li interactive, disabled + \li \image imagine/images/scrollbar-handle-interactive-disabled.png + \li + \row + \li + \li handle + \li interactive, pressed + \li \image imagine/images/scrollbar-handle-interactive-pressed.png + \li + \row + \li + \li handle + \li interactive, hovered + \li \image imagine/images/scrollbar-handle-interactive-hovered.png + \li + \row + \li \l ScrollIndicator + \li handle + \li + \li \image imagine/images/scrollindicator-handle.png + \li + \row + \li \l Slider + \li background + \li vertical + \li \image imagine/images/slider-background-vertical.9.png + \li + \row + \li + \li background + \li horizontal + \li \image imagine/images/slider-background-horizontal.9.png + \li + \row + \li + \li progress + \li vertical + \li \image imagine/images/slider-progress-vertical.9.png + \li + \row + \li + \li progress + \li vertical, disabled + \li \image imagine/images/slider-progress-vertical-disabled.9.png + \li + \row + \li + \li progress + \li horizontal + \li \image imagine/images/slider-progress-horizontal.9.png + \li + \row + \li + \li progress + \li horizontal, disabled + \li \image imagine/images/slider-progress-horizontal-disabled.9.png + \li + \row + \li + \li handle + \li + \li \image imagine/images/slider-handle.png + \li + \row + \li + \li handle + \li disabled + \li \image imagine/images/slider-handle-disabled.png + \li + \row + \li + \li handle + \li focused + \li \image imagine/images/slider-handle-focused.png + \li + \row + \li + \li handle + \li focused, hovered + \li \image imagine/images/slider-handle-focused-hovered.png + \li + \row + \li + \li handle + \li focused, pressed + \li \image imagine/images/slider-handle-focused-pressed.png + \li + \row + \li + \li handle + \li hovered + \li \image imagine/images/slider-handle-hovered.png + \li + \row + \li + \li handle + \li pressed + \li \image imagine/images/slider-handle-pressed.png + \li + \row + \li \l SpinBox + \li background + \li + \li \image imagine/images/spinbox-background.9.png + \li + \row + \li + \li background + \li disabled + \li \image imagine/images/spinbox-background-disabled.9.png + \li + \row + \li + \li background + \li focused + \li \image imagine/images/spinbox-background-focused.9.png + \li + \row + \li + \li background + \li editable + \li \image imagine/images/spinbox-background-editable.9.png + \li + \row + \li + \li indicator + \li up + \li \image imagine/images/spinbox-indicator-up.9.png + \li + \row + \li + \li indicator + \li up, disabled + \li \image imagine/images/spinbox-indicator-up-disabled.9.png + \li + \row + \li + \li indicator + \li up, pressed + \li \image imagine/images/spinbox-indicator-up-pressed.9.png + \li + \row + \li + \li indicator + \li up, focused + \li \image imagine/images/spinbox-indicator-up-focused.9.png + \li + \row + \li + \li indicator + \li up, mirrored + \li \image imagine/images/spinbox-indicator-up-mirrored.9.png + \li + \row + \li + \li indicator + \li up, hovered + \li \image imagine/images/spinbox-indicator-up-hovered.9.png + \li + \row + \li + \li indicator + \li up, editable + \li \image imagine/images/spinbox-indicator-up-editable.9.png + \li + \row + \li + \li indicator + \li up, editable, pressed + \li \image imagine/images/spinbox-indicator-up-editable-pressed.9.png + \li + \row + \li + \li indicator + \li up, editable, focused + \li \image imagine/images/spinbox-indicator-up-editable-focused.9.png + \li + \row + \li + \li indicator + \li up, editable, mirrored + \li \image imagine/images/spinbox-indicator-up-editable-mirrored.9.png + \li + \row + \li + \li indicator + \li up, editable, hovered + \li \image imagine/images/spinbox-indicator-up-editable-hovered.9.png + \li + \row + \li + \li indicator + \li down + \li \image imagine/images/spinbox-indicator-down.9.png + \li + \row + \li + \li indicator + \li down, disabled + \li \image imagine/images/spinbox-indicator-down-disabled.9.png + \li + \row + \li + \li indicator + \li down, pressed + \li \image imagine/images/spinbox-indicator-down-pressed.9.png + \li + \row + \li + \li indicator + \li down, focused + \li \image imagine/images/spinbox-indicator-down-focused.9.png + \li + \row + \li + \li indicator + \li down, mirrored + \li \image imagine/images/spinbox-indicator-down-mirrored.9.png + \li + \row + \li + \li indicator + \li down, hovered + \li \image imagine/images/spinbox-indicator-down-hovered.9.png + \li + \row + \li + \li indicator + \li down, editable + \li \image imagine/images/spinbox-indicator-down-editable.9.png + \li + \row + \li + \li indicator + \li down, editable, pressed + \li \image imagine/images/spinbox-indicator-down-editable-pressed.9.png + \li + \row + \li + \li indicator + \li down, editable, focused + \li \image imagine/images/spinbox-indicator-down-editable-focused.9.png + \li + \row + \li + \li indicator + \li down, editable, mirrored + \li \image imagine/images/spinbox-indicator-down-editable-mirrored.9.png + \li + \row + \li + \li indicator + \li down, editable, hovered + \li \image imagine/images/spinbox-indicator-down-editable-hovered.9.png + \li + \row + \li \l SwipeDelegate + \li background + \li + \li \image imagine/images/swipedelegate-background.9.png + \li + \row + \li + \li background + \li disabled + \li \image imagine/images/swipedelegate-background-disabled.9.png + \li + \row + \li + \li background + \li pressed + \li \image imagine/images/swipedelegate-background-pressed.9.png + \li + \row + \li + \li background + \li focused + \li \image imagine/images/swipedelegate-background-focused.9.png + \li + \row + \li + \li background + \li hovered + \li \image imagine/images/swipedelegate-background-hovered.9.png + \li + \row + \li \l Switch + \li indicator + \li + \li \image imagine/images/switch-indicator.png + \li + \row + \li + \li indicator + \li disabled + \li \image imagine/images/switch-indicator-disabled.png + \li + \row + \li + \li indicator + \li pressed + \li \image imagine/images/switch-indicator-pressed.png + \li + \row + \li + \li indicator + \li checked + \li \image imagine/images/switch-indicator-checked.png + \li + \row + \li + \li indicator + \li checked, focused + \li \image imagine/images/switch-indicator-checked-focused.png + \li + \row + \li + \li indicator + \li checked, hovered + \li \image imagine/images/switch-indicator-checked-hovered.png + \li + \row + \li + \li indicator + \li checked, pressed + \li \image imagine/images/switch-indicator-checked-pressed.png + \li + \row + \li + \li indicator + \li focused + \li \image imagine/images/switch-indicator-focused.png + \li + \row + \li + \li indicator + \li hovered + \li \image imagine/images/switch-indicator-hovered.png + \li + \row + \li + \li handle + \li + \li \image imagine/images/switch-handle.png + \li + \row + \li + \li handle + \li disabled + \li \image imagine/images/switch-handle-disabled.png + \li + \row + \li + \li handle + \li pressed + \li \image imagine/images/switch-handle-pressed.png + \li + \row + \li \l SwitchDelegate + \li background + \li + \li \image imagine/images/switchdelegate-background.9.png + \li + \row + \li + \li background + \li disabled + \li \image imagine/images/switchdelegate-background-disabled.9.png + \li + \row + \li + \li background + \li pressed + \li \image imagine/images/switchdelegate-background-pressed.9.png + \li + \row + \li + \li background + \li focused + \li \image imagine/images/switchdelegate-background-focused.9.png + \li + \row + \li + \li background + \li hovered + \li \image imagine/images/switchdelegate-background-hovered.9.png + \li + \row + \li + \li indicator + \li + \li \image imagine/images/switchdelegate-indicator.png + \li + \row + \li + \li indicator + \li disabled + \li \image imagine/images/switchdelegate-indicator-disabled.png + \li + \row + \li + \li indicator + \li pressed + \li \image imagine/images/switchdelegate-indicator-pressed.png + \li + \row + \li + \li indicator + \li checked + \li \image imagine/images/switchdelegate-indicator-checked.png + \li + \row + \li + \li indicator + \li checked, focused + \li \image imagine/images/switchdelegate-indicator-checked-focused.png + \li + \row + \li + \li indicator + \li checked, hovered + \li \image imagine/images/switchdelegate-indicator-checked-hovered.png + \li + \row + \li + \li indicator + \li checked, pressed + \li \image imagine/images/switchdelegate-indicator-checked-pressed.png + \li + \row + \li + \li indicator + \li focused + \li \image imagine/images/switchdelegate-indicator-focused.png + \li + \row + \li + \li indicator + \li hovered + \li \image imagine/images/switchdelegate-indicator-hovered.png + \li + \row + \li + \li handle + \li + \li \image imagine/images/switchdelegate-handle.png + \li + \row + \li + \li handle + \li disabled + \li \image imagine/images/switchdelegate-handle-disabled.png + \li + \row + \li \l TabBar + \li background + \li + \li \image imagine/images/tabbar-background.png + \li + \row + \li \l TabButton + \li background + \li + \li \image imagine/images/tabbutton-background.9.png + \li + \row + \li + \li background + \li disabled + \li \image imagine/images/tabbutton-background-disabled.9.png + \li + \row + \li + \li background + \li pressed + \li \image imagine/images/tabbutton-background-pressed.9.png + \li + \row + \li + \li background + \li checked + \li \image imagine/images/tabbutton-background-checked.9.png + \li + \row + \li + \li background + \li hovered + \li \image imagine/images/tabbutton-background-hovered.9.png + \li + \row + \li + \li background + \li disabled, checked + \li \image imagine/images/tabbutton-background-disabled-checked.9.png + \li + \row + \li \l TextArea + \li background + \li + \li \image imagine/images/textarea-background.9.png + \li + \row + \li + \li background + \li disabled + \li \image imagine/images/textarea-background-disabled.9.png + \li + \row + \li + \li background + \li focused + \li \image imagine/images/textarea-background-focused.9.png + \li + \row + \li \l TextField + \li background + \li + \li \image imagine/images/textfield-background.9.png + \li + \row + \li + \li background + \li disabled + \li \image imagine/images/textfield-background-disabled.9.png + \li + \row + \li + \li background + \li focused + \li \image imagine/images/textfield-background-focused.9.png + \li + \row + \li \l ToolBar + \li background + \li + \li \image imagine/images/toolbar-background.png + \li + \row + \li \l ToolButton + \li background + \li + \li \image imagine/images/toolbutton-background.9.png + \li + \row + \li + \li background + \li disabled, checked + \li \image imagine/images/toolbutton-background-disabled-checked.9.png + \li + \row + \li + \li background + \li focused + \li \image imagine/images/toolbutton-background-focused.9.png + \li + \row + \li + \li background + \li pressed + \li \image imagine/images/toolbutton-background-pressed.9.png + \li + \row + \li + \li background + \li checked + \li \image imagine/images/toolbutton-background-checked.9.png + \li + \row + \li + \li background + \li checked, focused + \li \image imagine/images/toolbutton-background-checked-focused.9.png + \li + \row + \li + \li background + \li checked, hovered + \li \image imagine/images/toolbutton-background-checked-hovered.9.png + \li + \row + \li + \li background + \li hovered + \li \image imagine/images/toolbutton-background-hovered.9.png + \li + \row + \li \l ToolSeparator + \li separator + \li horizontal + \li \image imagine/images/toolseparator-separator-horizontal.9.png + \li + \row + \li + \li separator + \li vertical + \li \image imagine/images/toolseparator-separator-vertical.9.png + \li + \row + \li \l ToolTip + \li background + \li + \li \image imagine/images/tooltip-background.9.png + \li + \endtable + + \target sup1 + \sup 1 A 1x1 image containing one color, stretched to fill the control. + + \section2 9-Patch Images + + The Imagine style uses \l + {https://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch}{9-patch + images} in order to give designers control over how a particular element + responds to being resized. Here is an example of a 9-patch image that + represents a \l {Button}'s \l {Control::}{background}, alongside a + magnified version (to make it easier to see the 9-patch lines): + + \image qtquickcontrols2-imagine-9-patch-4x.png + + The content of the image is 44 pixels wide by 32 pixels high. Every 9-patch + image needs a one pixel thick line (collectively referred to as + "9-patch lines") around every side, so the actual size of the image becomes + 46 pixels wide by 34 pixels high. Note that the 9-patch lines must be one + pixel thick regardless of the target DPI of the image. For example, + the 9-patch lines for button-background.9.png and button-background@2x.9.png + must both be one pixel thick. + + The 9-patch lines must be black, and the remaining areas must be transparent + or white: + + \image qtquickcontrols2-imagine-9-patch-size.png + + \section3 Stretchable Areas + + The 9-patch lines on the top and left edges determine which parts of the + image are stretched when it is resized. + + Below are examples of the 9-patch image being resized to one and a half + times its original size in various dimensions: + + \image qtquickcontrols2-imagine-9-patch-resized-stretchable.png + + Notice how the the rounded corners keep their original size, as they are + outside the range of the lines. + + \section3 Padding Areas + + The 9-patch lines on the right and bottom edges determine how much space + is available for the control's \l {Control::}{contentItem}, which means it + can also be thought of as controlling the \l {Control::}{padding}. For a + diagram that illustrates padding, see \l {Control Layout}. + + Below are more examples of the 9-patch image being resized, but this time + demonstrating how the padding 9-patch lines work. + + \image qtquickcontrols2-imagine-9-patch-resized-padding.png + + The \c contentItem can take up as much space as it needs within the shaded + areas. If the padding lines are left out, the \c contentItem will take as + much space as it needs without exceeding the stretchable areas. + + \section3 Inset Areas + + In some cases it is necessary for a control to have a drop shadow, for + example. However, if we were to add a drop shadow to the button above, it + would affect its size, which presents problems for both layouting and + mouse/touch input boundaries. + + Inset areas accounts for this by telling the control that a certain area of + the 9-patch image should go outside of the control: + + \image qtquickcontrols2-imagine-9-patch-inset.png + + In the image below, the dashed line represents the button's clickable area, + as well as the space that it will take up in a layout. The shadow is marked + by the striped area behind it: + + \image qtquickcontrols2-imagine-9-patch-inset-boundaries.png + + \section3 Exporting 9-Patch Images + + Various vector and bitmap editors can be used to create 9-patch images + suitable for use with the Imagine style. The following sections briefly + explain the export process for each editor, and the last section explains + how to ensure the exported images are 9-patch-conformant. + + \section4 Illustrator + + See Adobe's + \l {https://helpx.adobe.com/in/illustrator/using/collect-assets-export-for-screens.html#panel} + {Asset Export panel} documentation. + + \section4 Inkscape + + The \l {https://github.com/mitchcurtis/inkscape-9-patch-export} + {Inkscape 9-Patch Export Extension} can be used to export assets with + Inkscape. + + \section4 Photoshop + + See Adobe's + \l {https://helpx.adobe.com/photoshop/using/generate-assets-layers.html} + {Generate image assets from layers} documentation. + + \section4 Sketch + + See Sketch's \l {https://sketchapp.com/docs/exporting/}{Exporting} documentation. + + Qt Quick Controls also provides a + \l {http://code.qt.io/cgit/qt/qtquickcontrols2.git/tree/src/quickcontrols2/imagine/design} + {plugin} for Sketch that automatically fixes the thickness of the 9-patch lines + after the assets are exported. To install this file, double-click on it. + Once Sketch has confirmed that the 9-patch export plugin has been installed, + the plugin will automatically process images when they are exported. + + \section4 Fixing 9-Patch Lines + + When exporting 9-patch images in several DPI variants (\c {@2x}, \c {@3x}, + etc.), the 9-patch lines will typically be scaled up along with the image. + There are several ways to fix this, but perhaps the simplest approach is + to use \l {https://www.imagemagick.org/script/mogrify.php}{ImageMagick's mogrify} + tool. The tool has a \c -shave feature that can be used to crop the image + to reduce the thickness of the 9-patch lines: + + \badcode + mogrify -shave 1x1 -path path/to/images *@2x.9.png + mogrify -shave 2x2 -path path/to/images *@3x.9.png + mogrify -shave 3x3 -path path/to/images *@4x.9.png + \endcode + + Regular DPI images (those without the \c @Nx prefix) are not affected, so it + is only necessary to run the command on images intended for high DPI displays. + + \section2 Animated Images + + The \l {https://developers.google.com/speed/webp/}{WebP} and GIF animated + image formats are supported by the Imagine style. + + \section2 Customization + + \section3 Path + + The Imagine style allows customizing the \l {imagine-path-attached-prop}{path} + that is used to do the image asset selection. The path can be specified for any + window or item, and it automatically propagates to children in the same manner as + \l {Control::font}{fonts}. In the following example, the window and all three radio + buttons appear with dark image assets (files that are located in "qrc:/themes/dark"). + + \table + \row + \li + \qml + import QtQuick 2.12 + import QtQuick.Controls 2.12 + import QtQuick.Controls.Imagine 2.12 + + ApplicationWindow { + visible: true + + Imagine.path: "qrc:/themes/dark" + + Column { + anchors.centerIn: parent + + RadioButton { text: qsTr("Small") } + RadioButton { text: qsTr("Medium"); checked: true } + RadioButton { text: qsTr("Large") } + } + } + \endqml + \li + \image qtquickcontrols2-imagine-customization-dark.png + \endtable + + In addition to specifying the path in QML, it is also possible to specify + it via an \l {imagine-customization-environment-variable}{environment variable} + or in a \l {imagine-customization-configuration-file}{configuration file}. + Attributes specified in QML take precedence over all other methods. + + \section4 Configuration File + \target imagine-customization-configuration-file + + \include qquickimaginestyle.qdocinc conf + + See \l {Qt Quick Controls Configuration File} for more details about the + configuration file. + + \section4 Environment Variables + \target imagine-customization-environment-variable + + \include qquickimaginestyle.qdocinc env + + See \l {Supported Environment Variables in Qt Quick Controls} for the full + list of supported environment variables. + + \section3 Palette + + The Imagine style supports palette customization via the \l {Item::}{palette} + property and the \l {Palette Configuration}{qtquickcontrols2.conf} file. + As with other styles, the exact \l[QML]{Palette}{palette roles} + that the Imagine style uses are style-dependent. However, as most of the visual + appearance of controls (for example: backgrounds) are managed through image assets, + only the roles that are typically used for text will have an effect. + + \section3 Font + + Custom fonts can be set via the \l {Control::}{font} property and the + \l {Font Configuration}{configuration} file. + + \section2 Dependency + + The Imagine style must be separately imported to gain access to the + attributes that are specific to the Imagine style. It should be noted + that regardless of the references to the Imagine style, the same + application code runs with any other style. Imagine-specific attributes + only have an effect when the application is run with the Imagine style. + + If the Imagine style is imported in a QML file that is always loaded, the + Imagine style must be deployed with the application in order to be able + to run the application regardless of which style the application is run with. + By using \l {Using File Selectors with Qt Quick Controls}{file selectors}, + style-specific tweaks can be applied without creating a hard dependency to + a style. + + \b {See also} \l {Styling Qt Quick Controls} + + \section1 Attached Property Documentation + + \styleproperty {Imagine.path} {string} {imagine-path-attached-prop} + \target imagine-path-attached-prop + This attached property holds the path to the image assets... + + \code + Button { + Imagine.path: "qrc:/themes/dark" + } + \endcode + + \endstyleproperty + + \section1 Related Information + + \list + \li \l{Styling Qt Quick Controls} + \li \l{Qt Quick Controls - Imagine Style Example: Automotive}{Automotive Example} + \li \l{Qt Quick Controls - Imagine Style Example: Music Player}{Music Player Example} + \endlist +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-index.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-index.qdoc new file mode 100644 index 00000000..7b64e776 --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-index.qdoc @@ -0,0 +1,204 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols-index.html + \keyword Qt Quick Controls 2 + \title Qt Quick Controls + + \brief Provides a set of UI controls for Qt Quick. + + Qt Quick Controls provides a set of controls that can be used + to build complete interfaces in Qt Quick. The module was introduced + in Qt 5.7. + + \image qtquickcontrols2-styles.png + + Qt Quick Controls comes with a selection customizable styles. + See \l {Styling Qt Quick Controls} for more details. + + + \section1 Using the Module + + \section2 QML API + + The \l{Qt Quick Controls QML Types}{QML types} can be imported into your + application using the following import statement in your \c {.qml} file: + + \qml + import QtQuick.Controls + \endqml + + \section2 C++ API + + Using the \l{Qt Quick Controls C++ Classes}{C++ API} requires linking against the module library, + either directly or through other dependencies. + Several build tools have dedicated support for this, including CMake and qmake. + + \section3 Building with CMake + Use the \c find_package() command to locate the needed module components in the Qt6 package: + + \snippet qtquickcontrols2-overview.cmake 0 + + See also the \l{Build with CMake} overview. + + \section3 Building with qmake + To configure the module for building with qmake, + add the module as a value of the QT variable in the project's .pro file: + + \code + QT += quickcontrols2 + \endcode + + \section2 Building From Source + + The \b{Qt Image Formats} module is recommended, but not + required. It provides support for the \c {.webp} format used by the + \l {Animated Images}{Imagine style}. + + \section1 Versions + + Qt Quick Controls 2.0 was introduced in Qt 5.7. Subsequent minor Qt releases + increment the import version of the Qt Quick Controls modules by one, + until Qt 5.12, where the import versions match Qt's minor version. + + In Qt 6, both the major and minor versions match, and version numbers may + be omitted from imports in QML. If the version is omitted, the latest + version will be used. + + The experimental Qt Labs modules use import version 1.0. + + \table + \header + \li \c Qt + \li \l {Qt Quick QML Types}{\c QtQuick} + \li \l {Qt Quick Controls QML Types}{\c QtQuick.Controls},\br + \l {Material Style}{\c QtQuick.Controls.Material},\br + \l {Universal Style}{\c QtQuick.Controls.Universal},\br + \l {Qt Quick Templates 2 QML Types}{\c QtQuick.Templates} + \li \l {Qt Labs Platform QML Types}{\c Qt.labs.platform} + \row + \li 5.7 + \li 2.7 + \li 2.0 + \li 1.0 + \row + \li 5.8 + \li 2.8 + \li 2.1 + \li 1.0 + \row + \li 5.9 + \li 2.9 + \li 2.2 + \li 1.0 + \row + \li 5.10 + \li 2.10 + \li 2.3 + \li 1.0 + \row + \li 5.11 + \li 2.11 + \li 2.4 + \li 1.0 + \row + \li 5.12 + \li 2.12 + \li 2.12 + \li 1.0 + \row + \li 6.0 + \li 6.0 + \li 6.0 + \li 1.0 + \row + \li ... + \li ... + \li ... + \li ... + \endtable + + \section1 Module Evolution + \l{Changes to Qt Quick Controls} lists important changes in the + module API and functionality that were done for the Qt 6 series of Qt. + + \section1 License and Attributions + + Qt Quick Controls is available under commercial licenses from \l{The Qt Company}. + In addition, it is available under the + \l{GNU Lesser General Public License, version 3}, or + the \l{GNU General Public License, version 2}. + See \l{Qt Licensing} for further details. + + Furthermore Qt Quick Controls potentially contains third party + modules under following permissive licenses: + + \generatelist{groupsbymodule attributions-qtquickcontrols} + + \section1 Topics + + \list + \li \l{Getting Started with Qt Quick Controls}{Getting Started} + \li \l{Qt Quick Controls Guidelines}{Guidelines} + \li \l{Styling Qt Quick Controls}{Styling} + \li \l{Icons in Qt Quick Controls}{Icons} + \li \l{Customizing Qt Quick Controls}{Customization} + \li \l{Using File Selectors with Qt Quick Controls}{Using File Selectors} + \li \l{Deploying Qt Quick Controls Applications}{Deployment} + \li \l{Qt Quick Controls Configuration File}{Configuration File} + \li \l{Supported Environment Variables in Qt Quick Controls}{Environment Variables} + \endlist + + \section1 Reference + + \list + \li \l{Qt Quick Controls QML Types}{QML Types} + \li \l{Qt Quick Controls C++ Classes}{C++ Classes} + \endlist + + \section1 Examples + + \list + \li \l{Qt Quick Controls - Gallery}{Gallery} + \li \l{Qt Quick Controls - Chat Tutorial}{Chat Tutorial} + \li \l{Qt Quick Controls - Text Editor}{Text Editor} + \li \l{Qt Quick Controls - Wearable Demo}{Wearable Demo} + \li \l{Qt Quick Controls - Imagine Style Example: Automotive}{Automotive Example} + \li \l{Qt Quick Controls - Imagine Style Example: Music Player}{Music Player Example} + \li \l{Qt Quick Controls Examples}{All Examples} + \endlist + + \section1 Related Modules + + \list + \li \l{Qt Quick} + \li \l{Qt Quick Layouts} + \li \l{Qt Quick Templates 2} + \li \l{Qt Labs Platform} + \endlist +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-indicators.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-indicators.qdoc new file mode 100644 index 00000000..9f9e357b --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-indicators.qdoc @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-indicators.html + \title Indicator Controls + \ingroup qtquickcontrols2-guidelines + \brief Guidelines for indicator controls + + Qt Quick Controls offers a selection of indicator-like controls. + + \annotatedlist qtquickcontrols2-indicators + + Each type of indicator has its own specific target use case. The following + sections offer guidelines for choosing the appropriate type of indicator, + depending on the use case. + + \section1 BusyIndicator Control + + \image qtquickcontrols2-busyindicator.png + + BusyIndicator can be used to show that an operation is in progress, + and that the UI has to wait for the operation to complete. + + \section1 PageIndicator Control + + \image qtquickcontrols2-pageindicator.png + + \l PageIndicator is used to indicate the currently active page in + a container of multiple pages. + + \section1 ProgressBar Control + + \image qtquickcontrols2-progressbar.gif + + \l ProgressBar indicates the progress of an operation. The value should be + updated regularly. + + \section1 ScrollBar Control + + \image qtquickcontrols2-scrollbar.gif + + \l ScrollBar is an interactive bar that indicates the current scroll + position, and can be used to scroll to a specific position in a + \l Flickable. + + \section1 ScrollIndicator Control + + \image qtquickcontrols2-scrollindicator.gif + + \l ScrollIndicator is a non-interactive indicator that indicates the + current scroll position, and can be used to scroll to a specific position in a + \l {Flickable}. + + \section1 Related Information + \list + \li \l {Qt Quick Controls Guidelines} + \endlist +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-input.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-input.qdoc new file mode 100644 index 00000000..6bc037e0 --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-input.qdoc @@ -0,0 +1,123 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-input.html + \title Input Controls + \ingroup qtquickcontrols2-guidelines + \brief Guidelines for input controls + + Qt Quick Controls offers a variety of input controls for both numeric + and textual input. + + \annotatedlist qtquickcontrols2-input + + Each type of input control has its own specific target use case. The + following sections offer guidelines for choosing the appropriate type + of input control, depending on the use case. + + \section1 ComboBox Control + + \image qtquickcontrols2-combobox.gif + + \l ComboBox is used to select a value from a static multiple-line drop-down list. + It is not possible to add new values, and only one option can be selected. + + Recommendations: + \list + \li If the number of values is very large, consider applying a filter. + \li If the list is very limited, consider using RadioButton. This has the + advantage that the user can see all options at the same time. + \li Select a default value, the value that will be chosen most often. + \endlist + + \b {See also} \l {CheckBox Control}, \l {Tumbler Control}. + + \section1 Dial Control + + \image qtquickcontrols2-dial.png + + \l Dial is similar to a traditional dial knob that is found on devices such + as stereos or industrial equipment. + + The dial is rotated by clicking and dragging, with the handle indicating the + value of the dial. + + For applications where fast input is important, the circular + \l {Dial::inputMode}{input mode} is useful, as clicking on the dial will + move it directly to that position. + + For applications where precise input is important, the horizontal and + vertical input modes are recommended, as these allow small adjustments to + be made relative to where the dial is clicked. These modes are also better + for dials where large jumps in values could be unsafe, such as a dial that + controls audio volume. + + \b {See also} \l {Tumbler Control}. + + \section1 TextArea Control + + \image qtquickcontrols2-textarea.png + + \l TextArea is a multi-line text editor. + + \section1 TextField Control + + \image qtquickcontrols2-textfield.png + + \l TextField is a single line text editor. + + \b {See also} \l {Tumbler Control}. + + \section1 Slider Control + + \image qtquickcontrols2-slider.gif + + \l Slider is used to select a value by sliding a handle along a track. + + \section1 RangeSlider Control + + \image qtquickcontrols2-rangeslider.gif + + \l RangeSlider is used to select a range specified by two values, + by sliding each handle along a track. + + \b {See also} \l {Slider Control}. + + \section1 Tumbler Control + + \image qtquickcontrols2-tumbler.png + + \l Tumbler is a spinnable wheel of items that can be selected. + + \b {See also} \l {ComboBox Control}. + + \section1 Related Information + \list + \li \l {Qt Quick Controls Guidelines} + \endlist +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-macos.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-macos.qdoc new file mode 100644 index 00000000..382a23a6 --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-macos.qdoc @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-macOS.html + \title macOS Style + + The macOS style is a style that looks native on macOS. + \l {detailed-desc-macOS}{More...} + + \styleimport {QtQuick.Controls.macOS} {Qt 6.0} + + \target detailed-desc-macOS + + The macOS style is a style that looks native on macOS. The controls are drawn run-time using + native frameworks, and is therefore only available for applications running on macOS. + + \note Be aware that the apperance of this style can change from one minor Qt version to the + next, to better blend in with native applications on the platform. + + \table + \row + \li \image qtquickcontrols2-macos-light.png + \caption The macOS style in light theme + \li \image qtquickcontrols2-macos-dark.png + \caption The macOS style in dark theme + \endtable + + To run an application with the macOS style, see + \l {Using Styles in Qt Quick Controls}. + + \section2 Current state + + The macOS style is under development, and some controls are not yet supported. Those + controls are: \l BusyIndicator, \l DelayButton, \l PageIndicator, \l RangeSlider, \l Switch, \l TabBar and + \l Tumbler. Those will fall back to use the \l {Fusion Style}. + + \section2 Customization + + The goal of the macOS style is to for the controls look and feel as similar as possible to the + native controls in UIKit. The style will follow the theme and colors configured globally from + System Preferences, and does not come with a separate customization API on top of that. + + \note If you want to style a control, you should set both the + \l {Control::background}{background} and the \l {Control::contentItem}{contentItem}, rather than + just one of them. This is because the macOS style will in some cases draw both the contents and + the background into the default background item, which will not look good if the application + combines this with a custom contentItem. By setting them both, you are guaranteed that the + control will look the same on all platforms, for all styles. + + \b {See also} \l {Styling Qt Quick Controls} +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-material.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-material.qdoc new file mode 100644 index 00000000..f08c5ec3 --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-material.qdoc @@ -0,0 +1,404 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-material.html + \title Material Style + + The Material Style is based on the Google Material Design Guidelines. + \l{detailed-desc-material}{More...} + + \styleimport {QtQuick.Controls.Material 2.12} {Qt 5.7} + + \section1 Attached Properties + + \list + \li \l {material-accent-attached-prop}{\b accent} : color + \li \l {material-background-attached-prop}{\b background} : color + \li \l {material-elevation-attached-prop}{\b elevation} : int + \li \l {material-foreground-attached-prop}{\b foreground} : color + \li \l {material-primary-attached-prop}{\b primary} : color + \li \l {material-theme-attached-prop}{\b theme} : enumeration + \endlist + + \section1 Attached Methods + + \list + \li color \l {material-color-attached-method}{\b color}(enumeration predefined, enumeration shade) + \endlist + + \section1 Detailed Description + \target detailed-desc-material + + The Material style is based on the \l {https://www.google.com/design/spec/material-design/introduction.html} + {Google Material Design Guidelines}. It allows for a unified experience + across platforms and device sizes. + + \table + \row + \li \image qtquickcontrols2-material-light.png + \caption The Material style in light theme + \li \image qtquickcontrols2-material-dark.png + \caption The Material style in dark theme + \endtable + + To run an application with the Material style, see + \l {Using Styles in Qt Quick Controls}. + + \note The Material style is not a native Android style. The Material + style is a 100% cross-platform Qt Quick Controls style implementation that + follows the Google Material Design Guidelines. The style runs on any + platform, and looks more or less identical everywhere. Minor differences + may occur due to differences in available system fonts and font rendering + engines. + + \section2 Customization + + The Material style allows customizing five attributes, \l {material-theme-attached-prop}{theme}, + \l {material-primary-attached-prop}{primary}, \l {material-accent-attached-prop}{accent}, + \l {material-foreground-attached-prop}{foreground}, and \l {material-background-attached-prop}{background}. + + \image qtquickcontrols2-material-attributes.png + + All attributes can be specified for any window or item, and they automatically + propagate to children in the same manner as \l {Control::font}{fonts}. In the + following example, the window and all three radio buttons appear in the dark + theme using a purple accent color: + + \table + \row + \li + \qml + import QtQuick 2.12 + import QtQuick.Controls 2.12 + import QtQuick.Controls.Material 2.12 + + ApplicationWindow { + visible: true + + Material.theme: Material.Dark + Material.accent: Material.Purple + + Column { + anchors.centerIn: parent + + RadioButton { text: qsTr("Small") } + RadioButton { text: qsTr("Medium"); checked: true } + RadioButton { text: qsTr("Large") } + } + } + \endqml + \li + \image qtquickcontrols2-material-purple.png + \endtable + + In addition to specifying the attributes in QML, it is also possible to + specify them via environment variables or in a configuration file. Attributes + specified in QML take precedence over all other methods. + + \section3 Configuration File + + \include qquickmaterialstyle.qdocinc conf + + See \l {Qt Quick Controls Configuration File} for more details about the + configuration file. + + \section3 Environment Variables + + \include qquickmaterialstyle.qdocinc env + + See \l {Supported Environment Variables in Qt Quick Controls} for the full + list of supported environment variables. + + \section2 Dependency + + The Material style must be separately imported to gain access to the + attributes that are specific to the Material style. It should be noted + that regardless of the references to the Material style, the same + application code runs with any other style. Material-specific attributes + only have an effect when the application is run with the Material style. + + If the Material style is imported in a QML file that is always loaded, the + Material style must be deployed with the application in order to be able + to run the application regardless of which style the application is run with. + By using \l {Using File Selectors with Qt Quick Controls}{file selectors}, + style-specific tweaks can be applied without creating a hard dependency to + a style. + + \section2 Pre-defined Material Colors + + Even though primary and accent can be any \l {colorbasictypedocs}{color}, it + is recommended to use one of the pre-defined colors that have been designed + to work well with the rest of the Material style palette: + + Available pre-defined colors: + \value Material.Red \stylecolor {#F44336} {} + \value Material.Pink \stylecolor {#E91E63} {(default accent)} + \value Material.Purple \stylecolor {#9C27B0} {} + \value Material.DeepPurple \stylecolor {#673AB7} {} + \value Material.Indigo \stylecolor {#3F51B5} {(default primary)} + \value Material.Blue \stylecolor {#2196F3} {} + \value Material.LightBlue \stylecolor {#03A9F4} {} + \value Material.Cyan \stylecolor {#00BCD4} {} + \value Material.Teal \stylecolor {#009688} {} + \value Material.Green \stylecolor {#4CAF50} {} + \value Material.LightGreen \stylecolor {#8BC34A} {} + \value Material.Lime \stylecolor {#CDDC39} {} + \value Material.Yellow \stylecolor {#FFEB3B} {} + \value Material.Amber \stylecolor {#FFC107} {} + \value Material.Orange \stylecolor {#FF9800} {} + \value Material.DeepOrange \stylecolor {#FF5722} {} + \value Material.Brown \stylecolor {#795548} {} + \value Material.Grey \stylecolor {#9E9E9E} {} + \value Material.BlueGrey \stylecolor {#607D8B} {} + + When the dark theme is in use, different \l {Pre-defined Shades}{shades} of + the pre-defined colors are used by default: + + \value Material.Red \stylecolor {#EF9A9A} {} + \value Material.Pink \stylecolor {#F48FB1} {(default accent)} + \value Material.Purple \stylecolor {#CE93D8} {} + \value Material.DeepPurple \stylecolor {#B39DDB} {} + \value Material.Indigo \stylecolor {#9FA8DA} {(default primary)} + \value Material.Blue \stylecolor {#90CAF9} {} + \value Material.LightBlue \stylecolor {#81D4FA} {} + \value Material.Cyan \stylecolor {#80DEEA} {} + \value Material.Teal \stylecolor {#80CBC4} {} + \value Material.Green \stylecolor {#A5D6A7} {} + \value Material.LightGreen \stylecolor {#C5E1A5} {} + \value Material.Lime \stylecolor {#E6EE9C} {} + \value Material.Yellow \stylecolor {#FFF59D} {} + \value Material.Amber \stylecolor {#FFE082} {} + \value Material.Orange \stylecolor {#FFCC80} {} + \value Material.DeepOrange \stylecolor {#FFAB91} {} + \value Material.Brown \stylecolor {#BCAAA4} {} + \value Material.Grey \stylecolor {#EEEEEE} {} + \value Material.BlueGrey \stylecolor {#B0BEC5} {} + + \section2 Pre-defined Shades + + There are several different + \l {https://material.google.com/style/color.html#color-color-palette}{shades} + of each \l {Pre-defined Material Colors}{pre-defined color} that can be passed + to the \l {material-color-attached-method}{Material.color()} function: + \value Material.Shade50 + \value Material.Shade100 + \value Material.Shade200 + \value Material.Shade300 + \value Material.Shade400 + \value Material.Shade500 + \value Material.Shade600 + \value Material.Shade700 + \value Material.Shade800 + \value Material.Shade900 + \value Material.ShadeA100 + \value Material.ShadeA200 + \value Material.ShadeA400 + \value Material.ShadeA700 + + \b {See also} \l {Basic Style}, \l {Universal Style} + + \section2 Variants + + The Material style also supports a dense variant, where controls like + buttons and delegates are smaller in height and use smaller font sizes. + It is recommended to use the dense variant on desktop platforms, where + a mouse and keyboard allow more precise and flexible user interaction. + + To use the dense variant, either set the + \c QT_QUICK_CONTROLS_MATERIAL_VARIANT environment variable to \c Dense, + or specify \c Variant=Dense in the + \l {Qt Quick Controls Configuration File}{qtquickcontrols2.conf} file. + The default value in both cases is \c Normal. + + The following images illustrate the differences between some of the + controls when using the normal and dense variants: + + \table + \row + \li + \image qtquickcontrols2-material-variant-normal.png + \li + \image qtquickcontrols2-material-variant-dense.png + \endtable + + Note that the heights shown above may vary based on differences in fonts + across platforms. + + \section1 Attached Property Documentation + + \styleproperty {Material.accent} {color} {material-accent-attached-prop} + \target material-accent-attached-prop + This attached property holds the accent color of the theme. The property + can be attached to any window or item. The value is propagated to children. + + The default value is \c Material.Pink. + + In the following example, the accent color of the highlighted button is + changed to \c Material.Orange: + + \table + \row + \li + \snippet qtquickcontrols2-material-accent.qml 1 + \li + \image qtquickcontrols2-material-accent.png + \endtable + + \note Even though the accent can be any \l {colorbasictypedocs}{color}, it is + recommended to use one of the \l {pre-defined Material colors} that have been + designed to work well with the rest of the Material style palette. + + \endstyleproperty + + \styleproperty {Material.background} {color} {material-background-attached-prop} + \target material-background-attached-prop + This attached property holds the background color of the theme. The property + can be attached to any window or item. The value is propagated to children. + + The default value is theme-specific (light or dark). + + In the following example, the background color of the button is changed to + \c Material.Teal: + + \table + \row + \li + \snippet qtquickcontrols2-material-background.qml 1 + \li + \image qtquickcontrols2-material-background.png + \endtable + + \endstyleproperty + + \styleproperty {Material.elevation} {int} {material-elevation-attached-prop} + \target material-elevation-attached-prop + This attached property holds the elevation of the control. The higher the + elevation, the deeper the shadow. The property can be attached to any control, + but not all controls visualize elevation. + + The default value is control-specific. + + In the following example, the elevation of the pane is set to \c 6 + in order to achieve the look of an + \l {https://material.google.com/components/cards.html}{elevated card}: + + \table + \row + \li + \snippet qtquickcontrols2-material-elevation.qml 1 + \li + \image qtquickcontrols2-material-elevation.png + \endtable + + \endstyleproperty + + \styleproperty {Material.foreground} {color} {material-foreground-attached-prop} + \target material-foreground-attached-prop + This attached property holds the foreground color of the theme. The property + can be attached to any window or item. The value is propagated to children. + + The default value is theme-specific (light or dark). + + In the following example, the foreground color of the button is set to \c + Material.Pink: + + \table + \row + \li + \snippet qtquickcontrols2-material-foreground.qml 1 + \li + \image qtquickcontrols2-material-foreground.png + \endtable + + \endstyleproperty + + \styleproperty {Material.primary} {color} {material-primary-attached-prop} + \target material-primary-attached-prop + This attached property holds the primary color of the theme. The property + can be attached to any window or item. The value is propagated to children. + + The primary color is used as the background color of ToolBar by default. + + The default value is \c Material.Indigo. + + \note Even though the primary can be any \l {colorbasictypedocs}{color}, it is + recommended to use one of the \l {pre-defined Material colors} that have been + designed to work well with the rest of the Material style palette. + + \endstyleproperty + + \styleproperty {Material.theme} {enumeration} {material-theme-attached-prop} + \target material-theme-attached-prop + This attached property holds whether the theme is light or dark. The property + can be attached to any window or item. The value is propagated to children. + + Available themes: + \value Material.Light Light theme (default) + \value Material.Dark Dark theme + \value Material.System System theme + + Setting the theme to \c System chooses either the light or dark theme based + on the system theme colors. However, when reading the value of the theme + property, the value is never \c System, but the actual theme. + + In the following example, the theme for both the pane and the button is set + to \c Material.Dark: + + \table + \row + \li + \snippet qtquickcontrols2-material-theme.qml 1 + \li + \image qtquickcontrols2-material-theme.png + \endtable + + \endstyleproperty + + \section1 Attached Method Documentation + + \stylemethod2 {color} {color} {enumeration} {predefined} {enumeration} {shade} {material-color-attached-method} + \target material-color-attached-method + This attached method returns the effective color value of the specified + \l {pre-defined Material colors}{pre-defined Material color} combined with + the given \l {pre-defined shades}{shade}. If omitted, the shade argument + defaults to \c Material.Shade500. + + \qml + Rectangle { + color: Material.color(Material.Red) + } + \endqml + + \endstylemethod2 + + \section1 Related Information + + \list + \li \l{Styling Qt Quick Controls} + \endlist +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-menus.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-menus.qdoc new file mode 100644 index 00000000..43db2092 --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-menus.qdoc @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-menus.html + \title Menu Controls + \ingroup qtquickcontrols2-guidelines + \brief Guidelines for menu controls + + \annotatedlist qtquickcontrols2-menus + + Each type of menu control has its own specific target use case. The + following sections offer guidelines for choosing the appropriate type + of menu control, depending on the use case. + + \section1 Menu Control + + \image qtquickcontrols2-menu.png + + \l Menu control can be used for context menus; for example, after + right-clicking. It can also be used for popup menus; for example, a + menu that is shown after clicking a button. + + \l MenuItem is an item in the Menu control. Each item in a menu: + \list + \li displays text to the user + \li allows checking/unchecking + \li is highlighted (for example, on keyboard navigation) + \li performs some action on activation + \endlist + + \section1 MenuBar Control + + \image qtquickcontrols2-menubar.png + + \l MenuBar control can be used for window menu bars. + + \l MenuBarItem is an item in the MenuBar control. Each item in a menu bar: + \list + \li displays text to the user + \li is highlighted (for example, on keyboard navigation) + \li pops up the respective menu on activation + \endlist +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-navigation.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-navigation.qdoc new file mode 100644 index 00000000..95928d13 --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-navigation.qdoc @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-navigation.html + \title Navigation Controls + \ingroup qtquickcontrols2-guidelines + \brief Guidelines for navigation controls + + Qt Quick Controls offers a selection of navigation models. + + \annotatedlist qtquickcontrols2-navigation + + The following sections offer guidelines for choosing the appropriate type + of navigation model, depending on the use case. + + \section1 StackView Control + + \image qtquickcontrols2-stackview-wireframe.png + + \l StackView provides a stack-based navigation model which can be used + with a set of interlinked pages. StackView works according to a last-in + first-out principle: the page pushed last on the stack is the one visible. + Popping a page removes the last page and makes the previous one visible. + + \section1 SwipeView Control + + \image qtquickcontrols2-swipeview-wireframe.png + + \l SwipeView provides a navigation model that simplifies horizontal paged + scrolling. The page indicator on the bottom shows which is the presently + active page. + + \section1 TabBar Control + + \image qtquickcontrols2-tabbar-wireframe.png + + \l TabBar is a bar with icons or text that allows the user to switch + between different subtasks, views, or modes. + + \section1 TabButton Control + + \image qtquickcontrols2-tabbutton.png + + \l TabButton is a button with a layout suitable for a TabBar control. +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-popups.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-popups.qdoc new file mode 100644 index 00000000..c26b4c4b --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-popups.qdoc @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-popups.html + \title Popup Controls + \ingroup qtquickcontrols2-guidelines + \brief Guidelines for popup controls + + \annotatedlist qtquickcontrols2-popups + + Each type of popup control has its own specific target use case. The + following sections offer guidelines for choosing the appropriate type + of popup control, depending on the use case. + + \section1 Drawer Control + + \image qtquickcontrols2-drawer-expanded-wireframe.png + + \l Drawer provides a swipe-based side panel, similar to those often used + in touch interfaces to provide a central location for navigation. + + The drawer can be positioned at any of the four edges of the screen. It allows + the user to add navigation without taking up valuable screen space. The user can + show and hide the drawer at any time with a simple swipe movement. + + \section1 Menu Control + + \image qtquickcontrols2-menu.png + + The \l Menu control displays a vertical list of items that can be selected. It can + be used for offering a list of actions that can be taken in a given context. + + \b {See also} \l {Drawer Control}. + + \section1 Popup Control + + \image qtquickcontrols2-popup-settings.png + + A \l Popup displays content over other application content. + It prompts the user to make a decision or enter information. + + Popups can be modal or non-modal. A modal popup blocks users from interacting + with the application until they have made a choice and closed the popup. + + A popup can be used for: + + \list + \li communicating a message to the user that they must read and acknowledge. + \li displaying an error message. + \li prompting the user to make a choice and/or enter a value. + \endlist + + \section1 ToolTip Control + + \image qtquickcontrols2-tooltip.png + + \l ToolTip shows a short piece of text that informs the user of a control's + function. It is typically placed above or below the parent control. + + Recommendations: + \list + \li Use a tooltip if a control has little or no descriptive text, or needs + a short explanation. + \li Use a tooltip only if the information on a particular control is not + available elsewhere in the screen. + \li Keep the tooltip text short so that it does not cover other content + while being displayed. + \endlist + + \section1 Related Information + \list + \li \l {Qt Quick Controls Guidelines} + \endlist +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-qmltypes.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-qmltypes.qdoc new file mode 100644 index 00000000..0251a6f9 --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-qmltypes.qdoc @@ -0,0 +1,130 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \qmlmodule QtQuick.Controls 2.\QtMinorVersion + \keyword Qt Quick Controls QML Types + \title Qt Quick Controls QML Types + \keyword Qt Quick Controls 2 QML Types + \ingroup qmlmodules + \brief Provides QML types for user interfaces (Qt Quick Controls). + + \l{Qt Quick Controls} provides QML types for creating user interfaces. + These QML types work in conjunction with \l{Qt Quick} and + \l{Qt Quick Layouts}. + + Qt Quick Controls QML types can be imported into your application + using the following import statement in your .qml file: + + \qml + import QtQuick.Controls + \endqml + + \section1 QML Types + \generatelist {qmltypesbymodule QtQuick.Controls} + \noautolist + + \section1 Using Qt Quick Controls types in property declarations + + As mentioned in \l {Qt Quick Templates 2 QML Types}, each type in Qt Quick + Controls is backed by a C++ "template" type. These types are \l {Qt Quick + Templates 2}{non-visual implementations of controls' logic and behavior}. + + For example, the \l Menu type's API and behavior is defined by the C++ + type in Qt Quick Templates. Each \l {Definition of a Style}{style} that + wants to provide a Menu must have a Menu.qml available, and the root + item in that file must be the Menu from Qt Quick Templates. When you + import QtQuick.Controls and create a Menu in QML, the type you get is + actually the QML Menu defined by the style's Menu.qml. + + In order to use a control as the type in a property declaration, you should + use the corresponding type from Qt Quick Templates. For example, suppose + you had a \c PopupOpener component, which was a Button that opened a + Popup: + + \qml + // PopupButton.qml + import QtQuick.Controls + + Button { + required property Popup popup + + onClicked: popup.open() + } + + // main.qml + PopupButton { + popup: saveChangesDialog + } + + Dialog { + id: saveChangesDialog + + // ... + } + \endqml + + Running this code will result in an error: + + \badcode + Unable to assign Dialog_QMLTYPE to Popup_QMLTYPE + \endcode + + This is because of the inheritance hierarchy: + + \badcode + Popup (C++ type in QtQuick.Templates) + │ └── Popup (QML type in QtQuick.Controls) + └── Dialog (C++ type in QtQuick.Templates) + └── Dialog (QML type in QtQuick.Controls) + \endcode + + Dialog from \c QtQuick.Controls does not derive from the Popup from + \c QtQuick.Controls, but from \c QtQuick.Templates. + + Instead, use the Popup from Qt Quick Templates as the property type: + + \qml + // PopupButton.qml + import QtQuick.Controls + import QtQuick.Templates as T + + Button { + required property T.Popup popup + + onClicked: popup.open() + } + \endqml + + For more information on the Qt Quick Controls module, see the + \l {Qt Quick Controls} module documentation. + + \section1 Related Information + \list + \li \l {Qt Quick Controls Guidelines} + \endlist +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-separators.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-separators.qdoc new file mode 100644 index 00000000..481a744e --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-separators.qdoc @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-separators.html + \title Separator Controls + \ingroup qtquickcontrols2-guidelines + \brief Guidelines for separator controls + + Qt Quick Controls offers a selection of separators. + + \annotatedlist qtquickcontrols2-separators + + Each type of separator has its own specific use case. The following + sections offer guidelines for choosing the appropriate type of separator, + depending on the use case. + + \section1 MenuSeparator Control + + \image qtquickcontrols2-menuseparator.png + + \l MenuSeparator should be used to separate items (typically MenuItem + controls) in a Menu. Grouping related menu items together makes it easier + for the user to interact with the menu. For example, a typical desktop + user interface might have \c Undo and \c Redo items in one group, and + \c Cut, \c Copy and \c Paste in another. + + \section1 ToolSeparator Control + + \image qtquickcontrols2-toolseparator.png + + \l ToolSeparator should be used to separate items (typically ToolButton + controls) in a ToolBar. It can be used in horizontal or vertical toolbars. + + \section1 Related Information + \list + \li \l {Qt Quick Controls Guidelines} + \endlist +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-styles.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-styles.qdoc new file mode 100644 index 00000000..12993fbf --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-styles.qdoc @@ -0,0 +1,209 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-styles.html + \title Styling Qt Quick Controls + + \section1 Available Styles + + Qt Quick Controls comes with a selection of styles. + + \section2 Basic Style + + \image qtquickcontrols2-basic-thumbnail.png + The \l {Basic Style} is a simple and light-weight all-round style that offers + the maximum performance for Qt Quick Controls. + + \section2 Fusion Style + + \image qtquickcontrols2-fusion-thumbnail.png + The \l {Fusion Style} is a platform-agnostic style that offers a desktop-oriented + look and feel for Qt Quick Controls. + + \section2 Imagine Style + + \image qtquickcontrols2-imagine-thumbnail.png + The \l {Imagine Style} is based on image assets. The style comes with a default + set of images which can easily be changed by providing a directory + with images using a predefined naming convention. + + \section2 macOS Style + + \image qtquickcontrols2-macos-thumbnail.png + The \l {macOS Style} is a native-looking style for macOS. + \note this style is only available for applications running on macOS. + + \section2 Material Style + + \image qtquickcontrols2-material-thumbnail.png + The \l {Material Style} offers an appealing design based on the + \l {https://www.google.com/design/spec/material-design/introduction.html} + {Google Material Design Guidelines}, but requires more system resources than + the Basic style. + + \section2 Universal Style + + \image qtquickcontrols2-universal-thumbnail.png + The \l {Universal Style} offers an appealing design based on the + \l {https://dev.windows.com/design}{Microsoft Universal Design Guidelines}, + but requires more system resources than the Basic style. + + \section2 Windows Style + + \image qtquickcontrols2-windows-thumbnail.png + The \l {Windows Style} is a native-looking style for Windows. + \note this style is only available for applications running on Windows. + + \section1 Using Styles in Qt Quick Controls + + There are two ways of using styles in Qt Quick Controls: + run-time style selection and compile-time style selection. + + \section2 Compile-Time Style Selection + + Compile-time style selection involves using QML imports to specify the + style. For example, to import the Material style: + + \qml + import QtQuick.Controls.Material + + ApplicationWindow { + // ... + } + \endqml + + Notice that QtQuick.Controls (which is responsible for run-time style + selection) is not imported. The fallback style is specified by the qmldir + of the style: + + \badcode + module QtQuick.Controls.Material + # ... + import QtQuick.Controls.Basic auto + \endcode + + The benefit of compile-time style selection is that the QtQuick.Controls plugin + is not used and therefore does not need to be deployed with the application. + + Explicit imports are also necessary if your application is built + \l {Static Builds}{statically}. + + \section2 Run-Time Style Selection + + Run-time style selection involves importing \c QtQuick.Controls: + + \qml + import QtQuick.Controls + \endqml + + The QtQuick.Controls plugin will import the style and fallback + style that were set at runtime via one of the following approaches: + + \list + \li \l[CPP]{QQuickStyle::setStyle()} + \li The \c -style command line argument + \li The \c QT_QUICK_CONTROLS_STYLE environment variable + \li The \c qtquickcontrols2.conf configuration file + \endlist + + The priority of these approaches follows the order they are listed, + from highest to lowest. That is, using \c QQuickStyle to set the style will + always take priority over using the command line argument, for example. + + The benefit of run-time style selection is that a single application binary + can support multiple styles, meaning that the end user can choose which + style to run the application with. + + \section3 Using QQuickStyle in C++ + + \l[CPP]{QQuickStyle} provides C++ API for configuring a specific + style. The following example runs a Qt Quick Controls application + with the Material style: + + \code + QQuickStyle::setStyle("Material"); + \endcode + + See the detailed description of \l[CPP]{QQuickStyle} for more + details. + + \section3 Command line argument + + Passing a \c -style command line argument is the convenient way to test different + styles. It takes precedence over the other methods listed below. The following + example runs a Qt Quick Controls application with the Material style: + + \code + ./app -style material + \endcode + + \section3 Environment variable + + Setting the \c QT_QUICK_CONTROLS_STYLE environment variable can be used to set + a system-wide style preference. It takes precedence over the configuration file + mentioned below. The following example runs a Qt Quick Controls application with + the Universal style: + + \code + QT_QUICK_CONTROLS_STYLE=universal ./app + \endcode + + See \l {Supported Environment Variables in Qt Quick Controls} for the full list + of supported environment variables. + + \section3 Configuration file + + Qt Quick Controls support a special configuration file, \c :/qtquickcontrols2.conf, + that is built into an application's resources. + + The configuration file can specify the preferred style (may be overridden by either + of the methods described earlier) and certain style-specific attributes. The following + example specifies that the preferred style is the Material style. + + \code + [Controls] + Style=Material + \endcode + + See \l {Qt Quick Controls Configuration File} for more details about the + configuration file. + + \section1 Related Information + \list + \li \l {Basic Style} + \li \l {Fusion Style} + \li \l {Imagine Style} + \li \l {Material Style} + \li \l {Universal Style} + \li \l {Customizing Qt Quick Controls} + \li \l {Using File Selectors with Qt Quick Controls} + \li \l {Deploying Qt Quick Controls Applications} + \li \l {Qt Quick Controls Configuration File} + \li \l {Supported Environment Variables in Qt Quick Controls} + \endlist +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-universal.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-universal.qdoc new file mode 100644 index 00000000..72267050 --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-universal.qdoc @@ -0,0 +1,288 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-universal.html + \title Universal Style + + The Universal Style is based on the Microsoft Universal Design Guidelines. + \l {detailed-desc-universal}{More...} + + \styleimport {QtQuick.Controls.Universal 2.12} {Qt 5.7} + + \section1 Attached Properties + + \list + \li \l {universal-accent-attached-prop}{\b accent} : color + \li \l {universal-background-attached-prop}{\b background} : color + \li \l {universal-foreground-attached-prop}{\b foreground} : color + \li \l {universal-theme-attached-prop}{\b theme} : enumeration + \endlist + + \section1 Attached Methods + + \list + \li color \l {color-attached-method}{\b color}(enumeration predefined) + \endlist + + \section1 Detailed Description + \target detailed-desc-universal + + The Universal style is a device-agnostic style based on the + \l {https://dev.windows.com/design}{Microsoft Universal Design Guidelines}. + The Universal style has been designed to look good on all devices, from + phones and tablets to PCs. + + \table + \row + \li \image qtquickcontrols2-universal-light.png + \caption The Universal style in light theme + \li \image qtquickcontrols2-universal-dark.png + \caption The Universal style in dark theme + \endtable + + To run an application with the Universal style, see + \l {Using Styles in Qt Quick Controls}. + + \note The Universal style is not a native Windows 10 style. The Universal + style is a 100% cross-platform Qt Quick Controls style implementation that + follows the Microsoft Universal Design Guidelines. The style runs on any + platform, and looks more or less identical everywhere. Minor differences + may occur due to differences in available system fonts and font rendering + engines. + + \section2 Customization + + The Universal style allows customizing four attributes, \l {universal-theme-attached-prop}{theme}, + \l {universal-accent-attached-prop}{accent}, \l {universal-foreground-attached-prop}{foreground}, and + \l {universal-background-attached-prop}{background}. + + \image qtquickcontrols2-universal-attributes.png + + Both attributes can be specified for any window or item, and they automatically + propagate to children in the same manner as \l {Control::font}{fonts}. In the + following example, the window and all three radio buttons appear in the dark + theme using a violet accent color: + + \table + \row + \li + \qml + import QtQuick 2.12 + import QtQuick.Controls 2.12 + import QtQuick.Controls.Universal 2.12 + + ApplicationWindow { + visible: true + + Universal.theme: Universal.Dark + Universal.accent: Universal.Violet + + Column { + anchors.centerIn: parent + + RadioButton { text: qsTr("Small") } + RadioButton { text: qsTr("Medium"); checked: true } + RadioButton { text: qsTr("Large") } + } + } + \endqml + \li + \image qtquickcontrols2-universal-violet.png + \endtable + + In addition to specifying the attributes in QML, it is also possible to + specify them via environment variables or in a configuration file. Attributes + specified in QML take precedence over all other methods. + + \section3 Configuration File + + \include qquickuniversalstyle.qdocinc conf + + See \l {Qt Quick Controls Configuration File} for more details about the + configuration file. + + \section3 Environment Variables + + \include qquickuniversalstyle.qdocinc env + + See \l {Supported Environment Variables in Qt Quick Controls} for the full + list of supported environment variables. + + \section2 Dependency + + The Universal style must be separately imported to gain access to the + attributes that are specific to the Universal style. It should be noted + that regardless of the references to the Universal style, the same + application code runs with any other style. Universal-specific attributes + only have an effect when the application is run with the Universal style. + + If the Universal style is imported in a QML file that is always loaded, the + Universal style must be deployed with the application in order to be able + to run the application regardless of which style the application is run with. + By using \l {Using File Selectors with Qt Quick Controls}{file selectors}, + style-specific tweaks can be applied without creating a hard dependency to + a style. + + \section2 Pre-defined Universal Colors + + Available pre-defined colors: + \value Universal.Lime \stylecolor {#A4C400} {} + \value Universal.Green \stylecolor {#60A917} {} + \value Universal.Emerald \stylecolor {#008A00} {} + \value Universal.Teal \stylecolor {#00ABA9} {} + \value Universal.Cyan \stylecolor {#1BA1E2} {} + \value Universal.Cobalt \stylecolor {#3E65FF} {(default accent)} + \value Universal.Indigo \stylecolor {#6A00FF} {} + \value Universal.Violet \stylecolor {#AA00FF} {} + \value Universal.Pink \stylecolor {#F472D0} {} + \value Universal.Magenta \stylecolor {#D80073} {} + \value Universal.Crimson \stylecolor {#A20025} {} + \value Universal.Red \stylecolor {#E51400} {} + \value Universal.Orange \stylecolor {#FA6800} {} + \value Universal.Amber \stylecolor {#F0A30A} {} + \value Universal.Yellow \stylecolor {#E3C800} {} + \value Universal.Brown \stylecolor {#825A2C} {} + \value Universal.Olive \stylecolor {#6D8764} {} + \value Universal.Steel \stylecolor {#647687} {} + \value Universal.Mauve \stylecolor {#76608A} {} + \value Universal.Taupe \stylecolor {#87794E} {} + + \b {See also} \l {Basic Style}, \l {Material Style} + + \section1 Attached Property Documentation + + \styleproperty {Universal.accent} {color} {universal-accent-attached-prop} + \target universal-accent-attached-prop + This attached property holds the accent color of the theme. The property + can be attached to any window or item. The value is propagated to children. + + The default value is \c Universal.Cobalt. + + In the following example, the accent color of the highlighted button is + changed to \c Universal.Orange: + + \table + \row + \li + \snippet qtquickcontrols2-universal-accent.qml 1 + \li + \image qtquickcontrols2-universal-accent.png + \endtable + + \note Even though the accent can be any \l {colorbasictypedocs}{color}, it is + recommended to use one of the \l {pre-defined Universal colors} that have been + designed to work well with the rest of the Universal style palette. + + \endstyleproperty + + \styleproperty {Universal.background} {color} {universal-background-attached-prop} + \target universal-background-attached-prop + This attached property holds the background color of the theme. The property + can be attached to any window or item. The value is propagated to children. + + The default value is theme-specific (light or dark). + + In the following example, the background color of the pane is changed to + \c Universal.Steel: + + \table + \row + \li + \snippet qtquickcontrols2-universal-background.qml 1 + \li + \image qtquickcontrols2-universal-background.png + \endtable + + \endstyleproperty + + \styleproperty {Universal.foreground} {color} {universal-foreground-attached-prop} + \target universal-foreground-attached-prop + This attached property holds the foreground color of the theme. The property + can be attached to any window or item. The value is propagated to children. + + The default value is theme-specific (light or dark). + + In the following example, the foreground color of the button is set to \c + Universal.Pink: + + \table + \row + \li + \snippet qtquickcontrols2-universal-foreground.qml 1 + \li + \image qtquickcontrols2-universal-foreground.png + \endtable + + \styleproperty {Universal.theme} {enumeration} {universal-theme-attached-prop} + \target universal-theme-attached-prop + This attached property holds whether the theme is light or dark. The property + can be attached to any window or item. The value is propagated to children. + + Available themes: + \value Universal.Light Light theme (default) + \value Universal.Dark Dark theme + \value Universal.System System theme + + Setting the theme to \c System chooses either the light or dark theme based + on the system theme colors. However, when reading the value of the theme + property, the value is never \c System, but the actual theme. + + In the following example, the theme for both the pane and the button is set + to \c Universal.Dark: + + \table + \row + \li + \snippet qtquickcontrols2-universal-theme.qml 1 + \li + \image qtquickcontrols2-universal-theme.png + \endtable + + \endstyleproperty + + \section1 Attached Method Documentation + + \stylemethod {color} {color} {enumeration} {predefined} {color-attached-method} + \target color-attached-method + This attached method returns the effective color value of the specified + \l {pre-defined Universal colors}{pre-defined Universal color}. + + \qml + Rectangle { + color: Universal.color(Universal.Red) + } + \endqml + + \endstylemethod + + \section1 Related Information + + \list + \li \l{Styling Qt Quick Controls} + \endlist +*/ diff --git a/src/quickcontrols2/doc/src/qtquickcontrols2-windows.qdoc b/src/quickcontrols2/doc/src/qtquickcontrols2-windows.qdoc new file mode 100644 index 00000000..8b63703b --- /dev/null +++ b/src/quickcontrols2/doc/src/qtquickcontrols2-windows.qdoc @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquickcontrols2-Windows.html + \title Windows Style + + The Windows style is a style that looks native on Windows. + \l {detailed-desc-Windows}{More...} + + \styleimport {QtQuick.Controls.Windows} {Qt 6.0} + + \target detailed-desc-Windows + + The Windows style is a style that looks native on Windows. The controls are drawn run-time using + native libraries, and is therefore only available for applications running on Windows. + + \note Be aware that the apperance of this style can change from one minor Qt version to the + next, to better blend in with native applications on the platform. + + \table + \row + \li \image qtquickcontrols2-windows.png + \caption The Windows style + \endtable + + To run an application with the Windows style, see + \l {Using Styles in Qt Quick Controls}. + + \section2 Current state + + The Windows style is under development, and some controls are not yet supported. Those + controls are: \l BusyIndicator, \l DelayButton, \l PageIndicator, \l RangeSlider, \l Switch, \l TabBar and + \l Tumbler. Those will fall back to use the \l {Fusion Style}. + + \section2 Customization + + The goal of the Windows style is to for the controls look and feel as similar as possible to the + native controls on Windows. The style will follow the theme and colors configured globally from + Windows Settings, and does not come with a separate customization API on top of that. + + \note If you want to style a control, you should set both the + \l {Control::background}{background} and the \l {Control::contentItem}{contentItem}, rather than + just one of them. This is because the Windows style will in some cases draw both the contents and + the background into the default background item, which will not look good if the application + combines this with a custom contentItem. By setting them both, you are guaranteed that the + control will look the same on all platforms, for all styles. + + \b {See also} \l {Styling Qt Quick Controls} +*/ diff --git a/src/quickcontrols2/fusion/ApplicationWindow.qml b/src/quickcontrols2/fusion/ApplicationWindow.qml new file mode 100644 index 00000000..090d361c --- /dev/null +++ b/src/quickcontrols2/fusion/ApplicationWindow.qml @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Window +import QtQuick.Templates as T +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.ApplicationWindow { + id: window + + color: window.palette.window +} diff --git a/src/quickcontrols2/fusion/BusyIndicator.qml b/src/quickcontrols2/fusion/BusyIndicator.qml new file mode 100644 index 00000000..f46900ea --- /dev/null +++ b/src/quickcontrols2/fusion/BusyIndicator.qml @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.BusyIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + + contentItem: BusyIndicatorImpl { + implicitWidth: 28 + implicitHeight: 28 + color: control.palette.text + + running: control.running + opacity: control.running ? 1 : 0 + Behavior on opacity { OpacityAnimator { duration: 250 } } + + RotationAnimator on rotation { + running: control.running || contentItem.visible + from: 0 + to: 360 + duration: 1000 + loops: Animation.Infinite + } + } +} diff --git a/src/quickcontrols2/fusion/Button.qml b/src/quickcontrols2/fusion/Button.qml new file mode 100644 index 00000000..f635fe8b --- /dev/null +++ b/src/quickcontrols2/fusion/Button.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.Button { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 4 + spacing: 6 + + icon.width: 16 + icon.height: 16 + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.palette.buttonText + } + + background: ButtonPanel { + implicitWidth: 80 + implicitHeight: 24 + + control: control + visible: !control.flat || control.down || control.checked || control.highlighted || control.visualFocus || control.hovered + } +} diff --git a/src/quickcontrols2/fusion/CMakeLists.txt b/src/quickcontrols2/fusion/CMakeLists.txt new file mode 100644 index 00000000..dd6f6c34 --- /dev/null +++ b/src/quickcontrols2/fusion/CMakeLists.txt @@ -0,0 +1,254 @@ +##################################################################### +## qtquickcontrols2fusionstyleplugin Plugin: +##################################################################### + +set(qml_files + "ApplicationWindow.qml" + "BusyIndicator.qml" + "Button.qml" + "CheckBox.qml" + "CheckDelegate.qml" + "ComboBox.qml" + "DelayButton.qml" + "Dial.qml" + "Dialog.qml" + "DialogButtonBox.qml" + "Drawer.qml" + "Frame.qml" + "GroupBox.qml" + "HorizontalHeaderView.qml" + "ItemDelegate.qml" + "Label.qml" + "Menu.qml" + "MenuBar.qml" + "MenuBarItem.qml" + "MenuItem.qml" + "MenuSeparator.qml" + "Page.qml" + "PageIndicator.qml" + "Pane.qml" + "Popup.qml" + "ProgressBar.qml" + "RadioButton.qml" + "RadioDelegate.qml" + "RangeSlider.qml" + "RoundButton.qml" + "ScrollBar.qml" + "ScrollView.qml" + "ScrollIndicator.qml" + "Slider.qml" + "SpinBox.qml" + "SplitView.qml" + "SwipeDelegate.qml" + "SwitchDelegate.qml" + "Switch.qml" + "TabBar.qml" + "TabButton.qml" + "TextArea.qml" + "TextField.qml" + "ToolBar.qml" + "ToolButton.qml" + "ToolSeparator.qml" + "ToolTip.qml" + "Tumbler.qml" + "VerticalHeaderView.qml" +) +set_source_files_properties(ApplicationWindow.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(BusyIndicator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Button.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(CheckBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(CheckDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ComboBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(DelayButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.2;6.0" +) +set_source_files_properties(Dial.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Dialog.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(DialogButtonBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(Drawer.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Frame.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(GroupBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(HorizontalHeaderView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.15;6.0" +) +set_source_files_properties(ItemDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Label.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Menu.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(MenuBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.3;6.0" +) +set_source_files_properties(MenuBarItem.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.3;6.0" +) +set_source_files_properties(MenuItem.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(MenuSeparator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(Page.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(PageIndicator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Pane.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Popup.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ProgressBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(RadioButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(RadioDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(RangeSlider.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(RoundButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(ScrollBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ScrollView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ScrollIndicator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Slider.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(SpinBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(SplitView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.13;6.0" +) +set_source_files_properties(SwipeDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(SwitchDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Switch.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(TabBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(TabButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(TextArea.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(TextField.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ToolBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ToolButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ToolSeparator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(ToolTip.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Tumbler.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(VerticalHeaderView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.15;6.0" +) + +qt_internal_add_qml_module(qtquickcontrols2fusionstyleplugin + URI "QtQuick.Controls.Fusion" + VERSION "${PROJECT_VERSION}" + CLASS_NAME QtQuickControls2FusionStylePlugin + IMPORTS + QtQuick.Controls.Basic/auto + PLUGIN_TARGET qtquickcontrols2fusionstyleplugin + NO_PLUGIN_OPTIONAL + NO_GENERATE_PLUGIN_SOURCE + SOURCES + qquickfusionstyle.cpp qquickfusionstyle_p.h + qquickfusiontheme.cpp qquickfusiontheme_p.h + qtquickcontrols2fusionstyleplugin.cpp + QML_FILES + ${qml_files} + DEFINES + QT_NO_CAST_FROM_ASCII + QT_NO_CAST_TO_ASCII + LIBRARIES + Qt::CorePrivate + Qt::GuiPrivate + Qt::QmlPrivate + Qt::QuickControls2Private + Qt::QuickPrivate + Qt::QuickTemplates2Private + PUBLIC_LIBRARIES + Qt::Core + Qt::Gui + Qt::Qml + Qt::Quick +) + +qt_internal_add_resource(qtquickcontrols2fusionstyleplugin "qtquickcontrols2fusionstyle" + PREFIX + "/qt-project.org/imports/QtQuick/Controls/Fusion" + FILES + "images/arrow.png" + "images/arrow@2x.png" + "images/arrow@3x.png" + "images/arrow@4x.png" + "images/checkmark.png" + "images/checkmark@2x.png" + "images/checkmark@3x.png" + "images/checkmark@4x.png" + "images/progressmask.png" + "images/progressmask@2x.png" + "images/progressmask@3x.png" + "images/progressmask@4x.png" +) + +add_subdirectory(impl) diff --git a/src/quickcontrols2/fusion/CheckBox.qml b/src/quickcontrols2/fusion/CheckBox.qml new file mode 100644 index 00000000..ed49a144 --- /dev/null +++ b/src/quickcontrols2/fusion/CheckBox.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.CheckBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + indicator: CheckIndicator { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.palette.windowText + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } +} diff --git a/src/quickcontrols2/fusion/CheckDelegate.qml b/src/quickcontrols2/fusion/CheckDelegate.qml new file mode 100644 index 00000000..93c087e4 --- /dev/null +++ b/src/quickcontrols2/fusion/CheckDelegate.qml @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.CheckDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 16 + icon.height: 16 + + contentItem: IconLabel { + leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text + } + + indicator: CheckIndicator { + x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + control: control + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 20 + color: control.down ? Fusion.buttonColor(control.palette, false, true, true) + : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base + } +} diff --git a/src/quickcontrols2/fusion/ComboBox.qml b/src/quickcontrols2/fusion/ComboBox.qml new file mode 100644 index 00000000..dfe21f70 --- /dev/null +++ b/src/quickcontrols2/fusion/ComboBox.qml @@ -0,0 +1,174 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Window +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.ComboBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) + rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) + + delegate: MenuItem { + width: ListView.view.width + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData + font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal + highlighted: control.highlightedIndex === index + hoverEnabled: control.hoverEnabled + } + + indicator: ColorImage { + x: control.mirrored ? control.padding : control.width - width - control.padding + y: control.topPadding + (control.availableHeight - height) / 2 + color: control.editable ? control.palette.text : control.palette.buttonText + source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/arrow.png" + width: 20 + fillMode: Image.Pad + } + + contentItem: T.TextField { + topPadding: 4 + leftPadding: 4 - control.padding + rightPadding: 4 - control.padding + bottomPadding: 4 + + text: control.editable ? control.editText : control.displayText + + enabled: control.editable + autoScroll: control.editable + readOnly: control.down + inputMethodHints: control.inputMethodHints + validator: control.validator + selectByMouse: control.selectTextByMouse + + font: control.font + color: control.editable ? control.palette.text : control.palette.buttonText + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + verticalAlignment: Text.AlignVCenter + + background: PaddedRectangle { + clip: true + radius: 2 + padding: 1 + leftPadding: control.mirrored ? -2 : padding + rightPadding: !control.mirrored ? -2 : padding + color: control.palette.base + visible: control.editable && !control.flat + + Rectangle { + x: parent.width - width + y: 1 + width: 1 + height: parent.height - 2 + color: Fusion.buttonOutline(control.palette, control.activeFocus, control.enabled) + } + + Rectangle { + x: 1 + y: 1 + width: parent.width - 3 + height: 1 + color: Fusion.topShadow + } + } + + Rectangle { + x: 1 - control.leftPadding + y: 1 + width: control.width - 2 + height: control.height - 2 + color: "transparent" + border.color: Color.transparent(Fusion.highlightedOutline(control.palette), 40 / 255) + visible: control.activeFocus + radius: 1.7 + } + } + + background: ButtonPanel { + implicitWidth: 120 + implicitHeight: 24 + + control: control + visible: !control.flat || control.down + // ### TODO: fix control.contentItem.activeFocus + highlighted: control.visualFocus || control.contentItem.activeFocus + } + + popup: T.Popup { + width: control.width + height: Math.min(contentItem.implicitHeight + 2, control.Window.height - topMargin - bottomMargin) + topMargin: 6 + bottomMargin: 6 + padding: 1 + + contentItem: ListView { + clip: true + implicitHeight: contentHeight + model: control.delegateModel + currentIndex: control.highlightedIndex + highlightRangeMode: ListView.ApplyRange + highlightMoveDuration: 0 + + T.ScrollBar.vertical: ScrollBar { } + } + + background: Rectangle { + color: control.popup.palette.window + border.color: Fusion.outline(control.palette) + + Rectangle { + z: -1 + x: 1; y: 1 + width: parent.width + height: parent.height + color: control.palette.shadow + opacity: 0.2 + } + } + } +} diff --git a/src/quickcontrols2/fusion/DelayButton.qml b/src/quickcontrols2/fusion/DelayButton.qml new file mode 100644 index 00000000..239ee6c8 --- /dev/null +++ b/src/quickcontrols2/fusion/DelayButton.qml @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.DelayButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + + transition: Transition { + NumberAnimation { + duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress) + } + } + + contentItem: ItemGroup { + ClippedText { + clip: control.progress > 0 + clipX: -control.leftPadding + (control.mirrored ? 0 : control.progress * control.width) + clipWidth: control.width + visible: control.mirrored ? control.progress > 0 : control.progress < 1 + + text: control.text + font: control.font + color: control.mirrored ? control.palette.brightText : control.palette.buttonText + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + ClippedText { + clip: control.progress > 0 + clipX: -control.leftPadding + clipWidth: (control.mirrored ? 1.0 - control.progress : control.progress) * control.width + visible: control.mirrored ? control.progress < 1 : control.progress > 0 + + text: control.text + font: control.font + color: control.mirrored ? control.palette.buttonText : control.palette.brightText + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + } + + background: ButtonPanel { + implicitWidth: 80 + implicitHeight: 24 + + control: control + highlighted: false + scale: control.mirrored ? -1 : 1 + + Rectangle { + width: control.progress * parent.width + height: parent.height + + radius: 2 + border.color: Qt.darker(Fusion.highlight(control.palette), 1.4) + gradient: Gradient { + GradientStop { + position: 0 + color: Qt.lighter(Fusion.highlight(control.palette), 1.2) + } + GradientStop { + position: 1 + color: Fusion.highlight(control.palette) + } + } + } + } +} diff --git a/src/quickcontrols2/fusion/Dial.qml b/src/quickcontrols2/fusion/Dial.qml new file mode 100644 index 00000000..71bab3a7 --- /dev/null +++ b/src/quickcontrols2/fusion/Dial.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.Dial { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + background: DialImpl { + implicitWidth: 100 + implicitHeight: 100 + highlight: control.visualFocus + } + + handle: KnobImpl { + x: control.background.x + control.background.width / 2 - width / 2 + y: control.background.y + control.background.height / 2 - height / 2 + width: control.width / 7 + height: control.height / 7 + transform: [ + Translate { + y: -Math.min(control.background.width, control.background.height) * 0.42 + control.handle.height + }, + Rotation { + angle: control.angle + origin.x: control.handle.width / 2 + origin.y: control.handle.height / 2 + } + ] + } +} diff --git a/src/quickcontrols2/fusion/Dialog.qml b/src/quickcontrols2/fusion/Dialog.qml new file mode 100644 index 00000000..af7fa492 --- /dev/null +++ b/src/quickcontrols2/fusion/Dialog.qml @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.Dialog { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitHeaderWidth, + implicitFooterWidth) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + + padding: 6 + + background: Rectangle { + color: control.palette.window + border.color: control.palette.mid + radius: 2 + + Rectangle { + z: -1 + x: 1; y: 1 + width: parent.width + height: parent.height + color: control.palette.shadow + opacity: 0.2 + radius: 2 + } + } + + header: Label { + text: control.title + visible: control.title + elide: Label.ElideRight + font.bold: true + padding: 6 + background: Rectangle { + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 1 + color: control.palette.window + radius: 2 + } + } + + footer: DialogButtonBox { + visible: count > 0 + } + + T.Overlay.modal: Rectangle { + color: Fusion.topShadow + } + + T.Overlay.modeless: Rectangle { + color: Fusion.topShadow + } +} diff --git a/src/quickcontrols2/fusion/DialogButtonBox.qml b/src/quickcontrols2/fusion/DialogButtonBox.qml new file mode 100644 index 00000000..4b62228f --- /dev/null +++ b/src/quickcontrols2/fusion/DialogButtonBox.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.DialogButtonBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + spacing: 6 + padding: 6 + alignment: Qt.AlignRight + + delegate: Button { } + + contentItem: ListView { + model: control.contentModel + spacing: control.spacing + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + snapMode: ListView.SnapToItem + } + + background: Rectangle { + implicitHeight: 32 + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + color: control.palette.window + radius: 2 + } +} diff --git a/src/quickcontrols2/fusion/Drawer.qml b/src/quickcontrols2/fusion/Drawer.qml new file mode 100644 index 00000000..85268b50 --- /dev/null +++ b/src/quickcontrols2/fusion/Drawer.qml @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.Drawer { + id: control + + parent: T.Overlay.overlay + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: control.edge === Qt.BottomEdge + leftPadding: control.edge === Qt.RightEdge + rightPadding: control.edge === Qt.LeftEdge + bottomPadding: control.edge === Qt.TopEdge + + enter: Transition { SmoothedAnimation { velocity: 5 } } + exit: Transition { SmoothedAnimation { velocity: 5 } } + + background: Rectangle { + color: control.palette.window + readonly property bool horizontal: control.edge === Qt.LeftEdge || control.edge === Qt.RightEdge + Rectangle { + width: parent.horizontal ? 1 : parent.width + height: parent.horizontal ? parent.height : 1 + color: control.palette.mid + x: control.edge === Qt.LeftEdge ? parent.width - 1 : 0 + y: control.edge === Qt.TopEdge ? parent.height - 1 : 0 + } + Rectangle { + width: parent.horizontal ? 1 : parent.width + height: parent.horizontal ? parent.height : 1 + color: control.palette.shadow + opacity: 0.2 + x: control.edge === Qt.LeftEdge ? parent.width : 0 + y: control.edge === Qt.TopEdge ? parent.height : 0 + } + } + + T.Overlay.modal: Rectangle { + color: Fusion.topShadow + } + + T.Overlay.modeless: Rectangle { + color: Fusion.topShadow + } +} diff --git a/src/quickcontrols2/fusion/Frame.qml b/src/quickcontrols2/fusion/Frame.qml new file mode 100644 index 00000000..1e1916f1 --- /dev/null +++ b/src/quickcontrols2/fusion/Frame.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.Frame { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 9 + + background: Rectangle { + color: "transparent" + border.color: Qt.lighter(Fusion.outline(control.palette), 1.08) + } +} diff --git a/src/quickcontrols2/fusion/GroupBox.qml b/src/quickcontrols2/fusion/GroupBox.qml new file mode 100644 index 00000000..943a2427 --- /dev/null +++ b/src/quickcontrols2/fusion/GroupBox.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.GroupBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitLabelWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + spacing: 6 + padding: 9 + topPadding: padding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) + + label: Text { + x: control.leftPadding + width: control.availableWidth + + text: control.title + font: control.font + color: control.palette.windowText + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + + background: Rectangle { + y: control.topPadding - control.bottomPadding + width: parent.width + height: parent.height - control.topPadding + control.bottomPadding + + radius: 2 + color: Color.transparent("black", 3 / 255) + border.color: Qt.lighter(Fusion.outline(control.palette), 1.08) + } +} diff --git a/src/quickcontrols2/fusion/HorizontalHeaderView.qml b/src/quickcontrols2/fusion/HorizontalHeaderView.qml new file mode 100644 index 00000000..76f42b29 --- /dev/null +++ b/src/quickcontrols2/fusion/HorizontalHeaderView.qml @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T + +T.HorizontalHeaderView { + id: control + + implicitWidth: syncView ? syncView.width : 0 + implicitHeight: contentHeight + + delegate: Rectangle { + // Qt6: add cellPadding (and font etc) as public API in headerview + readonly property real cellPadding: 8 + + implicitWidth: text.implicitWidth + (cellPadding * 2) + implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2)) + border.color: "#cacaca" + + gradient: Gradient { + GradientStop { + position: 0 + color: "#fbfbfb" + } + GradientStop { + position: 1 + color: "#e0dfe0" + } + } + + Text { + id: text + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] + : model[control.textRole]) + : modelData + width: parent.width + height: parent.height + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: "#ff26282a" + } + } +} diff --git a/src/quickcontrols2/fusion/ItemDelegate.qml b/src/quickcontrols2/fusion/ItemDelegate.qml new file mode 100644 index 00000000..12154d2f --- /dev/null +++ b/src/quickcontrols2/fusion/ItemDelegate.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.ItemDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 16 + icon.height: 16 + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 20 + color: control.down ? Fusion.buttonColor(control.palette, false, true, true) + : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base + } +} diff --git a/src/quickcontrols2/fusion/Label.qml b/src/quickcontrols2/fusion/Label.qml new file mode 100644 index 00000000..55db94f9 --- /dev/null +++ b/src/quickcontrols2/fusion/Label.qml @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.Label { + id: control + + color: control.palette.windowText + linkColor: control.palette.link +} diff --git a/src/quickcontrols2/fusion/Menu.qml b/src/quickcontrols2/fusion/Menu.qml new file mode 100644 index 00000000..7808850c --- /dev/null +++ b/src/quickcontrols2/fusion/Menu.qml @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl +import QtQuick.Window + +T.Menu { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + margins: 0 + padding: 1 + overlap: 2 + + delegate: MenuItem { } + + contentItem: ListView { + implicitHeight: contentHeight + model: control.contentModel + interactive: Window.window + ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height + : false + clip: true + currentIndex: control.currentIndex + + ScrollIndicator.vertical: ScrollIndicator {} + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 20 + + color: control.palette.base + border.color: Fusion.outline(control.palette) + + Rectangle { + z: -1 + x: 1; y: 1 + width: parent.width + height: parent.height + color: control.palette.shadow + opacity: 0.2 + } + } + + T.Overlay.modal: Rectangle { + color: Fusion.topShadow + } + + T.Overlay.modeless: Rectangle { + color: Fusion.topShadow + } +} diff --git a/src/quickcontrols2/fusion/MenuBar.qml b/src/quickcontrols2/fusion/MenuBar.qml new file mode 100644 index 00000000..7b6a628d --- /dev/null +++ b/src/quickcontrols2/fusion/MenuBar.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.MenuBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + delegate: MenuBarItem { } + + contentItem: Row { + spacing: control.spacing + Repeater { + model: control.contentModel + } + } + + background: Rectangle { + implicitHeight: 20 + + color: control.palette.window + + Rectangle { + y: parent.height - height + width: parent.width + height: 1 + color: Fusion.mergedColors(Qt.darker(control.palette.window, 1.2), + Qt.lighter(Fusion.outline(control.palette), 1.4), 60) + } + } +} diff --git a/src/quickcontrols2/fusion/MenuBarItem.qml b/src/quickcontrols2/fusion/MenuBarItem.qml new file mode 100644 index 00000000..336fca0c --- /dev/null +++ b/src/quickcontrols2/fusion/MenuBarItem.qml @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.MenuBarItem { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 16 + icon.height: 16 + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.down || control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text + } + + background: Rectangle { + implicitWidth: 20 + implicitHeight: 20 + + color: Fusion.highlight(control.palette) + visible: control.down || control.highlighted + } +} diff --git a/src/quickcontrols2/fusion/MenuItem.qml b/src/quickcontrols2/fusion/MenuItem.qml new file mode 100644 index 00000000..79468f9d --- /dev/null +++ b/src/quickcontrols2/fusion/MenuItem.qml @@ -0,0 +1,102 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.MenuItem { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 16 + icon.height: 16 + + contentItem: IconLabel { + readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0 + readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0 + leftPadding: !control.mirrored ? indicatorPadding : arrowPadding + rightPadding: control.mirrored ? indicatorPadding : arrowPadding + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.down || control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text + } + + arrow: ColorImage { + x: control.mirrored ? control.padding : control.width - width - control.padding + y: control.topPadding + (control.availableHeight - height) / 2 + width: 20 + + visible: control.subMenu + rotation: control.mirrored ? 90 : -90 + color: control.down || control.hovered || control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text + source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/arrow.png" + fillMode: Image.Pad + } + + indicator: CheckIndicator { + x: control.mirrored ? control.width - width - control.rightPadding : control.leftPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + control: control + visible: control.checkable + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 20 + + color: Fusion.highlight(control.palette) + visible: control.down || control.highlighted + } +} diff --git a/src/quickcontrols2/fusion/MenuSeparator.qml b/src/quickcontrols2/fusion/MenuSeparator.qml new file mode 100644 index 00000000..b8be640b --- /dev/null +++ b/src/quickcontrols2/fusion/MenuSeparator.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.MenuSeparator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 5 + verticalPadding: 1 + + contentItem: Rectangle { + implicitWidth: 188 + implicitHeight: 1 + color: Qt.lighter(Fusion.darkShade, 1.06) + } +} diff --git a/src/quickcontrols2/fusion/Page.qml b/src/quickcontrols2/fusion/Page.qml new file mode 100644 index 00000000..bf47e231 --- /dev/null +++ b/src/quickcontrols2/fusion/Page.qml @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.Page { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitHeaderWidth, + implicitFooterWidth) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + + background: Rectangle { + color: control.palette.window + } +} diff --git a/src/quickcontrols2/fusion/PageIndicator.qml b/src/quickcontrols2/fusion/PageIndicator.qml new file mode 100644 index 00000000..22ceabcc --- /dev/null +++ b/src/quickcontrols2/fusion/PageIndicator.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.PageIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 4 + spacing: 4 + + delegate: Rectangle { + implicitWidth: 6 + implicitHeight: 6 + + radius: width / 2 + color: control.palette.shadow + + opacity: index === currentIndex ? 0.95 : pressed ? 0.75 : 0.45 + Behavior on opacity { OpacityAnimator { duration: 100 } } + } + + contentItem: Row { + spacing: control.spacing + + Repeater { + model: control.count + delegate: control.delegate + } + } +} diff --git a/src/quickcontrols2/fusion/Pane.qml b/src/quickcontrols2/fusion/Pane.qml new file mode 100644 index 00000000..9cc49917 --- /dev/null +++ b/src/quickcontrols2/fusion/Pane.qml @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.Pane { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 9 + + background: Rectangle { + color: control.palette.window + } +} diff --git a/src/quickcontrols2/fusion/Popup.qml b/src/quickcontrols2/fusion/Popup.qml new file mode 100644 index 00000000..f77ea1d1 --- /dev/null +++ b/src/quickcontrols2/fusion/Popup.qml @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.Popup { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 6 + + background: Rectangle { + color: control.palette.window + border.color: control.palette.mid + radius: 2 + } + + T.Overlay.modal: Rectangle { + color: Fusion.topShadow + } + + T.Overlay.modeless: Rectangle { + color: Fusion.topShadow + } +} diff --git a/src/quickcontrols2/fusion/ProgressBar.qml b/src/quickcontrols2/fusion/ProgressBar.qml new file mode 100644 index 00000000..0ad6b483 --- /dev/null +++ b/src/quickcontrols2/fusion/ProgressBar.qml @@ -0,0 +1,116 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.ProgressBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + contentItem: Item { + implicitWidth: 120 + implicitHeight: 24 + scale: control.mirrored ? -1 : 1 + + Rectangle { + height: parent.height + width: (control.indeterminate ? 1.0 : control.position) * parent.width + + radius: 2 + border.color: Qt.darker(Fusion.highlight(control.palette), 1.4) + gradient: Gradient { + GradientStop { + position: 0 + color: Qt.lighter(Fusion.highlight(control.palette), 1.2) + } + GradientStop { + position: 1 + color: Fusion.highlight(control.palette) + } + } + } + + Item { + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + visible: control.indeterminate + clip: true + + ColorImage { + width: Math.ceil(parent.width / implicitWidth + 1) * implicitWidth + height: parent.height + + mirror: control.mirrored + fillMode: Image.TileHorizontally + source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/progressmask.png" + color: Color.transparent(Qt.lighter(Fusion.highlight(control.palette), 1.2), 160 / 255) + + visible: control.indeterminate + NumberAnimation on x { + running: control.indeterminate && control.visible + from: -31 // progressmask.png width + to: 0 + loops: Animation.Infinite + duration: 750 + } + } + } + } + + background: Rectangle { + implicitWidth: 120 + implicitHeight: 24 + + radius: 2 + color: control.palette.base + border.color: Fusion.outline(control.palette) + + Rectangle { + x: 1; y: 1; height: 1 + width: parent.width - 2 + color: Fusion.topShadow + } + } +} diff --git a/src/quickcontrols2/fusion/RadioButton.qml b/src/quickcontrols2/fusion/RadioButton.qml new file mode 100644 index 00000000..c7796411 --- /dev/null +++ b/src/quickcontrols2/fusion/RadioButton.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.RadioButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + indicator: RadioIndicator { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.palette.windowText + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } +} diff --git a/src/quickcontrols2/fusion/RadioDelegate.qml b/src/quickcontrols2/fusion/RadioDelegate.qml new file mode 100644 index 00000000..4c0d936c --- /dev/null +++ b/src/quickcontrols2/fusion/RadioDelegate.qml @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.RadioDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 16 + icon.height: 16 + + contentItem: IconLabel { + leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text + } + + indicator: RadioIndicator { + x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + control: control + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 20 + color: control.down ? Fusion.buttonColor(control.palette, false, true, true) + : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base + } +} diff --git a/src/quickcontrols2/fusion/RangeSlider.qml b/src/quickcontrols2/fusion/RangeSlider.qml new file mode 100644 index 00000000..418bac77 --- /dev/null +++ b/src/quickcontrols2/fusion/RangeSlider.qml @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.RangeSlider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + Math.max(first.implicitHandleWidth, + second.implicitHandleWidth) + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + Math.max(first.implicitHandleHeight, + second.implicitHandleHeight) + topPadding + bottomPadding) + + first.handle: SliderHandle { + x: control.leftPadding + Math.round(control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + Math.round(control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height)) + + palette: control.palette + pressed: control.first.pressed + hovered: control.first.hovered + vertical: control.vertical + visualFocus: activeFocus + } + + second.handle: SliderHandle { + x: control.leftPadding + Math.round(control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + Math.round(control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height)) + + palette: control.palette + pressed: control.second.pressed + hovered: control.second.hovered + vertical: control.vertical + visualFocus: activeFocus + } + + background: SliderGroove { + control: control + offset: control.first.position + progress: control.second.position + visualProgress: control.second.visualPosition + } +} diff --git a/src/quickcontrols2/fusion/RoundButton.qml b/src/quickcontrols2/fusion/RoundButton.qml new file mode 100644 index 00000000..31217f71 --- /dev/null +++ b/src/quickcontrols2/fusion/RoundButton.qml @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.RoundButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 16 + icon.height: 16 + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.palette.buttonText + } + + background: Rectangle { + implicitWidth: 32 + implicitHeight: 32 + visible: !control.flat || control.down || control.checked + + gradient: Gradient { + GradientStop { + position: 0 + color: control.down || control.checked ? Fusion.buttonColor(control.palette, control.highlighted, control.down || control.checked, control.hovered) + : Fusion.gradientStart(Fusion.buttonColor(control.palette, control.highlighted, control.down, control.hovered)) + } + GradientStop { + position: 1 + color: control.down || control.checked ? Fusion.buttonColor(control.palette, control.highlighted, control.down || control.checked, control.hovered) + : Fusion.gradientStop(Fusion.buttonColor(control.palette, control.highlighted, control.down, control.hovered)) + } + } + + radius: control.radius + border.color: Fusion.buttonOutline(control.palette, control.highlighted || control.visualFocus, control.enabled) + + Rectangle { + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + border.color: Fusion.innerContrastLine + color: "transparent" + radius: control.radius + } + } +} diff --git a/src/quickcontrols2/fusion/ScrollBar.qml b/src/quickcontrols2/fusion/ScrollBar.qml new file mode 100644 index 00000000..b990d955 --- /dev/null +++ b/src/quickcontrols2/fusion/ScrollBar.qml @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.ScrollBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 2 + visible: control.policy !== T.ScrollBar.AlwaysOff + minimumSize: orientation == Qt.Horizontal ? height / width : width / height + + contentItem: Rectangle { + implicitWidth: control.interactive ? 6 : 2 + implicitHeight: control.interactive ? 6 : 2 + + radius: width / 2 + color: control.pressed ? control.palette.dark : control.palette.mid + opacity: 0.0 + + states: State { + name: "active" + when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0) + PropertyChanges { target: 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/quickcontrols2/fusion/ScrollIndicator.qml b/src/quickcontrols2/fusion/ScrollIndicator.qml new file mode 100644 index 00000000..bf386f6c --- /dev/null +++ b/src/quickcontrols2/fusion/ScrollIndicator.qml @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.ScrollIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 2 + + contentItem: Rectangle { + implicitWidth: 2 + implicitHeight: 2 + + color: control.palette.mid + visible: control.size < 1.0 + opacity: 0.0 + + states: State { + name: "active" + when: control.active + PropertyChanges { target: 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/quickcontrols2/fusion/ScrollView.qml b/src/quickcontrols2/fusion/ScrollView.qml new file mode 100644 index 00000000..a6bba9de --- /dev/null +++ b/src/quickcontrols2/fusion/ScrollView.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.ScrollView { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + ScrollBar.vertical: ScrollBar { + parent: control + x: control.mirrored ? 0 : control.width - width + y: control.topPadding + height: control.availableHeight + active: control.ScrollBar.horizontal.active + } + + ScrollBar.horizontal: ScrollBar { + parent: control + x: control.leftPadding + y: control.height - height + width: control.availableWidth + active: control.ScrollBar.vertical.active + } +} diff --git a/src/quickcontrols2/fusion/Slider.qml b/src/quickcontrols2/fusion/Slider.qml new file mode 100644 index 00000000..4e20dcfc --- /dev/null +++ b/src/quickcontrols2/fusion/Slider.qml @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.Slider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitHandleWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitHandleHeight + topPadding + bottomPadding) + + handle: SliderHandle { + x: control.leftPadding + Math.round(control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + Math.round(control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)) + + palette: control.palette + pressed: control.pressed + hovered: control.hovered + vertical: control.vertical + visualFocus: control.visualFocus + } + + background: SliderGroove { + control: control + progress: control.position + visualProgress: control.visualPosition + } +} diff --git a/src/quickcontrols2/fusion/SpinBox.qml b/src/quickcontrols2/fusion/SpinBox.qml new file mode 100644 index 00000000..e71aa428 --- /dev/null +++ b/src/quickcontrols2/fusion/SpinBox.qml @@ -0,0 +1,181 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.SpinBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentItem.implicitWidth + 2 * padding + + Math.max(up.implicitIndicatorWidth, + down.implicitIndicatorWidth)) + implicitHeight: Math.max(implicitContentHeight + topPadding + bottomPadding, + implicitBackgroundHeight, + up.implicitIndicatorHeight + + down.implicitIndicatorHeight) + + padding: 4 + leftPadding: padding + (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0)) + rightPadding: padding + (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0)) + + validator: IntValidator { + locale: control.locale.name + bottom: Math.min(control.from, control.to) + top: Math.max(control.from, control.to) + } + + contentItem: TextInput { + z: 2 + text: control.displayText + + font: control.font + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + horizontalAlignment: Qt.AlignHCenter + verticalAlignment: Qt.AlignVCenter + + readOnly: !control.editable + validator: control.validator + inputMethodHints: control.inputMethodHints + } + + up.indicator: PaddedRectangle { + x: control.mirrored ? 1 : parent.width - width - 1 + y: 1 + height: parent.height / 2 - 1 + implicitWidth: 16 + implicitHeight: 10 + + radius: 1.7 + clip: true + topPadding: -2 + leftPadding: -2 + color: control.up.pressed ? Fusion.buttonColor(control.palette, false, true, true) : "transparent" + + ColorImage { + scale: -1 + width: parent.width + height: parent.height + opacity: enabled ? 1.0 : 0.5 + color: control.palette.buttonText + source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/arrow.png" + fillMode: Image.Pad + } + } + + down.indicator: PaddedRectangle { + x: control.mirrored ? 1 : parent.width - width - 1 + y: parent.height - height - 1 + height: parent.height / 2 - 1 + implicitWidth: 16 + implicitHeight: 10 + + radius: 1.7 + clip: true + topPadding: -2 + leftPadding: -2 + color: control.down.pressed ? Fusion.buttonColor(control.palette, false, true, true) : "transparent" + + ColorImage { + width: parent.width + height: parent.height + opacity: enabled ? 1.0 : 0.5 + color: control.palette.buttonText + source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/arrow.png" + fillMode: Image.Pad + } + } + + background: Rectangle { + implicitWidth: 120 + implicitHeight: 24 + + radius: 2 + color: control.palette.base + border.color: control.activeFocus ? Fusion.highlightedOutline(control.palette) : Fusion.outline(control.palette) + + Rectangle { + x: 2 + y: 1 + width: parent.width - 4 + height: 1 + color: Fusion.topShadow + } + + Rectangle { + x: control.mirrored ? 1 : parent.width - width - 1 + y: 1 + width: Math.max(control.up.indicator ? control.up.indicator.width : 0, + control.down.indicator ? control.down.indicator.width : 0) + 1 + height: parent.height - 2 + + radius: 2 + gradient: Gradient { + GradientStop { + position: 0 + color: Fusion.gradientStart(Fusion.buttonColor(control.palette, control.visualFocus, false, control.up.hovered || control.down.hovered)) + } + GradientStop { + position: 1 + color: Fusion.gradientStop(Fusion.buttonColor(control.palette, control.visualFocus, false, control.up.hovered || control.down.hovered)) + } + } + + Rectangle { + x: control.mirrored ? parent.width - 1 : 0 + height: parent.height + width: 1 + color: Fusion.outline(control.palette) + } + } + + Rectangle { + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + color: "transparent" + border.color: Color.transparent(Fusion.highlightedOutline(control.palette), 40 / 255) + visible: control.activeFocus + radius: 1.7 + } + } +} diff --git a/src/quickcontrols2/fusion/SplitView.qml b/src/quickcontrols2/fusion/SplitView.qml new file mode 100644 index 00000000..fdf12bed --- /dev/null +++ b/src/quickcontrols2/fusion/SplitView.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion + +T.SplitView { + id: control + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + handle: Rectangle { + implicitWidth: control.orientation === Qt.Horizontal ? 2 : control.width + implicitHeight: control.orientation === Qt.Horizontal ? control.height : 2 + color: T.SplitHandle.pressed ? palette.dark + : (T.SplitHandle.hovered ? control.palette.midlight : control.palette.mid) + } +} diff --git a/src/quickcontrols2/fusion/SwipeDelegate.qml b/src/quickcontrols2/fusion/SwipeDelegate.qml new file mode 100644 index 00000000..ac840f64 --- /dev/null +++ b/src/quickcontrols2/fusion/SwipeDelegate.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.SwipeDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 16 + icon.height: 16 + + swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } } + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 20 + color: control.down ? Fusion.buttonColor(control.palette, false, true, true) + : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base + } +} diff --git a/src/quickcontrols2/fusion/Switch.qml b/src/quickcontrols2/fusion/Switch.qml new file mode 100644 index 00000000..2e31535b --- /dev/null +++ b/src/quickcontrols2/fusion/Switch.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.Switch { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + indicator: SwitchIndicator { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.palette.text + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } +} diff --git a/src/quickcontrols2/fusion/SwitchDelegate.qml b/src/quickcontrols2/fusion/SwitchDelegate.qml new file mode 100644 index 00000000..0439b0cf --- /dev/null +++ b/src/quickcontrols2/fusion/SwitchDelegate.qml @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.SwitchDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 16 + icon.height: 16 + + indicator: SwitchIndicator { + x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: IconLabel { + leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 20 + color: control.down ? Fusion.buttonColor(control.palette, false, true, true) + : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base + } +} diff --git a/src/quickcontrols2/fusion/TabBar.qml b/src/quickcontrols2/fusion/TabBar.qml new file mode 100644 index 00000000..e0933653 --- /dev/null +++ b/src/quickcontrols2/fusion/TabBar.qml @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.TabBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + spacing: -1 + + contentItem: ListView { + model: control.contentModel + currentIndex: control.currentIndex + + spacing: control.spacing + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + flickableDirection: Flickable.AutoFlickIfNeeded + snapMode: ListView.SnapToItem + + highlightMoveDuration: 0 + highlightRangeMode: ListView.ApplyRange + preferredHighlightBegin: 40 + preferredHighlightEnd: width - 40 + } + + background: Item { + implicitHeight: 21 + + Rectangle { + width: parent.width + height: 1 + y: control.position === T.TabBar.Header ? parent.height - 1 : 0 + color: Fusion.outline(control.palette) + } + } +} diff --git a/src/quickcontrols2/fusion/TabButton.qml b/src/quickcontrols2/fusion/TabButton.qml new file mode 100644 index 00000000..161a7b02 --- /dev/null +++ b/src/quickcontrols2/fusion/TabButton.qml @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.TabButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 2 + horizontalPadding: 4 + spacing: 6 + + icon.width: 16 + icon.height: 16 + + z: checked + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.palette.buttonText + } + + background: Rectangle { + y: control.checked || control.TabBar.position !== T.TabBar.Header ? 0 : 2 + implicitHeight: 21 + height: control.height - (control.checked ? 0 : 2) + + border.color: Qt.lighter(Fusion.outline(control.palette), 1.1) + + gradient: Gradient { + GradientStop { + position: 0 + color: control.checked ? Qt.lighter(Fusion.tabFrameColor(control.palette), 1.04) + : Qt.darker(Fusion.tabFrameColor(control.palette), 1.08) + } + GradientStop { + position: control.checked ? 0 : 0.85 + color: control.checked ? Qt.lighter(Fusion.tabFrameColor(control.palette), 1.04) + : Qt.darker(Fusion.tabFrameColor(control.palette), 1.08) + } + GradientStop { + position: 1 + color: control.checked ? Fusion.tabFrameColor(control.palette) + : Qt.darker(Fusion.tabFrameColor(control.palette), 1.16) + } + } + } +} diff --git a/src/quickcontrols2/fusion/TextArea.qml b/src/quickcontrols2/fusion/TextArea.qml new file mode 100644 index 00000000..dc963186 --- /dev/null +++ b/src/quickcontrols2/fusion/TextArea.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.TextArea { + id: control + + implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, + implicitBackgroundWidth + leftInset + rightInset, + placeholder.implicitWidth + leftPadding + rightPadding) + implicitHeight: Math.max(contentHeight + topPadding + bottomPadding, + implicitBackgroundHeight + topInset + bottomInset, + placeholder.implicitHeight + topPadding + bottomPadding) + + padding: 6 + leftPadding: padding + 4 + + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + placeholderTextColor: Color.transparent(control.color, 0.5) + + PlaceholderText { + id: placeholder + x: control.leftPadding + y: control.topPadding + width: control.width - (control.leftPadding + control.rightPadding) + height: control.height - (control.topPadding + control.bottomPadding) + + text: control.placeholderText + font: control.font + color: control.placeholderTextColor + verticalAlignment: control.verticalAlignment + visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) + elide: Text.ElideRight + renderType: control.renderType + } +} diff --git a/src/quickcontrols2/fusion/TextField.qml b/src/quickcontrols2/fusion/TextField.qml new file mode 100644 index 00000000..1a7ec2b9 --- /dev/null +++ b/src/quickcontrols2/fusion/TextField.qml @@ -0,0 +1,102 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.TextField { + id: control + + implicitWidth: implicitBackgroundWidth + leftInset + rightInset + || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding, + placeholder.implicitHeight + topPadding + bottomPadding) + + padding: 4 + + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + placeholderTextColor: Color.transparent(control.color, 0.5) + verticalAlignment: TextInput.AlignVCenter + + PlaceholderText { + id: placeholder + x: control.leftPadding + y: control.topPadding + width: control.width - (control.leftPadding + control.rightPadding) + height: control.height - (control.topPadding + control.bottomPadding) + + text: control.placeholderText + font: control.font + color: control.placeholderTextColor + verticalAlignment: control.verticalAlignment + visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) + elide: Text.ElideRight + renderType: control.renderType + } + + background: Rectangle { + implicitWidth: 120 + implicitHeight: 24 + + radius: 2 + color: control.palette.base + border.color: control.activeFocus ? Fusion.highlightedOutline(control.palette) : Fusion.outline(control.palette) + + Rectangle { + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + color: "transparent" + border.color: Color.transparent(Fusion.highlightedOutline(control.palette), 40 / 255) + visible: control.activeFocus + radius: 1.7 + } + + Rectangle { + x: 2 + y: 1 + width: parent.width - 4 + height: 1 + color: Fusion.topShadow + } + } +} diff --git a/src/quickcontrols2/fusion/ToolBar.qml b/src/quickcontrols2/fusion/ToolBar.qml new file mode 100644 index 00000000..747a292d --- /dev/null +++ b/src/quickcontrols2/fusion/ToolBar.qml @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.ToolBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + horizontalPadding: 6 + topPadding: control.position === T.ToolBar.Footer ? 1 : 0 + bottomPadding: control.position === T.ToolBar.Header ? 1 : 0 + + background: Rectangle { + implicitHeight: 26 + + gradient: Gradient { + GradientStop { + position: 0 + color: Qt.lighter(control.palette.window, 1.04) + } + GradientStop { + position: 1 + color: control.palette.window + } + } + + Rectangle { + width: parent.width + height: 1 + color: control.position === T.ToolBar.Header ? Fusion.lightShade : Fusion.darkShade + } + + Rectangle { + y: parent.height - height + width: parent.width + height: 1 + color: control.position === T.ToolBar.Header ? Fusion.darkShade : Fusion.lightShade + } + } +} diff --git a/src/quickcontrols2/fusion/ToolButton.qml b/src/quickcontrols2/fusion/ToolButton.qml new file mode 100644 index 00000000..a364a113 --- /dev/null +++ b/src/quickcontrols2/fusion/ToolButton.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.ToolButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 16 + icon.height: 16 + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.palette.buttonText + } + + background: ButtonPanel { + implicitWidth: 20 + implicitHeight: 20 + + control: control + visible: control.down || control.checked || control.highlighted || control.visualFocus || control.hovered + } +} diff --git a/src/quickcontrols2/fusion/ToolSeparator.qml b/src/quickcontrols2/fusion/ToolSeparator.qml new file mode 100644 index 00000000..bfebf205 --- /dev/null +++ b/src/quickcontrols2/fusion/ToolSeparator.qml @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.ToolSeparator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: vertical ? 6 : 2 + verticalPadding: vertical ? 2 : 6 + + contentItem: Rectangle { + implicitWidth: vertical ? 2 : 8 + implicitHeight: vertical ? 8 : 2 + color: Qt.darker(control.palette.window, 1.1) + + Rectangle { + x: 1 + width: 1 + height: parent.height + color: Qt.lighter(control.palette.window, 1.1) + } + } +} diff --git a/src/quickcontrols2/fusion/ToolTip.qml b/src/quickcontrols2/fusion/ToolTip.qml new file mode 100644 index 00000000..90e0c268 --- /dev/null +++ b/src/quickcontrols2/fusion/ToolTip.qml @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.ToolTip { + id: control + + x: parent ? (parent.width - implicitWidth) / 2 : 0 + y: -implicitHeight - 3 + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + margins: 6 + padding: 6 + + closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent + + contentItem: Text { + text: control.text + font: control.font + wrapMode: Text.Wrap + color: control.palette.toolTipText + } + + background: Rectangle { + color: control.palette.toolTipBase + border.color: control.palette.toolTipText + + Rectangle { + z: -1 + x: 1; y: 1 + width: parent.width + height: parent.height + color: control.palette.shadow + opacity: 0.5 + } + } +} diff --git a/src/quickcontrols2/fusion/Tumbler.qml b/src/quickcontrols2/fusion/Tumbler.qml new file mode 100644 index 00000000..0c2841e7 --- /dev/null +++ b/src/quickcontrols2/fusion/Tumbler.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +T.Tumbler { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + delegate: Text { + text: modelData + color: control.palette.windowText + font: control.font + opacity: (1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)) * (control.enabled ? 1 : 0.6) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + contentItem: TumblerView { + implicitWidth: 60 + implicitHeight: 200 + model: control.model + delegate: control.delegate + path: Path { + startX: control.contentItem.width / 2 + startY: -control.contentItem.delegateHeight / 2 + PathLine { + x: control.contentItem.width / 2 + y: (control.visibleItemCount + 1) * control.contentItem.delegateHeight - control.contentItem.delegateHeight / 2 + } + } + + property real delegateHeight: control.availableHeight / control.visibleItemCount + } +} diff --git a/src/quickcontrols2/fusion/VerticalHeaderView.qml b/src/quickcontrols2/fusion/VerticalHeaderView.qml new file mode 100644 index 00000000..3da51290 --- /dev/null +++ b/src/quickcontrols2/fusion/VerticalHeaderView.qml @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T + +T.VerticalHeaderView { + id: control + + implicitWidth: contentWidth + implicitHeight: syncView ? syncView.height : 0 + + delegate: Rectangle { + // Qt6: add cellPadding (and font etc) as public API in headerview + readonly property real cellPadding: 8 + + implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2)) + implicitHeight: text.implicitHeight + (cellPadding * 2) + border.color: "#cacaca" + + gradient: Gradient { + GradientStop { + position: 0 + color: "#fbfbfb" + } + GradientStop { + position: 1 + color: "#e0dfe0" + } + } + + Text { + id: text + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] + : model[control.textRole]) + : modelData + width: parent.width + height: parent.height + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: "#ff26282a" + } + } +} diff --git a/src/quickcontrols2/fusion/fusion.pri b/src/quickcontrols2/fusion/fusion.pri new file mode 100644 index 00000000..b57ded65 --- /dev/null +++ b/src/quickcontrols2/fusion/fusion.pri @@ -0,0 +1,58 @@ +HEADERS += \ + $$PWD/qquickfusionstyle_p.h \ + $$PWD/qquickfusiontheme_p.h + +SOURCES += \ + $$PWD/qquickfusionstyle.cpp \ + $$PWD/qquickfusiontheme.cpp + +QML_FILES += \ + $$PWD/ApplicationWindow.qml \ + $$PWD/BusyIndicator.qml \ + $$PWD/Button.qml \ + $$PWD/CheckBox.qml \ + $$PWD/CheckDelegate.qml \ + $$PWD/ComboBox.qml \ + $$PWD/DelayButton.qml \ + $$PWD/Dial.qml \ + $$PWD/Dialog.qml \ + $$PWD/DialogButtonBox.qml \ + $$PWD/Drawer.qml \ + $$PWD/Frame.qml \ + $$PWD/GroupBox.qml \ + $$PWD/HorizontalHeaderView.qml \ + $$PWD/ItemDelegate.qml \ + $$PWD/Label.qml \ + $$PWD/Menu.qml \ + $$PWD/MenuBar.qml \ + $$PWD/MenuBarItem.qml \ + $$PWD/MenuItem.qml \ + $$PWD/MenuSeparator.qml \ + $$PWD/Page.qml \ + $$PWD/PageIndicator.qml \ + $$PWD/Pane.qml \ + $$PWD/Popup.qml \ + $$PWD/ProgressBar.qml \ + $$PWD/RadioButton.qml \ + $$PWD/RadioDelegate.qml \ + $$PWD/RangeSlider.qml \ + $$PWD/RoundButton.qml \ + $$PWD/ScrollBar.qml \ + $$PWD/ScrollView.qml \ + $$PWD/ScrollIndicator.qml \ + $$PWD/Slider.qml \ + $$PWD/SpinBox.qml \ + $$PWD/SplitView.qml \ + $$PWD/SwipeDelegate.qml \ + $$PWD/SwitchDelegate.qml \ + $$PWD/Switch.qml \ + $$PWD/TabBar.qml \ + $$PWD/TabButton.qml \ + $$PWD/TextArea.qml \ + $$PWD/TextField.qml \ + $$PWD/ToolBar.qml \ + $$PWD/ToolButton.qml \ + $$PWD/ToolSeparator.qml \ + $$PWD/ToolTip.qml \ + $$PWD/Tumbler.qml \ + $$PWD/VerticalHeaderView.qml diff --git a/src/quickcontrols2/fusion/images/arrow.png b/src/quickcontrols2/fusion/images/arrow.png new file mode 100644 index 00000000..97ef0238 Binary files /dev/null and b/src/quickcontrols2/fusion/images/arrow.png differ diff --git a/src/quickcontrols2/fusion/images/arrow.svg b/src/quickcontrols2/fusion/images/arrow.svg new file mode 100644 index 00000000..44383924 --- /dev/null +++ b/src/quickcontrols2/fusion/images/arrow.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/quickcontrols2/fusion/images/arrow@2x.png b/src/quickcontrols2/fusion/images/arrow@2x.png new file mode 100644 index 00000000..9bfc4e6e Binary files /dev/null and b/src/quickcontrols2/fusion/images/arrow@2x.png differ diff --git a/src/quickcontrols2/fusion/images/arrow@3x.png b/src/quickcontrols2/fusion/images/arrow@3x.png new file mode 100644 index 00000000..6fd9c988 Binary files /dev/null and b/src/quickcontrols2/fusion/images/arrow@3x.png differ diff --git a/src/quickcontrols2/fusion/images/arrow@4x.png b/src/quickcontrols2/fusion/images/arrow@4x.png new file mode 100644 index 00000000..f5e1e66a Binary files /dev/null and b/src/quickcontrols2/fusion/images/arrow@4x.png differ diff --git a/src/quickcontrols2/fusion/images/checkmark.png b/src/quickcontrols2/fusion/images/checkmark.png new file mode 100644 index 00000000..deb30419 Binary files /dev/null and b/src/quickcontrols2/fusion/images/checkmark.png differ diff --git a/src/quickcontrols2/fusion/images/checkmark.svg b/src/quickcontrols2/fusion/images/checkmark.svg new file mode 100644 index 00000000..f1afdc4f --- /dev/null +++ b/src/quickcontrols2/fusion/images/checkmark.svg @@ -0,0 +1,72 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/quickcontrols2/fusion/images/checkmark@2x.png b/src/quickcontrols2/fusion/images/checkmark@2x.png new file mode 100644 index 00000000..f80de0a4 Binary files /dev/null and b/src/quickcontrols2/fusion/images/checkmark@2x.png differ diff --git a/src/quickcontrols2/fusion/images/checkmark@3x.png b/src/quickcontrols2/fusion/images/checkmark@3x.png new file mode 100644 index 00000000..c095eed1 Binary files /dev/null and b/src/quickcontrols2/fusion/images/checkmark@3x.png differ diff --git a/src/quickcontrols2/fusion/images/checkmark@4x.png b/src/quickcontrols2/fusion/images/checkmark@4x.png new file mode 100644 index 00000000..e58c7b4d Binary files /dev/null and b/src/quickcontrols2/fusion/images/checkmark@4x.png differ diff --git a/src/quickcontrols2/fusion/images/progressmask.png b/src/quickcontrols2/fusion/images/progressmask.png new file mode 100644 index 00000000..a354377c Binary files /dev/null and b/src/quickcontrols2/fusion/images/progressmask.png differ diff --git a/src/quickcontrols2/fusion/images/progressmask.svg b/src/quickcontrols2/fusion/images/progressmask.svg new file mode 100644 index 00000000..a0dfc426 --- /dev/null +++ b/src/quickcontrols2/fusion/images/progressmask.svg @@ -0,0 +1,74 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/src/quickcontrols2/fusion/images/progressmask@2x.png b/src/quickcontrols2/fusion/images/progressmask@2x.png new file mode 100644 index 00000000..69476bf4 Binary files /dev/null and b/src/quickcontrols2/fusion/images/progressmask@2x.png differ diff --git a/src/quickcontrols2/fusion/images/progressmask@3x.png b/src/quickcontrols2/fusion/images/progressmask@3x.png new file mode 100644 index 00000000..00a1c09d Binary files /dev/null and b/src/quickcontrols2/fusion/images/progressmask@3x.png differ diff --git a/src/quickcontrols2/fusion/images/progressmask@4x.png b/src/quickcontrols2/fusion/images/progressmask@4x.png new file mode 100644 index 00000000..263110d5 Binary files /dev/null and b/src/quickcontrols2/fusion/images/progressmask@4x.png differ diff --git a/src/quickcontrols2/fusion/impl/ButtonPanel.qml b/src/quickcontrols2/fusion/impl/ButtonPanel.qml new file mode 100644 index 00000000..ffe87003 --- /dev/null +++ b/src/quickcontrols2/fusion/impl/ButtonPanel.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +Rectangle { + id: panel + + property Item control + property bool highlighted: control.highlighted + + visible: !control.flat || control.down || control.checked + + color: Fusion.buttonColor(control.palette, panel.highlighted, control.down || control.checked, control.hovered) + gradient: control.down || control.checked ? null : buttonGradient + + Gradient { + id: buttonGradient + GradientStop { + position: 0 + color: Fusion.gradientStart(Fusion.buttonColor(panel.control.palette, panel.highlighted, panel.control.down, panel.control.hovered)) + } + GradientStop { + position: 1 + color: Fusion.gradientStop(Fusion.buttonColor(panel.control.palette, panel.highlighted, panel.control.down, panel.control.hovered)) + } + } + + radius: 2 + border.color: Fusion.buttonOutline(control.palette, panel.highlighted || control.visualFocus, control.enabled) + + Rectangle { + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + border.color: Fusion.innerContrastLine + color: "transparent" + radius: 2 + } +} diff --git a/src/quickcontrols2/fusion/impl/CMakeLists.txt b/src/quickcontrols2/fusion/impl/CMakeLists.txt new file mode 100644 index 00000000..c107ae75 --- /dev/null +++ b/src/quickcontrols2/fusion/impl/CMakeLists.txt @@ -0,0 +1,44 @@ +##################################################################### +## qtquickcontrols2fusionstyleimplplugin Plugin: +##################################################################### + +set(qml_files + "ButtonPanel.qml" + "CheckIndicator.qml" + "RadioIndicator.qml" + "SliderGroove.qml" + "SliderHandle.qml" + "SwitchIndicator.qml" +) +set_source_files_properties(${qml_files} PROPERTIES + QT_QML_SOURCE_VERSION "2.3" +) + +qt_internal_add_qml_module(qtquickcontrols2fusionstyleimplplugin + URI "QtQuick.Controls.Fusion.impl" + VERSION "${PROJECT_VERSION}" + CLASS_NAME QtQuickControls2FusionStyleImplPlugin + PLUGIN_TARGET qtquickcontrols2fusionstyleimplplugin + NO_PLUGIN_OPTIONAL + SOURCES + qquickfusionbusyindicator.cpp qquickfusionbusyindicator_p.h + qquickfusiondial.cpp qquickfusiondial_p.h + qquickfusionknob.cpp qquickfusionknob_p.h + QML_FILES + ${qml_files} + DEFINES + QT_NO_CAST_FROM_ASCII + QT_NO_CAST_TO_ASCII + LIBRARIES + Qt::CorePrivate + Qt::Gui + Qt::QmlPrivate + Qt::QuickControls2ImplPrivate + Qt::QuickPrivate + Qt::QuickTemplates2Private + PUBLIC_LIBRARIES + Qt::Core + Qt::Gui + Qt::Qml + Qt::Quick +) diff --git a/src/quickcontrols2/fusion/impl/CheckIndicator.qml b/src/quickcontrols2/fusion/impl/CheckIndicator.qml new file mode 100644 index 00000000..3a083653 --- /dev/null +++ b/src/quickcontrols2/fusion/impl/CheckIndicator.qml @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +Rectangle { + id: indicator + + property Item control + readonly property color pressedColor: Fusion.mergedColors(control.palette.base, control.palette.windowText, 85) + readonly property color checkMarkColor: Qt.darker(control.palette.text, 1.2) + + implicitWidth: 14 + implicitHeight: 14 + + color: control.down ? indicator.pressedColor : control.palette.base + border.color: control.visualFocus ? Fusion.highlightedOutline(control.palette) + : Qt.lighter(Fusion.outline(control.palette), 1.1) + + Rectangle { + x: 1; y: 1 + width: parent.width - 2 + height: 1 + color: Fusion.topShadow + visible: indicator.control.enabled && !indicator.control.down + } + + ColorImage { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + color: Color.transparent(indicator.checkMarkColor, 210 / 255) + source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/checkmark.png" + visible: indicator.control.checkState === Qt.Checked || (indicator.control.checked && indicator.control.checkState === undefined) + } + + Rectangle { + x: 3; y: 3 + width: parent.width - 6 + height: parent.width - 6 + + visible: indicator.control.checkState === Qt.PartiallyChecked + + gradient: Gradient { + GradientStop { + position: 0 + color: Color.transparent(indicator.checkMarkColor, 80 / 255) + } + GradientStop { + position: 1 + color: Color.transparent(indicator.checkMarkColor, 140 / 255) + } + } + border.color: Color.transparent(indicator.checkMarkColor, 180 / 255) + } +} diff --git a/src/quickcontrols2/fusion/impl/RadioIndicator.qml b/src/quickcontrols2/fusion/impl/RadioIndicator.qml new file mode 100644 index 00000000..d459a2e8 --- /dev/null +++ b/src/quickcontrols2/fusion/impl/RadioIndicator.qml @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +Rectangle { + id: indicator + + property Item control + readonly property color pressedColor: Fusion.mergedColors(control.palette.base, control.palette.windowText, 85) + readonly property color checkMarkColor: Qt.darker(control.palette.text, 1.2) + + implicitWidth: 14 + implicitHeight: 14 + + radius: width / 2 + color: control.down ? indicator.pressedColor : control.palette.base + border.color: control.visualFocus ? Fusion.highlightedOutline(control.palette) + : Qt.darker(control.palette.window, 1.5) + + Rectangle { + y: 1 + width: parent.width + height: parent.height - 1 + radius: width / 2 + color: "transparent" + border.color: Fusion.topShadow + visible: indicator.control.enabled && !indicator.control.down + } + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: parent.width / 2.32 + height: parent.height / 2.32 + radius: width / 2 + color: Color.transparent(indicator.checkMarkColor, 180 / 255) + border.color: Color.transparent(indicator.checkMarkColor, 200 / 255) + visible: indicator.control.checked + } +} diff --git a/src/quickcontrols2/fusion/impl/SliderGroove.qml b/src/quickcontrols2/fusion/impl/SliderGroove.qml new file mode 100644 index 00000000..76b7156a --- /dev/null +++ b/src/quickcontrols2/fusion/impl/SliderGroove.qml @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +Rectangle { + id: groove + + property Item control + property real offset + property real progress + property real visualProgress + + x: control.horizontal ? 0 : (control.availableWidth - width) / 2 + y: control.horizontal ? (control.availableHeight - height) / 2 : 0 + + implicitWidth: control.horizontal ? 160 : 5 + implicitHeight: control.horizontal ? 5 : 160 + width: control.horizontal ? control.availableWidth : implicitWidth + height: control.horizontal ? implicitHeight : control.availableHeight + + radius: 2 + border.color: Fusion.outline(control.palette) + scale: control.horizontal && control.mirrored ? -1 : 1 + + gradient: Gradient { + GradientStop { + position: 0 + color: Qt.darker(Fusion.grooveColor(groove.control.palette), 1.1) + } + GradientStop { + position: 1 + color: Qt.lighter(Fusion.grooveColor(groove.control.palette), 1.1) + } + } + + Rectangle { + x: groove.control.horizontal ? groove.offset * parent.width : 0 + y: groove.control.horizontal ? 0 : groove.visualProgress * parent.height + width: groove.control.horizontal ? groove.progress * parent.width - groove.offset * parent.width : 5 + height: groove.control.horizontal ? 5 : groove.progress * parent.height - groove.offset * parent.height + + radius: 2 + border.color: Qt.darker(Fusion.highlightedOutline(groove.control.palette), 1.1) + + gradient: Gradient { + GradientStop { + position: 0 + color: Fusion.highlight(groove.control.palette) + } + GradientStop { + position: 1 + color: Qt.lighter(Fusion.highlight(groove.control.palette), 1.2) + } + } + } +} diff --git a/src/quickcontrols2/fusion/impl/SliderHandle.qml b/src/quickcontrols2/fusion/impl/SliderHandle.qml new file mode 100644 index 00000000..00a955b9 --- /dev/null +++ b/src/quickcontrols2/fusion/impl/SliderHandle.qml @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +Rectangle { + id: handle + + property var palette + property bool pressed + property bool hovered + property bool vertical + property bool visualFocus + + implicitWidth: 13 + implicitHeight: 13 + + gradient: Gradient { + GradientStop { + position: 0 + color: Fusion.gradientStart(Fusion.buttonColor(handle.palette, handle.visualFocus, handle.pressed, handle.hovered)) + } + GradientStop { + position: 1 + color: Fusion.gradientStop(Fusion.buttonColor(handle.palette, handle.visualFocus, handle.pressed, handle.hovered)) + } + } + rotation: handle.vertical ? -90 : 0 + border.width: 1 + border.color: "transparent" + radius: 2 + + Rectangle { + width: parent.width + height: parent.height + border.color: handle.visualFocus ? Fusion.highlightedOutline(handle.palette) : Fusion.outline(handle.palette) + color: "transparent" + radius: 2 + + Rectangle { + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + border.color: Fusion.innerContrastLine + color: "transparent" + radius: 2 + } + } +} diff --git a/src/quickcontrols2/fusion/impl/SwitchIndicator.qml b/src/quickcontrols2/fusion/impl/SwitchIndicator.qml new file mode 100644 index 00000000..5a561913 --- /dev/null +++ b/src/quickcontrols2/fusion/impl/SwitchIndicator.qml @@ -0,0 +1,136 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Controls.Fusion +import QtQuick.Controls.Fusion.impl + +Rectangle { + id: indicator + + property Item control + readonly property color pressedColor: Fusion.mergedColors(control.palette.base, control.palette.windowText, 85) + readonly property color checkMarkColor: Qt.darker(control.palette.text, 1.2) + + implicitWidth: 40 + implicitHeight: 16 + + radius: 2 + border.color: Fusion.outline(control.palette) + + gradient: Gradient { + GradientStop { + position: 0 + color: Qt.darker(Fusion.grooveColor(indicator.control.palette), 1.1) + } + GradientStop { + position: 1 + color: Qt.lighter(Fusion.grooveColor(indicator.control.palette), 1.1) + } + } + + Rectangle { + x: indicator.control.mirrored ? handle.x : 0 + width: indicator.control.mirrored ? parent.width - handle.x : handle.x + handle.width + height: parent.height + + opacity: indicator.control.checked ? 1 : 0 + Behavior on opacity { + enabled: !indicator.control.down + NumberAnimation { duration: 80 } + } + + radius: 2 + border.color: Qt.darker(Fusion.highlightedOutline(indicator.control.palette), 1.1) + border.width: indicator.control.enabled ? 1 : 0 + + gradient: Gradient { + GradientStop { + position: 0 + color: Fusion.highlight(indicator.control.palette) + } + GradientStop { + position: 1 + color: Qt.lighter(Fusion.highlight(indicator.control.palette), 1.2) + } + } + } + + Rectangle { + id: handle + x: Math.max(0, Math.min(parent.width - width, indicator.control.visualPosition * parent.width - (width / 2))) + y: (parent.height - height) / 2 + width: 20 + height: 16 + radius: 2 + + gradient: Gradient { + GradientStop { + position: 0 + color: Fusion.gradientStart(Fusion.buttonColor(indicator.control.palette, indicator.control.visualFocus, indicator.control.pressed, indicator.control.hovered)) + } + GradientStop { + position: 1 + color: Fusion.gradientStop(Fusion.buttonColor(indicator.control.palette, indicator.control.visualFocus, indicator.control.pressed, indicator.control.hovered)) + } + } + border.width: 1 + border.color: "transparent" + + Rectangle { + width: parent.width + height: parent.height + border.color: indicator.control.visualFocus ? Fusion.highlightedOutline(indicator.control.palette) : Fusion.outline(indicator.control.palette) + color: "transparent" + radius: 2 + + Rectangle { + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + border.color: Fusion.innerContrastLine + color: "transparent" + radius: 2 + } + } + + Behavior on x { + enabled: !indicator.control.down + SmoothedAnimation { velocity: 200 } + } + } +} diff --git a/src/quickcontrols2/fusion/impl/qquickfusionbusyindicator.cpp b/src/quickcontrols2/fusion/impl/qquickfusionbusyindicator.cpp new file mode 100644 index 00000000..a9b75d27 --- /dev/null +++ b/src/quickcontrols2/fusion/impl/qquickfusionbusyindicator.cpp @@ -0,0 +1,111 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickfusionbusyindicator_p.h" + +#include + +QT_BEGIN_NAMESPACE + +QQuickFusionBusyIndicator::QQuickFusionBusyIndicator(QQuickItem *parent) + : QQuickPaintedItem(parent) +{ +} + +QColor QQuickFusionBusyIndicator::color() const +{ + return m_color; +} + +void QQuickFusionBusyIndicator::setColor(const QColor &color) +{ + if (color == m_color) + return; + + m_color = color; + update(); +} + +bool QQuickFusionBusyIndicator::isRunning() const +{ + return isVisible(); +} + +void QQuickFusionBusyIndicator::setRunning(bool running) +{ + if (running) { + setVisible(true); + update(); + } +} + +void QQuickFusionBusyIndicator::paint(QPainter *painter) +{ + const qreal w = width(); + const qreal h = height(); + if (w <= 0 || h <= 0 || !isRunning()) + return; + + const qreal sz = qMin(w, h); + const qreal dx = (w - sz) / 2; + const qreal dy = (h - sz) / 2; + const int hpw = qRound(qMax(qreal(1), sz / 14)) & -1; + const int pw = 2 * hpw; + const QRectF bounds(dx + hpw, dy + hpw, sz - pw - 1, sz - pw - 1); + + QConicalGradient gradient; + gradient.setCenter(QPointF(dx + sz / 2, dy + sz / 2)); + gradient.setColorAt(0, m_color); + gradient.setColorAt(0.1, m_color); + gradient.setColorAt(1, Qt::transparent); + + painter->translate(0.5, 0.5); + painter->setRenderHint(QPainter::Antialiasing, true); + painter->setPen(QPen(gradient, pw, Qt::SolidLine)); + painter->drawArc(bounds, 0, 360 * 16); + painter->setPen(QPen(m_color, pw, Qt::SolidLine, Qt::RoundCap)); + painter->drawArc(bounds, 0, 20 * 16); +} + +void QQuickFusionBusyIndicator::itemChange(ItemChange change, const ItemChangeData &data) +{ + QQuickPaintedItem::itemChange(change, data); + + if (change == ItemOpacityHasChanged && qFuzzyIsNull(data.realValue)) + setVisible(false); +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols2/fusion/impl/qquickfusionbusyindicator_p.h b/src/quickcontrols2/fusion/impl/qquickfusionbusyindicator_p.h new file mode 100644 index 00000000..5aeea6c4 --- /dev/null +++ b/src/quickcontrols2/fusion/impl/qquickfusionbusyindicator_p.h @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKFUSIONBUSYINDICATOR_P_H +#define QQUICKFUSIONBUSYINDICATOR_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include + +QT_BEGIN_NAMESPACE + +class QQuickFusionBusyIndicator : public QQuickPaintedItem +{ + Q_OBJECT + Q_PROPERTY(QColor color READ color WRITE setColor FINAL) + Q_PROPERTY(bool running READ isRunning WRITE setRunning) + QML_NAMED_ELEMENT(BusyIndicatorImpl) + QML_ADDED_IN_VERSION(2, 3) + +public: + explicit QQuickFusionBusyIndicator(QQuickItem *parent = nullptr); + + QColor color() const; + void setColor(const QColor &color); + + bool isRunning() const; + void setRunning(bool running); + + void paint(QPainter *painter) override; + +protected: + void itemChange(ItemChange change, const ItemChangeData &data) override; + +private: + QColor m_color; +}; + +QT_END_NAMESPACE + +#endif // QQUICKFUSIONBUSYINDICATOR_P_H diff --git a/src/quickcontrols2/fusion/impl/qquickfusiondial.cpp b/src/quickcontrols2/fusion/impl/qquickfusiondial.cpp new file mode 100644 index 00000000..eb6f21ad --- /dev/null +++ b/src/quickcontrols2/fusion/impl/qquickfusiondial.cpp @@ -0,0 +1,139 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickfusiondial_p.h" + +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +QQuickFusionDial::QQuickFusionDial(QQuickItem *parent) + : QQuickPaintedItem(parent) +{ +} + +bool QQuickFusionDial::highlight() const +{ + return m_highlight; +} + +void QQuickFusionDial::setHighlight(bool highlight) +{ + if (m_highlight == highlight) + return; + + m_highlight = highlight; + update(); +} + +// based on QStyleHelper::drawDial() +void QQuickFusionDial::paint(QPainter *painter) +{ + const int width = QQuickItem::width(); + const int height = QQuickItem::height(); + if (width <= 0 || height <= 0 || !isVisible()) + return; + + QColor buttonColor = QQuickItemPrivate::get(this)->palette()->button(); + const bool enabled = isEnabled(); + qreal r = qMin(width, height) / 2.0; + r -= r/50; + const qreal penSize = r/20.0; + + painter->setRenderHint(QPainter::Antialiasing); + + const qreal d_ = r / 6; + const qreal dx = d_ + (width - 2 * r) / 2 + 1; + const qreal dy = d_ + (height - 2 * r) / 2 + 1; + + QRectF br = QRectF(dx + 0.5, dy + 0.5, + int(r * 2 - 2 * d_ - 2), + int(r * 2 - 2 * d_ - 2)); + buttonColor.setHsv(buttonColor .hue(), + qMin(140, buttonColor .saturation()), + qMax(180, buttonColor.value())); + + if (enabled) { + // Drop shadow + qreal shadowSize = qMax(1.0, penSize/2.0); + QRectF shadowRect= br.adjusted(-2*shadowSize, -2*shadowSize, + 2*shadowSize, 2*shadowSize); + QRadialGradient shadowGradient(shadowRect.center().x(), + shadowRect.center().y(), shadowRect.width()/2.0, + shadowRect.center().x(), shadowRect.center().y()); + shadowGradient.setColorAt(qreal(0.91), QColor(0, 0, 0, 40)); + shadowGradient.setColorAt(qreal(1.0), Qt::transparent); + painter->setBrush(shadowGradient); + painter->setPen(Qt::NoPen); + painter->translate(shadowSize, shadowSize); + painter->drawEllipse(shadowRect); + painter->translate(-shadowSize, -shadowSize); + + // Main gradient + QRadialGradient gradient(br.center().x() - br.width()/3, dy, + br.width()*1.3, br.center().x(), + br.center().y() - br.height()/2); + gradient.setColorAt(0, buttonColor.lighter(110)); + gradient.setColorAt(qreal(0.5), buttonColor); + gradient.setColorAt(qreal(0.501), buttonColor.darker(102)); + gradient.setColorAt(1, buttonColor.darker(115)); + painter->setBrush(gradient); + } else { + painter->setBrush(Qt::NoBrush); + } + + painter->setPen(QPen(buttonColor.darker(280))); + painter->drawEllipse(br); + painter->setBrush(Qt::NoBrush); + painter->setPen(buttonColor.lighter(110)); + painter->drawEllipse(br.adjusted(1, 1, -1, -1)); + + if (m_highlight) { + QColor highlight = QQuickItemPrivate::get(this)->palette()->highlight(); + highlight.setHsv(highlight.hue(), + qMin(160, highlight.saturation()), + qMax(230, highlight.value())); + highlight.setAlpha(127); + painter->setPen(QPen(highlight, 2.0)); + painter->setBrush(Qt::NoBrush); + painter->drawEllipse(br.adjusted(-1, -1, 1, 1)); + } +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols2/fusion/impl/qquickfusiondial_p.h b/src/quickcontrols2/fusion/impl/qquickfusiondial_p.h new file mode 100644 index 00000000..c320527a --- /dev/null +++ b/src/quickcontrols2/fusion/impl/qquickfusiondial_p.h @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKFUSIONDIAL_P_H +#define QQUICKFUSIONDIAL_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include + +QT_BEGIN_NAMESPACE + +class QQuickFusionDial : public QQuickPaintedItem +{ + Q_OBJECT + Q_PROPERTY(bool highlight READ highlight WRITE setHighlight FINAL) + QML_NAMED_ELEMENT(DialImpl) + QML_ADDED_IN_VERSION(2, 3) + +public: + explicit QQuickFusionDial(QQuickItem *parent = nullptr); + + bool highlight() const; + void setHighlight(bool highlight); + + void paint(QPainter *painter) override; + +private: + bool m_highlight = false; +}; + +QT_END_NAMESPACE + +#endif // QQUICKFUSIONDIAL_P_H diff --git a/src/quickcontrols2/fusion/impl/qquickfusionknob.cpp b/src/quickcontrols2/fusion/impl/qquickfusionknob.cpp new file mode 100644 index 00000000..27ac54d3 --- /dev/null +++ b/src/quickcontrols2/fusion/impl/qquickfusionknob.cpp @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickfusionknob_p.h" + +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +QQuickFusionKnob::QQuickFusionKnob(QQuickItem *parent) + : QQuickPaintedItem(parent) +{ + connect(this, &QQuickItem::paletteChanged, this, [this](){ update(); }); +} + +// extracted from QStyleHelper::drawDial() +void QQuickFusionKnob::paint(QPainter *painter) +{ + const qreal w = width(); + const qreal h = height(); + if (w <= 0 || h <= 0) + return; + + QColor color = QQuickItemPrivate::get(this)->palette()->button(); + color.setHsv(color.hue(), + qMin(140, color .saturation()), + qMax(180, color.value())); + color = color.lighter(104); + color.setAlphaF(0.8f); + + const qreal sz = qMin(w, h); + QRectF rect(0, 0, sz, sz); + rect.moveCenter(QPointF(w / 2.0, h / 2.0)); + const QPointF center = rect.center(); + + QRadialGradient gradient(center.x() + rect.width() / 2, + center.y() + rect.width(), + rect.width() * 2, + center.x(), center.y()); + gradient.setColorAt(1, color.darker(140)); + gradient.setColorAt(qreal(0.4), color.darker(120)); + gradient.setColorAt(0, color.darker(110)); + + painter->setRenderHint(QPainter::Antialiasing); + painter->setBrush(gradient); + painter->setPen(QColor(255, 255, 255, 150)); + painter->drawEllipse(rect); + painter->setPen(QColor(0, 0, 0, 80)); + painter->drawEllipse(rect.adjusted(1, 1, -1, -1)); +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols2/fusion/impl/qquickfusionknob_p.h b/src/quickcontrols2/fusion/impl/qquickfusionknob_p.h new file mode 100644 index 00000000..b9b9c377 --- /dev/null +++ b/src/quickcontrols2/fusion/impl/qquickfusionknob_p.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKFUSIONKNOB_P_H +#define QQUICKFUSIONKNOB_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include + +QT_BEGIN_NAMESPACE + +class QQuickFusionKnob : public QQuickPaintedItem +{ + Q_OBJECT + QML_NAMED_ELEMENT(KnobImpl) + QML_ADDED_IN_VERSION(2, 3) + +public: + explicit QQuickFusionKnob(QQuickItem *parent = nullptr); + + void paint(QPainter *painter) override; +}; + +QT_END_NAMESPACE + +#endif // QQUICKFUSIONKNOB_P_H diff --git a/src/quickcontrols2/fusion/qquickfusionstyle.cpp b/src/quickcontrols2/fusion/qquickfusionstyle.cpp new file mode 100644 index 00000000..f2e8f823 --- /dev/null +++ b/src/quickcontrols2/fusion/qquickfusionstyle.cpp @@ -0,0 +1,153 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickfusionstyle_p.h" + +#include +#include +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +QQuickFusionStyle::QQuickFusionStyle(QObject *parent) + : QObject(parent) +{ +} + +QColor QQuickFusionStyle::lightShade() +{ + return QColor(255, 255, 255, 90); +} + +QColor QQuickFusionStyle::darkShade() +{ + return QColor(0, 0, 0, 60); +} + +QColor QQuickFusionStyle::topShadow() +{ + return QColor(0, 0, 0, 18); +} + +QColor QQuickFusionStyle::innerContrastLine() +{ + return QColor(255, 255, 255, 30); +} + +QColor QQuickFusionStyle::highlight(QQuickPalette *palette) +{ + return palette->highlight(); +} + +QColor QQuickFusionStyle::highlightedText(QQuickPalette *palette) +{ + return palette->highlightedText(); +} + +QColor QQuickFusionStyle::outline(QQuickPalette *palette) +{ + return palette->window().darker(140); +} + +QColor QQuickFusionStyle::highlightedOutline(QQuickPalette *palette) +{ + QColor highlightedOutline = highlight(palette).darker(125); + if (highlightedOutline.value() > 160) + highlightedOutline.setHsl(highlightedOutline.hue(), highlightedOutline.saturation(), 160); + return highlightedOutline; +} + +QColor QQuickFusionStyle::tabFrameColor(QQuickPalette *palette) +{ + return buttonColor(palette).lighter(104); +} + +QColor QQuickFusionStyle::buttonColor(QQuickPalette *palette, bool highlighted, bool down, bool hovered) +{ + QColor buttonColor = palette->button(); + int val = qGray(buttonColor.rgb()); + buttonColor = buttonColor.lighter(100 + qMax(1, (180 - val)/6)); + buttonColor.setHsv(buttonColor.hue(), int(buttonColor.saturation() * 0.75), buttonColor.value()); + if (highlighted) + buttonColor = mergedColors(buttonColor, highlightedOutline(palette).lighter(130), 90); + if (!hovered) + buttonColor = buttonColor.darker(104); + if (down) + buttonColor = buttonColor.darker(110); + return buttonColor; +} + +QColor QQuickFusionStyle::buttonOutline(QQuickPalette *palette, bool highlighted, bool enabled) +{ + QColor darkOutline = enabled && highlighted ? highlightedOutline(palette) : outline(palette); + return !enabled ? darkOutline.lighter(115) : darkOutline; +} + +QColor QQuickFusionStyle::gradientStart(const QColor &baseColor) +{ + return baseColor.lighter(124); +} + +QColor QQuickFusionStyle::gradientStop(const QColor &baseColor) +{ + return baseColor.lighter(102); +} + +QColor QQuickFusionStyle::mergedColors(const QColor &colorA, const QColor &colorB, int factor) +{ + const int maxFactor = 100; + QColor tmp = colorA; + tmp.setRed((tmp.red() * factor) / maxFactor + (colorB.red() * (maxFactor - factor)) / maxFactor); + tmp.setGreen((tmp.green() * factor) / maxFactor + (colorB.green() * (maxFactor - factor)) / maxFactor); + tmp.setBlue((tmp.blue() * factor) / maxFactor + (colorB.blue() * (maxFactor - factor)) / maxFactor); + return tmp; +} + +QColor QQuickFusionStyle::grooveColor(QQuickPalette *palette) +{ + QColor color = buttonColor(palette); + color.setHsv(color.hue(), + qMin(255, color.saturation()), + qMin(255, color.value() * 0.9)); + return color; +} + +QT_END_NAMESPACE + +#include "moc_qquickfusionstyle_p.cpp" diff --git a/src/quickcontrols2/fusion/qquickfusionstyle_p.h b/src/quickcontrols2/fusion/qquickfusionstyle_p.h new file mode 100644 index 00000000..c609e9c6 --- /dev/null +++ b/src/quickcontrols2/fusion/qquickfusionstyle_p.h @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKFUSIONSTYLE_P_H +#define QQUICKFUSIONSTYLE_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QQuickFusionStyle : public QObject +{ + Q_OBJECT + Q_PROPERTY(QColor lightShade READ lightShade CONSTANT) + Q_PROPERTY(QColor darkShade READ darkShade CONSTANT) + Q_PROPERTY(QColor topShadow READ topShadow CONSTANT) + Q_PROPERTY(QColor innerContrastLine READ innerContrastLine CONSTANT) + QML_NAMED_ELEMENT(Fusion) + QML_SINGLETON + QML_ADDED_IN_VERSION(2, 3) + +public: + explicit QQuickFusionStyle(QObject *parent = nullptr); + + static QColor lightShade(); + static QColor darkShade(); + static QColor topShadow(); + static QColor innerContrastLine(); + + Q_INVOKABLE static QColor highlight(QQuickPalette *palette); + Q_INVOKABLE static QColor highlightedText(QQuickPalette *palette); + Q_INVOKABLE static QColor outline(QQuickPalette *palette); + Q_INVOKABLE static QColor highlightedOutline(QQuickPalette *palette); + Q_INVOKABLE static QColor tabFrameColor(QQuickPalette *palette); + Q_INVOKABLE static QColor buttonColor(QQuickPalette *palette, bool highlighted = false, bool down = false, bool hovered = false); + Q_INVOKABLE static QColor buttonOutline(QQuickPalette *palette, bool highlighted = false, bool enabled = true); + Q_INVOKABLE static QColor gradientStart(const QColor &baseColor); + Q_INVOKABLE static QColor gradientStop(const QColor &baseColor); + Q_INVOKABLE static QColor mergedColors(const QColor &colorA, const QColor &colorB, int factor = 50); + Q_INVOKABLE static QColor grooveColor(QQuickPalette *palette); +}; + +QT_END_NAMESPACE + +#endif // QQUICKFUSIONSTYLE_P_H diff --git a/src/quickcontrols2/fusion/qquickfusiontheme.cpp b/src/quickcontrols2/fusion/qquickfusiontheme.cpp new file mode 100644 index 00000000..903758bb --- /dev/null +++ b/src/quickcontrols2/fusion/qquickfusiontheme.cpp @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickfusiontheme_p.h" + +#include +#include + +QT_BEGIN_NAMESPACE + +void QQuickFusionTheme::initialize(QQuickTheme *theme) +{ + const bool isDarkSystemTheme = QQuickStylePrivate::isDarkSystemTheme(); + QPalette systemPalette; + systemPalette.setColor(QPalette::Active, QPalette::ButtonText, + isDarkSystemTheme ? QColor::fromRgb(0xe7e7e7) : QColor::fromRgb(0x252525)); + systemPalette.setColor(QPalette::Disabled, QPalette::ButtonText, + isDarkSystemTheme ? QColor::fromRgb(0x777777) : QColor::fromRgb(0xb6b6b6)); + theme->setPalette(QQuickTheme::System, systemPalette); +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols2/fusion/qquickfusiontheme_p.h b/src/quickcontrols2/fusion/qquickfusiontheme_p.h new file mode 100644 index 00000000..814c1919 --- /dev/null +++ b/src/quickcontrols2/fusion/qquickfusiontheme_p.h @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKFUSIONTHEME_P_H +#define QQUICKFUSIONTHEME_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include + +QT_BEGIN_NAMESPACE + +class QQuickTheme; + +class QQuickFusionTheme +{ +public: + static void initialize(QQuickTheme *theme); +}; + +QT_END_NAMESPACE + +#endif // QQUICKFUSIONTHEME_P_H diff --git a/src/quickcontrols2/fusion/qtquickcontrols2fusionstyle.qrc b/src/quickcontrols2/fusion/qtquickcontrols2fusionstyle.qrc new file mode 100644 index 00000000..0a9e195a --- /dev/null +++ b/src/quickcontrols2/fusion/qtquickcontrols2fusionstyle.qrc @@ -0,0 +1,16 @@ + + + images/arrow.png + images/arrow@2x.png + images/arrow@3x.png + images/arrow@4x.png + images/checkmark.png + images/checkmark@2x.png + images/checkmark@3x.png + images/checkmark@4x.png + images/progressmask.png + images/progressmask@2x.png + images/progressmask@3x.png + images/progressmask@4x.png + + diff --git a/src/quickcontrols2/fusion/qtquickcontrols2fusionstyleplugin.cpp b/src/quickcontrols2/fusion/qtquickcontrols2fusionstyleplugin.cpp new file mode 100644 index 00000000..f0d0e41a --- /dev/null +++ b/src/quickcontrols2/fusion/qtquickcontrols2fusionstyleplugin.cpp @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickfusionstyle_p.h" +#include "qquickfusiontheme_p.h" + +#include +#include +#include + +extern void qml_register_types_QtQuick_Controls_Fusion(); + +QT_BEGIN_NAMESPACE + +class QtQuickControls2FusionStylePlugin : public QQuickStylePlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) + +public: + QtQuickControls2FusionStylePlugin(QObject *parent = nullptr); + + QString name() const override; + void initializeTheme(QQuickTheme *theme) override; + + QQuickFusionTheme theme; +}; + +QtQuickControls2FusionStylePlugin::QtQuickControls2FusionStylePlugin(QObject *parent) : QQuickStylePlugin(parent) +{ + volatile auto registration = &qml_register_types_QtQuick_Controls_Fusion; + Q_UNUSED(registration); +} + +QString QtQuickControls2FusionStylePlugin::name() const +{ + return QStringLiteral("Fusion"); +} + +void QtQuickControls2FusionStylePlugin::initializeTheme(QQuickTheme *theme) +{ + this->theme.initialize(theme); +} + +QT_END_NAMESPACE + +#include "qtquickcontrols2fusionstyleplugin.moc" diff --git a/src/quickcontrols2/imagine/ApplicationWindow.qml b/src/quickcontrols2/imagine/ApplicationWindow.qml new file mode 100644 index 00000000..b54527eb --- /dev/null +++ b/src/quickcontrols2/imagine/ApplicationWindow.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Window +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.ApplicationWindow { + id: window + + background: NinePatchImage { + width: window.width + height: window.height + + source: Imagine.url + "applicationwindow-background" + NinePatchImageSelector on source { + states: [ + {"active": window.active} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/BusyIndicator.qml b/src/quickcontrols2/imagine/BusyIndicator.qml new file mode 100644 index 00000000..163a64b4 --- /dev/null +++ b/src/quickcontrols2/imagine/BusyIndicator.qml @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.BusyIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + contentItem: AnimatedImage { + opacity: control.running ? 1 : 0 + playing: control.running || opacity > 0 + visible: control.running || opacity > 0 + Behavior on opacity { OpacityAnimator { duration: 250 } } + + source: Imagine.url + "busyindicator-animation" + AnimatedImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"running": control.running}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + background: NinePatchImage { + source: Imagine.url + "busyindicator-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"running": control.running}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/Button.qml b/src/quickcontrols2/imagine/Button.qml new file mode 100644 index 00000000..f2228ec7 --- /dev/null +++ b/src/quickcontrols2/imagine/Button.qml @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.Button { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + spacing: 6 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + icon.width: 24 + icon.height: 24 + icon.color: control.enabled && control.flat && control.highlighted ? control.palette.highlight + : control.enabled && (control.down || control.checked || control.highlighted) && !control.flat + ? control.palette.brightText : control.flat ? control.palette.windowText : control.palette.buttonText + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.enabled && control.flat && control.highlighted ? control.palette.highlight + : control.enabled && (control.down || control.checked || control.highlighted) && !control.flat + ? control.palette.brightText : control.flat ? control.palette.windowText : control.palette.buttonText + } + + background: NinePatchImage { + source: Imagine.url + "button-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"checkable": control.checkable}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"flat": control.flat}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/CMakeLists.txt b/src/quickcontrols2/imagine/CMakeLists.txt new file mode 100644 index 00000000..aba292e0 --- /dev/null +++ b/src/quickcontrols2/imagine/CMakeLists.txt @@ -0,0 +1,260 @@ +##################################################################### +## qtquickcontrols2imaginestyleplugin Plugin: +##################################################################### + +set(qml_files + "ApplicationWindow.qml" + "BusyIndicator.qml" + "Button.qml" + "CheckBox.qml" + "CheckDelegate.qml" + "ComboBox.qml" + "DelayButton.qml" + "Dial.qml" + "Dialog.qml" + "DialogButtonBox.qml" + "Drawer.qml" + "Frame.qml" + "GroupBox.qml" + "HorizontalHeaderView.qml" + "ItemDelegate.qml" + "Label.qml" + "Menu.qml" + "MenuItem.qml" + "MenuSeparator.qml" + "PageIndicator.qml" + "Page.qml" + "Pane.qml" + "Popup.qml" + "ProgressBar.qml" + "RadioButton.qml" + "RadioDelegate.qml" + "RangeSlider.qml" + "RoundButton.qml" + "ScrollView.qml" + "ScrollBar.qml" + "ScrollIndicator.qml" + "Slider.qml" + "SpinBox.qml" + "SplitView.qml" + "StackView.qml" + "SwipeDelegate.qml" + "SwipeView.qml" + "Switch.qml" + "SwitchDelegate.qml" + "TextField.qml" + "TextArea.qml" + "TabBar.qml" + "TabButton.qml" + "ToolBar.qml" + "ToolButton.qml" + "ToolSeparator.qml" + "ToolTip.qml" + "Tumbler.qml" + "VerticalHeaderView.qml" +) +set_source_files_properties(ApplicationWindow.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(BusyIndicator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Button.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(CheckBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(CheckDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ComboBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(DelayButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.2;6.0" +) +set_source_files_properties(Dial.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Dialog.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(DialogButtonBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(Drawer.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Frame.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(GroupBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(HorizontalHeaderView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.15;6.0" +) +set_source_files_properties(ItemDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Label.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Menu.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(MenuItem.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(MenuSeparator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(PageIndicator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Page.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Pane.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Popup.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ProgressBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(RadioButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(RadioDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(RangeSlider.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(RoundButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(ScrollView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ScrollBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ScrollIndicator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Slider.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(SpinBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(SplitView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.13;6.0" +) +set_source_files_properties(StackView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(SwipeDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(SwipeView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Switch.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(SwitchDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(TextField.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(TextArea.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(TabBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(TabButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ToolBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ToolButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ToolSeparator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(ToolTip.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Tumbler.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(VerticalHeaderView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.15;6.0" +) + +qt_internal_add_qml_module(qtquickcontrols2imaginestyleplugin + URI "QtQuick.Controls.Imagine" + VERSION "${PROJECT_VERSION}" + CLASS_NAME QtQuickControls2ImagineStylePlugin + IMPORTS + QtQuick.Controls.Basic/auto + PLUGIN_TARGET qtquickcontrols2imaginestyleplugin + NO_PLUGIN_OPTIONAL + NO_GENERATE_PLUGIN_SOURCE + SOURCES + qquickimaginestyle.cpp qquickimaginestyle_p.h + qquickimaginetheme.cpp qquickimaginetheme_p.h + qtquickcontrols2imaginestyleplugin.cpp + QML_FILES + ${qml_files} + DEFINES + QT_NO_CAST_FROM_ASCII + QT_NO_CAST_TO_ASCII + LIBRARIES + Qt::CorePrivate + Qt::GuiPrivate + Qt::QmlPrivate + Qt::QuickControls2ImplPrivate + Qt::QuickControls2Private + Qt::QuickPrivate + Qt::QuickTemplates2Private + PUBLIC_LIBRARIES + Qt::Core + Qt::Gui + Qt::Qml + Qt::Quick +) + +file(GLOB resource_glob_0 RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "images/*.png") +foreach(file IN LISTS resource_glob_0) + set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/${file}" PROPERTIES QT_RESOURCE_ALIAS "${file}") +endforeach() + +file(GLOB resource_glob_1 RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "images/*.webp") +foreach(file IN LISTS resource_glob_1) + set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/${file}" PROPERTIES QT_RESOURCE_ALIAS "${file}") +endforeach() + +# Resources: +set(qmake_qtquickcontrols2imaginestyleplugin_resource_files + ${resource_glob_0} + ${resource_glob_1} +) + +qt_internal_add_resource(qtquickcontrols2imaginestyleplugin "qmake_qtquickcontrols2imaginestyleplugin" + PREFIX + "/qt-project.org/imports/QtQuick/Controls/Imagine" + FILES + ${qmake_qtquickcontrols2imaginestyleplugin_resource_files} +) + +add_subdirectory(impl) diff --git a/src/quickcontrols2/imagine/CheckBox.qml b/src/quickcontrols2/imagine/CheckBox.qml new file mode 100644 index 00000000..a92837b5 --- /dev/null +++ b/src/quickcontrols2/imagine/CheckBox.qml @@ -0,0 +1,106 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.CheckBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 6 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + indicator: Image { + x: text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + + source: Imagine.url + "checkbox-indicator" + ImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checkState === Qt.Checked}, + {"partially-checked": control.checkState === Qt.PartiallyChecked}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.palette.windowText + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + + background: NinePatchImage { + source: Imagine.url + "checkbox-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checkState === Qt.Checked}, + {"partially-checked": control.checkState === Qt.PartiallyChecked}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/CheckDelegate.qml b/src/quickcontrols2/imagine/CheckDelegate.qml new file mode 100644 index 00000000..08be7085 --- /dev/null +++ b/src/quickcontrols2/imagine/CheckDelegate.qml @@ -0,0 +1,117 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.CheckDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 12 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.text + + indicator: Image { + x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + source: Imagine.url + "checkdelegate-indicator" + ImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checkState === Qt.Checked}, + {"partially-checked": control.checkState === Qt.PartiallyChecked}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + contentItem: IconLabel { + leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.text + } + + background: NinePatchImage { + source: Imagine.url + "checkdelegate-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checkState === Qt.Checked}, + {"partially-checked": control.checkState === Qt.PartiallyChecked}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/ComboBox.qml b/src/quickcontrols2/imagine/ComboBox.qml new file mode 100644 index 00000000..58683a84 --- /dev/null +++ b/src/quickcontrols2/imagine/ComboBox.qml @@ -0,0 +1,173 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Window +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.ComboBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentItem.implicitWidth + background ? (background.leftPadding + background.rightPadding) : 0) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + Math.max(implicitContentHeight, + implicitIndicatorHeight) + background ? (background.topPadding + background.bottomPadding) : 0) + + leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) + rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + delegate: ItemDelegate { + width: ListView.view.width + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData + font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal + highlighted: control.highlightedIndex === index + hoverEnabled: control.hoverEnabled + } + + indicator: Image { + x: control.mirrored ? control.padding : control.width - width - control.padding + y: control.topPadding + (control.availableHeight - height) / 2 + + source: Imagine.url + "combobox-indicator" + ImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.pressed}, + {"editable": control.editable}, + {"open": control.down}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered}, + {"flat": control.flat} + ] + } + } + + contentItem: T.TextField { + topPadding: control.background ? control.background.topPadding : 0 + leftPadding: control.background ? control.background.leftPadding : 0 + rightPadding: control.background ? control.background.rightPadding : 0 + bottomPadding: control.background ? control.background.bottomPadding : 0 + + text: control.editable ? control.editText : control.displayText + + enabled: control.editable + autoScroll: control.editable + readOnly: control.down + inputMethodHints: control.inputMethodHints + validator: control.validator + selectByMouse: control.selectTextByMouse + + font: control.font + color: control.flat ? control.palette.windowText : control.editable ? control.palette.text : control.palette.buttonText + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + verticalAlignment: Text.AlignVCenter + } + + background: NinePatchImage { + source: Imagine.url + "combobox-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.pressed}, + {"editable": control.editable}, + {"open": control.down}, + {"focused": control.visualFocus || (control.editable && control.activeFocus)}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered}, + {"flat": control.flat} + ] + } + } + + popup: T.Popup { + width: control.width + height: Math.min(contentItem.implicitHeight + topPadding + bottomPadding, control.Window.height - topMargin - bottomMargin) + + topMargin: background.topInset + bottomMargin: background.bottomInset + + topPadding: background.topPadding + leftPadding: background.leftPadding + rightPadding: background.rightPadding + bottomPadding: background.bottomPadding + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + palette.text: control.palette.text + palette.highlight: control.palette.highlight + palette.highlightedText: control.palette.highlightedText + palette.windowText: control.palette.windowText + palette.buttonText: control.palette.buttonText + + contentItem: ListView { + clip: true + implicitHeight: contentHeight + model: control.delegateModel + currentIndex: control.highlightedIndex + highlightMoveDuration: 0 + + T.ScrollIndicator.vertical: ScrollIndicator { } + } + + background: NinePatchImage { + source: Imagine.url + "combobox-popup" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.pressed}, + {"editable": control.editable}, + {"focused": control.visualFocus || (control.editable && control.activeFocus)}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered}, + {"flat": control.flat} + ] + } + } + } +} diff --git a/src/quickcontrols2/imagine/DelayButton.qml b/src/quickcontrols2/imagine/DelayButton.qml new file mode 100644 index 00000000..e542eb69 --- /dev/null +++ b/src/quickcontrols2/imagine/DelayButton.qml @@ -0,0 +1,137 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.DelayButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + transition: Transition { + NumberAnimation { + duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress) + } + } + + contentItem: Text { + text: control.text + font: control.font + color: control.palette.buttonText + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + background: NinePatchImage { + source: Imagine.url + "delaybutton-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + + readonly property NinePatchImage progress: NinePatchImage { + parent: control.background + width: control.progress * parent.width + height: parent.height + visible: false + + source: Imagine.url + "delaybutton-progress" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + readonly property NinePatchImage mask: NinePatchImage { + width: control.background.width + height: control.background.height + visible: false + + source: Imagine.url + "delaybutton-mask" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + readonly property OpacityMask effect: OpacityMask { + parent: control.background + width: source.width + height: source.height + source: control.background.progress + + maskSource: ShaderEffectSource { + sourceItem: control.background.mask + sourceRect: Qt.rect(0, 0, control.background.effect.width, control.background.effect.height) + } + } + } +} diff --git a/src/quickcontrols2/imagine/Dial.qml b/src/quickcontrols2/imagine/Dial.qml new file mode 100644 index 00000000..224bff56 --- /dev/null +++ b/src/quickcontrols2/imagine/Dial.qml @@ -0,0 +1,105 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.Dial { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + (handle ? handle.implicitWidth : 0) + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + (handle ? handle.implicitHeight : 0) + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + handle: Image { + x: background.x + background.width / 2 - width / 2 + y: background.y + background.height / 2 - height / 2 + + source: Imagine.url + "dial-handle" + ImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.pressed}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + + transform: [ + Translate { + y: -Math.min(control.background.width, control.background.height) * 0.4 + control.handle.height / 2 + }, + Rotation { + angle: control.angle + origin.x: handle.width / 2 + origin.y: handle.height / 2 + } + ] + } + + background: NinePatchImage { + x: control.width / 2 - width / 2 + y: control.height / 2 - height / 2 + width: Math.max(64, Math.min(control.width, control.height)) + height: width + fillMode: Image.PreserveAspectFit + + source: Imagine.url + "dial-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.pressed}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/Dialog.qml b/src/quickcontrols2/imagine/Dialog.qml new file mode 100644 index 00000000..b788cc3c --- /dev/null +++ b/src/quickcontrols2/imagine/Dialog.qml @@ -0,0 +1,116 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.Dialog { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitHeaderWidth, + implicitFooterWidth) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + background: NinePatchImage { + source: Imagine.url + "dialog-background" + NinePatchImageSelector on source { + states: [ + {"modal": control.modal}, + {"dim": control.dim} + ] + } + } + + header: Label { + text: control.title + visible: control.title + elide: Label.ElideRight + font.bold: true + padding: 12 + + background: NinePatchImage { + width: parent.width + height: parent.height + + source: Imagine.url + "dialog-title" + NinePatchImageSelector on source { + states: [ + {"modal": control.modal}, + {"dim": control.dim} + ] + } + } + } + + footer: DialogButtonBox { + visible: count > 0 + } + + T.Overlay.modal: NinePatchImage { + source: Imagine.url + "dialog-overlay" + NinePatchImageSelector on source { + states: [ + {"modal": true} + ] + } + } + + T.Overlay.modeless: NinePatchImage { + source: Imagine.url + "dialog-overlay" + NinePatchImageSelector on source { + states: [ + {"modal": false} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/DialogButtonBox.qml b/src/quickcontrols2/imagine/DialogButtonBox.qml new file mode 100644 index 00000000..1f3ccd0f --- /dev/null +++ b/src/quickcontrols2/imagine/DialogButtonBox.qml @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.DialogButtonBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + (control.count === 1 ? contentWidth * 2 : contentWidth) + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + spacing: 6 + + delegate: Button { + width: control.count === 1 ? control.availableWidth / 2 : undefined + flat: true + } + + contentItem: ListView { + model: control.contentModel + spacing: control.spacing + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + snapMode: ListView.SnapToItem + } + + background: NinePatchImage { + source: Imagine.url + "dialogbuttonbox-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/Drawer.qml b/src/quickcontrols2/imagine/Drawer.qml new file mode 100644 index 00000000..414516d3 --- /dev/null +++ b/src/quickcontrols2/imagine/Drawer.qml @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.Drawer { + id: control + + parent: T.Overlay.overlay + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + enter: Transition { SmoothedAnimation { velocity: 5 } } + exit: Transition { SmoothedAnimation { velocity: 5 } } + + background: NinePatchImage { + source: Imagine.url + "drawer-background" + NinePatchImageSelector on source { + states: [ + {"modal": control.modal}, + {"dim": control.dim}, + {"top": control.edge === Qt.TopEdge}, + {"left": control.edge === Qt.LeftEdge}, + {"right": control.edge === Qt.RightEdge}, + {"bottom": control.edge === Qt.BottomEdge} + ] + } + } + + T.Overlay.modal: NinePatchImage { + source: Imagine.url + "drawer-overlay" + NinePatchImageSelector on source { + states: [ + {"modal": true} + ] + } + } + + T.Overlay.modeless: NinePatchImage { + source: Imagine.url + "drawer-overlay" + NinePatchImageSelector on source { + states: [ + {"modal": false} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/Frame.qml b/src/quickcontrols2/imagine/Frame.qml new file mode 100644 index 00000000..7ba93dbc --- /dev/null +++ b/src/quickcontrols2/imagine/Frame.qml @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.Frame { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + background: NinePatchImage { + source: Imagine.url + "frame-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/GroupBox.qml b/src/quickcontrols2/imagine/GroupBox.qml new file mode 100644 index 00000000..b0a8645f --- /dev/null +++ b/src/quickcontrols2/imagine/GroupBox.qml @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.GroupBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitLabelWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: (background ? background.topPadding : 0) + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + label: Label { + width: control.width + + topPadding: background.topPadding + leftPadding: background.leftPadding + rightPadding: background.rightPadding + bottomPadding: background.bottomPadding + + text: control.title + font: control.font + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + + color: control.palette.windowText + + background: NinePatchImage { + width: parent.width + height: parent.height + + source: Imagine.url + "groupbox-title" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } + } + + background: NinePatchImage { + x: -leftInset + y: control.topPadding - control.bottomPadding - topInset + width: control.width + leftInset + rightInset + height: control.height + topInset + bottomInset - control.topPadding + control.bottomPadding + + source: Imagine.url + "groupbox-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/HorizontalHeaderView.qml b/src/quickcontrols2/imagine/HorizontalHeaderView.qml new file mode 100644 index 00000000..e5214593 --- /dev/null +++ b/src/quickcontrols2/imagine/HorizontalHeaderView.qml @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T + +T.HorizontalHeaderView { + id: control + + implicitWidth: syncView ? syncView.width : 0 + implicitHeight: contentHeight + + delegate: Rectangle { + // Qt6: add cellPadding (and font etc) as public API in headerview + readonly property real cellPadding: 8 + + implicitWidth: text.implicitWidth + (cellPadding * 2) + implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2)) + color: "#f6f6f6" + border.color: "#e4e4e4" + + Text { + id: text + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] + : model[control.textRole]) + : modelData + width: parent.width + height: parent.height + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: "#ff26282a" + } + } +} diff --git a/src/quickcontrols2/imagine/ItemDelegate.qml b/src/quickcontrols2/imagine/ItemDelegate.qml new file mode 100644 index 00000000..25c9a223 --- /dev/null +++ b/src/quickcontrols2/imagine/ItemDelegate.qml @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.ItemDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 12 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.text + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.text + } + + background: NinePatchImage { + source: Imagine.url + "itemdelegate-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/Label.qml b/src/quickcontrols2/imagine/Label.qml new file mode 100644 index 00000000..3654cd7d --- /dev/null +++ b/src/quickcontrols2/imagine/Label.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.Label { + id: control + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + color: control.palette.windowText + linkColor: control.palette.link + + background: NinePatchImage { + source: Imagine.url + "label-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/Menu.qml b/src/quickcontrols2/imagine/Menu.qml new file mode 100644 index 00000000..346c6490 --- /dev/null +++ b/src/quickcontrols2/imagine/Menu.qml @@ -0,0 +1,107 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl +import QtQuick.Window + +T.Menu { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topMargin: background ? background.topInset : 0 + leftMargin: background ? background.leftInset : 0 + rightMargin: background ? background.rightInset : 0 + bottomMargin: background ? background.bottomInset : 0 + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + delegate: MenuItem { } + + contentItem: ListView { + implicitHeight: contentHeight + model: control.contentModel + interactive: Window.window + ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height + : false + clip: true + currentIndex: control.currentIndex + + T.ScrollIndicator.vertical: ScrollIndicator { } + } + + background: NinePatchImage { + source: Imagine.url + "menu-background" + NinePatchImageSelector on source { + states: [ + {"modal": control.modal}, + {"dim": control.dim} + ] + } + } + + T.Overlay.modal: NinePatchImage { + source: Imagine.url + "menu-overlay" + NinePatchImageSelector on source { + states: [ + {"modal": true} + ] + } + } + + T.Overlay.modeless: NinePatchImage { + source: Imagine.url + "menu-overlay" + NinePatchImageSelector on source { + states: [ + {"modal": false} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/MenuItem.qml b/src/quickcontrols2/imagine/MenuItem.qml new file mode 100644 index 00000000..963b3bba --- /dev/null +++ b/src/quickcontrols2/imagine/MenuItem.qml @@ -0,0 +1,137 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.MenuItem { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 6 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.windowText + + contentItem: IconLabel { + readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0 + readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0 + leftPadding: !control.mirrored ? indicatorPadding : arrowPadding + rightPadding: control.mirrored ? indicatorPadding : arrowPadding + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.windowText + } + + arrow: Image { + x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + visible: control.subMenu + source: Imagine.url + "menuitem-arrow" + ImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + indicator: Image { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + + visible: control.checkable + source: Imagine.url + "menuitem-indicator" + ImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + background: NinePatchImage { + source: Imagine.url + "menuitem-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/MenuSeparator.qml b/src/quickcontrols2/imagine/MenuSeparator.qml new file mode 100644 index 00000000..42d1812f --- /dev/null +++ b/src/quickcontrols2/imagine/MenuSeparator.qml @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.MenuSeparator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + contentItem: NinePatchImage { + source: Imagine.url + "menuseparator-separator" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } + + background: NinePatchImage { + source: Imagine.url + "menuseparator-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/Page.qml b/src/quickcontrols2/imagine/Page.qml new file mode 100644 index 00000000..1b77112f --- /dev/null +++ b/src/quickcontrols2/imagine/Page.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.Page { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitHeaderWidth, + implicitFooterWidth) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + background: NinePatchImage { + source: Imagine.url + "page-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/PageIndicator.qml b/src/quickcontrols2/imagine/PageIndicator.qml new file mode 100644 index 00000000..ba9bb85c --- /dev/null +++ b/src/quickcontrols2/imagine/PageIndicator.qml @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.PageIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + delegate: Image { + source: Imagine.url + "pageindicator-delegate" + ImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": pressed}, + {"current": index === control.currentIndex}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} // ### TODO: context property + ] + } + } + + contentItem: Row { + spacing: control.spacing + + Repeater { + model: control.count + delegate: control.delegate + } + } + + background: NinePatchImage { + source: Imagine.url + "pageindicator-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/Pane.qml b/src/quickcontrols2/imagine/Pane.qml new file mode 100644 index 00000000..4fdfaa18 --- /dev/null +++ b/src/quickcontrols2/imagine/Pane.qml @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.Pane { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + background: NinePatchImage { + source: Imagine.url + "pane-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/Popup.qml b/src/quickcontrols2/imagine/Popup.qml new file mode 100644 index 00000000..bc7e544b --- /dev/null +++ b/src/quickcontrols2/imagine/Popup.qml @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.Popup { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : undefined + leftPadding: background ? background.leftPadding : undefined + rightPadding: background ? background.rightPadding : undefined + bottomPadding: background ? background.bottomPadding : undefined + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + background: NinePatchImage { + source: Imagine.url + "popup-background" + NinePatchImageSelector on source { + states: [ + {"modal": control.modal}, + {"dim": control.dim} + ] + } + } + + T.Overlay.modal: NinePatchImage { + source: Imagine.url + "popup-overlay" + NinePatchImageSelector on source { + states: [ + {"modal": true} + ] + } + } + + T.Overlay.modeless: NinePatchImage { + source: Imagine.url + "popup-overlay" + NinePatchImageSelector on source { + states: [ + {"modal": false} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/ProgressBar.qml b/src/quickcontrols2/imagine/ProgressBar.qml new file mode 100644 index 00000000..0c2ed8d7 --- /dev/null +++ b/src/quickcontrols2/imagine/ProgressBar.qml @@ -0,0 +1,141 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.ProgressBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + contentItem: Item { + implicitWidth: control.indeterminate ? animation.implicitWidth || progress.implicitWidth : progress.implicitWidth + implicitHeight: control.indeterminate ? animation.implicitHeight || progress.implicitHeight : progress.implicitHeight + scale: control.mirrored ? -1 : 1 + + readonly property bool hasMask: mask.status !== Image.Null + + readonly property NinePatchImage progress: NinePatchImage { + parent: control.contentItem + width: control.position * parent.width + height: parent.height + visible: !control.indeterminate && !control.contentItem.hasMask + + source: Imagine.url + "progressbar-progress" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"indeterminate": control.indeterminate}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + readonly property AnimatedImage animation: AnimatedImage { + parent: control.contentItem + width: parent.width + height: parent.height + playing: control.indeterminate + visible: control.indeterminate && !control.contentItem.hasMask + + source: Imagine.url + "progressbar-animation" + AnimatedImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + readonly property NinePatchImage mask: NinePatchImage { + width: control.availableWidth + height: control.availableHeight + visible: false + + source: Imagine.url + "progressbar-mask" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"indeterminate": control.indeterminate}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + readonly property OpacityMask effect: OpacityMask { + parent: control.contentItem + width: source.width + height: source.height + source: control.indeterminate ? control.contentItem.animation : control.contentItem.progress + + maskSource: ShaderEffectSource { + sourceItem: control.contentItem.mask + sourceRect: Qt.rect(0, 0, control.contentItem.effect.width, control.contentItem.effect.height) + } + } + } + + background: NinePatchImage { + source: Imagine.url + "progressbar-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"indeterminate": control.indeterminate}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/RadioButton.qml b/src/quickcontrols2/imagine/RadioButton.qml new file mode 100644 index 00000000..e1a81321 --- /dev/null +++ b/src/quickcontrols2/imagine/RadioButton.qml @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.RadioButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 6 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + indicator: Image { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + + source: Imagine.url + "radiobutton-indicator" + ImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.palette.windowText + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + + background: NinePatchImage { + source: Imagine.url + "radiobutton-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/RadioDelegate.qml b/src/quickcontrols2/imagine/RadioDelegate.qml new file mode 100644 index 00000000..0344160c --- /dev/null +++ b/src/quickcontrols2/imagine/RadioDelegate.qml @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.RadioDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 12 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.text + + indicator: Image { + x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + source: Imagine.url + "radiodelegate-indicator" + ImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + contentItem: IconLabel { + leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.text + } + + background: NinePatchImage { + source: Imagine.url + "radiodelegate-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/RangeSlider.qml b/src/quickcontrols2/imagine/RangeSlider.qml new file mode 100644 index 00000000..37f59a3a --- /dev/null +++ b/src/quickcontrols2/imagine/RangeSlider.qml @@ -0,0 +1,134 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.RangeSlider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + first.implicitHandleWidth + leftPadding + rightPadding, + second.implicitHandleWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + first.implicitHandleHeight + topPadding + bottomPadding, + second.implicitHandleHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + first.handle: Image { + x: control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height)) + + source: Imagine.url + "rangeslider-handle" + ImageSelector on source { + states: [ + {"first": true}, + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"pressed": control.first.pressed}, + {"focused": control.first.handle.activeFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.first.hovered} + ] + } + } + + second.handle: Image { + x: control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height)) + + source: Imagine.url + "rangeslider-handle" + ImageSelector on source { + states: [ + {"second": true}, + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"pressed": control.second.pressed}, + {"focused": control.second.handle.activeFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.second.hovered} + ] + } + } + + background: NinePatchImage { + scale: control.horizontal && control.mirrored ? -1 : 1 + + source: Imagine.url + "rangeslider-background" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + + NinePatchImage { + x: control.horizontal ? control.first.handle.width / 2 + control.first.position * (parent.width - control.first.handle.width) : (parent.width - width) / 2 + y: control.horizontal ? (parent.height - height) / 2 : control.first.handle.height / 2 + control.second.visualPosition * (parent.height - control.first.handle.height) + width: control.horizontal ? control.second.position * (parent.width - control.first.handle.width) - control.first.position * (parent.width - control.first.handle.width) : parent.width + height: control.vertical ? control.second.position * (parent.height - control.first.handle.height) - control.first.position * (parent.height - control.first.handle.height): parent.height + + source: Imagine.url + "rangeslider-progress" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + } +} diff --git a/src/quickcontrols2/imagine/RoundButton.qml b/src/quickcontrols2/imagine/RoundButton.qml new file mode 100644 index 00000000..5c9580a3 --- /dev/null +++ b/src/quickcontrols2/imagine/RoundButton.qml @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.RoundButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + icon.width: 24 + icon.height: 24 + icon.color: control.enabled && control.flat && control.highlighted ? control.palette.highlight + : control.enabled && (control.down || control.checked || control.highlighted) && !control.flat + ? control.palette.brightText : control.flat ? control.palette.windowText : control.palette.buttonText + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.enabled && control.flat && control.highlighted ? control.palette.highlight + : control.enabled && (control.down || control.checked || control.highlighted) && !control.flat + ? control.palette.brightText : control.flat ? control.palette.windowText : control.palette.buttonText + } + + background: NinePatchImage { + // ### TODO: radius? + source: Imagine.url + "roundbutton-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"checkable": control.checkable}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"flat": control.flat}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/ScrollBar.qml b/src/quickcontrols2/imagine/ScrollBar.qml new file mode 100644 index 00000000..f512a0b7 --- /dev/null +++ b/src/quickcontrols2/imagine/ScrollBar.qml @@ -0,0 +1,119 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.ScrollBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + visible: control.policy !== T.ScrollBar.AlwaysOff + minimumSize: orientation == Qt.Horizontal ? height / width : width / height + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + contentItem: NinePatchImage { + width: control.availableWidth + height: control.availableHeight + + source: Imagine.url + "scrollbar-handle" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"interactive": control.interactive}, + {"pressed": control.pressed}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + opacity: 0.0 + } + + background: NinePatchImage { + source: Imagine.url + "scrollbar-background" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"interactive": control.interactive}, + {"pressed": control.pressed}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + opacity: 0.0 + } + + states: [ + State { + name: "active" + when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0) + } + ] + + transitions: [ + Transition { + to: "active" + NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 1.0 } + }, + Transition { + from: "active" + SequentialAnimation { + PropertyAction{ targets: [control.contentItem, control.background]; property: "opacity"; value: 1.0 } + PauseAnimation { duration: 3000 } + NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 0.0 } + } + } + ] +} diff --git a/src/quickcontrols2/imagine/ScrollIndicator.qml b/src/quickcontrols2/imagine/ScrollIndicator.qml new file mode 100644 index 00000000..316b749c --- /dev/null +++ b/src/quickcontrols2/imagine/ScrollIndicator.qml @@ -0,0 +1,111 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.ScrollIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + contentItem: NinePatchImage { + width: control.availableWidth + height: control.availableHeight + + source: Imagine.url + "scrollindicator-handle" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + opacity: 0.0 + } + + background: NinePatchImage { + source: Imagine.url + "scrollindicator-background" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + opacity: 0.0 + } + + states: [ + State { + name: "active" + when: (control.active && control.size < 1.0) + } + ] + + transitions: [ + Transition { + to: "active" + NumberAnimation { targets: [contentItem, control.background]; property: "opacity"; to: 1.0 } + }, + Transition { + from: "active" + SequentialAnimation { + PauseAnimation { duration: 5000 } + NumberAnimation { targets: [contentItem, control.background]; property: "opacity"; to: 0.0 } + } + } + ] +} diff --git a/src/quickcontrols2/imagine/ScrollView.qml b/src/quickcontrols2/imagine/ScrollView.qml new file mode 100644 index 00000000..80427e9d --- /dev/null +++ b/src/quickcontrols2/imagine/ScrollView.qml @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.ScrollView { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + T.ScrollBar.vertical: ScrollBar { + parent: control + x: control.mirrored ? 0 : control.width - width + y: control.topPadding + height: control.availableHeight + active: control.T.ScrollBar.horizontal.active + } + + T.ScrollBar.horizontal: ScrollBar { + parent: control + x: control.leftPadding + y: control.height - height + width: control.availableWidth + active: control.T.ScrollBar.vertical.active + } + + background: NinePatchImage { + source: Imagine.path + "scrollview-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/Slider.qml b/src/quickcontrols2/imagine/Slider.qml new file mode 100644 index 00000000..597e222a --- /dev/null +++ b/src/quickcontrols2/imagine/Slider.qml @@ -0,0 +1,120 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.Slider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitHandleWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitHandleHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + handle: Image { + x: Math.round(control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)) + y: Math.round(control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height))) + + source: Imagine.url + "slider-handle" + ImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"pressed": control.pressed}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + + background: NinePatchImage { + scale: control.horizontal && control.mirrored ? -1 : 1 + + source: Imagine.url + "slider-background" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + + NinePatchImage { + x: control.horizontal ? 0 : (parent.width - width) / 2 + y: control.horizontal + ? (parent.height - height) / 2 + : control.handle.height / 2 + control.visualPosition * (parent.height - control.handle.height) + width: control.horizontal + ? control.handle.width / 2 + control.position * (parent.width - control.handle.width) + : parent.width + height: control.vertical + ? control.handle.height / 2 + control.position * (parent.height - control.handle.height) + : parent.height + + source: Imagine.url + "slider-progress" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + } +} diff --git a/src/quickcontrols2/imagine/SpinBox.qml b/src/quickcontrols2/imagine/SpinBox.qml new file mode 100644 index 00000000..6d1bdaba --- /dev/null +++ b/src/quickcontrols2/imagine/SpinBox.qml @@ -0,0 +1,152 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.SpinBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentItem.implicitWidth + 2 * padding + + up.implicitIndicatorWidth + + down.implicitIndicatorWidth) + implicitHeight: Math.max(implicitContentHeight + topPadding + bottomPadding, + implicitBackgroundHeight, + up.implicitIndicatorHeight, + down.implicitIndicatorHeight) + + topPadding: background ? background.topPadding : 0 + leftPadding: (background ? background.leftPadding : 0) + (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0)) + rightPadding: (background ? background.rightPadding : 0) + (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0)) + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + validator: IntValidator { + locale: control.locale.name + bottom: Math.min(control.from, control.to) + top: Math.max(control.from, control.to) + } + + contentItem: TextInput { + z: 2 + text: control.displayText + opacity: control.enabled ? 1 : 0.3 + + font: control.font + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + horizontalAlignment: Qt.AlignHCenter + verticalAlignment: Qt.AlignVCenter + + readOnly: !control.editable + validator: control.validator + inputMethodHints: control.inputMethodHints + + NinePatchImage { + z: -1 + width: control.width + height: control.height + visible: control.editable + + source: Imagine.url + "spinbox-editor" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"focused": control.activeFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } + } + + up.indicator: NinePatchImage { + x: control.mirrored ? 0 : parent.width - width + height: parent.height + + source: Imagine.url + "spinbox-indicator" + NinePatchImageSelector on source { + states: [ + {"up": true}, + {"disabled": !control.up.indicator.enabled}, + {"editable": control.editable}, + {"pressed": control.up.pressed}, + {"focused": control.activeFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.up.hovered} + ] + } + } + + down.indicator: NinePatchImage { + x: control.mirrored ? parent.width - width : 0 + height: parent.height + + source: Imagine.url + "spinbox-indicator" + NinePatchImageSelector on source { + states: [ + {"down": true}, + {"disabled": !control.down.indicator.enabled}, + {"editable": control.editable}, + {"pressed": control.down.pressed}, + {"focused": control.activeFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.down.hovered} + ] + } + } + + background: NinePatchImage { + source: Imagine.url + "spinbox-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"editable": control.editable}, + {"focused": control.activeFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/SplitView.qml b/src/quickcontrols2/imagine/SplitView.qml new file mode 100644 index 00000000..36e1b213 --- /dev/null +++ b/src/quickcontrols2/imagine/SplitView.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.SplitView { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + handle: NinePatchImage { + source: Imagine.url + "splitview-handle" + NinePatchImageSelector on source { + states: [ + {"vertical": control.orientation === Qt.Vertical}, + {"horizontal":control.orientation === Qt.Horizontal}, + {"disabled": !control.enabled}, + {"pressed": T.SplitHandle.pressed}, + {"mirrored": control.mirrored}, + {"hovered": T.SplitHandle.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/StackView.qml b/src/quickcontrols2/imagine/StackView.qml new file mode 100644 index 00000000..a9ddac66 --- /dev/null +++ b/src/quickcontrols2/imagine/StackView.qml @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.StackView { + id: control + + implicitWidth: implicitBackgroundWidth + implicitHeight: implicitBackgroundHeight + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + popEnter: Transition { + XAnimator { from: (control.mirrored ? -1 : 1) * -control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } + } + + popExit: Transition { + XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * control.width; duration: 400; easing.type: Easing.OutCubic } + } + + pushEnter: Transition { + XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } + } + + pushExit: Transition { + XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 400; easing.type: Easing.OutCubic } + } + + replaceEnter: Transition { + XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } + } + + replaceExit: Transition { + XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 400; easing.type: Easing.OutCubic } + } + + background: NinePatchImage { + source: Imagine.url + "stackview-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/SwipeDelegate.qml b/src/quickcontrols2/imagine/SwipeDelegate.qml new file mode 100644 index 00000000..5e13fc6b --- /dev/null +++ b/src/quickcontrols2/imagine/SwipeDelegate.qml @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.SwipeDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 12 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.text + + swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } } + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.text + } + + background: NinePatchImage { + source: Imagine.url + "swipedelegate-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/SwipeView.qml b/src/quickcontrols2/imagine/SwipeView.qml new file mode 100644 index 00000000..12cafbb8 --- /dev/null +++ b/src/quickcontrols2/imagine/SwipeView.qml @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.SwipeView { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + contentItem: ListView { + model: control.contentModel + interactive: control.interactive + currentIndex: control.currentIndex + focus: control.focus + + spacing: control.spacing + orientation: control.orientation + snapMode: ListView.SnapOneItem + boundsBehavior: Flickable.StopAtBounds + + highlightRangeMode: ListView.StrictlyEnforceRange + preferredHighlightBegin: 0 + preferredHighlightEnd: 0 + highlightMoveDuration: 250 + } + + background: NinePatchImage { + source: Imagine.url + "swipeview-background" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"interactive": control.interactive}, + {"focused": control.contentItem.activeFocus}, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/Switch.qml b/src/quickcontrols2/imagine/Switch.qml new file mode 100644 index 00000000..a2f7a9a7 --- /dev/null +++ b/src/quickcontrols2/imagine/Switch.qml @@ -0,0 +1,134 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.Switch { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 6 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + indicator: NinePatchImage { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + width: Math.max(implicitWidth, handle.leftPadding && handle.rightPadding ? handle.implicitWidth : 2 * handle.implicitWidth) + height: Math.max(implicitHeight, handle.implicitHeight) + + source: Imagine.url + "switch-indicator" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + + property NinePatchImage handle: NinePatchImage { + readonly property real minPos: parent.leftPadding - leftPadding + readonly property real maxPos: parent.width - width + rightPadding - parent.rightPadding + readonly property real dragPos: control.visualPosition * parent.width - (width / 2) + + parent: control.indicator + + x: Math.max(minPos, Math.min(maxPos, control.visualPosition * parent.width - (width / 2))) + y: (parent.height - height) / 2 + + source: Imagine.url + "switch-handle" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + + Behavior on x { + enabled: !control.down + SmoothedAnimation { velocity: 200 } + } + } + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.palette.windowText + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + + background: NinePatchImage { + source: Imagine.url + "switch-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/SwitchDelegate.qml b/src/quickcontrols2/imagine/SwitchDelegate.qml new file mode 100644 index 00000000..6fde82c1 --- /dev/null +++ b/src/quickcontrols2/imagine/SwitchDelegate.qml @@ -0,0 +1,146 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.SwitchDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 12 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.text + + indicator: NinePatchImage { + x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + width: Math.max(implicitWidth, handle.leftPadding && handle.rightPadding ? handle.implicitWidth : 2 * handle.implicitWidth) + height: Math.max(implicitHeight, handle.implicitHeight) + + source: Imagine.url + "switchdelegate-indicator" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + + property NinePatchImage handle: NinePatchImage { + readonly property real minPos: parent.leftPadding - leftPadding + readonly property real maxPos: parent.width - width + rightPadding - parent.rightPadding + readonly property real dragPos: control.visualPosition * parent.width - (width / 2) + + parent: control.indicator + + x: Math.max(minPos, Math.min(maxPos, control.visualPosition * parent.width - (width / 2))) + y: (parent.height - height) / 2 + + source: Imagine.url + "switchdelegate-handle" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + + Behavior on x { + enabled: !control.down + SmoothedAnimation { velocity: 200 } + } + } + } + + contentItem: IconLabel { + leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0 + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.palette.text + } + + background: NinePatchImage { + source: Imagine.url + "switchdelegate-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/TabBar.qml b/src/quickcontrols2/imagine/TabBar.qml new file mode 100644 index 00000000..26c30e92 --- /dev/null +++ b/src/quickcontrols2/imagine/TabBar.qml @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.TabBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + contentItem: ListView { + model: control.contentModel + currentIndex: control.currentIndex + + spacing: control.spacing + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + flickableDirection: Flickable.AutoFlickIfNeeded + snapMode: ListView.SnapToItem + + highlightMoveDuration: 0 + highlightRangeMode: ListView.ApplyRange + preferredHighlightBegin: 48 + preferredHighlightEnd: width - 48 + } + + background: NinePatchImage { + source: Imagine.url + "tabbar-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"header": control.position === T.TabBar.Header }, + {"footer": control.position === T.TabBar.Footer }, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/TabButton.qml b/src/quickcontrols2/imagine/TabButton.qml new file mode 100644 index 00000000..023da2cb --- /dev/null +++ b/src/quickcontrols2/imagine/TabButton.qml @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.TabButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + spacing: 6 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.buttonText + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.palette.buttonText + } + + background: NinePatchImage { + source: Imagine.url + "tabbutton-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/TextArea.qml b/src/quickcontrols2/imagine/TextArea.qml new file mode 100644 index 00000000..a4597593 --- /dev/null +++ b/src/quickcontrols2/imagine/TextArea.qml @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.TextArea { + id: control + + implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, + implicitBackgroundWidth + leftInset + rightInset, + placeholder.implicitWidth + leftPadding + rightPadding) + implicitHeight: Math.max(contentHeight + topPadding + bottomPadding, + implicitBackgroundHeight + topInset + bottomInset, + placeholder.implicitHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + verticalAlignment: Qt.AlignVCenter + placeholderTextColor: Color.transparent(control.color, 0.5) + + PlaceholderText { + id: placeholder + x: control.leftPadding + y: control.topPadding + width: control.width - (control.leftPadding + control.rightPadding) + height: control.height - (control.topPadding + control.bottomPadding) + + text: control.placeholderText + font: control.font + color: control.placeholderTextColor + verticalAlignment: control.verticalAlignment + visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) + elide: Text.ElideRight + renderType: control.renderType + } + + background: NinePatchImage { + source: Imagine.url + "textarea-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"focused": control.activeFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/TextField.qml b/src/quickcontrols2/imagine/TextField.qml new file mode 100644 index 00000000..15e73aa5 --- /dev/null +++ b/src/quickcontrols2/imagine/TextField.qml @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.TextField { + id: control + + implicitWidth: implicitBackgroundWidth + leftInset + rightInset + || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding, + placeholder.implicitHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + placeholderTextColor: Color.transparent(control.color, 0.5) + verticalAlignment: Qt.AlignVCenter + + PlaceholderText { + id: placeholder + x: control.leftPadding + y: control.topPadding + width: control.width - (control.leftPadding + control.rightPadding) + height: control.height - (control.topPadding + control.bottomPadding) + + text: control.placeholderText + font: control.font + color: control.placeholderTextColor + verticalAlignment: control.verticalAlignment + visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) + elide: Text.ElideRight + renderType: control.renderType + } + + background: NinePatchImage { + source: Imagine.url + "textfield-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"focused": control.activeFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/ToolBar.qml b/src/quickcontrols2/imagine/ToolBar.qml new file mode 100644 index 00000000..4a343e3c --- /dev/null +++ b/src/quickcontrols2/imagine/ToolBar.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.ToolBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + background: NinePatchImage { + source: Imagine.url + "toolbar-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"header": control.position === T.ToolBar.Header }, + {"footer": control.position === T.ToolBar.Footer }, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/ToolButton.qml b/src/quickcontrols2/imagine/ToolButton.qml new file mode 100644 index 00000000..1ef570e0 --- /dev/null +++ b/src/quickcontrols2/imagine/ToolButton.qml @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.ToolButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + spacing: 6 // ### + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + icon.width: 24 + icon.height: 24 + icon.color: control.palette.buttonText + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.palette.buttonText + } + + background: NinePatchImage { + source: Imagine.url + "toolbutton-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"pressed": control.down}, + {"checked": control.checked}, + {"checkable": control.checkable}, + {"focused": control.visualFocus}, + {"highlighted": control.highlighted}, + {"flat": control.flat}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/ToolSeparator.qml b/src/quickcontrols2/imagine/ToolSeparator.qml new file mode 100644 index 00000000..962c14c7 --- /dev/null +++ b/src/quickcontrols2/imagine/ToolSeparator.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.ToolSeparator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + contentItem: NinePatchImage { + source: Imagine.url + "toolseparator-separator" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } + + background: NinePatchImage { + source: Imagine.url + "toolseparator-background" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"mirrored": control.mirrored} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/ToolTip.qml b/src/quickcontrols2/imagine/ToolTip.qml new file mode 100644 index 00000000..f5261400 --- /dev/null +++ b/src/quickcontrols2/imagine/ToolTip.qml @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.ToolTip { + id: control + + x: parent ? (parent.width - implicitWidth) / 2 : 0 - (background ? background.leftInset : 0) + y: -implicitHeight - (background ? background.topInset : 0) + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topMargin: background ? background.topInset : 0 + leftMargin: background ? background.leftInset : 0 + rightMargin: background ? background.rightInset : 0 + bottomMargin: background ? background.bottomInset : 0 + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent + + contentItem: Text { + text: control.text + font: control.font + wrapMode: Text.Wrap + color: control.palette.toolTipText + } + + background: NinePatchImage { + source: Imagine.url + "tooltip-background" + NinePatchImageSelector on source { + states: [ + // ### + ] + } + } +} diff --git a/src/quickcontrols2/imagine/Tumbler.qml b/src/quickcontrols2/imagine/Tumbler.qml new file mode 100644 index 00000000..f380a000 --- /dev/null +++ b/src/quickcontrols2/imagine/Tumbler.qml @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.Tumbler { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + delegate: Text { + text: modelData + font: control.font + color: control.palette.text + opacity: (1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)) * (control.enabled ? 1 : 0.6) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + contentItem: TumblerView { + implicitWidth: 60 + implicitHeight: 200 + model: control.model + delegate: control.delegate + path: Path { + startX: control.contentItem.width / 2 + startY: -control.contentItem.delegateHeight / 2 + PathLine { + x: control.contentItem.width / 2 + y: (control.visibleItemCount + 1) * control.contentItem.delegateHeight - control.contentItem.delegateHeight / 2 + } + } + + property real delegateHeight: control.availableHeight / control.visibleItemCount + } + + background: NinePatchImage { + source: Imagine.url + "tumbler-background" + NinePatchImageSelector on source { + states: [ + {"disabled": !control.enabled}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.hovered} + ] + } + } +} diff --git a/src/quickcontrols2/imagine/VerticalHeaderView.qml b/src/quickcontrols2/imagine/VerticalHeaderView.qml new file mode 100644 index 00000000..7c057e01 --- /dev/null +++ b/src/quickcontrols2/imagine/VerticalHeaderView.qml @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T + +T.VerticalHeaderView { + id: control + + implicitWidth: contentWidth + implicitHeight: syncView ? syncView.height : 0 + + delegate: Rectangle { + // Qt6: add cellPadding (and font etc) as public API in headerview + readonly property real cellPadding: 8 + + implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2)) + implicitHeight: text.implicitHeight + (cellPadding * 2) + color: "#f6f6f6" + border.color: "#e4e4e4" + + Text { + id: text + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] + : model[control.textRole]) + : modelData + width: parent.width + height: parent.height + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: "#ff26282a" + } + } +} diff --git a/src/quickcontrols2/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/9-patch-export.js b/src/quickcontrols2/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/9-patch-export.js new file mode 100644 index 00000000..a7f9a459 --- /dev/null +++ b/src/quickcontrols2/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/9-patch-export.js @@ -0,0 +1,24 @@ +// 9-patch export +// +// This plugin crops upscaled 9-patch PNG assets when exported from Sketch, +// to ensure that 9-patch borders remain 1px wide when upscaled. +// +function onExportSlices(context) { + var exports = context.actionContext.exports; + for (var i = 0; i < exports.count(); ++i) { + var name = exports[i].request.name(); + var scale = exports[i].request.scale(); + if (scale > 1 && name.endsWith(".9")) + cropAsset(exports[i].path, scale - 1); + } +} + +function cropAsset(path, inset) { + var url = NSURL.fileURLWithPath(path); + var img = CIImage.imageWithContentsOfURL(url); + var rect = NSInsetRect(img.extent(), inset, inset); + var cropped = img.imageByCroppingToRect(rect); + var rep = NSBitmapImageRep.alloc().initWithCIImage(cropped); + var data = rep.PNGRepresentationWithInterlaced(false); + data.writeToFile(path); +} diff --git a/src/quickcontrols2/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/manifest.json b/src/quickcontrols2/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/manifest.json new file mode 100644 index 00000000..40807aa3 --- /dev/null +++ b/src/quickcontrols2/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/manifest.json @@ -0,0 +1,19 @@ +{ + "name" : "9-patch export", + "description" : "Crops upscaled 9-patch PNG assets when exported from Sketch.", + "version" : "0.1", + "identifier" : "org.qt-project.sketch.9-patch-export", + "author" : "The Qt Project", + "commands" : [ + { + "name" : "9-patch export", + "identifier" : "9-patch-export", + "script" : "9-patch-export.js", + "handlers" : { + "actions" : { + "ExportSlices": "onExportSlices", + }, + }, + }, + ], +} diff --git a/src/quickcontrols2/imagine/design/imagine.sketch b/src/quickcontrols2/imagine/design/imagine.sketch new file mode 100644 index 00000000..f3535b37 Binary files /dev/null and b/src/quickcontrols2/imagine/design/imagine.sketch differ diff --git a/src/quickcontrols2/imagine/images/applicationwindow-background.png b/src/quickcontrols2/imagine/images/applicationwindow-background.png new file mode 100644 index 00000000..2d8d70f2 Binary files /dev/null and b/src/quickcontrols2/imagine/images/applicationwindow-background.png differ diff --git a/src/quickcontrols2/imagine/images/applicationwindow-background@2x.png b/src/quickcontrols2/imagine/images/applicationwindow-background@2x.png new file mode 100644 index 00000000..18fbaa4c Binary files /dev/null and b/src/quickcontrols2/imagine/images/applicationwindow-background@2x.png differ diff --git a/src/quickcontrols2/imagine/images/applicationwindow-background@3x.png b/src/quickcontrols2/imagine/images/applicationwindow-background@3x.png new file mode 100644 index 00000000..241232b1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/applicationwindow-background@3x.png differ diff --git a/src/quickcontrols2/imagine/images/applicationwindow-background@4x.png b/src/quickcontrols2/imagine/images/applicationwindow-background@4x.png new file mode 100644 index 00000000..8eb1b1ec Binary files /dev/null and b/src/quickcontrols2/imagine/images/applicationwindow-background@4x.png differ diff --git a/src/quickcontrols2/imagine/images/applicationwindow-overlay-modal.png b/src/quickcontrols2/imagine/images/applicationwindow-overlay-modal.png new file mode 100644 index 00000000..d4a43d1c Binary files /dev/null and b/src/quickcontrols2/imagine/images/applicationwindow-overlay-modal.png differ diff --git a/src/quickcontrols2/imagine/images/applicationwindow-overlay-modal@2x.png b/src/quickcontrols2/imagine/images/applicationwindow-overlay-modal@2x.png new file mode 100644 index 00000000..c9a8f412 Binary files /dev/null and b/src/quickcontrols2/imagine/images/applicationwindow-overlay-modal@2x.png differ diff --git a/src/quickcontrols2/imagine/images/applicationwindow-overlay-modal@3x.png b/src/quickcontrols2/imagine/images/applicationwindow-overlay-modal@3x.png new file mode 100644 index 00000000..4a1084a9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/applicationwindow-overlay-modal@3x.png differ diff --git a/src/quickcontrols2/imagine/images/applicationwindow-overlay-modal@4x.png b/src/quickcontrols2/imagine/images/applicationwindow-overlay-modal@4x.png new file mode 100644 index 00000000..b92e600d Binary files /dev/null and b/src/quickcontrols2/imagine/images/applicationwindow-overlay-modal@4x.png differ diff --git a/src/quickcontrols2/imagine/images/applicationwindow-overlay.png b/src/quickcontrols2/imagine/images/applicationwindow-overlay.png new file mode 100644 index 00000000..b7da23c0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/applicationwindow-overlay.png differ diff --git a/src/quickcontrols2/imagine/images/applicationwindow-overlay@2x.png b/src/quickcontrols2/imagine/images/applicationwindow-overlay@2x.png new file mode 100644 index 00000000..23828d5a Binary files /dev/null and b/src/quickcontrols2/imagine/images/applicationwindow-overlay@2x.png differ diff --git a/src/quickcontrols2/imagine/images/applicationwindow-overlay@3x.png b/src/quickcontrols2/imagine/images/applicationwindow-overlay@3x.png new file mode 100644 index 00000000..d9d53828 Binary files /dev/null and b/src/quickcontrols2/imagine/images/applicationwindow-overlay@3x.png differ diff --git a/src/quickcontrols2/imagine/images/applicationwindow-overlay@4x.png b/src/quickcontrols2/imagine/images/applicationwindow-overlay@4x.png new file mode 100644 index 00000000..a76c1a3a Binary files /dev/null and b/src/quickcontrols2/imagine/images/applicationwindow-overlay@4x.png differ diff --git a/src/quickcontrols2/imagine/images/busyindicator-animation.webp b/src/quickcontrols2/imagine/images/busyindicator-animation.webp new file mode 100644 index 00000000..ebf04c4a Binary files /dev/null and b/src/quickcontrols2/imagine/images/busyindicator-animation.webp differ diff --git a/src/quickcontrols2/imagine/images/busyindicator-animation@2x.webp b/src/quickcontrols2/imagine/images/busyindicator-animation@2x.webp new file mode 100644 index 00000000..43805a0b Binary files /dev/null and b/src/quickcontrols2/imagine/images/busyindicator-animation@2x.webp differ diff --git a/src/quickcontrols2/imagine/images/busyindicator-animation@3x.webp b/src/quickcontrols2/imagine/images/busyindicator-animation@3x.webp new file mode 100644 index 00000000..b700b81f Binary files /dev/null and b/src/quickcontrols2/imagine/images/busyindicator-animation@3x.webp differ diff --git a/src/quickcontrols2/imagine/images/busyindicator-animation@4x.webp b/src/quickcontrols2/imagine/images/busyindicator-animation@4x.webp new file mode 100644 index 00000000..bfaa8df9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/busyindicator-animation@4x.webp differ diff --git a/src/quickcontrols2/imagine/images/button-background-checked-disabled.9.png b/src/quickcontrols2/imagine/images/button-background-checked-disabled.9.png new file mode 100644 index 00000000..8196289c Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-checked-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-checked-disabled@2x.9.png b/src/quickcontrols2/imagine/images/button-background-checked-disabled@2x.9.png new file mode 100644 index 00000000..76cd4490 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-checked-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-checked-disabled@3x.9.png b/src/quickcontrols2/imagine/images/button-background-checked-disabled@3x.9.png new file mode 100644 index 00000000..8bd6259a Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-checked-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-checked-disabled@4x.9.png b/src/quickcontrols2/imagine/images/button-background-checked-disabled@4x.9.png new file mode 100644 index 00000000..3e081520 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-checked-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-checked-focused.9.png b/src/quickcontrols2/imagine/images/button-background-checked-focused.9.png new file mode 100644 index 00000000..e3d14e99 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-checked-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-checked-focused@2x.9.png b/src/quickcontrols2/imagine/images/button-background-checked-focused@2x.9.png new file mode 100644 index 00000000..ebc74b4a Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-checked-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-checked-focused@3x.9.png b/src/quickcontrols2/imagine/images/button-background-checked-focused@3x.9.png new file mode 100644 index 00000000..75834723 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-checked-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-checked-focused@4x.9.png b/src/quickcontrols2/imagine/images/button-background-checked-focused@4x.9.png new file mode 100644 index 00000000..9b570f4d Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-checked-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-checked-hovered.9.png b/src/quickcontrols2/imagine/images/button-background-checked-hovered.9.png new file mode 100644 index 00000000..e3d14e99 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-checked-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-checked-hovered@2x.9.png b/src/quickcontrols2/imagine/images/button-background-checked-hovered@2x.9.png new file mode 100644 index 00000000..ebc74b4a Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-checked-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-checked-hovered@3x.9.png b/src/quickcontrols2/imagine/images/button-background-checked-hovered@3x.9.png new file mode 100644 index 00000000..75834723 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-checked-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-checked-hovered@4x.9.png b/src/quickcontrols2/imagine/images/button-background-checked-hovered@4x.9.png new file mode 100644 index 00000000..9b570f4d Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-checked-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-checked.9.png b/src/quickcontrols2/imagine/images/button-background-checked.9.png new file mode 100644 index 00000000..d0942509 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-checked.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-checked@2x.9.png b/src/quickcontrols2/imagine/images/button-background-checked@2x.9.png new file mode 100644 index 00000000..c38bcd02 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-checked@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-checked@3x.9.png b/src/quickcontrols2/imagine/images/button-background-checked@3x.9.png new file mode 100644 index 00000000..80889bf8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-checked@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-checked@4x.9.png b/src/quickcontrols2/imagine/images/button-background-checked@4x.9.png new file mode 100644 index 00000000..05de8377 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-checked@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-disabled.9.png b/src/quickcontrols2/imagine/images/button-background-disabled.9.png new file mode 100644 index 00000000..8196289c Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-disabled@2x.9.png b/src/quickcontrols2/imagine/images/button-background-disabled@2x.9.png new file mode 100644 index 00000000..76cd4490 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-disabled@3x.9.png b/src/quickcontrols2/imagine/images/button-background-disabled@3x.9.png new file mode 100644 index 00000000..8bd6259a Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-disabled@4x.9.png b/src/quickcontrols2/imagine/images/button-background-disabled@4x.9.png new file mode 100644 index 00000000..3e081520 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-checked-pressed.9.png b/src/quickcontrols2/imagine/images/button-background-flat-checked-pressed.9.png new file mode 100644 index 00000000..8196289c Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-checked-pressed.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-checked-pressed@2x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-checked-pressed@2x.9.png new file mode 100644 index 00000000..76cd4490 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-checked-pressed@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-checked-pressed@3x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-checked-pressed@3x.9.png new file mode 100644 index 00000000..8bd6259a Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-checked-pressed@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-checked-pressed@4x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-checked-pressed@4x.9.png new file mode 100644 index 00000000..3e081520 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-checked-pressed@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-checked.9.png b/src/quickcontrols2/imagine/images/button-background-flat-checked.9.png new file mode 100644 index 00000000..8196289c Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-checked.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-checked@2x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-checked@2x.9.png new file mode 100644 index 00000000..76cd4490 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-checked@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-checked@3x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-checked@3x.9.png new file mode 100644 index 00000000..8bd6259a Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-checked@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-checked@4x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-checked@4x.9.png new file mode 100644 index 00000000..3e081520 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-checked@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-disabled.9.png b/src/quickcontrols2/imagine/images/button-background-flat-disabled.9.png new file mode 100644 index 00000000..59907409 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-disabled@2x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-disabled@2x.9.png new file mode 100644 index 00000000..d66acd9c Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-disabled@3x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-disabled@3x.9.png new file mode 100644 index 00000000..89b8c353 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-disabled@4x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-disabled@4x.9.png new file mode 100644 index 00000000..d3a675cf Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-highlighted-checked.9.png b/src/quickcontrols2/imagine/images/button-background-flat-highlighted-checked.9.png new file mode 100644 index 00000000..8196289c Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-highlighted-checked.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-highlighted-checked@2x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-highlighted-checked@2x.9.png new file mode 100644 index 00000000..76cd4490 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-highlighted-checked@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-highlighted-checked@3x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-highlighted-checked@3x.9.png new file mode 100644 index 00000000..8bd6259a Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-highlighted-checked@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-highlighted-checked@4x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-highlighted-checked@4x.9.png new file mode 100644 index 00000000..3e081520 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-highlighted-checked@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-highlighted-pressed.9.png b/src/quickcontrols2/imagine/images/button-background-flat-highlighted-pressed.9.png new file mode 100644 index 00000000..8196289c Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-highlighted-pressed.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-highlighted-pressed@2x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-highlighted-pressed@2x.9.png new file mode 100644 index 00000000..76cd4490 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-highlighted-pressed@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-highlighted-pressed@3x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-highlighted-pressed@3x.9.png new file mode 100644 index 00000000..8bd6259a Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-highlighted-pressed@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-highlighted-pressed@4x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-highlighted-pressed@4x.9.png new file mode 100644 index 00000000..3e081520 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-highlighted-pressed@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-highlighted.9.png b/src/quickcontrols2/imagine/images/button-background-flat-highlighted.9.png new file mode 100644 index 00000000..59907409 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-highlighted.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-highlighted@2x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-highlighted@2x.9.png new file mode 100644 index 00000000..d66acd9c Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-highlighted@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-highlighted@3x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-highlighted@3x.9.png new file mode 100644 index 00000000..89b8c353 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-highlighted@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-highlighted@4x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-highlighted@4x.9.png new file mode 100644 index 00000000..d3a675cf Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-highlighted@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-hovered.9.png b/src/quickcontrols2/imagine/images/button-background-flat-hovered.9.png new file mode 100644 index 00000000..8196289c Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-hovered@2x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-hovered@2x.9.png new file mode 100644 index 00000000..76cd4490 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-hovered@3x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-hovered@3x.9.png new file mode 100644 index 00000000..8bd6259a Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-hovered@4x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-hovered@4x.9.png new file mode 100644 index 00000000..3e081520 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-pressed.9.png b/src/quickcontrols2/imagine/images/button-background-flat-pressed.9.png new file mode 100644 index 00000000..8196289c Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-pressed.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-pressed@2x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-pressed@2x.9.png new file mode 100644 index 00000000..76cd4490 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-pressed@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-pressed@3x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-pressed@3x.9.png new file mode 100644 index 00000000..8bd6259a Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-pressed@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat-pressed@4x.9.png b/src/quickcontrols2/imagine/images/button-background-flat-pressed@4x.9.png new file mode 100644 index 00000000..3e081520 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat-pressed@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat.9.png b/src/quickcontrols2/imagine/images/button-background-flat.9.png new file mode 100644 index 00000000..59907409 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat@2x.9.png b/src/quickcontrols2/imagine/images/button-background-flat@2x.9.png new file mode 100644 index 00000000..d66acd9c Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat@3x.9.png b/src/quickcontrols2/imagine/images/button-background-flat@3x.9.png new file mode 100644 index 00000000..89b8c353 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-flat@4x.9.png b/src/quickcontrols2/imagine/images/button-background-flat@4x.9.png new file mode 100644 index 00000000..d3a675cf Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-flat@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-focused.9.png b/src/quickcontrols2/imagine/images/button-background-focused.9.png new file mode 100644 index 00000000..42e40e60 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-focused@2x.9.png b/src/quickcontrols2/imagine/images/button-background-focused@2x.9.png new file mode 100644 index 00000000..90dc70bf Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-focused@3x.9.png b/src/quickcontrols2/imagine/images/button-background-focused@3x.9.png new file mode 100644 index 00000000..2ed2340c Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-focused@4x.9.png b/src/quickcontrols2/imagine/images/button-background-focused@4x.9.png new file mode 100644 index 00000000..e1428e37 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted-checked.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted-checked.9.png new file mode 100644 index 00000000..7a2a4011 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted-checked.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted-checked@2x.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted-checked@2x.9.png new file mode 100644 index 00000000..05b2f214 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted-checked@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted-checked@3x.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted-checked@3x.9.png new file mode 100644 index 00000000..8c22e1f3 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted-checked@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted-checked@4x.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted-checked@4x.9.png new file mode 100644 index 00000000..c5617f0e Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted-checked@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted-disabled.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted-disabled.9.png new file mode 100644 index 00000000..8196289c Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted-disabled@2x.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted-disabled@2x.9.png new file mode 100644 index 00000000..76cd4490 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted-disabled@3x.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted-disabled@3x.9.png new file mode 100644 index 00000000..8bd6259a Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted-disabled@4x.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted-disabled@4x.9.png new file mode 100644 index 00000000..3e081520 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted-focused.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted-focused.9.png new file mode 100644 index 00000000..3ea580e0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted-focused@2x.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted-focused@2x.9.png new file mode 100644 index 00000000..effcce1f Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted-focused@3x.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted-focused@3x.9.png new file mode 100644 index 00000000..502ac689 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted-focused@4x.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted-focused@4x.9.png new file mode 100644 index 00000000..3243231e Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted-hovered.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted-hovered.9.png new file mode 100644 index 00000000..3ea580e0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted-hovered@2x.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted-hovered@2x.9.png new file mode 100644 index 00000000..effcce1f Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted-hovered@3x.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted-hovered@3x.9.png new file mode 100644 index 00000000..502ac689 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted-hovered@4x.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted-hovered@4x.9.png new file mode 100644 index 00000000..3243231e Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted-pressed.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted-pressed.9.png new file mode 100644 index 00000000..7a2a4011 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted-pressed.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted-pressed@2x.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted-pressed@2x.9.png new file mode 100644 index 00000000..05b2f214 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted-pressed@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted-pressed@3x.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted-pressed@3x.9.png new file mode 100644 index 00000000..8c22e1f3 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted-pressed@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted-pressed@4x.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted-pressed@4x.9.png new file mode 100644 index 00000000..c5617f0e Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted-pressed@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted.9.png new file mode 100644 index 00000000..7761595f Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted@2x.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted@2x.9.png new file mode 100644 index 00000000..8bb42c45 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted@3x.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted@3x.9.png new file mode 100644 index 00000000..8c23c021 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-highlighted@4x.9.png b/src/quickcontrols2/imagine/images/button-background-highlighted@4x.9.png new file mode 100644 index 00000000..365cd048 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-highlighted@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-hovered.9.png b/src/quickcontrols2/imagine/images/button-background-hovered.9.png new file mode 100644 index 00000000..42e40e60 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-hovered@2x.9.png b/src/quickcontrols2/imagine/images/button-background-hovered@2x.9.png new file mode 100644 index 00000000..90dc70bf Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-hovered@3x.9.png b/src/quickcontrols2/imagine/images/button-background-hovered@3x.9.png new file mode 100644 index 00000000..2ed2340c Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-hovered@4x.9.png b/src/quickcontrols2/imagine/images/button-background-hovered@4x.9.png new file mode 100644 index 00000000..e1428e37 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-pressed.9.png b/src/quickcontrols2/imagine/images/button-background-pressed.9.png new file mode 100644 index 00000000..d0942509 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-pressed.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-pressed@2x.9.png b/src/quickcontrols2/imagine/images/button-background-pressed@2x.9.png new file mode 100644 index 00000000..c38bcd02 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-pressed@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-pressed@3x.9.png b/src/quickcontrols2/imagine/images/button-background-pressed@3x.9.png new file mode 100644 index 00000000..80889bf8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-pressed@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background-pressed@4x.9.png b/src/quickcontrols2/imagine/images/button-background-pressed@4x.9.png new file mode 100644 index 00000000..05de8377 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background-pressed@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background.9.png b/src/quickcontrols2/imagine/images/button-background.9.png new file mode 100644 index 00000000..6f1daed8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background@2x.9.png b/src/quickcontrols2/imagine/images/button-background@2x.9.png new file mode 100644 index 00000000..4a2507f5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background@3x.9.png b/src/quickcontrols2/imagine/images/button-background@3x.9.png new file mode 100644 index 00000000..4f13b4ef Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/button-background@4x.9.png b/src/quickcontrols2/imagine/images/button-background@4x.9.png new file mode 100644 index 00000000..0e1ab452 Binary files /dev/null and b/src/quickcontrols2/imagine/images/button-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-checked-focused.png b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-focused.png new file mode 100644 index 00000000..d55a5204 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-focused.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-checked-focused@2x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-focused@2x.png new file mode 100644 index 00000000..7289f639 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-checked-focused@3x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-focused@3x.png new file mode 100644 index 00000000..02d6cdf2 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-checked-focused@4x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-focused@4x.png new file mode 100644 index 00000000..3f074dbf Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-checked-hovered.png b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-hovered.png new file mode 100644 index 00000000..d55a5204 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-checked-hovered@2x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-hovered@2x.png new file mode 100644 index 00000000..7289f639 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-checked-hovered@3x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-hovered@3x.png new file mode 100644 index 00000000..02d6cdf2 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-checked-hovered@4x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-hovered@4x.png new file mode 100644 index 00000000..3f074dbf Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-checked-pressed.png b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-pressed.png new file mode 100644 index 00000000..9c03d096 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-checked-pressed@2x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-pressed@2x.png new file mode 100644 index 00000000..680ba3ef Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-checked-pressed@3x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-pressed@3x.png new file mode 100644 index 00000000..974205de Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-checked-pressed@4x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-pressed@4x.png new file mode 100644 index 00000000..2c8b6aab Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-checked-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-checked.png b/src/quickcontrols2/imagine/images/checkbox-indicator-checked.png new file mode 100644 index 00000000..598b163a Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-checked.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-checked@2x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-checked@2x.png new file mode 100644 index 00000000..06382264 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-checked@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-checked@3x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-checked@3x.png new file mode 100644 index 00000000..12a32dcd Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-checked@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-checked@4x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-checked@4x.png new file mode 100644 index 00000000..4bc6701d Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-checked@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-disabled.png b/src/quickcontrols2/imagine/images/checkbox-indicator-disabled.png new file mode 100644 index 00000000..0a499f8f Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-disabled@2x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-disabled@2x.png new file mode 100644 index 00000000..db652c5a Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-disabled@3x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-disabled@3x.png new file mode 100644 index 00000000..482f045d Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-disabled@4x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-disabled@4x.png new file mode 100644 index 00000000..a386e272 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-focused.png b/src/quickcontrols2/imagine/images/checkbox-indicator-focused.png new file mode 100644 index 00000000..c5eb8527 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-focused.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-focused@2x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-focused@2x.png new file mode 100644 index 00000000..8496fb1a Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-focused@3x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-focused@3x.png new file mode 100644 index 00000000..30849fd0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-focused@4x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-focused@4x.png new file mode 100644 index 00000000..55ce7c0c Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-hovered.png b/src/quickcontrols2/imagine/images/checkbox-indicator-hovered.png new file mode 100644 index 00000000..c5eb8527 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-hovered@2x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-hovered@2x.png new file mode 100644 index 00000000..8496fb1a Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-hovered@3x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-hovered@3x.png new file mode 100644 index 00000000..30849fd0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-hovered@4x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-hovered@4x.png new file mode 100644 index 00000000..55ce7c0c Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-focused.png b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-focused.png new file mode 100644 index 00000000..cd07b1cc Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-focused.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-focused@2x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-focused@2x.png new file mode 100644 index 00000000..acae6aff Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-focused@3x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-focused@3x.png new file mode 100644 index 00000000..1e8d2c45 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-focused@4x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-focused@4x.png new file mode 100644 index 00000000..577017c4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-hovered.png b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-hovered.png new file mode 100644 index 00000000..cd07b1cc Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-hovered@2x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-hovered@2x.png new file mode 100644 index 00000000..acae6aff Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-hovered@3x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-hovered@3x.png new file mode 100644 index 00000000..1e8d2c45 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-hovered@4x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-hovered@4x.png new file mode 100644 index 00000000..577017c4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-pressed.png b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-pressed.png new file mode 100644 index 00000000..928706ab Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-pressed@2x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-pressed@2x.png new file mode 100644 index 00000000..3645d78a Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-pressed@3x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-pressed@3x.png new file mode 100644 index 00000000..ade63bd0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-pressed@4x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-pressed@4x.png new file mode 100644 index 00000000..cd73617e Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked.png b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked.png new file mode 100644 index 00000000..e404a4e3 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked@2x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked@2x.png new file mode 100644 index 00000000..2d0f5176 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked@3x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked@3x.png new file mode 100644 index 00000000..4b9777b7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked@4x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked@4x.png new file mode 100644 index 00000000..e0f67e98 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-partially-checked@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-pressed.png b/src/quickcontrols2/imagine/images/checkbox-indicator-pressed.png new file mode 100644 index 00000000..a1baaf90 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-pressed@2x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-pressed@2x.png new file mode 100644 index 00000000..81a7c364 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-pressed@3x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-pressed@3x.png new file mode 100644 index 00000000..9325de38 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator-pressed@4x.png b/src/quickcontrols2/imagine/images/checkbox-indicator-pressed@4x.png new file mode 100644 index 00000000..c93b8fb8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator.png b/src/quickcontrols2/imagine/images/checkbox-indicator.png new file mode 100644 index 00000000..2b3e2323 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator@2x.png b/src/quickcontrols2/imagine/images/checkbox-indicator@2x.png new file mode 100644 index 00000000..ce8985db Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator@3x.png b/src/quickcontrols2/imagine/images/checkbox-indicator@3x.png new file mode 100644 index 00000000..2968731d Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkbox-indicator@4x.png b/src/quickcontrols2/imagine/images/checkbox-indicator@4x.png new file mode 100644 index 00000000..ea8da284 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkbox-indicator@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background-disabled.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background-disabled.9.png new file mode 100644 index 00000000..23570729 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background-disabled@2x.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background-disabled@2x.9.png new file mode 100644 index 00000000..c7abb65c Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background-disabled@3x.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background-disabled@3x.9.png new file mode 100644 index 00000000..46b84d7d Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background-disabled@4x.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background-disabled@4x.9.png new file mode 100644 index 00000000..f4dfd338 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background-focused.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background-focused.9.png new file mode 100644 index 00000000..6ae574d5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background-focused@2x.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background-focused@2x.9.png new file mode 100644 index 00000000..6b61562c Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background-focused@3x.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background-focused@3x.9.png new file mode 100644 index 00000000..e46c0bf1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background-focused@4x.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background-focused@4x.9.png new file mode 100644 index 00000000..010444e8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background-highlighted.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background-highlighted.9.png new file mode 100644 index 00000000..e79d8e1d Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background-highlighted.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background-highlighted@2x.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background-highlighted@2x.9.png new file mode 100644 index 00000000..ea68d35f Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background-highlighted@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background-highlighted@3x.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background-highlighted@3x.9.png new file mode 100644 index 00000000..6d610415 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background-highlighted@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background-highlighted@4x.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background-highlighted@4x.9.png new file mode 100644 index 00000000..590cca96 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background-highlighted@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background-hovered.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background-hovered.9.png new file mode 100644 index 00000000..b8749743 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background-hovered@2x.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background-hovered@2x.9.png new file mode 100644 index 00000000..5a136a0c Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background-hovered@3x.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background-hovered@3x.9.png new file mode 100644 index 00000000..f47a366b Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background-hovered@4x.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background-hovered@4x.9.png new file mode 100644 index 00000000..9ecb680f Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background-pressed.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background-pressed.9.png new file mode 100644 index 00000000..6ae574d5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background-pressed.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background-pressed@2x.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background-pressed@2x.9.png new file mode 100644 index 00000000..6b61562c Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background-pressed@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background-pressed@3x.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background-pressed@3x.9.png new file mode 100644 index 00000000..e46c0bf1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background-pressed@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background-pressed@4x.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background-pressed@4x.9.png new file mode 100644 index 00000000..010444e8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background-pressed@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background.9.png new file mode 100644 index 00000000..b8749743 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background@2x.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background@2x.9.png new file mode 100644 index 00000000..5a136a0c Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background@3x.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background@3x.9.png new file mode 100644 index 00000000..f47a366b Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-background@4x.9.png b/src/quickcontrols2/imagine/images/checkdelegate-background@4x.9.png new file mode 100644 index 00000000..9ecb680f Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-focused.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-focused.png new file mode 100644 index 00000000..d55a5204 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-focused.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-focused@2x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-focused@2x.png new file mode 100644 index 00000000..7289f639 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-focused@3x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-focused@3x.png new file mode 100644 index 00000000..02d6cdf2 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-focused@4x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-focused@4x.png new file mode 100644 index 00000000..3f074dbf Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-hovered.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-hovered.png new file mode 100644 index 00000000..d55a5204 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-hovered@2x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-hovered@2x.png new file mode 100644 index 00000000..7289f639 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-hovered@3x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-hovered@3x.png new file mode 100644 index 00000000..02d6cdf2 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-hovered@4x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-hovered@4x.png new file mode 100644 index 00000000..3f074dbf Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-pressed.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-pressed.png new file mode 100644 index 00000000..9c03d096 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-pressed@2x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-pressed@2x.png new file mode 100644 index 00000000..680ba3ef Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-pressed@3x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-pressed@3x.png new file mode 100644 index 00000000..974205de Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-pressed@4x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-pressed@4x.png new file mode 100644 index 00000000..2c8b6aab Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked.png new file mode 100644 index 00000000..598b163a Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked@2x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked@2x.png new file mode 100644 index 00000000..06382264 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked@3x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked@3x.png new file mode 100644 index 00000000..12a32dcd Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked@4x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked@4x.png new file mode 100644 index 00000000..4bc6701d Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-checked@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-disabled.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-disabled.png new file mode 100644 index 00000000..0a499f8f Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-disabled@2x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-disabled@2x.png new file mode 100644 index 00000000..db652c5a Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-disabled@3x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-disabled@3x.png new file mode 100644 index 00000000..482f045d Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-disabled@4x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-disabled@4x.png new file mode 100644 index 00000000..a386e272 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-focused.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-focused.png new file mode 100644 index 00000000..c5eb8527 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-focused.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-focused@2x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-focused@2x.png new file mode 100644 index 00000000..8496fb1a Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-focused@3x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-focused@3x.png new file mode 100644 index 00000000..30849fd0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-focused@4x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-focused@4x.png new file mode 100644 index 00000000..55ce7c0c Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-hovered.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-hovered.png new file mode 100644 index 00000000..c5eb8527 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-hovered@2x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-hovered@2x.png new file mode 100644 index 00000000..8496fb1a Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-hovered@3x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-hovered@3x.png new file mode 100644 index 00000000..30849fd0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-hovered@4x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-hovered@4x.png new file mode 100644 index 00000000..55ce7c0c Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-focused.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-focused.png new file mode 100644 index 00000000..cd07b1cc Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-focused.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-focused@2x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-focused@2x.png new file mode 100644 index 00000000..acae6aff Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-focused@3x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-focused@3x.png new file mode 100644 index 00000000..1e8d2c45 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-focused@4x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-focused@4x.png new file mode 100644 index 00000000..577017c4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-hovered.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-hovered.png new file mode 100644 index 00000000..cd07b1cc Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-hovered@2x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-hovered@2x.png new file mode 100644 index 00000000..acae6aff Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-hovered@3x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-hovered@3x.png new file mode 100644 index 00000000..1e8d2c45 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-hovered@4x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-hovered@4x.png new file mode 100644 index 00000000..577017c4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-pressed.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-pressed.png new file mode 100644 index 00000000..928706ab Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-pressed@2x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-pressed@2x.png new file mode 100644 index 00000000..3645d78a Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-pressed@3x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-pressed@3x.png new file mode 100644 index 00000000..ade63bd0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-pressed@4x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-pressed@4x.png new file mode 100644 index 00000000..cd73617e Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked.png new file mode 100644 index 00000000..e404a4e3 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked@2x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked@2x.png new file mode 100644 index 00000000..2d0f5176 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked@3x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked@3x.png new file mode 100644 index 00000000..4b9777b7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked@4x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked@4x.png new file mode 100644 index 00000000..e0f67e98 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-partially-checked@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-pressed.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-pressed.png new file mode 100644 index 00000000..a1baaf90 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-pressed@2x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-pressed@2x.png new file mode 100644 index 00000000..81a7c364 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-pressed@3x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-pressed@3x.png new file mode 100644 index 00000000..9325de38 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator-pressed@4x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator-pressed@4x.png new file mode 100644 index 00000000..c93b8fb8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator.png new file mode 100644 index 00000000..2b3e2323 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator@2x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator@2x.png new file mode 100644 index 00000000..ce8985db Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator@2x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator@3x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator@3x.png new file mode 100644 index 00000000..2968731d Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator@3x.png differ diff --git a/src/quickcontrols2/imagine/images/checkdelegate-indicator@4x.png b/src/quickcontrols2/imagine/images/checkdelegate-indicator@4x.png new file mode 100644 index 00000000..ea8da284 Binary files /dev/null and b/src/quickcontrols2/imagine/images/checkdelegate-indicator@4x.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-disabled.9.png b/src/quickcontrols2/imagine/images/combobox-background-disabled.9.png new file mode 100644 index 00000000..a91b4b55 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-disabled@2x.9.png b/src/quickcontrols2/imagine/images/combobox-background-disabled@2x.9.png new file mode 100644 index 00000000..570b990c Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-disabled@3x.9.png b/src/quickcontrols2/imagine/images/combobox-background-disabled@3x.9.png new file mode 100644 index 00000000..b0f9b9c4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-disabled@4x.9.png b/src/quickcontrols2/imagine/images/combobox-background-disabled@4x.9.png new file mode 100644 index 00000000..6e810f75 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-editable-disabled.9.png b/src/quickcontrols2/imagine/images/combobox-background-editable-disabled.9.png new file mode 100644 index 00000000..e192afb8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-editable-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-editable-disabled@2x.9.png b/src/quickcontrols2/imagine/images/combobox-background-editable-disabled@2x.9.png new file mode 100644 index 00000000..58a0f6e9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-editable-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-editable-disabled@3x.9.png b/src/quickcontrols2/imagine/images/combobox-background-editable-disabled@3x.9.png new file mode 100644 index 00000000..cd6f226b Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-editable-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-editable-disabled@4x.9.png b/src/quickcontrols2/imagine/images/combobox-background-editable-disabled@4x.9.png new file mode 100644 index 00000000..ff9103b0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-editable-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-editable-focused.9.png b/src/quickcontrols2/imagine/images/combobox-background-editable-focused.9.png new file mode 100644 index 00000000..a0f079bc Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-editable-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-editable-focused@2x.9.png b/src/quickcontrols2/imagine/images/combobox-background-editable-focused@2x.9.png new file mode 100644 index 00000000..83cb503f Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-editable-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-editable-focused@3x.9.png b/src/quickcontrols2/imagine/images/combobox-background-editable-focused@3x.9.png new file mode 100644 index 00000000..4cf96edf Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-editable-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-editable-focused@4x.9.png b/src/quickcontrols2/imagine/images/combobox-background-editable-focused@4x.9.png new file mode 100644 index 00000000..5823de80 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-editable-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-editable.9.png b/src/quickcontrols2/imagine/images/combobox-background-editable.9.png new file mode 100644 index 00000000..8edac132 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-editable.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-editable@2x.9.png b/src/quickcontrols2/imagine/images/combobox-background-editable@2x.9.png new file mode 100644 index 00000000..15e465f1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-editable@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-editable@3x.9.png b/src/quickcontrols2/imagine/images/combobox-background-editable@3x.9.png new file mode 100644 index 00000000..910b48d2 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-editable@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-editable@4x.9.png b/src/quickcontrols2/imagine/images/combobox-background-editable@4x.9.png new file mode 100644 index 00000000..ff0f6411 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-editable@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-focused.9.png b/src/quickcontrols2/imagine/images/combobox-background-focused.9.png new file mode 100644 index 00000000..a3865fa6 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-focused@2x.9.png b/src/quickcontrols2/imagine/images/combobox-background-focused@2x.9.png new file mode 100644 index 00000000..fc49f4b8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-focused@3x.9.png b/src/quickcontrols2/imagine/images/combobox-background-focused@3x.9.png new file mode 100644 index 00000000..b432b4ec Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-focused@4x.9.png b/src/quickcontrols2/imagine/images/combobox-background-focused@4x.9.png new file mode 100644 index 00000000..15862059 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-hovered.9.png b/src/quickcontrols2/imagine/images/combobox-background-hovered.9.png new file mode 100644 index 00000000..a3865fa6 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-hovered@2x.9.png b/src/quickcontrols2/imagine/images/combobox-background-hovered@2x.9.png new file mode 100644 index 00000000..fc49f4b8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-hovered@3x.9.png b/src/quickcontrols2/imagine/images/combobox-background-hovered@3x.9.png new file mode 100644 index 00000000..b432b4ec Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-hovered@4x.9.png b/src/quickcontrols2/imagine/images/combobox-background-hovered@4x.9.png new file mode 100644 index 00000000..15862059 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-open.9.png b/src/quickcontrols2/imagine/images/combobox-background-open.9.png new file mode 100644 index 00000000..1be84403 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-open.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-open@2x.9.png b/src/quickcontrols2/imagine/images/combobox-background-open@2x.9.png new file mode 100644 index 00000000..95f7cd6d Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-open@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-open@3x.9.png b/src/quickcontrols2/imagine/images/combobox-background-open@3x.9.png new file mode 100644 index 00000000..2f71271c Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-open@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-open@4x.9.png b/src/quickcontrols2/imagine/images/combobox-background-open@4x.9.png new file mode 100644 index 00000000..17f6f2ce Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-open@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-pressed.9.png b/src/quickcontrols2/imagine/images/combobox-background-pressed.9.png new file mode 100644 index 00000000..1be84403 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-pressed.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-pressed@2x.9.png b/src/quickcontrols2/imagine/images/combobox-background-pressed@2x.9.png new file mode 100644 index 00000000..95f7cd6d Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-pressed@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-pressed@3x.9.png b/src/quickcontrols2/imagine/images/combobox-background-pressed@3x.9.png new file mode 100644 index 00000000..2f71271c Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-pressed@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background-pressed@4x.9.png b/src/quickcontrols2/imagine/images/combobox-background-pressed@4x.9.png new file mode 100644 index 00000000..17f6f2ce Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background-pressed@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background.9.png b/src/quickcontrols2/imagine/images/combobox-background.9.png new file mode 100644 index 00000000..4ed8ddc3 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background@2x.9.png b/src/quickcontrols2/imagine/images/combobox-background@2x.9.png new file mode 100644 index 00000000..1d7a8894 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background@3x.9.png b/src/quickcontrols2/imagine/images/combobox-background@3x.9.png new file mode 100644 index 00000000..313630f8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-background@4x.9.png b/src/quickcontrols2/imagine/images/combobox-background@4x.9.png new file mode 100644 index 00000000..be63d56e Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator-disabled.png b/src/quickcontrols2/imagine/images/combobox-indicator-disabled.png new file mode 100644 index 00000000..761537f9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator-disabled@2x.png b/src/quickcontrols2/imagine/images/combobox-indicator-disabled@2x.png new file mode 100644 index 00000000..322b7b68 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator-disabled@3x.png b/src/quickcontrols2/imagine/images/combobox-indicator-disabled@3x.png new file mode 100644 index 00000000..73feec34 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator-disabled@4x.png b/src/quickcontrols2/imagine/images/combobox-indicator-disabled@4x.png new file mode 100644 index 00000000..910c4d3d Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator-editable-disabled.png b/src/quickcontrols2/imagine/images/combobox-indicator-editable-disabled.png new file mode 100644 index 00000000..4399b6aa Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator-editable-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator-editable-disabled@2x.png b/src/quickcontrols2/imagine/images/combobox-indicator-editable-disabled@2x.png new file mode 100644 index 00000000..e45a2ad1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator-editable-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator-editable-disabled@3x.png b/src/quickcontrols2/imagine/images/combobox-indicator-editable-disabled@3x.png new file mode 100644 index 00000000..23f74b10 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator-editable-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator-editable-disabled@4x.png b/src/quickcontrols2/imagine/images/combobox-indicator-editable-disabled@4x.png new file mode 100644 index 00000000..db495899 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator-editable-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored-disabled.png b/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored-disabled.png new file mode 100644 index 00000000..2e954ae9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored-disabled@2x.png b/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored-disabled@2x.png new file mode 100644 index 00000000..252a5e37 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored-disabled@3x.png b/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored-disabled@3x.png new file mode 100644 index 00000000..6d939a93 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored-disabled@4x.png b/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored-disabled@4x.png new file mode 100644 index 00000000..00a21ebd Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored.png b/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored.png new file mode 100644 index 00000000..ad529912 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored@2x.png b/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored@2x.png new file mode 100644 index 00000000..70b995c1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored@2x.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored@3x.png b/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored@3x.png new file mode 100644 index 00000000..9b865377 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored@3x.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored@4x.png b/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored@4x.png new file mode 100644 index 00000000..b4f7ae25 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator-editable-mirrored@4x.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator-editable.png b/src/quickcontrols2/imagine/images/combobox-indicator-editable.png new file mode 100644 index 00000000..e053109f Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator-editable.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator-editable@2x.png b/src/quickcontrols2/imagine/images/combobox-indicator-editable@2x.png new file mode 100644 index 00000000..b8dfd6fe Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator-editable@2x.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator-editable@3x.png b/src/quickcontrols2/imagine/images/combobox-indicator-editable@3x.png new file mode 100644 index 00000000..2cdee7a8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator-editable@3x.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator-editable@4x.png b/src/quickcontrols2/imagine/images/combobox-indicator-editable@4x.png new file mode 100644 index 00000000..2569b4ae Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator-editable@4x.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator.png b/src/quickcontrols2/imagine/images/combobox-indicator.png new file mode 100644 index 00000000..cc32f2a2 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator@2x.png b/src/quickcontrols2/imagine/images/combobox-indicator@2x.png new file mode 100644 index 00000000..57ea3f30 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator@2x.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator@3x.png b/src/quickcontrols2/imagine/images/combobox-indicator@3x.png new file mode 100644 index 00000000..384f8152 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator@3x.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-indicator@4x.png b/src/quickcontrols2/imagine/images/combobox-indicator@4x.png new file mode 100644 index 00000000..f326c03b Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-indicator@4x.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-popup.9.png b/src/quickcontrols2/imagine/images/combobox-popup.9.png new file mode 100644 index 00000000..7344cdf6 Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-popup.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-popup@2x.9.png b/src/quickcontrols2/imagine/images/combobox-popup@2x.9.png new file mode 100644 index 00000000..00c88c7d Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-popup@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-popup@3x.9.png b/src/quickcontrols2/imagine/images/combobox-popup@3x.9.png new file mode 100644 index 00000000..82d911ed Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-popup@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/combobox-popup@4x.9.png b/src/quickcontrols2/imagine/images/combobox-popup@4x.9.png new file mode 100644 index 00000000..98db30af Binary files /dev/null and b/src/quickcontrols2/imagine/images/combobox-popup@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-checked-focused.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-checked-focused.9.png new file mode 100644 index 00000000..e3d14e99 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-checked-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-checked-focused@2x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-checked-focused@2x.9.png new file mode 100644 index 00000000..ebc74b4a Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-checked-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-checked-focused@3x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-checked-focused@3x.9.png new file mode 100644 index 00000000..75834723 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-checked-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-checked-focused@4x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-checked-focused@4x.9.png new file mode 100644 index 00000000..9b570f4d Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-checked-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-checked-hovered.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-checked-hovered.9.png new file mode 100644 index 00000000..e3d14e99 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-checked-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-checked-hovered@2x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-checked-hovered@2x.9.png new file mode 100644 index 00000000..ebc74b4a Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-checked-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-checked-hovered@3x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-checked-hovered@3x.9.png new file mode 100644 index 00000000..75834723 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-checked-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-checked-hovered@4x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-checked-hovered@4x.9.png new file mode 100644 index 00000000..9b570f4d Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-checked-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-checked.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-checked.9.png new file mode 100644 index 00000000..d0942509 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-checked.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-checked@2x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-checked@2x.9.png new file mode 100644 index 00000000..c38bcd02 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-checked@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-checked@3x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-checked@3x.9.png new file mode 100644 index 00000000..80889bf8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-checked@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-checked@4x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-checked@4x.9.png new file mode 100644 index 00000000..05de8377 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-checked@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-disabled-checked.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-disabled-checked.9.png new file mode 100644 index 00000000..8196289c Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-disabled-checked.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-disabled-checked@2x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-disabled-checked@2x.9.png new file mode 100644 index 00000000..76cd4490 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-disabled-checked@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-disabled-checked@3x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-disabled-checked@3x.9.png new file mode 100644 index 00000000..8bd6259a Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-disabled-checked@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-disabled-checked@4x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-disabled-checked@4x.9.png new file mode 100644 index 00000000..3e081520 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-disabled-checked@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-disabled.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-disabled.9.png new file mode 100644 index 00000000..8196289c Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-disabled@2x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-disabled@2x.9.png new file mode 100644 index 00000000..76cd4490 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-disabled@3x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-disabled@3x.9.png new file mode 100644 index 00000000..8bd6259a Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-disabled@4x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-disabled@4x.9.png new file mode 100644 index 00000000..3e081520 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-focused.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-focused.9.png new file mode 100644 index 00000000..294ff8bd Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-focused@2x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-focused@2x.9.png new file mode 100644 index 00000000..48e2bbcb Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-focused@3x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-focused@3x.9.png new file mode 100644 index 00000000..0981eb2a Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-focused@4x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-focused@4x.9.png new file mode 100644 index 00000000..4ae48bfa Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-hovered.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-hovered.9.png new file mode 100644 index 00000000..42e40e60 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-hovered@2x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-hovered@2x.9.png new file mode 100644 index 00000000..90dc70bf Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-hovered@3x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-hovered@3x.9.png new file mode 100644 index 00000000..2ed2340c Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-hovered@4x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-hovered@4x.9.png new file mode 100644 index 00000000..e1428e37 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-pressed.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-pressed.9.png new file mode 100644 index 00000000..d0942509 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-pressed.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-pressed@2x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-pressed@2x.9.png new file mode 100644 index 00000000..c38bcd02 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-pressed@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-pressed@3x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-pressed@3x.9.png new file mode 100644 index 00000000..80889bf8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-pressed@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background-pressed@4x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background-pressed@4x.9.png new file mode 100644 index 00000000..05de8377 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background-pressed@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background.9.png b/src/quickcontrols2/imagine/images/delaybutton-background.9.png new file mode 100644 index 00000000..6f1daed8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background@2x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background@2x.9.png new file mode 100644 index 00000000..4a2507f5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background@3x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background@3x.9.png new file mode 100644 index 00000000..4f13b4ef Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-background@4x.9.png b/src/quickcontrols2/imagine/images/delaybutton-background@4x.9.png new file mode 100644 index 00000000..0e1ab452 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-mask.9.png b/src/quickcontrols2/imagine/images/delaybutton-mask.9.png new file mode 100644 index 00000000..76d3967d Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-mask.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-mask@2x.9.png b/src/quickcontrols2/imagine/images/delaybutton-mask@2x.9.png new file mode 100644 index 00000000..b8db224c Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-mask@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-mask@3x.9.png b/src/quickcontrols2/imagine/images/delaybutton-mask@3x.9.png new file mode 100644 index 00000000..3bff2c15 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-mask@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-mask@4x.9.png b/src/quickcontrols2/imagine/images/delaybutton-mask@4x.9.png new file mode 100644 index 00000000..045c7fac Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-mask@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-progress-disabled.9.png b/src/quickcontrols2/imagine/images/delaybutton-progress-disabled.9.png new file mode 100644 index 00000000..5c209c9c Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-progress-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-progress-disabled@2x.9.png b/src/quickcontrols2/imagine/images/delaybutton-progress-disabled@2x.9.png new file mode 100644 index 00000000..0ef11a8d Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-progress-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-progress-disabled@3x.9.png b/src/quickcontrols2/imagine/images/delaybutton-progress-disabled@3x.9.png new file mode 100644 index 00000000..f3f8e547 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-progress-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-progress-disabled@4x.9.png b/src/quickcontrols2/imagine/images/delaybutton-progress-disabled@4x.9.png new file mode 100644 index 00000000..b24f50e6 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-progress-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-progress.9.png b/src/quickcontrols2/imagine/images/delaybutton-progress.9.png new file mode 100644 index 00000000..4dd3aec5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-progress.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-progress@2x.9.png b/src/quickcontrols2/imagine/images/delaybutton-progress@2x.9.png new file mode 100644 index 00000000..cd422076 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-progress@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-progress@3x.9.png b/src/quickcontrols2/imagine/images/delaybutton-progress@3x.9.png new file mode 100644 index 00000000..08610300 Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-progress@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/delaybutton-progress@4x.9.png b/src/quickcontrols2/imagine/images/delaybutton-progress@4x.9.png new file mode 100644 index 00000000..24cc19ba Binary files /dev/null and b/src/quickcontrols2/imagine/images/delaybutton-progress@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/dial-background-disabled.png b/src/quickcontrols2/imagine/images/dial-background-disabled.png new file mode 100644 index 00000000..d7c4f847 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-background-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/dial-background-disabled@2x.png b/src/quickcontrols2/imagine/images/dial-background-disabled@2x.png new file mode 100644 index 00000000..56b085df Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-background-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-background-disabled@3x.png b/src/quickcontrols2/imagine/images/dial-background-disabled@3x.png new file mode 100644 index 00000000..4f1e17e7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-background-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-background-disabled@4x.png b/src/quickcontrols2/imagine/images/dial-background-disabled@4x.png new file mode 100644 index 00000000..4aacbf82 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-background-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-background-focused.png b/src/quickcontrols2/imagine/images/dial-background-focused.png new file mode 100644 index 00000000..fc53d5c4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-background-focused.png differ diff --git a/src/quickcontrols2/imagine/images/dial-background-focused@2x.png b/src/quickcontrols2/imagine/images/dial-background-focused@2x.png new file mode 100644 index 00000000..6b547a17 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-background-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-background-focused@3x.png b/src/quickcontrols2/imagine/images/dial-background-focused@3x.png new file mode 100644 index 00000000..7b8a2582 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-background-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-background-focused@4x.png b/src/quickcontrols2/imagine/images/dial-background-focused@4x.png new file mode 100644 index 00000000..406f46b5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-background-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-background.png b/src/quickcontrols2/imagine/images/dial-background.png new file mode 100644 index 00000000..58aa09ed Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-background.png differ diff --git a/src/quickcontrols2/imagine/images/dial-background@2x.png b/src/quickcontrols2/imagine/images/dial-background@2x.png new file mode 100644 index 00000000..87cd9a0f Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-background@2x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-background@3x.png b/src/quickcontrols2/imagine/images/dial-background@3x.png new file mode 100644 index 00000000..103fb461 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-background@3x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-background@4x.png b/src/quickcontrols2/imagine/images/dial-background@4x.png new file mode 100644 index 00000000..c290f84a Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-background@4x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-disabled.png b/src/quickcontrols2/imagine/images/dial-handle-disabled.png new file mode 100644 index 00000000..a93fd0f2 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-disabled@2x.png b/src/quickcontrols2/imagine/images/dial-handle-disabled@2x.png new file mode 100644 index 00000000..2cd536be Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-disabled@3x.png b/src/quickcontrols2/imagine/images/dial-handle-disabled@3x.png new file mode 100644 index 00000000..56b9fe06 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-disabled@4x.png b/src/quickcontrols2/imagine/images/dial-handle-disabled@4x.png new file mode 100644 index 00000000..5098d688 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-focused-hovered.png b/src/quickcontrols2/imagine/images/dial-handle-focused-hovered.png new file mode 100644 index 00000000..2a143f2a Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-focused-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-focused-hovered@2x.png b/src/quickcontrols2/imagine/images/dial-handle-focused-hovered@2x.png new file mode 100644 index 00000000..24dfee82 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-focused-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-focused-hovered@3x.png b/src/quickcontrols2/imagine/images/dial-handle-focused-hovered@3x.png new file mode 100644 index 00000000..16e128d5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-focused-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-focused-hovered@4x.png b/src/quickcontrols2/imagine/images/dial-handle-focused-hovered@4x.png new file mode 100644 index 00000000..b4523acb Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-focused-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-focused-pressed.png b/src/quickcontrols2/imagine/images/dial-handle-focused-pressed.png new file mode 100644 index 00000000..d43971ff Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-focused-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-focused-pressed@2x.png b/src/quickcontrols2/imagine/images/dial-handle-focused-pressed@2x.png new file mode 100644 index 00000000..caa2376e Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-focused-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-focused-pressed@3x.png b/src/quickcontrols2/imagine/images/dial-handle-focused-pressed@3x.png new file mode 100644 index 00000000..c2913883 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-focused-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-focused-pressed@4x.png b/src/quickcontrols2/imagine/images/dial-handle-focused-pressed@4x.png new file mode 100644 index 00000000..50ff1c8b Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-focused-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-focused.png b/src/quickcontrols2/imagine/images/dial-handle-focused.png new file mode 100644 index 00000000..d2733474 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-focused.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-focused@2x.png b/src/quickcontrols2/imagine/images/dial-handle-focused@2x.png new file mode 100644 index 00000000..c7bc8f74 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-focused@3x.png b/src/quickcontrols2/imagine/images/dial-handle-focused@3x.png new file mode 100644 index 00000000..c0dcd945 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-focused@4x.png b/src/quickcontrols2/imagine/images/dial-handle-focused@4x.png new file mode 100644 index 00000000..b9d2234c Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-hovered.png b/src/quickcontrols2/imagine/images/dial-handle-hovered.png new file mode 100644 index 00000000..f5d0ac6f Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-hovered@2x.png b/src/quickcontrols2/imagine/images/dial-handle-hovered@2x.png new file mode 100644 index 00000000..da23baaa Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-hovered@3x.png b/src/quickcontrols2/imagine/images/dial-handle-hovered@3x.png new file mode 100644 index 00000000..7287a419 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-hovered@4x.png b/src/quickcontrols2/imagine/images/dial-handle-hovered@4x.png new file mode 100644 index 00000000..9f6982dd Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-pressed.png b/src/quickcontrols2/imagine/images/dial-handle-pressed.png new file mode 100644 index 00000000..3b98e124 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-pressed@2x.png b/src/quickcontrols2/imagine/images/dial-handle-pressed@2x.png new file mode 100644 index 00000000..454e7364 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-pressed@3x.png b/src/quickcontrols2/imagine/images/dial-handle-pressed@3x.png new file mode 100644 index 00000000..794516da Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle-pressed@4x.png b/src/quickcontrols2/imagine/images/dial-handle-pressed@4x.png new file mode 100644 index 00000000..211b1135 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle.png b/src/quickcontrols2/imagine/images/dial-handle.png new file mode 100644 index 00000000..652b82d3 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle@2x.png b/src/quickcontrols2/imagine/images/dial-handle@2x.png new file mode 100644 index 00000000..3c86a59b Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle@2x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle@3x.png b/src/quickcontrols2/imagine/images/dial-handle@3x.png new file mode 100644 index 00000000..cbfcdbcd Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle@3x.png differ diff --git a/src/quickcontrols2/imagine/images/dial-handle@4x.png b/src/quickcontrols2/imagine/images/dial-handle@4x.png new file mode 100644 index 00000000..2872e006 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dial-handle@4x.png differ diff --git a/src/quickcontrols2/imagine/images/dialog-background.9.png b/src/quickcontrols2/imagine/images/dialog-background.9.png new file mode 100644 index 00000000..c842b5ff Binary files /dev/null and b/src/quickcontrols2/imagine/images/dialog-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/dialog-background@2x.9.png b/src/quickcontrols2/imagine/images/dialog-background@2x.9.png new file mode 100644 index 00000000..ca23df1f Binary files /dev/null and b/src/quickcontrols2/imagine/images/dialog-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/dialog-background@3x.9.png b/src/quickcontrols2/imagine/images/dialog-background@3x.9.png new file mode 100644 index 00000000..46cd4065 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dialog-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/dialog-background@4x.9.png b/src/quickcontrols2/imagine/images/dialog-background@4x.9.png new file mode 100644 index 00000000..3da74119 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dialog-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/dialog-overlay-modal.png b/src/quickcontrols2/imagine/images/dialog-overlay-modal.png new file mode 100644 index 00000000..d4a43d1c Binary files /dev/null and b/src/quickcontrols2/imagine/images/dialog-overlay-modal.png differ diff --git a/src/quickcontrols2/imagine/images/dialog-overlay-modal@2x.png b/src/quickcontrols2/imagine/images/dialog-overlay-modal@2x.png new file mode 100644 index 00000000..c9a8f412 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dialog-overlay-modal@2x.png differ diff --git a/src/quickcontrols2/imagine/images/dialog-overlay-modal@3x.png b/src/quickcontrols2/imagine/images/dialog-overlay-modal@3x.png new file mode 100644 index 00000000..4a1084a9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dialog-overlay-modal@3x.png differ diff --git a/src/quickcontrols2/imagine/images/dialog-overlay-modal@4x.png b/src/quickcontrols2/imagine/images/dialog-overlay-modal@4x.png new file mode 100644 index 00000000..b92e600d Binary files /dev/null and b/src/quickcontrols2/imagine/images/dialog-overlay-modal@4x.png differ diff --git a/src/quickcontrols2/imagine/images/dialog-overlay.png b/src/quickcontrols2/imagine/images/dialog-overlay.png new file mode 100644 index 00000000..b7da23c0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dialog-overlay.png differ diff --git a/src/quickcontrols2/imagine/images/dialog-overlay@2x.png b/src/quickcontrols2/imagine/images/dialog-overlay@2x.png new file mode 100644 index 00000000..23828d5a Binary files /dev/null and b/src/quickcontrols2/imagine/images/dialog-overlay@2x.png differ diff --git a/src/quickcontrols2/imagine/images/dialog-overlay@3x.png b/src/quickcontrols2/imagine/images/dialog-overlay@3x.png new file mode 100644 index 00000000..d9d53828 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dialog-overlay@3x.png differ diff --git a/src/quickcontrols2/imagine/images/dialog-overlay@4x.png b/src/quickcontrols2/imagine/images/dialog-overlay@4x.png new file mode 100644 index 00000000..a76c1a3a Binary files /dev/null and b/src/quickcontrols2/imagine/images/dialog-overlay@4x.png differ diff --git a/src/quickcontrols2/imagine/images/dialogbuttonbox-background.9.png b/src/quickcontrols2/imagine/images/dialogbuttonbox-background.9.png new file mode 100644 index 00000000..4b080c7f Binary files /dev/null and b/src/quickcontrols2/imagine/images/dialogbuttonbox-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/dialogbuttonbox-background@2x.9.png b/src/quickcontrols2/imagine/images/dialogbuttonbox-background@2x.9.png new file mode 100644 index 00000000..38306bea Binary files /dev/null and b/src/quickcontrols2/imagine/images/dialogbuttonbox-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/dialogbuttonbox-background@3x.9.png b/src/quickcontrols2/imagine/images/dialogbuttonbox-background@3x.9.png new file mode 100644 index 00000000..66afaabe Binary files /dev/null and b/src/quickcontrols2/imagine/images/dialogbuttonbox-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/dialogbuttonbox-background@4x.9.png b/src/quickcontrols2/imagine/images/dialogbuttonbox-background@4x.9.png new file mode 100644 index 00000000..7d0db539 Binary files /dev/null and b/src/quickcontrols2/imagine/images/dialogbuttonbox-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-background-bottom.9.png b/src/quickcontrols2/imagine/images/drawer-background-bottom.9.png new file mode 100644 index 00000000..023d8bf8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-background-bottom.9.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-background-bottom@2x.9.png b/src/quickcontrols2/imagine/images/drawer-background-bottom@2x.9.png new file mode 100644 index 00000000..6b229ce9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-background-bottom@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-background-bottom@3x.9.png b/src/quickcontrols2/imagine/images/drawer-background-bottom@3x.9.png new file mode 100644 index 00000000..c61118b6 Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-background-bottom@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-background-bottom@4x.9.png b/src/quickcontrols2/imagine/images/drawer-background-bottom@4x.9.png new file mode 100644 index 00000000..08b2e25f Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-background-bottom@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-background-left.9.png b/src/quickcontrols2/imagine/images/drawer-background-left.9.png new file mode 100644 index 00000000..5145a3a3 Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-background-left.9.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-background-left@2x.9.png b/src/quickcontrols2/imagine/images/drawer-background-left@2x.9.png new file mode 100644 index 00000000..95a80ab5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-background-left@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-background-left@3x.9.png b/src/quickcontrols2/imagine/images/drawer-background-left@3x.9.png new file mode 100644 index 00000000..bd330b7f Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-background-left@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-background-left@4x.9.png b/src/quickcontrols2/imagine/images/drawer-background-left@4x.9.png new file mode 100644 index 00000000..10f0702a Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-background-left@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-background-right.9.png b/src/quickcontrols2/imagine/images/drawer-background-right.9.png new file mode 100644 index 00000000..37afb734 Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-background-right.9.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-background-right@2x.9.png b/src/quickcontrols2/imagine/images/drawer-background-right@2x.9.png new file mode 100644 index 00000000..cfbc8f35 Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-background-right@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-background-right@3x.9.png b/src/quickcontrols2/imagine/images/drawer-background-right@3x.9.png new file mode 100644 index 00000000..9a49b6d5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-background-right@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-background-right@4x.9.png b/src/quickcontrols2/imagine/images/drawer-background-right@4x.9.png new file mode 100644 index 00000000..56405776 Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-background-right@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-background-top.9.png b/src/quickcontrols2/imagine/images/drawer-background-top.9.png new file mode 100644 index 00000000..56da059f Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-background-top.9.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-background-top@2x.9.png b/src/quickcontrols2/imagine/images/drawer-background-top@2x.9.png new file mode 100644 index 00000000..976671ce Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-background-top@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-background-top@3x.9.png b/src/quickcontrols2/imagine/images/drawer-background-top@3x.9.png new file mode 100644 index 00000000..7c07deba Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-background-top@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-background-top@4x.9.png b/src/quickcontrols2/imagine/images/drawer-background-top@4x.9.png new file mode 100644 index 00000000..e3b1edf7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-background-top@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-overlay-modal.png b/src/quickcontrols2/imagine/images/drawer-overlay-modal.png new file mode 100644 index 00000000..d4a43d1c Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-overlay-modal.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-overlay-modal@2x.png b/src/quickcontrols2/imagine/images/drawer-overlay-modal@2x.png new file mode 100644 index 00000000..c9a8f412 Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-overlay-modal@2x.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-overlay-modal@3x.png b/src/quickcontrols2/imagine/images/drawer-overlay-modal@3x.png new file mode 100644 index 00000000..4a1084a9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-overlay-modal@3x.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-overlay-modal@4x.png b/src/quickcontrols2/imagine/images/drawer-overlay-modal@4x.png new file mode 100644 index 00000000..b92e600d Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-overlay-modal@4x.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-overlay.png b/src/quickcontrols2/imagine/images/drawer-overlay.png new file mode 100644 index 00000000..b7da23c0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-overlay.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-overlay@2x.png b/src/quickcontrols2/imagine/images/drawer-overlay@2x.png new file mode 100644 index 00000000..23828d5a Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-overlay@2x.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-overlay@3x.png b/src/quickcontrols2/imagine/images/drawer-overlay@3x.png new file mode 100644 index 00000000..d9d53828 Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-overlay@3x.png differ diff --git a/src/quickcontrols2/imagine/images/drawer-overlay@4x.png b/src/quickcontrols2/imagine/images/drawer-overlay@4x.png new file mode 100644 index 00000000..a76c1a3a Binary files /dev/null and b/src/quickcontrols2/imagine/images/drawer-overlay@4x.png differ diff --git a/src/quickcontrols2/imagine/images/frame-background.9.png b/src/quickcontrols2/imagine/images/frame-background.9.png new file mode 100644 index 00000000..8674059d Binary files /dev/null and b/src/quickcontrols2/imagine/images/frame-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/frame-background@2x.9.png b/src/quickcontrols2/imagine/images/frame-background@2x.9.png new file mode 100644 index 00000000..19661496 Binary files /dev/null and b/src/quickcontrols2/imagine/images/frame-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/frame-background@3x.9.png b/src/quickcontrols2/imagine/images/frame-background@3x.9.png new file mode 100644 index 00000000..07d644be Binary files /dev/null and b/src/quickcontrols2/imagine/images/frame-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/frame-background@4x.9.png b/src/quickcontrols2/imagine/images/frame-background@4x.9.png new file mode 100644 index 00000000..8bf47d2a Binary files /dev/null and b/src/quickcontrols2/imagine/images/frame-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/groupbox-background.9.png b/src/quickcontrols2/imagine/images/groupbox-background.9.png new file mode 100644 index 00000000..8674059d Binary files /dev/null and b/src/quickcontrols2/imagine/images/groupbox-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/groupbox-background@2x.9.png b/src/quickcontrols2/imagine/images/groupbox-background@2x.9.png new file mode 100644 index 00000000..19661496 Binary files /dev/null and b/src/quickcontrols2/imagine/images/groupbox-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/groupbox-background@3x.9.png b/src/quickcontrols2/imagine/images/groupbox-background@3x.9.png new file mode 100644 index 00000000..07d644be Binary files /dev/null and b/src/quickcontrols2/imagine/images/groupbox-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/groupbox-background@4x.9.png b/src/quickcontrols2/imagine/images/groupbox-background@4x.9.png new file mode 100644 index 00000000..8bf47d2a Binary files /dev/null and b/src/quickcontrols2/imagine/images/groupbox-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/groupbox-title.9.png b/src/quickcontrols2/imagine/images/groupbox-title.9.png new file mode 100644 index 00000000..e85e0cb1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/groupbox-title.9.png differ diff --git a/src/quickcontrols2/imagine/images/groupbox-title@2x.9.png b/src/quickcontrols2/imagine/images/groupbox-title@2x.9.png new file mode 100644 index 00000000..d5359d85 Binary files /dev/null and b/src/quickcontrols2/imagine/images/groupbox-title@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/groupbox-title@3x.9.png b/src/quickcontrols2/imagine/images/groupbox-title@3x.9.png new file mode 100644 index 00000000..0e4b5c9f Binary files /dev/null and b/src/quickcontrols2/imagine/images/groupbox-title@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/groupbox-title@4x.9.png b/src/quickcontrols2/imagine/images/groupbox-title@4x.9.png new file mode 100644 index 00000000..908dfe6b Binary files /dev/null and b/src/quickcontrols2/imagine/images/groupbox-title@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background-disabled.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background-disabled.9.png new file mode 100644 index 00000000..23570729 Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background-disabled@2x.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background-disabled@2x.9.png new file mode 100644 index 00000000..c7abb65c Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background-disabled@3x.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background-disabled@3x.9.png new file mode 100644 index 00000000..46b84d7d Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background-disabled@4x.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background-disabled@4x.9.png new file mode 100644 index 00000000..f4dfd338 Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background-focused.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background-focused.9.png new file mode 100644 index 00000000..6ae574d5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background-focused@2x.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background-focused@2x.9.png new file mode 100644 index 00000000..6b61562c Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background-focused@3x.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background-focused@3x.9.png new file mode 100644 index 00000000..e46c0bf1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background-focused@4x.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background-focused@4x.9.png new file mode 100644 index 00000000..010444e8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background-highlighted.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background-highlighted.9.png new file mode 100644 index 00000000..e79d8e1d Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background-highlighted.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background-highlighted@2x.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background-highlighted@2x.9.png new file mode 100644 index 00000000..ea68d35f Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background-highlighted@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background-highlighted@3x.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background-highlighted@3x.9.png new file mode 100644 index 00000000..6d610415 Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background-highlighted@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background-highlighted@4x.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background-highlighted@4x.9.png new file mode 100644 index 00000000..590cca96 Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background-highlighted@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background-hovered.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background-hovered.9.png new file mode 100644 index 00000000..b8749743 Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background-hovered@2x.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background-hovered@2x.9.png new file mode 100644 index 00000000..5a136a0c Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background-hovered@3x.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background-hovered@3x.9.png new file mode 100644 index 00000000..f47a366b Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background-hovered@4x.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background-hovered@4x.9.png new file mode 100644 index 00000000..9ecb680f Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background-pressed.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background-pressed.9.png new file mode 100644 index 00000000..6ae574d5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background-pressed.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background-pressed@2x.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background-pressed@2x.9.png new file mode 100644 index 00000000..6b61562c Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background-pressed@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background-pressed@3x.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background-pressed@3x.9.png new file mode 100644 index 00000000..e46c0bf1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background-pressed@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background-pressed@4x.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background-pressed@4x.9.png new file mode 100644 index 00000000..010444e8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background-pressed@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background.9.png new file mode 100644 index 00000000..b8749743 Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background@2x.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background@2x.9.png new file mode 100644 index 00000000..5a136a0c Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background@3x.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background@3x.9.png new file mode 100644 index 00000000..f47a366b Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/itemdelegate-background@4x.9.png b/src/quickcontrols2/imagine/images/itemdelegate-background@4x.9.png new file mode 100644 index 00000000..9ecb680f Binary files /dev/null and b/src/quickcontrols2/imagine/images/itemdelegate-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/menu-background.9.png b/src/quickcontrols2/imagine/images/menu-background.9.png new file mode 100644 index 00000000..3195fbc3 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menu-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/menu-background@2x.9.png b/src/quickcontrols2/imagine/images/menu-background@2x.9.png new file mode 100644 index 00000000..454c347c Binary files /dev/null and b/src/quickcontrols2/imagine/images/menu-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/menu-background@3x.9.png b/src/quickcontrols2/imagine/images/menu-background@3x.9.png new file mode 100644 index 00000000..32ed6086 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menu-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/menu-background@4x.9.png b/src/quickcontrols2/imagine/images/menu-background@4x.9.png new file mode 100644 index 00000000..948cc3e9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menu-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-arrow-disabled.png b/src/quickcontrols2/imagine/images/menuitem-arrow-disabled.png new file mode 100644 index 00000000..6cad53f6 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-arrow-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-arrow-disabled@2x.png b/src/quickcontrols2/imagine/images/menuitem-arrow-disabled@2x.png new file mode 100644 index 00000000..bad6fe8c Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-arrow-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-arrow-disabled@3x.png b/src/quickcontrols2/imagine/images/menuitem-arrow-disabled@3x.png new file mode 100644 index 00000000..da420091 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-arrow-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-arrow-disabled@4x.png b/src/quickcontrols2/imagine/images/menuitem-arrow-disabled@4x.png new file mode 100644 index 00000000..2d8e44e2 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-arrow-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored-disabled.png b/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored-disabled.png new file mode 100644 index 00000000..44ac2771 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored-disabled@2x.png b/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored-disabled@2x.png new file mode 100644 index 00000000..71a9b88a Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored-disabled@3x.png b/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored-disabled@3x.png new file mode 100644 index 00000000..1e03f215 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored-disabled@4x.png b/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored-disabled@4x.png new file mode 100644 index 00000000..0f85b409 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored.png b/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored.png new file mode 100644 index 00000000..4ac1160b Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored@2x.png b/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored@2x.png new file mode 100644 index 00000000..79b089b6 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored@2x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored@3x.png b/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored@3x.png new file mode 100644 index 00000000..aeb191fd Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored@3x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored@4x.png b/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored@4x.png new file mode 100644 index 00000000..139fab35 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-arrow-mirrored@4x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-arrow.png b/src/quickcontrols2/imagine/images/menuitem-arrow.png new file mode 100644 index 00000000..edf1f6bd Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-arrow.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-arrow@2x.png b/src/quickcontrols2/imagine/images/menuitem-arrow@2x.png new file mode 100644 index 00000000..8e629265 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-arrow@2x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-arrow@3x.png b/src/quickcontrols2/imagine/images/menuitem-arrow@3x.png new file mode 100644 index 00000000..0cef53ac Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-arrow@3x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-arrow@4x.png b/src/quickcontrols2/imagine/images/menuitem-arrow@4x.png new file mode 100644 index 00000000..dbdc83bc Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-arrow@4x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-background-highlighted.9.png b/src/quickcontrols2/imagine/images/menuitem-background-highlighted.9.png new file mode 100644 index 00000000..7b8fa0f4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-background-highlighted.9.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-background-highlighted@2x.9.png b/src/quickcontrols2/imagine/images/menuitem-background-highlighted@2x.9.png new file mode 100644 index 00000000..9edc3079 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-background-highlighted@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-background-highlighted@3x.9.png b/src/quickcontrols2/imagine/images/menuitem-background-highlighted@3x.9.png new file mode 100644 index 00000000..183f6194 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-background-highlighted@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-background-highlighted@4x.9.png b/src/quickcontrols2/imagine/images/menuitem-background-highlighted@4x.9.png new file mode 100644 index 00000000..0a1ab863 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-background-highlighted@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-background.9.png b/src/quickcontrols2/imagine/images/menuitem-background.9.png new file mode 100644 index 00000000..aab131ed Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-background@2x.9.png b/src/quickcontrols2/imagine/images/menuitem-background@2x.9.png new file mode 100644 index 00000000..c46938c4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-background@3x.9.png b/src/quickcontrols2/imagine/images/menuitem-background@3x.9.png new file mode 100644 index 00000000..bac1a83f Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-background@4x.9.png b/src/quickcontrols2/imagine/images/menuitem-background@4x.9.png new file mode 100644 index 00000000..ba77504c Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-checked-focused.png b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-focused.png new file mode 100644 index 00000000..d55a5204 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-focused.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-checked-focused@2x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-focused@2x.png new file mode 100644 index 00000000..7289f639 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-checked-focused@3x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-focused@3x.png new file mode 100644 index 00000000..02d6cdf2 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-checked-focused@4x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-focused@4x.png new file mode 100644 index 00000000..3f074dbf Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-checked-hovered.png b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-hovered.png new file mode 100644 index 00000000..d55a5204 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-checked-hovered@2x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-hovered@2x.png new file mode 100644 index 00000000..7289f639 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-checked-hovered@3x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-hovered@3x.png new file mode 100644 index 00000000..02d6cdf2 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-checked-hovered@4x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-hovered@4x.png new file mode 100644 index 00000000..3f074dbf Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-checked-pressed.png b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-pressed.png new file mode 100644 index 00000000..9c03d096 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-checked-pressed@2x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-pressed@2x.png new file mode 100644 index 00000000..680ba3ef Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-checked-pressed@3x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-pressed@3x.png new file mode 100644 index 00000000..974205de Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-checked-pressed@4x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-pressed@4x.png new file mode 100644 index 00000000..2c8b6aab Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-checked-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-checked.png b/src/quickcontrols2/imagine/images/menuitem-indicator-checked.png new file mode 100644 index 00000000..598b163a Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-checked.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-checked@2x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-checked@2x.png new file mode 100644 index 00000000..06382264 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-checked@2x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-checked@3x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-checked@3x.png new file mode 100644 index 00000000..12a32dcd Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-checked@3x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-checked@4x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-checked@4x.png new file mode 100644 index 00000000..4bc6701d Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-checked@4x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-disabled.png b/src/quickcontrols2/imagine/images/menuitem-indicator-disabled.png new file mode 100644 index 00000000..0a499f8f Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-disabled@2x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-disabled@2x.png new file mode 100644 index 00000000..db652c5a Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-disabled@3x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-disabled@3x.png new file mode 100644 index 00000000..482f045d Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-disabled@4x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-disabled@4x.png new file mode 100644 index 00000000..a386e272 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-focused.png b/src/quickcontrols2/imagine/images/menuitem-indicator-focused.png new file mode 100644 index 00000000..c5eb8527 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-focused.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-focused@2x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-focused@2x.png new file mode 100644 index 00000000..8496fb1a Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-focused@3x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-focused@3x.png new file mode 100644 index 00000000..30849fd0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-focused@4x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-focused@4x.png new file mode 100644 index 00000000..55ce7c0c Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-hovered.png b/src/quickcontrols2/imagine/images/menuitem-indicator-hovered.png new file mode 100644 index 00000000..c5eb8527 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-hovered@2x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-hovered@2x.png new file mode 100644 index 00000000..8496fb1a Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-hovered@3x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-hovered@3x.png new file mode 100644 index 00000000..30849fd0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-hovered@4x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-hovered@4x.png new file mode 100644 index 00000000..55ce7c0c Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-pressed.png b/src/quickcontrols2/imagine/images/menuitem-indicator-pressed.png new file mode 100644 index 00000000..a1baaf90 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-pressed@2x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-pressed@2x.png new file mode 100644 index 00000000..81a7c364 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-pressed@3x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-pressed@3x.png new file mode 100644 index 00000000..9325de38 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator-pressed@4x.png b/src/quickcontrols2/imagine/images/menuitem-indicator-pressed@4x.png new file mode 100644 index 00000000..c93b8fb8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator.png b/src/quickcontrols2/imagine/images/menuitem-indicator.png new file mode 100644 index 00000000..2b3e2323 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator@2x.png b/src/quickcontrols2/imagine/images/menuitem-indicator@2x.png new file mode 100644 index 00000000..ce8985db Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator@2x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator@3x.png b/src/quickcontrols2/imagine/images/menuitem-indicator@3x.png new file mode 100644 index 00000000..2968731d Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator@3x.png differ diff --git a/src/quickcontrols2/imagine/images/menuitem-indicator@4x.png b/src/quickcontrols2/imagine/images/menuitem-indicator@4x.png new file mode 100644 index 00000000..ea8da284 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuitem-indicator@4x.png differ diff --git a/src/quickcontrols2/imagine/images/menuseparator-separator.9.png b/src/quickcontrols2/imagine/images/menuseparator-separator.9.png new file mode 100644 index 00000000..b8825b99 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuseparator-separator.9.png differ diff --git a/src/quickcontrols2/imagine/images/menuseparator-separator@2x.9.png b/src/quickcontrols2/imagine/images/menuseparator-separator@2x.9.png new file mode 100644 index 00000000..3e5a023d Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuseparator-separator@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/menuseparator-separator@3x.9.png b/src/quickcontrols2/imagine/images/menuseparator-separator@3x.9.png new file mode 100644 index 00000000..abe775c7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuseparator-separator@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/menuseparator-separator@4x.9.png b/src/quickcontrols2/imagine/images/menuseparator-separator@4x.9.png new file mode 100644 index 00000000..164c8e3e Binary files /dev/null and b/src/quickcontrols2/imagine/images/menuseparator-separator@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/page-background.png b/src/quickcontrols2/imagine/images/page-background.png new file mode 100644 index 00000000..2d8d70f2 Binary files /dev/null and b/src/quickcontrols2/imagine/images/page-background.png differ diff --git a/src/quickcontrols2/imagine/images/page-background@2x.png b/src/quickcontrols2/imagine/images/page-background@2x.png new file mode 100644 index 00000000..18fbaa4c Binary files /dev/null and b/src/quickcontrols2/imagine/images/page-background@2x.png differ diff --git a/src/quickcontrols2/imagine/images/page-background@3x.png b/src/quickcontrols2/imagine/images/page-background@3x.png new file mode 100644 index 00000000..241232b1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/page-background@3x.png differ diff --git a/src/quickcontrols2/imagine/images/page-background@4x.png b/src/quickcontrols2/imagine/images/page-background@4x.png new file mode 100644 index 00000000..8eb1b1ec Binary files /dev/null and b/src/quickcontrols2/imagine/images/page-background@4x.png differ diff --git a/src/quickcontrols2/imagine/images/pageindicator-delegate-current.png b/src/quickcontrols2/imagine/images/pageindicator-delegate-current.png new file mode 100644 index 00000000..dc96d723 Binary files /dev/null and b/src/quickcontrols2/imagine/images/pageindicator-delegate-current.png differ diff --git a/src/quickcontrols2/imagine/images/pageindicator-delegate-current@2x.png b/src/quickcontrols2/imagine/images/pageindicator-delegate-current@2x.png new file mode 100644 index 00000000..3e0d794f Binary files /dev/null and b/src/quickcontrols2/imagine/images/pageindicator-delegate-current@2x.png differ diff --git a/src/quickcontrols2/imagine/images/pageindicator-delegate-current@3x.png b/src/quickcontrols2/imagine/images/pageindicator-delegate-current@3x.png new file mode 100644 index 00000000..397501a7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/pageindicator-delegate-current@3x.png differ diff --git a/src/quickcontrols2/imagine/images/pageindicator-delegate-current@4x.png b/src/quickcontrols2/imagine/images/pageindicator-delegate-current@4x.png new file mode 100644 index 00000000..f741a896 Binary files /dev/null and b/src/quickcontrols2/imagine/images/pageindicator-delegate-current@4x.png differ diff --git a/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled-current.png b/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled-current.png new file mode 100644 index 00000000..848d4351 Binary files /dev/null and b/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled-current.png differ diff --git a/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled-current@2x.png b/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled-current@2x.png new file mode 100644 index 00000000..65b5a9d4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled-current@2x.png differ diff --git a/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled-current@3x.png b/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled-current@3x.png new file mode 100644 index 00000000..99e3b644 Binary files /dev/null and b/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled-current@3x.png differ diff --git a/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled-current@4x.png b/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled-current@4x.png new file mode 100644 index 00000000..f1801fff Binary files /dev/null and b/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled-current@4x.png differ diff --git a/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled.png b/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled.png new file mode 100644 index 00000000..848d4351 Binary files /dev/null and b/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled@2x.png b/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled@2x.png new file mode 100644 index 00000000..65b5a9d4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled@3x.png b/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled@3x.png new file mode 100644 index 00000000..99e3b644 Binary files /dev/null and b/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled@4x.png b/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled@4x.png new file mode 100644 index 00000000..f1801fff Binary files /dev/null and b/src/quickcontrols2/imagine/images/pageindicator-delegate-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/pageindicator-delegate-pressed.png b/src/quickcontrols2/imagine/images/pageindicator-delegate-pressed.png new file mode 100644 index 00000000..dc96d723 Binary files /dev/null and b/src/quickcontrols2/imagine/images/pageindicator-delegate-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/pageindicator-delegate-pressed@2x.png b/src/quickcontrols2/imagine/images/pageindicator-delegate-pressed@2x.png new file mode 100644 index 00000000..3e0d794f Binary files /dev/null and b/src/quickcontrols2/imagine/images/pageindicator-delegate-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/pageindicator-delegate-pressed@3x.png b/src/quickcontrols2/imagine/images/pageindicator-delegate-pressed@3x.png new file mode 100644 index 00000000..397501a7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/pageindicator-delegate-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/pageindicator-delegate-pressed@4x.png b/src/quickcontrols2/imagine/images/pageindicator-delegate-pressed@4x.png new file mode 100644 index 00000000..f741a896 Binary files /dev/null and b/src/quickcontrols2/imagine/images/pageindicator-delegate-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/pageindicator-delegate.png b/src/quickcontrols2/imagine/images/pageindicator-delegate.png new file mode 100644 index 00000000..84d23cd1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/pageindicator-delegate.png differ diff --git a/src/quickcontrols2/imagine/images/pageindicator-delegate@2x.png b/src/quickcontrols2/imagine/images/pageindicator-delegate@2x.png new file mode 100644 index 00000000..0e706372 Binary files /dev/null and b/src/quickcontrols2/imagine/images/pageindicator-delegate@2x.png differ diff --git a/src/quickcontrols2/imagine/images/pageindicator-delegate@3x.png b/src/quickcontrols2/imagine/images/pageindicator-delegate@3x.png new file mode 100644 index 00000000..85af5a4e Binary files /dev/null and b/src/quickcontrols2/imagine/images/pageindicator-delegate@3x.png differ diff --git a/src/quickcontrols2/imagine/images/pageindicator-delegate@4x.png b/src/quickcontrols2/imagine/images/pageindicator-delegate@4x.png new file mode 100644 index 00000000..0aacbab1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/pageindicator-delegate@4x.png differ diff --git a/src/quickcontrols2/imagine/images/pane-background.9.png b/src/quickcontrols2/imagine/images/pane-background.9.png new file mode 100644 index 00000000..658f4863 Binary files /dev/null and b/src/quickcontrols2/imagine/images/pane-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/pane-background@2x.9.png b/src/quickcontrols2/imagine/images/pane-background@2x.9.png new file mode 100644 index 00000000..a84ac04a Binary files /dev/null and b/src/quickcontrols2/imagine/images/pane-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/pane-background@3x.9.png b/src/quickcontrols2/imagine/images/pane-background@3x.9.png new file mode 100644 index 00000000..2b1c4da9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/pane-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/pane-background@4x.9.png b/src/quickcontrols2/imagine/images/pane-background@4x.9.png new file mode 100644 index 00000000..90295db4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/pane-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/popup-background.9.png b/src/quickcontrols2/imagine/images/popup-background.9.png new file mode 100644 index 00000000..c842b5ff Binary files /dev/null and b/src/quickcontrols2/imagine/images/popup-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/popup-background@2x.9.png b/src/quickcontrols2/imagine/images/popup-background@2x.9.png new file mode 100644 index 00000000..ca23df1f Binary files /dev/null and b/src/quickcontrols2/imagine/images/popup-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/popup-background@3x.9.png b/src/quickcontrols2/imagine/images/popup-background@3x.9.png new file mode 100644 index 00000000..46cd4065 Binary files /dev/null and b/src/quickcontrols2/imagine/images/popup-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/popup-background@4x.9.png b/src/quickcontrols2/imagine/images/popup-background@4x.9.png new file mode 100644 index 00000000..3da74119 Binary files /dev/null and b/src/quickcontrols2/imagine/images/popup-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/popup-overlay-modal.png b/src/quickcontrols2/imagine/images/popup-overlay-modal.png new file mode 100644 index 00000000..d4a43d1c Binary files /dev/null and b/src/quickcontrols2/imagine/images/popup-overlay-modal.png differ diff --git a/src/quickcontrols2/imagine/images/popup-overlay-modal@2x.png b/src/quickcontrols2/imagine/images/popup-overlay-modal@2x.png new file mode 100644 index 00000000..c9a8f412 Binary files /dev/null and b/src/quickcontrols2/imagine/images/popup-overlay-modal@2x.png differ diff --git a/src/quickcontrols2/imagine/images/popup-overlay-modal@3x.png b/src/quickcontrols2/imagine/images/popup-overlay-modal@3x.png new file mode 100644 index 00000000..4a1084a9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/popup-overlay-modal@3x.png differ diff --git a/src/quickcontrols2/imagine/images/popup-overlay-modal@4x.png b/src/quickcontrols2/imagine/images/popup-overlay-modal@4x.png new file mode 100644 index 00000000..b92e600d Binary files /dev/null and b/src/quickcontrols2/imagine/images/popup-overlay-modal@4x.png differ diff --git a/src/quickcontrols2/imagine/images/popup-overlay.png b/src/quickcontrols2/imagine/images/popup-overlay.png new file mode 100644 index 00000000..b7da23c0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/popup-overlay.png differ diff --git a/src/quickcontrols2/imagine/images/popup-overlay@2x.png b/src/quickcontrols2/imagine/images/popup-overlay@2x.png new file mode 100644 index 00000000..23828d5a Binary files /dev/null and b/src/quickcontrols2/imagine/images/popup-overlay@2x.png differ diff --git a/src/quickcontrols2/imagine/images/popup-overlay@3x.png b/src/quickcontrols2/imagine/images/popup-overlay@3x.png new file mode 100644 index 00000000..d9d53828 Binary files /dev/null and b/src/quickcontrols2/imagine/images/popup-overlay@3x.png differ diff --git a/src/quickcontrols2/imagine/images/popup-overlay@4x.png b/src/quickcontrols2/imagine/images/popup-overlay@4x.png new file mode 100644 index 00000000..a76c1a3a Binary files /dev/null and b/src/quickcontrols2/imagine/images/popup-overlay@4x.png differ diff --git a/src/quickcontrols2/imagine/images/progressbar-animation.webp b/src/quickcontrols2/imagine/images/progressbar-animation.webp new file mode 100644 index 00000000..51c35c88 Binary files /dev/null and b/src/quickcontrols2/imagine/images/progressbar-animation.webp differ diff --git a/src/quickcontrols2/imagine/images/progressbar-animation@2x.webp b/src/quickcontrols2/imagine/images/progressbar-animation@2x.webp new file mode 100644 index 00000000..ee120630 Binary files /dev/null and b/src/quickcontrols2/imagine/images/progressbar-animation@2x.webp differ diff --git a/src/quickcontrols2/imagine/images/progressbar-animation@3x.webp b/src/quickcontrols2/imagine/images/progressbar-animation@3x.webp new file mode 100644 index 00000000..c2f94a74 Binary files /dev/null and b/src/quickcontrols2/imagine/images/progressbar-animation@3x.webp differ diff --git a/src/quickcontrols2/imagine/images/progressbar-animation@4x.webp b/src/quickcontrols2/imagine/images/progressbar-animation@4x.webp new file mode 100644 index 00000000..d49657e9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/progressbar-animation@4x.webp differ diff --git a/src/quickcontrols2/imagine/images/progressbar-background.9.png b/src/quickcontrols2/imagine/images/progressbar-background.9.png new file mode 100644 index 00000000..e1760070 Binary files /dev/null and b/src/quickcontrols2/imagine/images/progressbar-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/progressbar-background@2x.9.png b/src/quickcontrols2/imagine/images/progressbar-background@2x.9.png new file mode 100644 index 00000000..e69922d5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/progressbar-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/progressbar-background@3x.9.png b/src/quickcontrols2/imagine/images/progressbar-background@3x.9.png new file mode 100644 index 00000000..b3c43205 Binary files /dev/null and b/src/quickcontrols2/imagine/images/progressbar-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/progressbar-background@4x.9.png b/src/quickcontrols2/imagine/images/progressbar-background@4x.9.png new file mode 100644 index 00000000..905bdc32 Binary files /dev/null and b/src/quickcontrols2/imagine/images/progressbar-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/progressbar-mask.9.png b/src/quickcontrols2/imagine/images/progressbar-mask.9.png new file mode 100644 index 00000000..35a47dc8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/progressbar-mask.9.png differ diff --git a/src/quickcontrols2/imagine/images/progressbar-mask@2x.9.png b/src/quickcontrols2/imagine/images/progressbar-mask@2x.9.png new file mode 100644 index 00000000..23ed1a8c Binary files /dev/null and b/src/quickcontrols2/imagine/images/progressbar-mask@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/progressbar-mask@3x.9.png b/src/quickcontrols2/imagine/images/progressbar-mask@3x.9.png new file mode 100644 index 00000000..25bc843e Binary files /dev/null and b/src/quickcontrols2/imagine/images/progressbar-mask@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/progressbar-mask@4x.9.png b/src/quickcontrols2/imagine/images/progressbar-mask@4x.9.png new file mode 100644 index 00000000..645ff201 Binary files /dev/null and b/src/quickcontrols2/imagine/images/progressbar-mask@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/progressbar-progress.png b/src/quickcontrols2/imagine/images/progressbar-progress.png new file mode 100644 index 00000000..bb31dc9b Binary files /dev/null and b/src/quickcontrols2/imagine/images/progressbar-progress.png differ diff --git a/src/quickcontrols2/imagine/images/progressbar-progress@2x.png b/src/quickcontrols2/imagine/images/progressbar-progress@2x.png new file mode 100644 index 00000000..6bb464c9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/progressbar-progress@2x.png differ diff --git a/src/quickcontrols2/imagine/images/progressbar-progress@3x.png b/src/quickcontrols2/imagine/images/progressbar-progress@3x.png new file mode 100644 index 00000000..d514c727 Binary files /dev/null and b/src/quickcontrols2/imagine/images/progressbar-progress@3x.png differ diff --git a/src/quickcontrols2/imagine/images/progressbar-progress@4x.png b/src/quickcontrols2/imagine/images/progressbar-progress@4x.png new file mode 100644 index 00000000..abc8fa67 Binary files /dev/null and b/src/quickcontrols2/imagine/images/progressbar-progress@4x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-focused.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-focused.png new file mode 100644 index 00000000..2f9e5e18 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-focused.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-focused@2x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-focused@2x.png new file mode 100644 index 00000000..47ec5534 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-focused@3x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-focused@3x.png new file mode 100644 index 00000000..26cdebf8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-focused@4x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-focused@4x.png new file mode 100644 index 00000000..708e286e Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-hovered.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-hovered.png new file mode 100644 index 00000000..2f9e5e18 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-hovered@2x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-hovered@2x.png new file mode 100644 index 00000000..47ec5534 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-hovered@3x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-hovered@3x.png new file mode 100644 index 00000000..26cdebf8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-hovered@4x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-hovered@4x.png new file mode 100644 index 00000000..708e286e Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-pressed.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-pressed.png new file mode 100644 index 00000000..1e5ebca4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-pressed@2x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-pressed@2x.png new file mode 100644 index 00000000..6eaae9bf Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-pressed@3x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-pressed@3x.png new file mode 100644 index 00000000..e54a1624 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-pressed@4x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-pressed@4x.png new file mode 100644 index 00000000..7a7850ba Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-checked.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked.png new file mode 100644 index 00000000..83c85623 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-checked@2x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked@2x.png new file mode 100644 index 00000000..4bdeb456 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked@2x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-checked@3x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked@3x.png new file mode 100644 index 00000000..2230a8ce Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked@3x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-checked@4x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked@4x.png new file mode 100644 index 00000000..e3dce04e Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-checked@4x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-disabled.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-disabled.png new file mode 100644 index 00000000..05b8bfca Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-disabled@2x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-disabled@2x.png new file mode 100644 index 00000000..e26fa5de Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-disabled@3x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-disabled@3x.png new file mode 100644 index 00000000..c47e8c7d Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-disabled@4x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-disabled@4x.png new file mode 100644 index 00000000..bc66dde7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-focused.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-focused.png new file mode 100644 index 00000000..3001638d Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-focused.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-focused@2x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-focused@2x.png new file mode 100644 index 00000000..b9890714 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-focused@3x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-focused@3x.png new file mode 100644 index 00000000..b6221277 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-focused@4x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-focused@4x.png new file mode 100644 index 00000000..49ae2206 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-hovered.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-hovered.png new file mode 100644 index 00000000..3001638d Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-hovered@2x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-hovered@2x.png new file mode 100644 index 00000000..b9890714 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-hovered@3x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-hovered@3x.png new file mode 100644 index 00000000..b6221277 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-hovered@4x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-hovered@4x.png new file mode 100644 index 00000000..49ae2206 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-pressed.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-pressed.png new file mode 100644 index 00000000..76c7b4ed Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-pressed@2x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-pressed@2x.png new file mode 100644 index 00000000..d5d4cac6 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-pressed@3x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-pressed@3x.png new file mode 100644 index 00000000..ca2a1ed1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator-pressed@4x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator-pressed@4x.png new file mode 100644 index 00000000..1cb753d7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator.png b/src/quickcontrols2/imagine/images/radiobutton-indicator.png new file mode 100644 index 00000000..c05d4bfc Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator@2x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator@2x.png new file mode 100644 index 00000000..62744d27 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator@2x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator@3x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator@3x.png new file mode 100644 index 00000000..fa5d241e Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator@3x.png differ diff --git a/src/quickcontrols2/imagine/images/radiobutton-indicator@4x.png b/src/quickcontrols2/imagine/images/radiobutton-indicator@4x.png new file mode 100644 index 00000000..7db85e94 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiobutton-indicator@4x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background-disabled.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background-disabled.9.png new file mode 100644 index 00000000..23570729 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background-disabled@2x.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background-disabled@2x.9.png new file mode 100644 index 00000000..c7abb65c Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background-disabled@3x.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background-disabled@3x.9.png new file mode 100644 index 00000000..46b84d7d Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background-disabled@4x.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background-disabled@4x.9.png new file mode 100644 index 00000000..f4dfd338 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background-focused.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background-focused.9.png new file mode 100644 index 00000000..6ae574d5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background-focused@2x.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background-focused@2x.9.png new file mode 100644 index 00000000..6b61562c Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background-focused@3x.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background-focused@3x.9.png new file mode 100644 index 00000000..e46c0bf1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background-focused@4x.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background-focused@4x.9.png new file mode 100644 index 00000000..010444e8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background-highlighted.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background-highlighted.9.png new file mode 100644 index 00000000..e79d8e1d Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background-highlighted.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background-highlighted@2x.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background-highlighted@2x.9.png new file mode 100644 index 00000000..ea68d35f Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background-highlighted@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background-highlighted@3x.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background-highlighted@3x.9.png new file mode 100644 index 00000000..6d610415 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background-highlighted@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background-highlighted@4x.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background-highlighted@4x.9.png new file mode 100644 index 00000000..590cca96 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background-highlighted@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background-hovered.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background-hovered.9.png new file mode 100644 index 00000000..b8749743 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background-hovered@2x.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background-hovered@2x.9.png new file mode 100644 index 00000000..5a136a0c Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background-hovered@3x.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background-hovered@3x.9.png new file mode 100644 index 00000000..f47a366b Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background-hovered@4x.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background-hovered@4x.9.png new file mode 100644 index 00000000..9ecb680f Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background-pressed.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background-pressed.9.png new file mode 100644 index 00000000..6ae574d5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background-pressed.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background-pressed@2x.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background-pressed@2x.9.png new file mode 100644 index 00000000..6b61562c Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background-pressed@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background-pressed@3x.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background-pressed@3x.9.png new file mode 100644 index 00000000..e46c0bf1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background-pressed@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background-pressed@4x.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background-pressed@4x.9.png new file mode 100644 index 00000000..010444e8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background-pressed@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background.9.png new file mode 100644 index 00000000..b8749743 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background@2x.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background@2x.9.png new file mode 100644 index 00000000..5a136a0c Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background@3x.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background@3x.9.png new file mode 100644 index 00000000..f47a366b Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-background@4x.9.png b/src/quickcontrols2/imagine/images/radiodelegate-background@4x.9.png new file mode 100644 index 00000000..9ecb680f Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-focused.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-focused.png new file mode 100644 index 00000000..2f9e5e18 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-focused.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-focused@2x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-focused@2x.png new file mode 100644 index 00000000..47ec5534 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-focused@3x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-focused@3x.png new file mode 100644 index 00000000..26cdebf8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-focused@4x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-focused@4x.png new file mode 100644 index 00000000..708e286e Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-hovered.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-hovered.png new file mode 100644 index 00000000..2f9e5e18 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-hovered@2x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-hovered@2x.png new file mode 100644 index 00000000..47ec5534 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-hovered@3x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-hovered@3x.png new file mode 100644 index 00000000..26cdebf8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-hovered@4x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-hovered@4x.png new file mode 100644 index 00000000..708e286e Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-pressed.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-pressed.png new file mode 100644 index 00000000..1e5ebca4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-pressed@2x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-pressed@2x.png new file mode 100644 index 00000000..6eaae9bf Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-pressed@3x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-pressed@3x.png new file mode 100644 index 00000000..e54a1624 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-pressed@4x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-pressed@4x.png new file mode 100644 index 00000000..7a7850ba Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked.png new file mode 100644 index 00000000..83c85623 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked@2x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked@2x.png new file mode 100644 index 00000000..4bdeb456 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked@2x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked@3x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked@3x.png new file mode 100644 index 00000000..2230a8ce Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked@3x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked@4x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked@4x.png new file mode 100644 index 00000000..e3dce04e Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-checked@4x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-disabled.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-disabled.png new file mode 100644 index 00000000..05b8bfca Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-disabled@2x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-disabled@2x.png new file mode 100644 index 00000000..e26fa5de Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-disabled@3x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-disabled@3x.png new file mode 100644 index 00000000..c47e8c7d Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-disabled@4x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-disabled@4x.png new file mode 100644 index 00000000..bc66dde7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-focused.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-focused.png new file mode 100644 index 00000000..3001638d Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-focused.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-focused@2x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-focused@2x.png new file mode 100644 index 00000000..b9890714 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-focused@3x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-focused@3x.png new file mode 100644 index 00000000..b6221277 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-focused@4x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-focused@4x.png new file mode 100644 index 00000000..49ae2206 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-hovered.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-hovered.png new file mode 100644 index 00000000..3001638d Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-hovered@2x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-hovered@2x.png new file mode 100644 index 00000000..b9890714 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-hovered@3x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-hovered@3x.png new file mode 100644 index 00000000..b6221277 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-hovered@4x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-hovered@4x.png new file mode 100644 index 00000000..49ae2206 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-pressed.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-pressed.png new file mode 100644 index 00000000..76c7b4ed Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-pressed@2x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-pressed@2x.png new file mode 100644 index 00000000..d5d4cac6 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-pressed@3x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-pressed@3x.png new file mode 100644 index 00000000..ca2a1ed1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator-pressed@4x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator-pressed@4x.png new file mode 100644 index 00000000..1cb753d7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator.png new file mode 100644 index 00000000..c05d4bfc Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator@2x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator@2x.png new file mode 100644 index 00000000..62744d27 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator@2x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator@3x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator@3x.png new file mode 100644 index 00000000..fa5d241e Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator@3x.png differ diff --git a/src/quickcontrols2/imagine/images/radiodelegate-indicator@4x.png b/src/quickcontrols2/imagine/images/radiodelegate-indicator@4x.png new file mode 100644 index 00000000..7db85e94 Binary files /dev/null and b/src/quickcontrols2/imagine/images/radiodelegate-indicator@4x.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-background-horizontal.9.png b/src/quickcontrols2/imagine/images/rangeslider-background-horizontal.9.png new file mode 100644 index 00000000..c4e957ad Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-background-horizontal.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-background-horizontal@2x.9.png b/src/quickcontrols2/imagine/images/rangeslider-background-horizontal@2x.9.png new file mode 100644 index 00000000..6d839113 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-background-horizontal@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-background-horizontal@3x.9.png b/src/quickcontrols2/imagine/images/rangeslider-background-horizontal@3x.9.png new file mode 100644 index 00000000..6b2e634c Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-background-horizontal@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-background-horizontal@4x.9.png b/src/quickcontrols2/imagine/images/rangeslider-background-horizontal@4x.9.png new file mode 100644 index 00000000..969c791a Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-background-horizontal@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-background-vertical.9.png b/src/quickcontrols2/imagine/images/rangeslider-background-vertical.9.png new file mode 100644 index 00000000..f76e0b21 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-background-vertical.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-background-vertical@2x.9.png b/src/quickcontrols2/imagine/images/rangeslider-background-vertical@2x.9.png new file mode 100644 index 00000000..fecd0ab2 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-background-vertical@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-background-vertical@3x.9.png b/src/quickcontrols2/imagine/images/rangeslider-background-vertical@3x.9.png new file mode 100644 index 00000000..77a9c830 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-background-vertical@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-background-vertical@4x.9.png b/src/quickcontrols2/imagine/images/rangeslider-background-vertical@4x.9.png new file mode 100644 index 00000000..f1613684 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-background-vertical@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-disabled.png b/src/quickcontrols2/imagine/images/rangeslider-handle-disabled.png new file mode 100644 index 00000000..4934fb77 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-disabled@2x.png b/src/quickcontrols2/imagine/images/rangeslider-handle-disabled@2x.png new file mode 100644 index 00000000..451b719e Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-disabled@3x.png b/src/quickcontrols2/imagine/images/rangeslider-handle-disabled@3x.png new file mode 100644 index 00000000..1daffca7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-disabled@4x.png b/src/quickcontrols2/imagine/images/rangeslider-handle-disabled@4x.png new file mode 100644 index 00000000..64830707 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-focused-hovered.png b/src/quickcontrols2/imagine/images/rangeslider-handle-focused-hovered.png new file mode 100644 index 00000000..c2958f1b Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-focused-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-focused-hovered@2x.png b/src/quickcontrols2/imagine/images/rangeslider-handle-focused-hovered@2x.png new file mode 100644 index 00000000..12a4d1f8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-focused-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-focused-hovered@3x.png b/src/quickcontrols2/imagine/images/rangeslider-handle-focused-hovered@3x.png new file mode 100644 index 00000000..1696ac95 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-focused-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-focused-hovered@4x.png b/src/quickcontrols2/imagine/images/rangeslider-handle-focused-hovered@4x.png new file mode 100644 index 00000000..e1d13056 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-focused-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-focused-pressed.png b/src/quickcontrols2/imagine/images/rangeslider-handle-focused-pressed.png new file mode 100644 index 00000000..c2958f1b Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-focused-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-focused-pressed@2x.png b/src/quickcontrols2/imagine/images/rangeslider-handle-focused-pressed@2x.png new file mode 100644 index 00000000..12a4d1f8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-focused-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-focused-pressed@3x.png b/src/quickcontrols2/imagine/images/rangeslider-handle-focused-pressed@3x.png new file mode 100644 index 00000000..1696ac95 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-focused-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-focused-pressed@4x.png b/src/quickcontrols2/imagine/images/rangeslider-handle-focused-pressed@4x.png new file mode 100644 index 00000000..e1d13056 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-focused-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-focused.png b/src/quickcontrols2/imagine/images/rangeslider-handle-focused.png new file mode 100644 index 00000000..bdf8239a Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-focused.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-focused@2x.png b/src/quickcontrols2/imagine/images/rangeslider-handle-focused@2x.png new file mode 100644 index 00000000..9f887c5e Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-focused@3x.png b/src/quickcontrols2/imagine/images/rangeslider-handle-focused@3x.png new file mode 100644 index 00000000..8042d4c2 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-focused@4x.png b/src/quickcontrols2/imagine/images/rangeslider-handle-focused@4x.png new file mode 100644 index 00000000..e7e68c47 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-hovered.png b/src/quickcontrols2/imagine/images/rangeslider-handle-hovered.png new file mode 100644 index 00000000..4934fb77 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-hovered@2x.png b/src/quickcontrols2/imagine/images/rangeslider-handle-hovered@2x.png new file mode 100644 index 00000000..451b719e Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-hovered@3x.png b/src/quickcontrols2/imagine/images/rangeslider-handle-hovered@3x.png new file mode 100644 index 00000000..1daffca7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-hovered@4x.png b/src/quickcontrols2/imagine/images/rangeslider-handle-hovered@4x.png new file mode 100644 index 00000000..64830707 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-pressed.png b/src/quickcontrols2/imagine/images/rangeslider-handle-pressed.png new file mode 100644 index 00000000..4934fb77 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-pressed@2x.png b/src/quickcontrols2/imagine/images/rangeslider-handle-pressed@2x.png new file mode 100644 index 00000000..451b719e Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-pressed@3x.png b/src/quickcontrols2/imagine/images/rangeslider-handle-pressed@3x.png new file mode 100644 index 00000000..1daffca7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle-pressed@4x.png b/src/quickcontrols2/imagine/images/rangeslider-handle-pressed@4x.png new file mode 100644 index 00000000..64830707 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle.png b/src/quickcontrols2/imagine/images/rangeslider-handle.png new file mode 100644 index 00000000..fd72dedf Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle@2x.png b/src/quickcontrols2/imagine/images/rangeslider-handle@2x.png new file mode 100644 index 00000000..57eed9f8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle@2x.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle@3x.png b/src/quickcontrols2/imagine/images/rangeslider-handle@3x.png new file mode 100644 index 00000000..e217a644 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle@3x.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-handle@4x.png b/src/quickcontrols2/imagine/images/rangeslider-handle@4x.png new file mode 100644 index 00000000..c212b59f Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-handle@4x.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal-disabled.9.png b/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal-disabled.9.png new file mode 100644 index 00000000..7f7e6b93 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal-disabled@2x.9.png b/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal-disabled@2x.9.png new file mode 100644 index 00000000..cbf6fb63 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal-disabled@3x.9.png b/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal-disabled@3x.9.png new file mode 100644 index 00000000..643776b8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal-disabled@4x.9.png b/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal-disabled@4x.9.png new file mode 100644 index 00000000..d64acb90 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal.9.png b/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal.9.png new file mode 100644 index 00000000..43192f54 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal@2x.9.png b/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal@2x.9.png new file mode 100644 index 00000000..ebbbbf82 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal@3x.9.png b/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal@3x.9.png new file mode 100644 index 00000000..0a029b53 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal@4x.9.png b/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal@4x.9.png new file mode 100644 index 00000000..a1354169 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-progress-horizontal@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-progress-vertical-disabled.9.png b/src/quickcontrols2/imagine/images/rangeslider-progress-vertical-disabled.9.png new file mode 100644 index 00000000..a4edafc9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-progress-vertical-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-progress-vertical-disabled@2x.9.png b/src/quickcontrols2/imagine/images/rangeslider-progress-vertical-disabled@2x.9.png new file mode 100644 index 00000000..8c38226e Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-progress-vertical-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-progress-vertical-disabled@3x.9.png b/src/quickcontrols2/imagine/images/rangeslider-progress-vertical-disabled@3x.9.png new file mode 100644 index 00000000..a939bffd Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-progress-vertical-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-progress-vertical-disabled@4x.9.png b/src/quickcontrols2/imagine/images/rangeslider-progress-vertical-disabled@4x.9.png new file mode 100644 index 00000000..9f653770 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-progress-vertical-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-progress-vertical.9.png b/src/quickcontrols2/imagine/images/rangeslider-progress-vertical.9.png new file mode 100644 index 00000000..d3e877fc Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-progress-vertical.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-progress-vertical@2x.9.png b/src/quickcontrols2/imagine/images/rangeslider-progress-vertical@2x.9.png new file mode 100644 index 00000000..7790050e Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-progress-vertical@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-progress-vertical@3x.9.png b/src/quickcontrols2/imagine/images/rangeslider-progress-vertical@3x.9.png new file mode 100644 index 00000000..039d1987 Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-progress-vertical@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/rangeslider-progress-vertical@4x.9.png b/src/quickcontrols2/imagine/images/rangeslider-progress-vertical@4x.9.png new file mode 100644 index 00000000..b3051d1f Binary files /dev/null and b/src/quickcontrols2/imagine/images/rangeslider-progress-vertical@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-checked-focused.png b/src/quickcontrols2/imagine/images/roundbutton-background-checked-focused.png new file mode 100644 index 00000000..032a7caa Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-checked-focused.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-checked-focused@2x.png b/src/quickcontrols2/imagine/images/roundbutton-background-checked-focused@2x.png new file mode 100644 index 00000000..a2944b6a Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-checked-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-checked-focused@3x.png b/src/quickcontrols2/imagine/images/roundbutton-background-checked-focused@3x.png new file mode 100644 index 00000000..ffd4d210 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-checked-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-checked-focused@4x.png b/src/quickcontrols2/imagine/images/roundbutton-background-checked-focused@4x.png new file mode 100644 index 00000000..35a41fc5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-checked-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-checked-hovered.png b/src/quickcontrols2/imagine/images/roundbutton-background-checked-hovered.png new file mode 100644 index 00000000..032a7caa Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-checked-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-checked-hovered@2x.png b/src/quickcontrols2/imagine/images/roundbutton-background-checked-hovered@2x.png new file mode 100644 index 00000000..a2944b6a Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-checked-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-checked-hovered@3x.png b/src/quickcontrols2/imagine/images/roundbutton-background-checked-hovered@3x.png new file mode 100644 index 00000000..ffd4d210 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-checked-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-checked-hovered@4x.png b/src/quickcontrols2/imagine/images/roundbutton-background-checked-hovered@4x.png new file mode 100644 index 00000000..35a41fc5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-checked-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-checked.png b/src/quickcontrols2/imagine/images/roundbutton-background-checked.png new file mode 100644 index 00000000..d57d3894 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-checked.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-checked@2x.png b/src/quickcontrols2/imagine/images/roundbutton-background-checked@2x.png new file mode 100644 index 00000000..7c374528 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-checked@2x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-checked@3x.png b/src/quickcontrols2/imagine/images/roundbutton-background-checked@3x.png new file mode 100644 index 00000000..b0e0b9be Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-checked@3x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-checked@4x.png b/src/quickcontrols2/imagine/images/roundbutton-background-checked@4x.png new file mode 100644 index 00000000..748864ef Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-checked@4x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-disabled-checked.png b/src/quickcontrols2/imagine/images/roundbutton-background-disabled-checked.png new file mode 100644 index 00000000..e26fa5de Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-disabled-checked.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-disabled-checked@2x.png b/src/quickcontrols2/imagine/images/roundbutton-background-disabled-checked@2x.png new file mode 100644 index 00000000..bc66dde7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-disabled-checked@2x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-disabled-checked@3x.png b/src/quickcontrols2/imagine/images/roundbutton-background-disabled-checked@3x.png new file mode 100644 index 00000000..a0c5f9ad Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-disabled-checked@3x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-disabled-checked@4x.png b/src/quickcontrols2/imagine/images/roundbutton-background-disabled-checked@4x.png new file mode 100644 index 00000000..190210c8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-disabled-checked@4x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-disabled.png b/src/quickcontrols2/imagine/images/roundbutton-background-disabled.png new file mode 100644 index 00000000..e26fa5de Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-disabled@2x.png b/src/quickcontrols2/imagine/images/roundbutton-background-disabled@2x.png new file mode 100644 index 00000000..bc66dde7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-disabled@3x.png b/src/quickcontrols2/imagine/images/roundbutton-background-disabled@3x.png new file mode 100644 index 00000000..a0c5f9ad Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-disabled@4x.png b/src/quickcontrols2/imagine/images/roundbutton-background-disabled@4x.png new file mode 100644 index 00000000..190210c8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-focused.png b/src/quickcontrols2/imagine/images/roundbutton-background-focused.png new file mode 100644 index 00000000..832955c4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-focused.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-focused@2x.png b/src/quickcontrols2/imagine/images/roundbutton-background-focused@2x.png new file mode 100644 index 00000000..bb1ed2ac Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-focused@3x.png b/src/quickcontrols2/imagine/images/roundbutton-background-focused@3x.png new file mode 100644 index 00000000..cbf02913 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-focused@4x.png b/src/quickcontrols2/imagine/images/roundbutton-background-focused@4x.png new file mode 100644 index 00000000..1c765dee Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-focused.png b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-focused.png new file mode 100644 index 00000000..269a9d52 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-focused.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-focused@2x.png b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-focused@2x.png new file mode 100644 index 00000000..bd795651 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-focused@3x.png b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-focused@3x.png new file mode 100644 index 00000000..5ed0f662 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-focused@4x.png b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-focused@4x.png new file mode 100644 index 00000000..5bbb8e7a Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-hovered.png b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-hovered.png new file mode 100644 index 00000000..269a9d52 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-hovered@2x.png b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-hovered@2x.png new file mode 100644 index 00000000..bd795651 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-hovered@3x.png b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-hovered@3x.png new file mode 100644 index 00000000..5ed0f662 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-hovered@4x.png b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-hovered@4x.png new file mode 100644 index 00000000..5bbb8e7a Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-pressed.png b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-pressed.png new file mode 100644 index 00000000..a0fa8df0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-pressed@2x.png b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-pressed@2x.png new file mode 100644 index 00000000..3082a1d9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-pressed@3x.png b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-pressed@3x.png new file mode 100644 index 00000000..d32e8af0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-pressed@4x.png b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-pressed@4x.png new file mode 100644 index 00000000..f4916e0b Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-highlighted.png b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted.png new file mode 100644 index 00000000..f90e29f9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-highlighted@2x.png b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted@2x.png new file mode 100644 index 00000000..7dce11b4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted@2x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-highlighted@3x.png b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted@3x.png new file mode 100644 index 00000000..436abbdd Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted@3x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-highlighted@4x.png b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted@4x.png new file mode 100644 index 00000000..e728d6fa Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-highlighted@4x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-hovered.png b/src/quickcontrols2/imagine/images/roundbutton-background-hovered.png new file mode 100644 index 00000000..832955c4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-hovered@2x.png b/src/quickcontrols2/imagine/images/roundbutton-background-hovered@2x.png new file mode 100644 index 00000000..bb1ed2ac Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-hovered@3x.png b/src/quickcontrols2/imagine/images/roundbutton-background-hovered@3x.png new file mode 100644 index 00000000..cbf02913 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-hovered@4x.png b/src/quickcontrols2/imagine/images/roundbutton-background-hovered@4x.png new file mode 100644 index 00000000..1c765dee Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-pressed.png b/src/quickcontrols2/imagine/images/roundbutton-background-pressed.png new file mode 100644 index 00000000..d57d3894 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-pressed@2x.png b/src/quickcontrols2/imagine/images/roundbutton-background-pressed@2x.png new file mode 100644 index 00000000..7c374528 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-pressed@3x.png b/src/quickcontrols2/imagine/images/roundbutton-background-pressed@3x.png new file mode 100644 index 00000000..b0e0b9be Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background-pressed@4x.png b/src/quickcontrols2/imagine/images/roundbutton-background-pressed@4x.png new file mode 100644 index 00000000..748864ef Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background.png b/src/quickcontrols2/imagine/images/roundbutton-background.png new file mode 100644 index 00000000..d5d4cac6 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background@2x.png b/src/quickcontrols2/imagine/images/roundbutton-background@2x.png new file mode 100644 index 00000000..1cb753d7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background@2x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background@3x.png b/src/quickcontrols2/imagine/images/roundbutton-background@3x.png new file mode 100644 index 00000000..6cc304bf Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background@3x.png differ diff --git a/src/quickcontrols2/imagine/images/roundbutton-background@4x.png b/src/quickcontrols2/imagine/images/roundbutton-background@4x.png new file mode 100644 index 00000000..56ea82f6 Binary files /dev/null and b/src/quickcontrols2/imagine/images/roundbutton-background@4x.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle-disabled.png b/src/quickcontrols2/imagine/images/scrollbar-handle-disabled.png new file mode 100644 index 00000000..b0b95bed Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle-disabled@2x.png b/src/quickcontrols2/imagine/images/scrollbar-handle-disabled@2x.png new file mode 100644 index 00000000..8ab854b0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle-disabled@3x.png b/src/quickcontrols2/imagine/images/scrollbar-handle-disabled@3x.png new file mode 100644 index 00000000..f3c97231 Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle-disabled@4x.png b/src/quickcontrols2/imagine/images/scrollbar-handle-disabled@4x.png new file mode 100644 index 00000000..325469b8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-disabled.png b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-disabled.png new file mode 100644 index 00000000..236002ff Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-disabled@2x.png b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-disabled@2x.png new file mode 100644 index 00000000..abc3d2c0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-disabled@3x.png b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-disabled@3x.png new file mode 100644 index 00000000..e215cf5b Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-disabled@4x.png b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-disabled@4x.png new file mode 100644 index 00000000..c6ec0520 Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-hovered.png b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-hovered.png new file mode 100644 index 00000000..19b48f1d Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-hovered@2x.png b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-hovered@2x.png new file mode 100644 index 00000000..8f5abb84 Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-hovered@3x.png b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-hovered@3x.png new file mode 100644 index 00000000..73963d75 Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-hovered@4x.png b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-hovered@4x.png new file mode 100644 index 00000000..04d6131e Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-pressed.png b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-pressed.png new file mode 100644 index 00000000..f48f514d Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-pressed@2x.png b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-pressed@2x.png new file mode 100644 index 00000000..e31820ad Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-pressed@3x.png b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-pressed@3x.png new file mode 100644 index 00000000..278ba900 Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-pressed@4x.png b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-pressed@4x.png new file mode 100644 index 00000000..01e4e5c8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle-interactive.png b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive.png new file mode 100644 index 00000000..fd7832a6 Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle-interactive@2x.png b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive@2x.png new file mode 100644 index 00000000..bd63a1b1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive@2x.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle-interactive@3x.png b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive@3x.png new file mode 100644 index 00000000..31452954 Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive@3x.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle-interactive@4x.png b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive@4x.png new file mode 100644 index 00000000..6db4d81d Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle-interactive@4x.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle.png b/src/quickcontrols2/imagine/images/scrollbar-handle.png new file mode 100644 index 00000000..255f6c4d Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle@2x.png b/src/quickcontrols2/imagine/images/scrollbar-handle@2x.png new file mode 100644 index 00000000..2b69cef6 Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle@2x.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle@3x.png b/src/quickcontrols2/imagine/images/scrollbar-handle@3x.png new file mode 100644 index 00000000..6fdfa487 Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle@3x.png differ diff --git a/src/quickcontrols2/imagine/images/scrollbar-handle@4x.png b/src/quickcontrols2/imagine/images/scrollbar-handle@4x.png new file mode 100644 index 00000000..cc3205f1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollbar-handle@4x.png differ diff --git a/src/quickcontrols2/imagine/images/scrollindicator-handle.png b/src/quickcontrols2/imagine/images/scrollindicator-handle.png new file mode 100644 index 00000000..255f6c4d Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollindicator-handle.png differ diff --git a/src/quickcontrols2/imagine/images/scrollindicator-handle@2x.png b/src/quickcontrols2/imagine/images/scrollindicator-handle@2x.png new file mode 100644 index 00000000..2b69cef6 Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollindicator-handle@2x.png differ diff --git a/src/quickcontrols2/imagine/images/scrollindicator-handle@3x.png b/src/quickcontrols2/imagine/images/scrollindicator-handle@3x.png new file mode 100644 index 00000000..6fdfa487 Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollindicator-handle@3x.png differ diff --git a/src/quickcontrols2/imagine/images/scrollindicator-handle@4x.png b/src/quickcontrols2/imagine/images/scrollindicator-handle@4x.png new file mode 100644 index 00000000..cc3205f1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/scrollindicator-handle@4x.png differ diff --git a/src/quickcontrols2/imagine/images/slider-background-horizontal.9.png b/src/quickcontrols2/imagine/images/slider-background-horizontal.9.png new file mode 100644 index 00000000..c4e957ad Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-background-horizontal.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-background-horizontal@2x.9.png b/src/quickcontrols2/imagine/images/slider-background-horizontal@2x.9.png new file mode 100644 index 00000000..6d839113 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-background-horizontal@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-background-horizontal@3x.9.png b/src/quickcontrols2/imagine/images/slider-background-horizontal@3x.9.png new file mode 100644 index 00000000..6b2e634c Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-background-horizontal@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-background-horizontal@4x.9.png b/src/quickcontrols2/imagine/images/slider-background-horizontal@4x.9.png new file mode 100644 index 00000000..969c791a Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-background-horizontal@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-background-vertical.9.png b/src/quickcontrols2/imagine/images/slider-background-vertical.9.png new file mode 100644 index 00000000..f76e0b21 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-background-vertical.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-background-vertical@2x.9.png b/src/quickcontrols2/imagine/images/slider-background-vertical@2x.9.png new file mode 100644 index 00000000..fecd0ab2 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-background-vertical@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-background-vertical@3x.9.png b/src/quickcontrols2/imagine/images/slider-background-vertical@3x.9.png new file mode 100644 index 00000000..77a9c830 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-background-vertical@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-background-vertical@4x.9.png b/src/quickcontrols2/imagine/images/slider-background-vertical@4x.9.png new file mode 100644 index 00000000..f1613684 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-background-vertical@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-disabled.png b/src/quickcontrols2/imagine/images/slider-handle-disabled.png new file mode 100644 index 00000000..4934fb77 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-disabled@2x.png b/src/quickcontrols2/imagine/images/slider-handle-disabled@2x.png new file mode 100644 index 00000000..451b719e Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-disabled@3x.png b/src/quickcontrols2/imagine/images/slider-handle-disabled@3x.png new file mode 100644 index 00000000..1daffca7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-disabled@4x.png b/src/quickcontrols2/imagine/images/slider-handle-disabled@4x.png new file mode 100644 index 00000000..64830707 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-focused-hovered.png b/src/quickcontrols2/imagine/images/slider-handle-focused-hovered.png new file mode 100644 index 00000000..c2958f1b Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-focused-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-focused-hovered@2x.png b/src/quickcontrols2/imagine/images/slider-handle-focused-hovered@2x.png new file mode 100644 index 00000000..12a4d1f8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-focused-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-focused-hovered@3x.png b/src/quickcontrols2/imagine/images/slider-handle-focused-hovered@3x.png new file mode 100644 index 00000000..1696ac95 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-focused-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-focused-hovered@4x.png b/src/quickcontrols2/imagine/images/slider-handle-focused-hovered@4x.png new file mode 100644 index 00000000..e1d13056 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-focused-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-focused-pressed.png b/src/quickcontrols2/imagine/images/slider-handle-focused-pressed.png new file mode 100644 index 00000000..c2958f1b Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-focused-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-focused-pressed@2x.png b/src/quickcontrols2/imagine/images/slider-handle-focused-pressed@2x.png new file mode 100644 index 00000000..12a4d1f8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-focused-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-focused-pressed@3x.png b/src/quickcontrols2/imagine/images/slider-handle-focused-pressed@3x.png new file mode 100644 index 00000000..1696ac95 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-focused-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-focused-pressed@4x.png b/src/quickcontrols2/imagine/images/slider-handle-focused-pressed@4x.png new file mode 100644 index 00000000..e1d13056 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-focused-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-focused.png b/src/quickcontrols2/imagine/images/slider-handle-focused.png new file mode 100644 index 00000000..bdf8239a Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-focused.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-focused@2x.png b/src/quickcontrols2/imagine/images/slider-handle-focused@2x.png new file mode 100644 index 00000000..9f887c5e Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-focused@3x.png b/src/quickcontrols2/imagine/images/slider-handle-focused@3x.png new file mode 100644 index 00000000..8042d4c2 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-focused@4x.png b/src/quickcontrols2/imagine/images/slider-handle-focused@4x.png new file mode 100644 index 00000000..e7e68c47 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-hovered.png b/src/quickcontrols2/imagine/images/slider-handle-hovered.png new file mode 100644 index 00000000..4934fb77 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-hovered@2x.png b/src/quickcontrols2/imagine/images/slider-handle-hovered@2x.png new file mode 100644 index 00000000..451b719e Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-hovered@3x.png b/src/quickcontrols2/imagine/images/slider-handle-hovered@3x.png new file mode 100644 index 00000000..1daffca7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-hovered@4x.png b/src/quickcontrols2/imagine/images/slider-handle-hovered@4x.png new file mode 100644 index 00000000..64830707 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-pressed.png b/src/quickcontrols2/imagine/images/slider-handle-pressed.png new file mode 100644 index 00000000..4934fb77 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-pressed@2x.png b/src/quickcontrols2/imagine/images/slider-handle-pressed@2x.png new file mode 100644 index 00000000..451b719e Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-pressed@3x.png b/src/quickcontrols2/imagine/images/slider-handle-pressed@3x.png new file mode 100644 index 00000000..1daffca7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle-pressed@4x.png b/src/quickcontrols2/imagine/images/slider-handle-pressed@4x.png new file mode 100644 index 00000000..64830707 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle.png b/src/quickcontrols2/imagine/images/slider-handle.png new file mode 100644 index 00000000..fd72dedf Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle@2x.png b/src/quickcontrols2/imagine/images/slider-handle@2x.png new file mode 100644 index 00000000..57eed9f8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle@2x.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle@3x.png b/src/quickcontrols2/imagine/images/slider-handle@3x.png new file mode 100644 index 00000000..e217a644 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle@3x.png differ diff --git a/src/quickcontrols2/imagine/images/slider-handle@4x.png b/src/quickcontrols2/imagine/images/slider-handle@4x.png new file mode 100644 index 00000000..c212b59f Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-handle@4x.png differ diff --git a/src/quickcontrols2/imagine/images/slider-progress-horizontal-disabled.9.png b/src/quickcontrols2/imagine/images/slider-progress-horizontal-disabled.9.png new file mode 100644 index 00000000..7f7e6b93 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-progress-horizontal-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-progress-horizontal-disabled@2x.9.png b/src/quickcontrols2/imagine/images/slider-progress-horizontal-disabled@2x.9.png new file mode 100644 index 00000000..cbf6fb63 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-progress-horizontal-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-progress-horizontal-disabled@3x.9.png b/src/quickcontrols2/imagine/images/slider-progress-horizontal-disabled@3x.9.png new file mode 100644 index 00000000..643776b8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-progress-horizontal-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-progress-horizontal-disabled@4x.9.png b/src/quickcontrols2/imagine/images/slider-progress-horizontal-disabled@4x.9.png new file mode 100644 index 00000000..d64acb90 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-progress-horizontal-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-progress-horizontal.9.png b/src/quickcontrols2/imagine/images/slider-progress-horizontal.9.png new file mode 100644 index 00000000..43192f54 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-progress-horizontal.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-progress-horizontal@2x.9.png b/src/quickcontrols2/imagine/images/slider-progress-horizontal@2x.9.png new file mode 100644 index 00000000..ebbbbf82 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-progress-horizontal@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-progress-horizontal@3x.9.png b/src/quickcontrols2/imagine/images/slider-progress-horizontal@3x.9.png new file mode 100644 index 00000000..0a029b53 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-progress-horizontal@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-progress-horizontal@4x.9.png b/src/quickcontrols2/imagine/images/slider-progress-horizontal@4x.9.png new file mode 100644 index 00000000..a1354169 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-progress-horizontal@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-progress-vertical-disabled.9.png b/src/quickcontrols2/imagine/images/slider-progress-vertical-disabled.9.png new file mode 100644 index 00000000..a4edafc9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-progress-vertical-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-progress-vertical-disabled@2x.9.png b/src/quickcontrols2/imagine/images/slider-progress-vertical-disabled@2x.9.png new file mode 100644 index 00000000..8c38226e Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-progress-vertical-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-progress-vertical-disabled@3x.9.png b/src/quickcontrols2/imagine/images/slider-progress-vertical-disabled@3x.9.png new file mode 100644 index 00000000..a939bffd Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-progress-vertical-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-progress-vertical-disabled@4x.9.png b/src/quickcontrols2/imagine/images/slider-progress-vertical-disabled@4x.9.png new file mode 100644 index 00000000..9f653770 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-progress-vertical-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-progress-vertical.9.png b/src/quickcontrols2/imagine/images/slider-progress-vertical.9.png new file mode 100644 index 00000000..d3e877fc Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-progress-vertical.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-progress-vertical@2x.9.png b/src/quickcontrols2/imagine/images/slider-progress-vertical@2x.9.png new file mode 100644 index 00000000..7790050e Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-progress-vertical@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-progress-vertical@3x.9.png b/src/quickcontrols2/imagine/images/slider-progress-vertical@3x.9.png new file mode 100644 index 00000000..039d1987 Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-progress-vertical@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/slider-progress-vertical@4x.9.png b/src/quickcontrols2/imagine/images/slider-progress-vertical@4x.9.png new file mode 100644 index 00000000..b3051d1f Binary files /dev/null and b/src/quickcontrols2/imagine/images/slider-progress-vertical@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-background-disabled.9.png b/src/quickcontrols2/imagine/images/spinbox-background-disabled.9.png new file mode 100644 index 00000000..7baaeec5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-background-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-background-disabled@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-background-disabled@2x.9.png new file mode 100644 index 00000000..e0d59070 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-background-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-background-disabled@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-background-disabled@3x.9.png new file mode 100644 index 00000000..24b3054d Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-background-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-background-disabled@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-background-disabled@4x.9.png new file mode 100644 index 00000000..8ac4740a Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-background-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-background-editable.9.png b/src/quickcontrols2/imagine/images/spinbox-background-editable.9.png new file mode 100644 index 00000000..995c8276 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-background-editable.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-background-editable@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-background-editable@2x.9.png new file mode 100644 index 00000000..42c9dd6b Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-background-editable@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-background-editable@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-background-editable@3x.9.png new file mode 100644 index 00000000..4ee974a1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-background-editable@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-background-editable@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-background-editable@4x.9.png new file mode 100644 index 00000000..59b00915 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-background-editable@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-background-focused.9.png b/src/quickcontrols2/imagine/images/spinbox-background-focused.9.png new file mode 100644 index 00000000..27751eac Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-background-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-background-focused@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-background-focused@2x.9.png new file mode 100644 index 00000000..1692578f Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-background-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-background-focused@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-background-focused@3x.9.png new file mode 100644 index 00000000..4c44c1bb Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-background-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-background-focused@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-background-focused@4x.9.png new file mode 100644 index 00000000..f8632bf2 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-background-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-background.9.png b/src/quickcontrols2/imagine/images/spinbox-background.9.png new file mode 100644 index 00000000..ae8b043b Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-background@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-background@2x.9.png new file mode 100644 index 00000000..eaae097e Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-background@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-background@3x.9.png new file mode 100644 index 00000000..d8add811 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-background@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-background@4x.9.png new file mode 100644 index 00000000..d954febf Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-disabled.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-disabled.9.png new file mode 100644 index 00000000..b3953398 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-disabled@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-disabled@2x.9.png new file mode 100644 index 00000000..18e2ca65 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-disabled@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-disabled@3x.9.png new file mode 100644 index 00000000..ed6674b4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-disabled@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-disabled@4x.9.png new file mode 100644 index 00000000..0da2cf93 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-focused.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-focused.9.png new file mode 100644 index 00000000..46220a8e Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-focused@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-focused@2x.9.png new file mode 100644 index 00000000..b8ebb7b7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-focused@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-focused@3x.9.png new file mode 100644 index 00000000..10561d8d Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-focused@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-focused@4x.9.png new file mode 100644 index 00000000..ccd09d69 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-hovered.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-hovered.9.png new file mode 100644 index 00000000..46220a8e Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-hovered@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-hovered@2x.9.png new file mode 100644 index 00000000..b8ebb7b7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-hovered@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-hovered@3x.9.png new file mode 100644 index 00000000..10561d8d Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-hovered@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-hovered@4x.9.png new file mode 100644 index 00000000..ccd09d69 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-focused.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-focused.9.png new file mode 100644 index 00000000..23842de4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-focused@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-focused@2x.9.png new file mode 100644 index 00000000..e5078932 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-focused@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-focused@3x.9.png new file mode 100644 index 00000000..7edec0c9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-focused@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-focused@4x.9.png new file mode 100644 index 00000000..f6e5ff82 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-hovered.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-hovered.9.png new file mode 100644 index 00000000..23842de4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@2x.9.png new file mode 100644 index 00000000..e5078932 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@3x.9.png new file mode 100644 index 00000000..7edec0c9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@4x.9.png new file mode 100644 index 00000000..f6e5ff82 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-pressed.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-pressed.9.png new file mode 100644 index 00000000..b6917a03 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-pressed.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@2x.9.png new file mode 100644 index 00000000..8999d3e4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@3x.9.png new file mode 100644 index 00000000..77aa0044 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@4x.9.png new file mode 100644 index 00000000..4f2fd261 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored.9.png new file mode 100644 index 00000000..3c3da5b1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored@2x.9.png new file mode 100644 index 00000000..e0760e07 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored@3x.9.png new file mode 100644 index 00000000..c37080f5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored@4x.9.png new file mode 100644 index 00000000..bdc24823 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-mirrored@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-pressed.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-pressed.9.png new file mode 100644 index 00000000..65f2821b Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-pressed.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-pressed@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-pressed@2x.9.png new file mode 100644 index 00000000..010dd9d0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-pressed@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-pressed@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-pressed@3x.9.png new file mode 100644 index 00000000..f647f489 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-pressed@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-pressed@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-pressed@4x.9.png new file mode 100644 index 00000000..db0486d1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable-pressed@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable.9.png new file mode 100644 index 00000000..c3207f31 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable@2x.9.png new file mode 100644 index 00000000..c8c2630e Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable@3x.9.png new file mode 100644 index 00000000..d0a6c818 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable@4x.9.png new file mode 100644 index 00000000..40e89762 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-editable@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-focused.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-focused.9.png new file mode 100644 index 00000000..6ad31bb0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-focused@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-focused@2x.9.png new file mode 100644 index 00000000..6cc60b4b Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-focused@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-focused@3x.9.png new file mode 100644 index 00000000..722c7ec7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-focused@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-focused@4x.9.png new file mode 100644 index 00000000..64fa4ab6 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-hovered.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-hovered.9.png new file mode 100644 index 00000000..6ad31bb0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-hovered@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-hovered@2x.9.png new file mode 100644 index 00000000..6cc60b4b Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-hovered@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-hovered@3x.9.png new file mode 100644 index 00000000..722c7ec7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-hovered@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-hovered@4x.9.png new file mode 100644 index 00000000..64fa4ab6 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-disabled.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-disabled.9.png new file mode 100644 index 00000000..ac7da20e Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-disabled@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-disabled@2x.9.png new file mode 100644 index 00000000..a12f3615 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-disabled@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-disabled@3x.9.png new file mode 100644 index 00000000..de11317b Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-disabled@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-disabled@4x.9.png new file mode 100644 index 00000000..8be41f38 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-focused.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-focused.9.png new file mode 100644 index 00000000..6b6e5264 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-focused@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-focused@2x.9.png new file mode 100644 index 00000000..e0c36da3 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-focused@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-focused@3x.9.png new file mode 100644 index 00000000..ca2389da Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-focused@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-focused@4x.9.png new file mode 100644 index 00000000..7e6c5474 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-hovered.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-hovered.9.png new file mode 100644 index 00000000..6b6e5264 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-hovered@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-hovered@2x.9.png new file mode 100644 index 00000000..e0c36da3 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-hovered@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-hovered@3x.9.png new file mode 100644 index 00000000..ca2389da Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-hovered@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-hovered@4x.9.png new file mode 100644 index 00000000..7e6c5474 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-pressed.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-pressed.9.png new file mode 100644 index 00000000..d756679f Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-pressed.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-pressed@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-pressed@2x.9.png new file mode 100644 index 00000000..e49c7e89 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-pressed@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-pressed@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-pressed@3x.9.png new file mode 100644 index 00000000..6041ffdc Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-pressed@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-pressed@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-pressed@4x.9.png new file mode 100644 index 00000000..e23dda15 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored-pressed@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored.9.png new file mode 100644 index 00000000..58be2120 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored@2x.9.png new file mode 100644 index 00000000..709a1ab6 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored@3x.9.png new file mode 100644 index 00000000..ee5b5b82 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored@4x.9.png new file mode 100644 index 00000000..1e88d44d Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-mirrored@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-pressed.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-pressed.9.png new file mode 100644 index 00000000..9703314b Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-pressed.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-pressed@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-pressed@2x.9.png new file mode 100644 index 00000000..173eccfb Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-pressed@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-pressed@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-pressed@3x.9.png new file mode 100644 index 00000000..77737c75 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-pressed@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down-pressed@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down-pressed@4x.9.png new file mode 100644 index 00000000..6a2bb865 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down-pressed@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down.9.png new file mode 100644 index 00000000..a6c9679a Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down@2x.9.png new file mode 100644 index 00000000..bd14cdbb Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down@3x.9.png new file mode 100644 index 00000000..02d18c1d Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-down@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-down@4x.9.png new file mode 100644 index 00000000..9ec1bf04 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-down@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-disabled.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-disabled.9.png new file mode 100644 index 00000000..5fe5ab6a Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-disabled@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-disabled@2x.9.png new file mode 100644 index 00000000..f7a2a5d5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-disabled@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-disabled@3x.9.png new file mode 100644 index 00000000..3244c93f Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-disabled@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-disabled@4x.9.png new file mode 100644 index 00000000..82482005 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-focused.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-focused.9.png new file mode 100644 index 00000000..d291c50a Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-focused@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-focused@2x.9.png new file mode 100644 index 00000000..06e27b1b Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-focused@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-focused@3x.9.png new file mode 100644 index 00000000..34b43735 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-focused@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-focused@4x.9.png new file mode 100644 index 00000000..4a95cca4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-hovered.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-hovered.9.png new file mode 100644 index 00000000..d291c50a Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-hovered@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-hovered@2x.9.png new file mode 100644 index 00000000..06e27b1b Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-hovered@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-hovered@3x.9.png new file mode 100644 index 00000000..34b43735 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-hovered@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-hovered@4x.9.png new file mode 100644 index 00000000..4a95cca4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-focused.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-focused.9.png new file mode 100644 index 00000000..a98d5a1d Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-focused@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-focused@2x.9.png new file mode 100644 index 00000000..4b845860 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-focused@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-focused@3x.9.png new file mode 100644 index 00000000..da241c07 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-focused@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-focused@4x.9.png new file mode 100644 index 00000000..d1333671 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-hovered.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-hovered.9.png new file mode 100644 index 00000000..a98d5a1d Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@2x.9.png new file mode 100644 index 00000000..4b845860 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@3x.9.png new file mode 100644 index 00000000..da241c07 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@4x.9.png new file mode 100644 index 00000000..d1333671 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-pressed.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-pressed.9.png new file mode 100644 index 00000000..793e009d Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-pressed.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@2x.9.png new file mode 100644 index 00000000..aca00c57 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@3x.9.png new file mode 100644 index 00000000..a49b9549 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@4x.9.png new file mode 100644 index 00000000..e0814f3b Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored.9.png new file mode 100644 index 00000000..ac4c46d1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored@2x.9.png new file mode 100644 index 00000000..b1c335ee Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored@3x.9.png new file mode 100644 index 00000000..3f0d9f2f Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored@4x.9.png new file mode 100644 index 00000000..cac6eca8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-mirrored@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-pressed.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-pressed.9.png new file mode 100644 index 00000000..87a1ae7a Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-pressed.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-pressed@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-pressed@2x.9.png new file mode 100644 index 00000000..95c5ea06 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-pressed@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-pressed@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-pressed@3x.9.png new file mode 100644 index 00000000..3ed6cddf Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-pressed@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-pressed@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-pressed@4x.9.png new file mode 100644 index 00000000..8f5e3f02 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable-pressed@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable.9.png new file mode 100644 index 00000000..b3cc7bea Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable@2x.9.png new file mode 100644 index 00000000..51313f59 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable@3x.9.png new file mode 100644 index 00000000..8db540f5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable@4x.9.png new file mode 100644 index 00000000..310400a2 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-editable@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-focused.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-focused.9.png new file mode 100644 index 00000000..d88bd00d Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-focused@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-focused@2x.9.png new file mode 100644 index 00000000..77dbb52a Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-focused@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-focused@3x.9.png new file mode 100644 index 00000000..0739b1b1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-focused@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-focused@4x.9.png new file mode 100644 index 00000000..d53ee543 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-hovered.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-hovered.9.png new file mode 100644 index 00000000..d88bd00d Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-hovered@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-hovered@2x.9.png new file mode 100644 index 00000000..77dbb52a Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-hovered@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-hovered@3x.9.png new file mode 100644 index 00000000..0739b1b1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-hovered@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-hovered@4x.9.png new file mode 100644 index 00000000..d53ee543 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-disabled.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-disabled.9.png new file mode 100644 index 00000000..53f6d7e5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-disabled@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-disabled@2x.9.png new file mode 100644 index 00000000..7c7bb214 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-disabled@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-disabled@3x.9.png new file mode 100644 index 00000000..5a69027c Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-disabled@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-disabled@4x.9.png new file mode 100644 index 00000000..fe2171a5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-focused.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-focused.9.png new file mode 100644 index 00000000..cf31f936 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-focused@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-focused@2x.9.png new file mode 100644 index 00000000..48b8861e Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-focused@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-focused@3x.9.png new file mode 100644 index 00000000..d6a41720 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-focused@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-focused@4x.9.png new file mode 100644 index 00000000..e0c7e374 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-hovered.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-hovered.9.png new file mode 100644 index 00000000..cf31f936 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-hovered@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-hovered@2x.9.png new file mode 100644 index 00000000..48b8861e Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-hovered@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-hovered@3x.9.png new file mode 100644 index 00000000..d6a41720 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-hovered@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-hovered@4x.9.png new file mode 100644 index 00000000..e0c7e374 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-pressed.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-pressed.9.png new file mode 100644 index 00000000..4548cddd Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-pressed.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-pressed@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-pressed@2x.9.png new file mode 100644 index 00000000..c5fb9d1b Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-pressed@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-pressed@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-pressed@3x.9.png new file mode 100644 index 00000000..ffbe520a Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-pressed@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-pressed@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-pressed@4x.9.png new file mode 100644 index 00000000..784f9bee Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored-pressed@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored.9.png new file mode 100644 index 00000000..f2679457 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored@2x.9.png new file mode 100644 index 00000000..7f07e625 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored@3x.9.png new file mode 100644 index 00000000..0b060816 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored@4x.9.png new file mode 100644 index 00000000..df76dfce Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-mirrored@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-pressed.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-pressed.9.png new file mode 100644 index 00000000..cbba897f Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-pressed.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-pressed@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-pressed@2x.9.png new file mode 100644 index 00000000..a49e11fa Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-pressed@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-pressed@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-pressed@3x.9.png new file mode 100644 index 00000000..720e4543 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-pressed@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up-pressed@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up-pressed@4x.9.png new file mode 100644 index 00000000..46333e3d Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up-pressed@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up.9.png new file mode 100644 index 00000000..67cbe434 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up@2x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up@2x.9.png new file mode 100644 index 00000000..8e804b87 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up@3x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up@3x.9.png new file mode 100644 index 00000000..15baec74 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/spinbox-indicator-up@4x.9.png b/src/quickcontrols2/imagine/images/spinbox-indicator-up@4x.9.png new file mode 100644 index 00000000..7112de67 Binary files /dev/null and b/src/quickcontrols2/imagine/images/spinbox-indicator-up@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/splitview-handle-disabled.png b/src/quickcontrols2/imagine/images/splitview-handle-disabled.png new file mode 100644 index 00000000..8ab854b0 Binary files /dev/null and b/src/quickcontrols2/imagine/images/splitview-handle-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/splitview-handle-disabled@2x.png b/src/quickcontrols2/imagine/images/splitview-handle-disabled@2x.png new file mode 100644 index 00000000..325469b8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/splitview-handle-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/splitview-handle-disabled@3x.png b/src/quickcontrols2/imagine/images/splitview-handle-disabled@3x.png new file mode 100644 index 00000000..5357e847 Binary files /dev/null and b/src/quickcontrols2/imagine/images/splitview-handle-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/splitview-handle-disabled@4x.png b/src/quickcontrols2/imagine/images/splitview-handle-disabled@4x.png new file mode 100644 index 00000000..e215cf5b Binary files /dev/null and b/src/quickcontrols2/imagine/images/splitview-handle-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/splitview-handle-hovered.png b/src/quickcontrols2/imagine/images/splitview-handle-hovered.png new file mode 100644 index 00000000..429d5508 Binary files /dev/null and b/src/quickcontrols2/imagine/images/splitview-handle-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/splitview-handle-hovered@2x.png b/src/quickcontrols2/imagine/images/splitview-handle-hovered@2x.png new file mode 100644 index 00000000..6f17b06e Binary files /dev/null and b/src/quickcontrols2/imagine/images/splitview-handle-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/splitview-handle-hovered@3x.png b/src/quickcontrols2/imagine/images/splitview-handle-hovered@3x.png new file mode 100644 index 00000000..11dcfa26 Binary files /dev/null and b/src/quickcontrols2/imagine/images/splitview-handle-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/splitview-handle-hovered@4x.png b/src/quickcontrols2/imagine/images/splitview-handle-hovered@4x.png new file mode 100644 index 00000000..73963d75 Binary files /dev/null and b/src/quickcontrols2/imagine/images/splitview-handle-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/splitview-handle-pressed.png b/src/quickcontrols2/imagine/images/splitview-handle-pressed.png new file mode 100644 index 00000000..6e00db20 Binary files /dev/null and b/src/quickcontrols2/imagine/images/splitview-handle-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/splitview-handle-pressed@2x.png b/src/quickcontrols2/imagine/images/splitview-handle-pressed@2x.png new file mode 100644 index 00000000..e1392de6 Binary files /dev/null and b/src/quickcontrols2/imagine/images/splitview-handle-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/splitview-handle-pressed@3x.png b/src/quickcontrols2/imagine/images/splitview-handle-pressed@3x.png new file mode 100644 index 00000000..ff6a397f Binary files /dev/null and b/src/quickcontrols2/imagine/images/splitview-handle-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/splitview-handle-pressed@4x.png b/src/quickcontrols2/imagine/images/splitview-handle-pressed@4x.png new file mode 100644 index 00000000..278ba900 Binary files /dev/null and b/src/quickcontrols2/imagine/images/splitview-handle-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/splitview-handle.png b/src/quickcontrols2/imagine/images/splitview-handle.png new file mode 100644 index 00000000..2b69cef6 Binary files /dev/null and b/src/quickcontrols2/imagine/images/splitview-handle.png differ diff --git a/src/quickcontrols2/imagine/images/splitview-handle@2x.png b/src/quickcontrols2/imagine/images/splitview-handle@2x.png new file mode 100644 index 00000000..cc3205f1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/splitview-handle@2x.png differ diff --git a/src/quickcontrols2/imagine/images/splitview-handle@3x.png b/src/quickcontrols2/imagine/images/splitview-handle@3x.png new file mode 100644 index 00000000..b8be2b4d Binary files /dev/null and b/src/quickcontrols2/imagine/images/splitview-handle@3x.png differ diff --git a/src/quickcontrols2/imagine/images/splitview-handle@4x.png b/src/quickcontrols2/imagine/images/splitview-handle@4x.png new file mode 100644 index 00000000..31452954 Binary files /dev/null and b/src/quickcontrols2/imagine/images/splitview-handle@4x.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background-disabled.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background-disabled.9.png new file mode 100644 index 00000000..23570729 Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background-disabled@2x.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background-disabled@2x.9.png new file mode 100644 index 00000000..c7abb65c Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background-disabled@3x.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background-disabled@3x.9.png new file mode 100644 index 00000000..46b84d7d Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background-disabled@4x.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background-disabled@4x.9.png new file mode 100644 index 00000000..f4dfd338 Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background-focused.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background-focused.9.png new file mode 100644 index 00000000..6ae574d5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background-focused@2x.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background-focused@2x.9.png new file mode 100644 index 00000000..6b61562c Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background-focused@3x.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background-focused@3x.9.png new file mode 100644 index 00000000..e46c0bf1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background-focused@4x.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background-focused@4x.9.png new file mode 100644 index 00000000..010444e8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background-highlighted.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background-highlighted.9.png new file mode 100644 index 00000000..e79d8e1d Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background-highlighted.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background-highlighted@2x.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background-highlighted@2x.9.png new file mode 100644 index 00000000..ea68d35f Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background-highlighted@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background-highlighted@3x.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background-highlighted@3x.9.png new file mode 100644 index 00000000..6d610415 Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background-highlighted@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background-highlighted@4x.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background-highlighted@4x.9.png new file mode 100644 index 00000000..590cca96 Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background-highlighted@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background-hovered.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background-hovered.9.png new file mode 100644 index 00000000..b8749743 Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background-hovered@2x.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background-hovered@2x.9.png new file mode 100644 index 00000000..5a136a0c Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background-hovered@3x.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background-hovered@3x.9.png new file mode 100644 index 00000000..f47a366b Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background-hovered@4x.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background-hovered@4x.9.png new file mode 100644 index 00000000..9ecb680f Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background-pressed.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background-pressed.9.png new file mode 100644 index 00000000..6ae574d5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background-pressed.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background-pressed@2x.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background-pressed@2x.9.png new file mode 100644 index 00000000..6b61562c Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background-pressed@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background-pressed@3x.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background-pressed@3x.9.png new file mode 100644 index 00000000..e46c0bf1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background-pressed@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background-pressed@4x.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background-pressed@4x.9.png new file mode 100644 index 00000000..010444e8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background-pressed@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background.9.png new file mode 100644 index 00000000..b8749743 Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background@2x.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background@2x.9.png new file mode 100644 index 00000000..5a136a0c Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background@3x.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background@3x.9.png new file mode 100644 index 00000000..f47a366b Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/swipedelegate-background@4x.9.png b/src/quickcontrols2/imagine/images/swipedelegate-background@4x.9.png new file mode 100644 index 00000000..9ecb680f Binary files /dev/null and b/src/quickcontrols2/imagine/images/swipedelegate-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/switch-handle-disabled.png b/src/quickcontrols2/imagine/images/switch-handle-disabled.png new file mode 100644 index 00000000..595dd546 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-handle-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/switch-handle-disabled@2x.png b/src/quickcontrols2/imagine/images/switch-handle-disabled@2x.png new file mode 100644 index 00000000..5be736aa Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-handle-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-handle-disabled@3x.png b/src/quickcontrols2/imagine/images/switch-handle-disabled@3x.png new file mode 100644 index 00000000..c8002ca3 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-handle-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-handle-disabled@4x.png b/src/quickcontrols2/imagine/images/switch-handle-disabled@4x.png new file mode 100644 index 00000000..00e70c1b Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-handle-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-handle-pressed.png b/src/quickcontrols2/imagine/images/switch-handle-pressed.png new file mode 100644 index 00000000..595dd546 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-handle-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/switch-handle-pressed@2x.png b/src/quickcontrols2/imagine/images/switch-handle-pressed@2x.png new file mode 100644 index 00000000..5be736aa Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-handle-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-handle-pressed@3x.png b/src/quickcontrols2/imagine/images/switch-handle-pressed@3x.png new file mode 100644 index 00000000..c8002ca3 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-handle-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-handle-pressed@4x.png b/src/quickcontrols2/imagine/images/switch-handle-pressed@4x.png new file mode 100644 index 00000000..00e70c1b Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-handle-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-handle.png b/src/quickcontrols2/imagine/images/switch-handle.png new file mode 100644 index 00000000..15649c34 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-handle.png differ diff --git a/src/quickcontrols2/imagine/images/switch-handle@2x.png b/src/quickcontrols2/imagine/images/switch-handle@2x.png new file mode 100644 index 00000000..04f84ed9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-handle@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-handle@3x.png b/src/quickcontrols2/imagine/images/switch-handle@3x.png new file mode 100644 index 00000000..e0cfb637 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-handle@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-handle@4x.png b/src/quickcontrols2/imagine/images/switch-handle@4x.png new file mode 100644 index 00000000..73fa381a Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-handle@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-checked-focused.png b/src/quickcontrols2/imagine/images/switch-indicator-checked-focused.png new file mode 100644 index 00000000..7f5ba5df Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-checked-focused.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-checked-focused@2x.png b/src/quickcontrols2/imagine/images/switch-indicator-checked-focused@2x.png new file mode 100644 index 00000000..a0090df4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-checked-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-checked-focused@3x.png b/src/quickcontrols2/imagine/images/switch-indicator-checked-focused@3x.png new file mode 100644 index 00000000..0c7e5264 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-checked-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-checked-focused@4x.png b/src/quickcontrols2/imagine/images/switch-indicator-checked-focused@4x.png new file mode 100644 index 00000000..3a5e1d36 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-checked-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-checked-hovered.png b/src/quickcontrols2/imagine/images/switch-indicator-checked-hovered.png new file mode 100644 index 00000000..7f5ba5df Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-checked-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-checked-hovered@2x.png b/src/quickcontrols2/imagine/images/switch-indicator-checked-hovered@2x.png new file mode 100644 index 00000000..a0090df4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-checked-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-checked-hovered@3x.png b/src/quickcontrols2/imagine/images/switch-indicator-checked-hovered@3x.png new file mode 100644 index 00000000..0c7e5264 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-checked-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-checked-hovered@4x.png b/src/quickcontrols2/imagine/images/switch-indicator-checked-hovered@4x.png new file mode 100644 index 00000000..3a5e1d36 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-checked-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-checked-pressed.png b/src/quickcontrols2/imagine/images/switch-indicator-checked-pressed.png new file mode 100644 index 00000000..ecbc552a Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-checked-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-checked-pressed@2x.png b/src/quickcontrols2/imagine/images/switch-indicator-checked-pressed@2x.png new file mode 100644 index 00000000..07fe7241 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-checked-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-checked-pressed@3x.png b/src/quickcontrols2/imagine/images/switch-indicator-checked-pressed@3x.png new file mode 100644 index 00000000..8c65c27f Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-checked-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-checked-pressed@4x.png b/src/quickcontrols2/imagine/images/switch-indicator-checked-pressed@4x.png new file mode 100644 index 00000000..f6a1e476 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-checked-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-checked.png b/src/quickcontrols2/imagine/images/switch-indicator-checked.png new file mode 100644 index 00000000..2b7265cd Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-checked.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-checked@2x.png b/src/quickcontrols2/imagine/images/switch-indicator-checked@2x.png new file mode 100644 index 00000000..6ec88c7f Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-checked@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-checked@3x.png b/src/quickcontrols2/imagine/images/switch-indicator-checked@3x.png new file mode 100644 index 00000000..48c97985 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-checked@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-checked@4x.png b/src/quickcontrols2/imagine/images/switch-indicator-checked@4x.png new file mode 100644 index 00000000..e9f81807 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-checked@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-disabled.png b/src/quickcontrols2/imagine/images/switch-indicator-disabled.png new file mode 100644 index 00000000..9cfab791 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-disabled@2x.png b/src/quickcontrols2/imagine/images/switch-indicator-disabled@2x.png new file mode 100644 index 00000000..3bbbb8df Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-disabled@3x.png b/src/quickcontrols2/imagine/images/switch-indicator-disabled@3x.png new file mode 100644 index 00000000..80d9a746 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-disabled@4x.png b/src/quickcontrols2/imagine/images/switch-indicator-disabled@4x.png new file mode 100644 index 00000000..9ee7bfab Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-focused.png b/src/quickcontrols2/imagine/images/switch-indicator-focused.png new file mode 100644 index 00000000..4867bcac Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-focused.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-focused@2x.png b/src/quickcontrols2/imagine/images/switch-indicator-focused@2x.png new file mode 100644 index 00000000..d833a0cd Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-focused@3x.png b/src/quickcontrols2/imagine/images/switch-indicator-focused@3x.png new file mode 100644 index 00000000..a632b6ae Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-focused@4x.png b/src/quickcontrols2/imagine/images/switch-indicator-focused@4x.png new file mode 100644 index 00000000..b5affab7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-hovered.png b/src/quickcontrols2/imagine/images/switch-indicator-hovered.png new file mode 100644 index 00000000..4867bcac Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-hovered@2x.png b/src/quickcontrols2/imagine/images/switch-indicator-hovered@2x.png new file mode 100644 index 00000000..d833a0cd Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-hovered@3x.png b/src/quickcontrols2/imagine/images/switch-indicator-hovered@3x.png new file mode 100644 index 00000000..a632b6ae Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-hovered@4x.png b/src/quickcontrols2/imagine/images/switch-indicator-hovered@4x.png new file mode 100644 index 00000000..b5affab7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-pressed.png b/src/quickcontrols2/imagine/images/switch-indicator-pressed.png new file mode 100644 index 00000000..4fbbc060 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-pressed@2x.png b/src/quickcontrols2/imagine/images/switch-indicator-pressed@2x.png new file mode 100644 index 00000000..7939f943 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-pressed@3x.png b/src/quickcontrols2/imagine/images/switch-indicator-pressed@3x.png new file mode 100644 index 00000000..adcbe45b Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator-pressed@4x.png b/src/quickcontrols2/imagine/images/switch-indicator-pressed@4x.png new file mode 100644 index 00000000..74c0c77e Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator.png b/src/quickcontrols2/imagine/images/switch-indicator.png new file mode 100644 index 00000000..b6b4f1cd Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator@2x.png b/src/quickcontrols2/imagine/images/switch-indicator@2x.png new file mode 100644 index 00000000..bfeedeb7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator@3x.png b/src/quickcontrols2/imagine/images/switch-indicator@3x.png new file mode 100644 index 00000000..19e5ba2c Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switch-indicator@4x.png b/src/quickcontrols2/imagine/images/switch-indicator@4x.png new file mode 100644 index 00000000..9345cd4f Binary files /dev/null and b/src/quickcontrols2/imagine/images/switch-indicator@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-background-disabled.9.png b/src/quickcontrols2/imagine/images/switchdelegate-background-disabled.9.png new file mode 100644 index 00000000..23570729 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-background-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-background-disabled@2x.9.png b/src/quickcontrols2/imagine/images/switchdelegate-background-disabled@2x.9.png new file mode 100644 index 00000000..c7abb65c Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-background-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-background-disabled@3x.9.png b/src/quickcontrols2/imagine/images/switchdelegate-background-disabled@3x.9.png new file mode 100644 index 00000000..46b84d7d Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-background-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-background-disabled@4x.9.png b/src/quickcontrols2/imagine/images/switchdelegate-background-disabled@4x.9.png new file mode 100644 index 00000000..f4dfd338 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-background-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-background-focused.9.png b/src/quickcontrols2/imagine/images/switchdelegate-background-focused.9.png new file mode 100644 index 00000000..6ae574d5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-background-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-background-focused@2x.9.png b/src/quickcontrols2/imagine/images/switchdelegate-background-focused@2x.9.png new file mode 100644 index 00000000..6b61562c Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-background-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-background-focused@3x.9.png b/src/quickcontrols2/imagine/images/switchdelegate-background-focused@3x.9.png new file mode 100644 index 00000000..e46c0bf1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-background-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-background-focused@4x.9.png b/src/quickcontrols2/imagine/images/switchdelegate-background-focused@4x.9.png new file mode 100644 index 00000000..010444e8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-background-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-background-hovered.9.png b/src/quickcontrols2/imagine/images/switchdelegate-background-hovered.9.png new file mode 100644 index 00000000..b8749743 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-background-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-background-hovered@2x.9.png b/src/quickcontrols2/imagine/images/switchdelegate-background-hovered@2x.9.png new file mode 100644 index 00000000..5a136a0c Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-background-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-background-hovered@3x.9.png b/src/quickcontrols2/imagine/images/switchdelegate-background-hovered@3x.9.png new file mode 100644 index 00000000..f47a366b Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-background-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-background-hovered@4x.9.png b/src/quickcontrols2/imagine/images/switchdelegate-background-hovered@4x.9.png new file mode 100644 index 00000000..9ecb680f Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-background-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-background-pressed.9.png b/src/quickcontrols2/imagine/images/switchdelegate-background-pressed.9.png new file mode 100644 index 00000000..6ae574d5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-background-pressed.9.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-background-pressed@2x.9.png b/src/quickcontrols2/imagine/images/switchdelegate-background-pressed@2x.9.png new file mode 100644 index 00000000..6b61562c Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-background-pressed@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-background-pressed@3x.9.png b/src/quickcontrols2/imagine/images/switchdelegate-background-pressed@3x.9.png new file mode 100644 index 00000000..e46c0bf1 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-background-pressed@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-background-pressed@4x.9.png b/src/quickcontrols2/imagine/images/switchdelegate-background-pressed@4x.9.png new file mode 100644 index 00000000..010444e8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-background-pressed@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-background.9.png b/src/quickcontrols2/imagine/images/switchdelegate-background.9.png new file mode 100644 index 00000000..b8749743 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-background@2x.9.png b/src/quickcontrols2/imagine/images/switchdelegate-background@2x.9.png new file mode 100644 index 00000000..5a136a0c Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-background@3x.9.png b/src/quickcontrols2/imagine/images/switchdelegate-background@3x.9.png new file mode 100644 index 00000000..f47a366b Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-background@4x.9.png b/src/quickcontrols2/imagine/images/switchdelegate-background@4x.9.png new file mode 100644 index 00000000..9ecb680f Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-handle-disabled.png b/src/quickcontrols2/imagine/images/switchdelegate-handle-disabled.png new file mode 100644 index 00000000..595dd546 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-handle-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-handle-disabled@2x.png b/src/quickcontrols2/imagine/images/switchdelegate-handle-disabled@2x.png new file mode 100644 index 00000000..5be736aa Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-handle-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-handle-disabled@3x.png b/src/quickcontrols2/imagine/images/switchdelegate-handle-disabled@3x.png new file mode 100644 index 00000000..c8002ca3 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-handle-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-handle-disabled@4x.png b/src/quickcontrols2/imagine/images/switchdelegate-handle-disabled@4x.png new file mode 100644 index 00000000..00e70c1b Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-handle-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-handle-pressed.png b/src/quickcontrols2/imagine/images/switchdelegate-handle-pressed.png new file mode 100644 index 00000000..595dd546 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-handle-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-handle-pressed@2x.png b/src/quickcontrols2/imagine/images/switchdelegate-handle-pressed@2x.png new file mode 100644 index 00000000..5be736aa Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-handle-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-handle-pressed@3x.png b/src/quickcontrols2/imagine/images/switchdelegate-handle-pressed@3x.png new file mode 100644 index 00000000..c8002ca3 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-handle-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-handle-pressed@4x.png b/src/quickcontrols2/imagine/images/switchdelegate-handle-pressed@4x.png new file mode 100644 index 00000000..00e70c1b Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-handle-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-handle.png b/src/quickcontrols2/imagine/images/switchdelegate-handle.png new file mode 100644 index 00000000..15649c34 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-handle.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-handle@2x.png b/src/quickcontrols2/imagine/images/switchdelegate-handle@2x.png new file mode 100644 index 00000000..04f84ed9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-handle@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-handle@3x.png b/src/quickcontrols2/imagine/images/switchdelegate-handle@3x.png new file mode 100644 index 00000000..e0cfb637 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-handle@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-handle@4x.png b/src/quickcontrols2/imagine/images/switchdelegate-handle@4x.png new file mode 100644 index 00000000..73fa381a Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-handle@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-focused.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-focused.png new file mode 100644 index 00000000..7f5ba5df Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-focused.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-focused@2x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-focused@2x.png new file mode 100644 index 00000000..a0090df4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-focused@3x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-focused@3x.png new file mode 100644 index 00000000..0c7e5264 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-focused@4x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-focused@4x.png new file mode 100644 index 00000000..3a5e1d36 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-hovered.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-hovered.png new file mode 100644 index 00000000..7f5ba5df Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-hovered@2x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-hovered@2x.png new file mode 100644 index 00000000..a0090df4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-hovered@3x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-hovered@3x.png new file mode 100644 index 00000000..0c7e5264 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-hovered@4x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-hovered@4x.png new file mode 100644 index 00000000..3a5e1d36 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-pressed.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-pressed.png new file mode 100644 index 00000000..ecbc552a Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-pressed@2x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-pressed@2x.png new file mode 100644 index 00000000..07fe7241 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-pressed@3x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-pressed@3x.png new file mode 100644 index 00000000..8c65c27f Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-pressed@4x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-pressed@4x.png new file mode 100644 index 00000000..f6a1e476 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked.png new file mode 100644 index 00000000..2b7265cd Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked@2x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked@2x.png new file mode 100644 index 00000000..6ec88c7f Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked@3x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked@3x.png new file mode 100644 index 00000000..48c97985 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked@4x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked@4x.png new file mode 100644 index 00000000..e9f81807 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-checked@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-disabled.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-disabled.png new file mode 100644 index 00000000..9cfab791 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-disabled.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-disabled@2x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-disabled@2x.png new file mode 100644 index 00000000..3bbbb8df Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-disabled@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-disabled@3x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-disabled@3x.png new file mode 100644 index 00000000..80d9a746 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-disabled@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-disabled@4x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-disabled@4x.png new file mode 100644 index 00000000..9ee7bfab Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-disabled@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-focused.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-focused.png new file mode 100644 index 00000000..4867bcac Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-focused.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-focused@2x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-focused@2x.png new file mode 100644 index 00000000..d833a0cd Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-focused@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-focused@3x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-focused@3x.png new file mode 100644 index 00000000..a632b6ae Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-focused@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-focused@4x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-focused@4x.png new file mode 100644 index 00000000..b5affab7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-focused@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-hovered.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-hovered.png new file mode 100644 index 00000000..4867bcac Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-hovered.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-hovered@2x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-hovered@2x.png new file mode 100644 index 00000000..d833a0cd Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-hovered@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-hovered@3x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-hovered@3x.png new file mode 100644 index 00000000..a632b6ae Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-hovered@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-hovered@4x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-hovered@4x.png new file mode 100644 index 00000000..b5affab7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-hovered@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-pressed.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-pressed.png new file mode 100644 index 00000000..4fbbc060 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-pressed.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-pressed@2x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-pressed@2x.png new file mode 100644 index 00000000..7939f943 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-pressed@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-pressed@3x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-pressed@3x.png new file mode 100644 index 00000000..adcbe45b Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-pressed@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator-pressed@4x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator-pressed@4x.png new file mode 100644 index 00000000..74c0c77e Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator-pressed@4x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator.png new file mode 100644 index 00000000..b6b4f1cd Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator@2x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator@2x.png new file mode 100644 index 00000000..bfeedeb7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator@2x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator@3x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator@3x.png new file mode 100644 index 00000000..19e5ba2c Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator@3x.png differ diff --git a/src/quickcontrols2/imagine/images/switchdelegate-indicator@4x.png b/src/quickcontrols2/imagine/images/switchdelegate-indicator@4x.png new file mode 100644 index 00000000..9345cd4f Binary files /dev/null and b/src/quickcontrols2/imagine/images/switchdelegate-indicator@4x.png differ diff --git a/src/quickcontrols2/imagine/images/tabbar-background.png b/src/quickcontrols2/imagine/images/tabbar-background.png new file mode 100644 index 00000000..002efded Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbar-background.png differ diff --git a/src/quickcontrols2/imagine/images/tabbar-background@2x.png b/src/quickcontrols2/imagine/images/tabbar-background@2x.png new file mode 100644 index 00000000..aaa1cbaf Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbar-background@2x.png differ diff --git a/src/quickcontrols2/imagine/images/tabbar-background@3x.png b/src/quickcontrols2/imagine/images/tabbar-background@3x.png new file mode 100644 index 00000000..c4eb9e1f Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbar-background@3x.png differ diff --git a/src/quickcontrols2/imagine/images/tabbar-background@4x.png b/src/quickcontrols2/imagine/images/tabbar-background@4x.png new file mode 100644 index 00000000..4a4e234a Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbar-background@4x.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background-checked.9.png b/src/quickcontrols2/imagine/images/tabbutton-background-checked.9.png new file mode 100644 index 00000000..d2f0fa76 Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background-checked.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background-checked@2x.9.png b/src/quickcontrols2/imagine/images/tabbutton-background-checked@2x.9.png new file mode 100644 index 00000000..bee13292 Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background-checked@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background-checked@3x.9.png b/src/quickcontrols2/imagine/images/tabbutton-background-checked@3x.9.png new file mode 100644 index 00000000..70afb7d3 Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background-checked@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background-checked@4x.9.png b/src/quickcontrols2/imagine/images/tabbutton-background-checked@4x.9.png new file mode 100644 index 00000000..3a2015c4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background-checked@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background-disabled-checked.9.png b/src/quickcontrols2/imagine/images/tabbutton-background-disabled-checked.9.png new file mode 100644 index 00000000..a6d3011b Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background-disabled-checked.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background-disabled-checked@2x.9.png b/src/quickcontrols2/imagine/images/tabbutton-background-disabled-checked@2x.9.png new file mode 100644 index 00000000..8ebfa026 Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background-disabled-checked@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background-disabled-checked@3x.9.png b/src/quickcontrols2/imagine/images/tabbutton-background-disabled-checked@3x.9.png new file mode 100644 index 00000000..1d5a1d51 Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background-disabled-checked@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background-disabled-checked@4x.9.png b/src/quickcontrols2/imagine/images/tabbutton-background-disabled-checked@4x.9.png new file mode 100644 index 00000000..f06dc55f Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background-disabled-checked@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background-disabled.9.png b/src/quickcontrols2/imagine/images/tabbutton-background-disabled.9.png new file mode 100644 index 00000000..a6d3011b Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background-disabled@2x.9.png b/src/quickcontrols2/imagine/images/tabbutton-background-disabled@2x.9.png new file mode 100644 index 00000000..8ebfa026 Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background-disabled@3x.9.png b/src/quickcontrols2/imagine/images/tabbutton-background-disabled@3x.9.png new file mode 100644 index 00000000..1d5a1d51 Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background-disabled@4x.9.png b/src/quickcontrols2/imagine/images/tabbutton-background-disabled@4x.9.png new file mode 100644 index 00000000..f06dc55f Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background-hovered.9.png b/src/quickcontrols2/imagine/images/tabbutton-background-hovered.9.png new file mode 100644 index 00000000..3f945184 Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background-hovered@2x.9.png b/src/quickcontrols2/imagine/images/tabbutton-background-hovered@2x.9.png new file mode 100644 index 00000000..8a19720a Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background-hovered@3x.9.png b/src/quickcontrols2/imagine/images/tabbutton-background-hovered@3x.9.png new file mode 100644 index 00000000..eadcf457 Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background-hovered@4x.9.png b/src/quickcontrols2/imagine/images/tabbutton-background-hovered@4x.9.png new file mode 100644 index 00000000..8bf8e992 Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background-pressed.9.png b/src/quickcontrols2/imagine/images/tabbutton-background-pressed.9.png new file mode 100644 index 00000000..d48733ed Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background-pressed.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background-pressed@2x.9.png b/src/quickcontrols2/imagine/images/tabbutton-background-pressed@2x.9.png new file mode 100644 index 00000000..fbbaad7b Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background-pressed@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background-pressed@3x.9.png b/src/quickcontrols2/imagine/images/tabbutton-background-pressed@3x.9.png new file mode 100644 index 00000000..3a0ba70e Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background-pressed@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background-pressed@4x.9.png b/src/quickcontrols2/imagine/images/tabbutton-background-pressed@4x.9.png new file mode 100644 index 00000000..c04f124e Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background-pressed@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background.9.png b/src/quickcontrols2/imagine/images/tabbutton-background.9.png new file mode 100644 index 00000000..2266c722 Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background@2x.9.png b/src/quickcontrols2/imagine/images/tabbutton-background@2x.9.png new file mode 100644 index 00000000..b7adb7ad Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background@3x.9.png b/src/quickcontrols2/imagine/images/tabbutton-background@3x.9.png new file mode 100644 index 00000000..d8f4eae5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/tabbutton-background@4x.9.png b/src/quickcontrols2/imagine/images/tabbutton-background@4x.9.png new file mode 100644 index 00000000..066d35b3 Binary files /dev/null and b/src/quickcontrols2/imagine/images/tabbutton-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/textarea-background-disabled.9.png b/src/quickcontrols2/imagine/images/textarea-background-disabled.9.png new file mode 100644 index 00000000..97d48f8c Binary files /dev/null and b/src/quickcontrols2/imagine/images/textarea-background-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/textarea-background-disabled@2x.9.png b/src/quickcontrols2/imagine/images/textarea-background-disabled@2x.9.png new file mode 100644 index 00000000..f9ea1d49 Binary files /dev/null and b/src/quickcontrols2/imagine/images/textarea-background-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/textarea-background-disabled@3x.9.png b/src/quickcontrols2/imagine/images/textarea-background-disabled@3x.9.png new file mode 100644 index 00000000..04e7ef6f Binary files /dev/null and b/src/quickcontrols2/imagine/images/textarea-background-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/textarea-background-disabled@4x.9.png b/src/quickcontrols2/imagine/images/textarea-background-disabled@4x.9.png new file mode 100644 index 00000000..feaaa3bc Binary files /dev/null and b/src/quickcontrols2/imagine/images/textarea-background-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/textarea-background-focused.9.png b/src/quickcontrols2/imagine/images/textarea-background-focused.9.png new file mode 100644 index 00000000..1d73acfa Binary files /dev/null and b/src/quickcontrols2/imagine/images/textarea-background-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/textarea-background-focused@2x.9.png b/src/quickcontrols2/imagine/images/textarea-background-focused@2x.9.png new file mode 100644 index 00000000..5be4cd6f Binary files /dev/null and b/src/quickcontrols2/imagine/images/textarea-background-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/textarea-background-focused@3x.9.png b/src/quickcontrols2/imagine/images/textarea-background-focused@3x.9.png new file mode 100644 index 00000000..6ba3e246 Binary files /dev/null and b/src/quickcontrols2/imagine/images/textarea-background-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/textarea-background-focused@4x.9.png b/src/quickcontrols2/imagine/images/textarea-background-focused@4x.9.png new file mode 100644 index 00000000..366aa511 Binary files /dev/null and b/src/quickcontrols2/imagine/images/textarea-background-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/textarea-background.9.png b/src/quickcontrols2/imagine/images/textarea-background.9.png new file mode 100644 index 00000000..0b9ca9f3 Binary files /dev/null and b/src/quickcontrols2/imagine/images/textarea-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/textarea-background@2x.9.png b/src/quickcontrols2/imagine/images/textarea-background@2x.9.png new file mode 100644 index 00000000..a806ed1b Binary files /dev/null and b/src/quickcontrols2/imagine/images/textarea-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/textarea-background@3x.9.png b/src/quickcontrols2/imagine/images/textarea-background@3x.9.png new file mode 100644 index 00000000..547ef33c Binary files /dev/null and b/src/quickcontrols2/imagine/images/textarea-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/textarea-background@4x.9.png b/src/quickcontrols2/imagine/images/textarea-background@4x.9.png new file mode 100644 index 00000000..b759b1e8 Binary files /dev/null and b/src/quickcontrols2/imagine/images/textarea-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/textfield-background-disabled.9.png b/src/quickcontrols2/imagine/images/textfield-background-disabled.9.png new file mode 100644 index 00000000..312a1294 Binary files /dev/null and b/src/quickcontrols2/imagine/images/textfield-background-disabled.9.png differ diff --git a/src/quickcontrols2/imagine/images/textfield-background-disabled@2x.9.png b/src/quickcontrols2/imagine/images/textfield-background-disabled@2x.9.png new file mode 100644 index 00000000..2c6c7e91 Binary files /dev/null and b/src/quickcontrols2/imagine/images/textfield-background-disabled@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/textfield-background-disabled@3x.9.png b/src/quickcontrols2/imagine/images/textfield-background-disabled@3x.9.png new file mode 100644 index 00000000..1d1aca71 Binary files /dev/null and b/src/quickcontrols2/imagine/images/textfield-background-disabled@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/textfield-background-disabled@4x.9.png b/src/quickcontrols2/imagine/images/textfield-background-disabled@4x.9.png new file mode 100644 index 00000000..ed93182a Binary files /dev/null and b/src/quickcontrols2/imagine/images/textfield-background-disabled@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/textfield-background-focused.9.png b/src/quickcontrols2/imagine/images/textfield-background-focused.9.png new file mode 100644 index 00000000..1251f4e4 Binary files /dev/null and b/src/quickcontrols2/imagine/images/textfield-background-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/textfield-background-focused@2x.9.png b/src/quickcontrols2/imagine/images/textfield-background-focused@2x.9.png new file mode 100644 index 00000000..d535e8bc Binary files /dev/null and b/src/quickcontrols2/imagine/images/textfield-background-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/textfield-background-focused@3x.9.png b/src/quickcontrols2/imagine/images/textfield-background-focused@3x.9.png new file mode 100644 index 00000000..9fca3bb2 Binary files /dev/null and b/src/quickcontrols2/imagine/images/textfield-background-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/textfield-background-focused@4x.9.png b/src/quickcontrols2/imagine/images/textfield-background-focused@4x.9.png new file mode 100644 index 00000000..a275a52e Binary files /dev/null and b/src/quickcontrols2/imagine/images/textfield-background-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/textfield-background.9.png b/src/quickcontrols2/imagine/images/textfield-background.9.png new file mode 100644 index 00000000..7ea60968 Binary files /dev/null and b/src/quickcontrols2/imagine/images/textfield-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/textfield-background@2x.9.png b/src/quickcontrols2/imagine/images/textfield-background@2x.9.png new file mode 100644 index 00000000..0a4c3f2a Binary files /dev/null and b/src/quickcontrols2/imagine/images/textfield-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/textfield-background@3x.9.png b/src/quickcontrols2/imagine/images/textfield-background@3x.9.png new file mode 100644 index 00000000..e8552741 Binary files /dev/null and b/src/quickcontrols2/imagine/images/textfield-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/textfield-background@4x.9.png b/src/quickcontrols2/imagine/images/textfield-background@4x.9.png new file mode 100644 index 00000000..29ef5bb9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/textfield-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbar-background.png b/src/quickcontrols2/imagine/images/toolbar-background.png new file mode 100644 index 00000000..9c67cf27 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbar-background.png differ diff --git a/src/quickcontrols2/imagine/images/toolbar-background@2x.png b/src/quickcontrols2/imagine/images/toolbar-background@2x.png new file mode 100644 index 00000000..b0602519 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbar-background@2x.png differ diff --git a/src/quickcontrols2/imagine/images/toolbar-background@3x.png b/src/quickcontrols2/imagine/images/toolbar-background@3x.png new file mode 100644 index 00000000..7f227ca3 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbar-background@3x.png differ diff --git a/src/quickcontrols2/imagine/images/toolbar-background@4x.png b/src/quickcontrols2/imagine/images/toolbar-background@4x.png new file mode 100644 index 00000000..4788ecc7 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbar-background@4x.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-checked-focused.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-checked-focused.9.png new file mode 100644 index 00000000..287a2872 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-checked-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-checked-focused@2x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-checked-focused@2x.9.png new file mode 100644 index 00000000..aa844165 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-checked-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-checked-focused@3x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-checked-focused@3x.9.png new file mode 100644 index 00000000..8c682255 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-checked-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-checked-focused@4x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-checked-focused@4x.9.png new file mode 100644 index 00000000..89bdd096 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-checked-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-checked-hovered.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-checked-hovered.9.png new file mode 100644 index 00000000..287a2872 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-checked-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-checked-hovered@2x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-checked-hovered@2x.9.png new file mode 100644 index 00000000..aa844165 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-checked-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-checked-hovered@3x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-checked-hovered@3x.9.png new file mode 100644 index 00000000..8c682255 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-checked-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-checked-hovered@4x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-checked-hovered@4x.9.png new file mode 100644 index 00000000..89bdd096 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-checked-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-checked.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-checked.9.png new file mode 100644 index 00000000..287a2872 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-checked.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-checked@2x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-checked@2x.9.png new file mode 100644 index 00000000..aa844165 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-checked@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-checked@3x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-checked@3x.9.png new file mode 100644 index 00000000..8c682255 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-checked@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-checked@4x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-checked@4x.9.png new file mode 100644 index 00000000..89bdd096 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-checked@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-disabled-checked.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-disabled-checked.9.png new file mode 100644 index 00000000..287a2872 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-disabled-checked.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-disabled-checked@2x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-disabled-checked@2x.9.png new file mode 100644 index 00000000..aa844165 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-disabled-checked@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-disabled-checked@3x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-disabled-checked@3x.9.png new file mode 100644 index 00000000..8c682255 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-disabled-checked@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-disabled-checked@4x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-disabled-checked@4x.9.png new file mode 100644 index 00000000..89bdd096 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-disabled-checked@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-focused.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-focused.9.png new file mode 100644 index 00000000..287a2872 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-focused.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-focused@2x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-focused@2x.9.png new file mode 100644 index 00000000..aa844165 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-focused@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-focused@3x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-focused@3x.9.png new file mode 100644 index 00000000..8c682255 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-focused@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-focused@4x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-focused@4x.9.png new file mode 100644 index 00000000..89bdd096 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-focused@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-hovered.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-hovered.9.png new file mode 100644 index 00000000..287a2872 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-hovered.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-hovered@2x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-hovered@2x.9.png new file mode 100644 index 00000000..aa844165 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-hovered@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-hovered@3x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-hovered@3x.9.png new file mode 100644 index 00000000..8c682255 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-hovered@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-hovered@4x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-hovered@4x.9.png new file mode 100644 index 00000000..89bdd096 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-hovered@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-pressed.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-pressed.9.png new file mode 100644 index 00000000..287a2872 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-pressed.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-pressed@2x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-pressed@2x.9.png new file mode 100644 index 00000000..aa844165 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-pressed@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-pressed@3x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-pressed@3x.9.png new file mode 100644 index 00000000..8c682255 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-pressed@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background-pressed@4x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background-pressed@4x.9.png new file mode 100644 index 00000000..89bdd096 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background-pressed@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background.9.png b/src/quickcontrols2/imagine/images/toolbutton-background.9.png new file mode 100644 index 00000000..5a72a621 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background@2x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background@2x.9.png new file mode 100644 index 00000000..688a071a Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background@3x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background@3x.9.png new file mode 100644 index 00000000..64375a7e Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolbutton-background@4x.9.png b/src/quickcontrols2/imagine/images/toolbutton-background@4x.9.png new file mode 100644 index 00000000..96004a10 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolbutton-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolseparator-separator-horizontal.9.png b/src/quickcontrols2/imagine/images/toolseparator-separator-horizontal.9.png new file mode 100644 index 00000000..75e3e662 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolseparator-separator-horizontal.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolseparator-separator-horizontal@2x.9.png b/src/quickcontrols2/imagine/images/toolseparator-separator-horizontal@2x.9.png new file mode 100644 index 00000000..3662dec9 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolseparator-separator-horizontal@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolseparator-separator-horizontal@3x.9.png b/src/quickcontrols2/imagine/images/toolseparator-separator-horizontal@3x.9.png new file mode 100644 index 00000000..27714701 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolseparator-separator-horizontal@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolseparator-separator-horizontal@4x.9.png b/src/quickcontrols2/imagine/images/toolseparator-separator-horizontal@4x.9.png new file mode 100644 index 00000000..deeda9f5 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolseparator-separator-horizontal@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolseparator-separator-vertical.9.png b/src/quickcontrols2/imagine/images/toolseparator-separator-vertical.9.png new file mode 100644 index 00000000..5b607aaf Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolseparator-separator-vertical.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolseparator-separator-vertical@2x.9.png b/src/quickcontrols2/imagine/images/toolseparator-separator-vertical@2x.9.png new file mode 100644 index 00000000..f5a11e04 Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolseparator-separator-vertical@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolseparator-separator-vertical@3x.9.png b/src/quickcontrols2/imagine/images/toolseparator-separator-vertical@3x.9.png new file mode 100644 index 00000000..c957280f Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolseparator-separator-vertical@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/toolseparator-separator-vertical@4x.9.png b/src/quickcontrols2/imagine/images/toolseparator-separator-vertical@4x.9.png new file mode 100644 index 00000000..c888689d Binary files /dev/null and b/src/quickcontrols2/imagine/images/toolseparator-separator-vertical@4x.9.png differ diff --git a/src/quickcontrols2/imagine/images/tooltip-background.9.png b/src/quickcontrols2/imagine/images/tooltip-background.9.png new file mode 100644 index 00000000..2e0dc67c Binary files /dev/null and b/src/quickcontrols2/imagine/images/tooltip-background.9.png differ diff --git a/src/quickcontrols2/imagine/images/tooltip-background@2x.9.png b/src/quickcontrols2/imagine/images/tooltip-background@2x.9.png new file mode 100644 index 00000000..dd560998 Binary files /dev/null and b/src/quickcontrols2/imagine/images/tooltip-background@2x.9.png differ diff --git a/src/quickcontrols2/imagine/images/tooltip-background@3x.9.png b/src/quickcontrols2/imagine/images/tooltip-background@3x.9.png new file mode 100644 index 00000000..fed46542 Binary files /dev/null and b/src/quickcontrols2/imagine/images/tooltip-background@3x.9.png differ diff --git a/src/quickcontrols2/imagine/images/tooltip-background@4x.9.png b/src/quickcontrols2/imagine/images/tooltip-background@4x.9.png new file mode 100644 index 00000000..9bc96490 Binary files /dev/null and b/src/quickcontrols2/imagine/images/tooltip-background@4x.9.png differ diff --git a/src/quickcontrols2/imagine/imagine.pri b/src/quickcontrols2/imagine/imagine.pri new file mode 100644 index 00000000..134aa2c3 --- /dev/null +++ b/src/quickcontrols2/imagine/imagine.pri @@ -0,0 +1,58 @@ +HEADERS += \ + $$PWD/qquickimaginestyle_p.h \ + $$PWD/qquickimaginetheme_p.h + +SOURCES += \ + $$PWD/qquickimaginestyle.cpp \ + $$PWD/qquickimaginetheme.cpp + +QML_FILES += \ + $$PWD/ApplicationWindow.qml \ + $$PWD/BusyIndicator.qml \ + $$PWD/Button.qml \ + $$PWD/CheckBox.qml \ + $$PWD/CheckDelegate.qml \ + $$PWD/ComboBox.qml \ + $$PWD/DelayButton.qml \ + $$PWD/Dial.qml \ + $$PWD/Dialog.qml \ + $$PWD/DialogButtonBox.qml \ + $$PWD/Drawer.qml \ + $$PWD/Frame.qml \ + $$PWD/GroupBox.qml \ + $$PWD/HorizontalHeaderView.qml \ + $$PWD/ItemDelegate.qml \ + $$PWD/Label.qml \ + $$PWD/Menu.qml \ + $$PWD/MenuItem.qml \ + $$PWD/MenuSeparator.qml \ + $$PWD/PageIndicator.qml \ + $$PWD/Page.qml \ + $$PWD/Pane.qml \ + $$PWD/Popup.qml \ + $$PWD/ProgressBar.qml \ + $$PWD/RadioButton.qml \ + $$PWD/RadioDelegate.qml \ + $$PWD/RangeSlider.qml \ + $$PWD/RoundButton.qml \ + $$PWD/ScrollView.qml \ + $$PWD/ScrollBar.qml \ + $$PWD/ScrollIndicator.qml \ + $$PWD/Slider.qml \ + $$PWD/SpinBox.qml \ + $$PWD/SplitView.qml \ + $$PWD/StackView.qml \ + $$PWD/SwipeDelegate.qml \ + $$PWD/SwipeView.qml \ + $$PWD/Switch.qml \ + $$PWD/SwitchDelegate.qml \ + $$PWD/TextField.qml \ + $$PWD/TextArea.qml \ + $$PWD/TabBar.qml \ + $$PWD/TabButton.qml \ + $$PWD/ToolBar.qml \ + $$PWD/ToolButton.qml \ + $$PWD/ToolSeparator.qml \ + $$PWD/ToolTip.qml \ + $$PWD/Tumbler.qml \ + $$PWD/VerticalHeaderView.qml diff --git a/src/quickcontrols2/imagine/impl/CMakeLists.txt b/src/quickcontrols2/imagine/impl/CMakeLists.txt new file mode 100644 index 00000000..f69bc5a5 --- /dev/null +++ b/src/quickcontrols2/imagine/impl/CMakeLists.txt @@ -0,0 +1,52 @@ +##################################################################### +## qtquickcontrols2imaginestyleimplplugin Plugin: +##################################################################### + +set(qml_files + "OpacityMask.qml" +) +set_source_files_properties(OpacityMask.qml PROPERTIES + QT_QML_SOURCE_VERSION "6.0" +) + +qt_internal_add_qml_module(qtquickcontrols2imaginestyleimplplugin + URI "QtQuick.Controls.Imagine.impl" + VERSION "${PROJECT_VERSION}" + CLASS_NAME QtQuickControls2ImagineStyleImplPlugin + PLUGIN_TARGET qtquickcontrols2imaginestyleimplplugin + NO_PLUGIN_OPTIONAL + SOURCES + qquickimageselector.cpp qquickimageselector_p.h + qquickninepatchimage.cpp qquickninepatchimage_p.h + QML_FILES + ${qml_files} + DEFINES + QT_NO_CAST_FROM_ASCII + QT_NO_CAST_TO_ASCII + LIBRARIES + Qt::CorePrivate + Qt::Gui + Qt::QmlPrivate + Qt::QuickControls2ImplPrivate + Qt::QuickPrivate + Qt::QuickTemplates2Private + PUBLIC_LIBRARIES + Qt::Core + Qt::Gui + Qt::Qml + Qt::Quick +) + +# Resources: +set(qmake_qtquickcontrols2imaginestyleimplplugin_resource_files + "shaders/+glslcore/OpacityMask.frag" + "shaders/+qsb/OpacityMask.frag" + "shaders/OpacityMask.frag" +) + +qt_internal_add_resource(qtquickcontrols2imaginestyleimplplugin "qmake_qtquickcontrols2imaginestyleimplplugin" + PREFIX + "qt-project.org/imports/QtQuick/Controls/Imagine/impl" + FILES + ${qmake_qtquickcontrols2imaginestyleimplplugin_resource_files} +) diff --git a/src/quickcontrols2/imagine/impl/OpacityMask.qml b/src/quickcontrols2/imagine/impl/OpacityMask.qml new file mode 100644 index 00000000..26663a1b --- /dev/null +++ b/src/quickcontrols2/imagine/impl/OpacityMask.qml @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick + +/* + A cross-graphics API implementation of QtGraphicalEffects' OpacityMask. + */ +Item { + id: rootItem + + property variant source + property variant maskSource + property bool cached: false + + ShaderEffectSource { + id: cacheItem + anchors.fill: parent + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect { + id: shaderItem + property variant source: rootItem.source + property variant maskSource: rootItem.maskSource + + anchors.fill: parent + + fragmentShader: "qrc:/qt-project.org/imports/QtQuick/Controls/Imagine/impl/shaders/OpacityMask.frag" + } +} diff --git a/src/quickcontrols2/imagine/impl/qquickimageselector.cpp b/src/quickcontrols2/imagine/impl/qquickimageselector.cpp new file mode 100644 index 00000000..dcb7738c --- /dev/null +++ b/src/quickcontrols2/imagine/impl/qquickimageselector.cpp @@ -0,0 +1,338 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickimageselector_p.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +Q_LOGGING_CATEGORY(lcQtQuickControlsImagine, "qt.quick.controls.imagine") + +static const int DEFAULT_CACHE = 500; + +static inline int cacheSize() +{ + static bool ok = false; + static const int size = qEnvironmentVariableIntValue("QT_QUICK_CONTROLS_IMAGINE_CACHE", &ok); + return ok ? size : DEFAULT_CACHE; +} + +// input: [focused, pressed] +// => [[focused, pressed], [pressed, focused], [focused], [pressed]] +static QList permutations(const QStringList &input, int count = -1) +{ + if (count == -1) + count = input.count(); + + QList output; + for (int i = 0; i < input.count(); ++i) { + QStringList sub = input.mid(i, count); + + if (count > 1) { + if (i + count > input.count()) + sub += input.mid(0, count - i + 1); + + std::sort(sub.begin(), sub.end()); + do { + if (!sub.isEmpty()) + output += sub; + } while (std::next_permutation(sub.begin(), sub.end())); + } else { + output += sub; + } + + if (count == input.count()) + break; + } + + if (count > 1) + output += permutations(input, --count); + + return output; +} + +static QString findFile(const QDir &dir, const QString &baseName, const QStringList &extensions) +{ + for (const QString &ext : extensions) { + QString filePath = dir.filePath(baseName + QLatin1Char('.') + ext); + if (QFile::exists(filePath)) + return QFileSelector().select(filePath); + } + // return an empty string to indicate that the lookup has been done + // even if no matching asset was found + return QLatin1String(""); +} + +QQuickImageSelector::QQuickImageSelector(QObject *parent) + : QObject(parent), + m_cache(cacheSize() > 0) +{ +} + +QUrl QQuickImageSelector::source() const +{ + return m_source; +} + +void QQuickImageSelector::setSource(const QUrl &source) +{ + if (m_property.isValid()) + QQmlPropertyPrivate::write(m_property, source, QQmlPropertyData::BypassInterceptor | QQmlPropertyData::DontRemoveBinding); + if (m_source == source) + return; + + m_source = source; + emit sourceChanged(); +} + +QString QQuickImageSelector::name() const +{ + return m_name; +} + +void QQuickImageSelector::setName(const QString &name) +{ + if (m_name == name) + return; + + m_name = name; + if (m_complete) + updateSource(); +} + +QString QQuickImageSelector::path() const +{ + return m_path; +} + +void QQuickImageSelector::setPath(const QString &path) +{ + if (m_path == path) + return; + + m_path = path; + if (m_complete) + updateSource(); +} + +QVariantList QQuickImageSelector::states() const +{ + return m_allStates; +} + +void QQuickImageSelector::setStates(const QVariantList &states) +{ + if (m_allStates == states) + return; + + m_allStates = states; + if (updateActiveStates() && m_complete) + updateSource(); +} + +QString QQuickImageSelector::separator() const +{ + return m_separator; +} + +void QQuickImageSelector::setSeparator(const QString &separator) +{ + if (m_separator == separator) + return; + + m_separator = separator; + if (m_complete) + updateSource(); +} + +bool QQuickImageSelector::cache() const +{ + return m_cache; +} + +void QQuickImageSelector::setCache(bool cache) +{ + m_cache = cache; +} + +void QQuickImageSelector::write(const QVariant &value) +{ + setUrl(value.toUrl()); +} + +void QQuickImageSelector::setTarget(const QQmlProperty &property) +{ + m_property = property; +} + +void QQuickImageSelector::classBegin() +{ +} + +void QQuickImageSelector::componentComplete() +{ + setUrl(m_property.read().toUrl()); + m_complete = true; + updateSource(); +} + +QStringList QQuickImageSelector::fileExtensions() const +{ + static const QStringList extensions = QStringList() << QStringLiteral("png"); + return extensions; +} + +QString QQuickImageSelector::cacheKey() const +{ + if (!m_cache) + return QString(); + + return m_path + m_name + m_activeStates.join(m_separator); +} + +void QQuickImageSelector::updateSource() +{ + static QCache cache(cacheSize()); + + const QString key = cacheKey(); + + QString bestFilePath; + + if (m_cache) { + QString *cachedPath = cache.object(key); + if (cachedPath) + bestFilePath = *cachedPath; + } + + // note: a cached file path may be empty + if (bestFilePath.isNull()) { + QDir dir(m_path); + int bestScore = -1; + + const QStringList extensions = fileExtensions(); + + const QList statePerms = permutations(m_activeStates); + for (const QStringList &perm : statePerms) { + const QString filePath = findFile(dir, m_name + m_separator + perm.join(m_separator), extensions); + if (!filePath.isEmpty()) { + int score = calculateScore(perm); + if (score > bestScore) { + bestScore = score; + bestFilePath = filePath; + } + } + } + + if (bestFilePath.isEmpty()) + bestFilePath = findFile(dir, m_name, extensions); + + if (m_cache) + cache.insert(key, new QString(bestFilePath)); + } + + qCDebug(lcQtQuickControlsImagine) << m_name << m_activeStates << "->" << bestFilePath; + + if (bestFilePath.startsWith(QLatin1Char(':'))) + setSource(QUrl(QLatin1String("qrc") + bestFilePath)); + else + setSource(QUrl::fromLocalFile(bestFilePath)); +} + +void QQuickImageSelector::setUrl(const QUrl &url) +{ + QFileInfo fileInfo(QQmlFile::urlToLocalFileOrQrc(url)); + setName(fileInfo.fileName()); + setPath(fileInfo.path()); +} + +bool QQuickImageSelector::updateActiveStates() +{ + QStringList active; + for (const QVariant &v : qAsConst(m_allStates)) { + const QVariantMap state = v.toMap(); + if (state.isEmpty()) + continue; + auto it = state.begin(); + if (it.value().toBool()) + active += it.key(); + } + + if (m_activeStates == active) + return false; + + m_activeStates = active; + return true; +} + +int QQuickImageSelector::calculateScore(const QStringList &states) const +{ + int score = 0; + for (int i = 0; i < states.count(); ++i) + score += (m_activeStates.count() - m_activeStates.indexOf(states.at(i))) << 1; + return score; +} + +QQuickNinePatchImageSelector::QQuickNinePatchImageSelector(QObject *parent) + : QQuickImageSelector(parent) +{ +} + +QStringList QQuickNinePatchImageSelector::fileExtensions() const +{ + static const QStringList extensions = QStringList() << QStringLiteral("9.png") << QStringLiteral("png"); + return extensions; +} + +QQuickAnimatedImageSelector::QQuickAnimatedImageSelector(QObject *parent) + : QQuickImageSelector(parent) +{ +} + +QStringList QQuickAnimatedImageSelector::fileExtensions() const +{ + static const QStringList extensions = QStringList() << QStringLiteral("webp") << QStringLiteral("gif"); + return extensions; +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols2/imagine/impl/qquickimageselector_p.h b/src/quickcontrols2/imagine/impl/qquickimageselector_p.h new file mode 100644 index 00000000..351caefb --- /dev/null +++ b/src/quickcontrols2/imagine/impl/qquickimageselector_p.h @@ -0,0 +1,157 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKIMAGESELECTOR_P_H +#define QQUICKIMAGESELECTOR_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 +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QQuickImageSelector : public QObject, public QQmlParserStatus, public QQmlPropertyValueInterceptor +{ + Q_OBJECT + Q_PROPERTY(QUrl source READ source NOTIFY sourceChanged FINAL) + Q_PROPERTY(QString name READ name WRITE setName FINAL) + Q_PROPERTY(QString path READ path WRITE setPath FINAL) + Q_PROPERTY(QVariantList states READ states WRITE setStates FINAL) + Q_PROPERTY(QString separator READ separator WRITE setSeparator FINAL) + Q_PROPERTY(bool cache READ cache WRITE setCache FINAL) + Q_INTERFACES(QQmlParserStatus QQmlPropertyValueInterceptor) + QML_NAMED_ELEMENT(ImageSelector) + QML_ADDED_IN_VERSION(2, 3) + +public: + explicit QQuickImageSelector(QObject *parent = nullptr); + + QUrl source() const; + void setSource(const QUrl &source); + + QString name() const; + void setName(const QString &name); + + QString path() const; + void setPath(const QString &path); + + QVariantList states() const; + void setStates(const QVariantList &states); + + QString separator() const; + void setSeparator(const QString &separator); + + bool cache() const; + void setCache(bool cache); + + void write(const QVariant &value) override; + void setTarget(const QQmlProperty &property) override; + +Q_SIGNALS: + void sourceChanged(); + +protected: + void classBegin() override; + void componentComplete() override; + + virtual QStringList fileExtensions() const; + + QString cacheKey() const; + void updateSource(); + void setUrl(const QUrl &url); + bool updateActiveStates(); + int calculateScore(const QStringList &states) const; + +private: + bool m_cache = false; + bool m_complete = false; + QUrl m_source; + QString m_path; + QString m_name; + QString m_separator = QLatin1String("-"); + QVariantList m_allStates; + QStringList m_activeStates; + QQmlProperty m_property; +}; + +class QQuickNinePatchImageSelector : public QQuickImageSelector +{ + Q_OBJECT + QML_NAMED_ELEMENT(NinePatchImageSelector) + QML_ADDED_IN_VERSION(2, 3) + +public: + explicit QQuickNinePatchImageSelector(QObject *parent = nullptr); + +protected: + QStringList fileExtensions() const override; +}; + +class QQuickAnimatedImageSelector : public QQuickImageSelector +{ + Q_OBJECT + QML_NAMED_ELEMENT(AnimatedImageSelector) + QML_ADDED_IN_VERSION(2, 3) + +public: + explicit QQuickAnimatedImageSelector(QObject *parent = nullptr); + +protected: + QStringList fileExtensions() const override; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickImageSelector) +QML_DECLARE_TYPE(QQuickAnimatedImageSelector) + +#endif // QQUICKIMAGESELECTOR_P_H diff --git a/src/quickcontrols2/imagine/impl/qquickninepatchimage.cpp b/src/quickcontrols2/imagine/impl/qquickninepatchimage.cpp new file mode 100644 index 00000000..66404ba4 --- /dev/null +++ b/src/quickcontrols2/imagine/impl/qquickninepatchimage.cpp @@ -0,0 +1,469 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickninepatchimage_p.h" + +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +struct QQuickNinePatchData +{ + QList coordsForSize(qreal count) const; + + inline bool isNull() const { return data.isEmpty(); } + inline int count() const { return data.size(); } + inline qreal at(int index) const { return data.at(index); } + inline qreal size() const { return data.last(); } + + void fill(const QList &coords, qreal count); + void clear(); + +private: + bool inverted = false; + QList data; +}; + +QList QQuickNinePatchData::coordsForSize(qreal size) const +{ + // n = number of stretchable sections + // We have to compensate when adding 0 and/or + // the source image width to the divs vector. + const int l = data.size(); + const int n = (inverted ? l - 1 : l) / 2; + const qreal stretch = (size - data.last()) / n; + + QList coords; + coords.reserve(l); + coords.append(0); + + bool stretched = !inverted; + for (int i = 1; i < l; ++i) { + qreal advance = data[i] - data[i - 1]; + if (stretched) + advance += stretch; + coords.append(coords.last() + advance); + + stretched = !stretched; + } + + return coords; +} + +void QQuickNinePatchData::fill(const QList &coords, qreal size) +{ + data.clear(); + inverted = coords.isEmpty() || coords.first() != 0; + + // Reserve an extra item in case we need to add the image width/height + if (inverted) { + data.reserve(coords.size() + 2); + data.append(0); + } else { + data.reserve(coords.size() + 1); + } + + data += coords; + data.append(size); +} + +void QQuickNinePatchData::clear() +{ + data.clear(); +} + +class QQuickNinePatchNode : public QSGGeometryNode +{ +public: + QQuickNinePatchNode(); + ~QQuickNinePatchNode(); + + void initialize(QSGTexture *texture, const QSizeF &targetSize, const QSize &sourceSize, + const QQuickNinePatchData &xDivs, const QQuickNinePatchData &yDivs, qreal dpr); + +private: + QSGGeometry m_geometry; + QSGTextureMaterial m_material; +}; + +QQuickNinePatchNode::QQuickNinePatchNode() + : m_geometry(QSGGeometry::defaultAttributes_TexturedPoint2D(), 4) +{ + m_geometry.setDrawingMode(QSGGeometry::DrawTriangles); + setGeometry(&m_geometry); + setMaterial(&m_material); +} + +QQuickNinePatchNode::~QQuickNinePatchNode() +{ + delete m_material.texture(); +} + +void QQuickNinePatchNode::initialize(QSGTexture *texture, const QSizeF &targetSize, const QSize &sourceSize, + const QQuickNinePatchData &xDivs, const QQuickNinePatchData &yDivs, qreal dpr) +{ + delete m_material.texture(); + m_material.setTexture(texture); + + const int xlen = xDivs.count(); + const int ylen = yDivs.count(); + + if (xlen > 0 && ylen > 0) { + const int quads = (xlen - 1) * (ylen - 1); + static const int verticesPerQuad = 6; + m_geometry.allocate(xlen * ylen, verticesPerQuad * quads); + + QSGGeometry::TexturedPoint2D *vertices = m_geometry.vertexDataAsTexturedPoint2D(); + QList xCoords = xDivs.coordsForSize(targetSize.width()); + QList yCoords = yDivs.coordsForSize(targetSize.height()); + + for (int y = 0; y < ylen; ++y) { + for (int x = 0; x < xlen; ++x, ++vertices) + vertices->set(xCoords[x] / dpr, yCoords[y] / dpr, + xDivs.at(x) / sourceSize.width(), + yDivs.at(y) / sourceSize.height()); + } + + quint16 *indices = m_geometry.indexDataAsUShort(); + int n = quads; + for (int q = 0; n--; ++q) { + if ((q + 1) % xlen == 0) // next row + ++q; + // Bottom-left half quad triangle + indices[0] = q; + indices[1] = q + xlen; + indices[2] = q + xlen + 1; + + // Top-right half quad triangle + indices[3] = q; + indices[4] = q + xlen + 1; + indices[5] = q + 1; + + indices += verticesPerQuad; + } + } + + markDirty(QSGNode::DirtyGeometry | QSGNode::DirtyMaterial); +} + +class QQuickNinePatchImagePrivate : public QQuickImagePrivate +{ + Q_DECLARE_PUBLIC(QQuickNinePatchImage) + +public: + void updatePatches(); + void updatePaddings(const QSizeF &size, const QList &horizontal, const QList &vertical); + void updateInsets(const QList &horizontal, const QList &vertical); + + bool resetNode = false; + qreal topPadding = 0; + qreal leftPadding = 0; + qreal rightPadding = 0; + qreal bottomPadding = 0; + qreal topInset = 0; + qreal leftInset = 0; + qreal rightInset = 0; + qreal bottomInset = 0; + + QImage ninePatch; + QQuickNinePatchData xDivs; + QQuickNinePatchData yDivs; +}; + +static QList readCoords(const QRgb *data, int from, int count, int offset, QRgb color) +{ + int p1 = -1; + QList coords; + for (int i = 0; i < count; ++i) { + int p2 = from + i * offset; + if (data[p2] == color) { + // colored pixel + if (p1 == -1) + p1 = i; + } else { + // empty pixel + if (p1 != -1) { + coords << p1 << i; + p1 = -1; + } + } + } + return coords; +} + +void QQuickNinePatchImagePrivate::updatePatches() +{ + if (ninePatch.isNull()) + return; + + int w = ninePatch.width(); + int h = ninePatch.height(); + const QRgb *data = reinterpret_cast(ninePatch.constBits()); + + const QRgb black = qRgb(0,0,0); + const QRgb red = qRgb(255,0,0); + + xDivs.fill(readCoords(data, 1, w - 1, 1, black), w - 2); // top left -> top right + yDivs.fill(readCoords(data, w, h - 1, w, black), h - 2); // top left -> bottom left + + QList hInsets = readCoords(data, (h - 1) * w + 1, w - 1, 1, red); // bottom left -> bottom right + QList vInsets = readCoords(data, 2 * w - 1, h - 1, w, red); // top right -> bottom right + updateInsets(hInsets, vInsets); + + const QSizeF sz(w - leftInset - rightInset, h - topInset - bottomInset); + QList hPaddings = readCoords(data, (h - 1) * w + leftInset + 1, sz.width() - 2, 1, black); // bottom left -> bottom right + QList vPaddings = readCoords(data, (2 + topInset) * w - 1, sz.height() - 2, w, black); // top right -> bottom right + updatePaddings(sz, hPaddings, vPaddings); +} + +void QQuickNinePatchImagePrivate::updatePaddings(const QSizeF &size, const QList &horizontal, const QList &vertical) +{ + Q_Q(QQuickNinePatchImage); + qreal oldTopPadding = topPadding; + qreal oldLeftPadding = leftPadding; + qreal oldRightPadding = rightPadding; + qreal oldBottomPadding = bottomPadding; + + if (horizontal.count() >= 2) { + leftPadding = horizontal.first(); + rightPadding = size.width() - horizontal.last() - 2; + } else { + leftPadding = 0; + rightPadding = 0; + } + + if (vertical.count() >= 2) { + topPadding = vertical.first(); + bottomPadding = size.height() - vertical.last() - 2; + } else { + topPadding = 0; + bottomPadding = 0; + } + + if (!qFuzzyCompare(oldTopPadding, topPadding)) + emit q->topPaddingChanged(); + if (!qFuzzyCompare(oldBottomPadding, bottomPadding)) + emit q->bottomPaddingChanged(); + if (!qFuzzyCompare(oldLeftPadding, leftPadding)) + emit q->leftPaddingChanged(); + if (!qFuzzyCompare(oldRightPadding, rightPadding)) + emit q->rightPaddingChanged(); +} + +void QQuickNinePatchImagePrivate::updateInsets(const QList &horizontal, const QList &vertical) +{ + Q_Q(QQuickNinePatchImage); + qreal oldTopInset = topInset; + qreal oldLeftInset = leftInset; + qreal oldRightInset = rightInset; + qreal oldBottomInset = bottomInset; + + if (horizontal.count() >= 2 && horizontal.first() == 0) + leftInset = horizontal.at(1); + else + leftInset = 0; + + if (horizontal.count() == 2 && horizontal.first() > 0) + rightInset = horizontal.last() - horizontal.first(); + else if (horizontal.count() == 4) + rightInset = horizontal.last() - horizontal.at(2); + else + rightInset = 0; + + if (vertical.count() >= 2 && vertical.first() == 0) + topInset = vertical.at(1); + else + topInset = 0; + + if (vertical.count() == 2 && vertical.first() > 0) + bottomInset = vertical.last() - vertical.first(); + else if (vertical.count() == 4) + bottomInset = vertical.last() - vertical.at(2); + else + bottomInset = 0; + + if (!qFuzzyCompare(oldTopInset, topInset)) + emit q->topInsetChanged(); + if (!qFuzzyCompare(oldBottomInset, bottomInset)) + emit q->bottomInsetChanged(); + if (!qFuzzyCompare(oldLeftInset, leftInset)) + emit q->leftInsetChanged(); + if (!qFuzzyCompare(oldRightInset, rightInset)) + emit q->rightInsetChanged(); +} + +QQuickNinePatchImage::QQuickNinePatchImage(QQuickItem *parent) + : QQuickImage(*(new QQuickNinePatchImagePrivate), parent) +{ +} + +qreal QQuickNinePatchImage::topPadding() const +{ + Q_D(const QQuickNinePatchImage); + return d->topPadding / d->devicePixelRatio; +} + +qreal QQuickNinePatchImage::leftPadding() const +{ + Q_D(const QQuickNinePatchImage); + return d->leftPadding / d->devicePixelRatio; +} + +qreal QQuickNinePatchImage::rightPadding() const +{ + Q_D(const QQuickNinePatchImage); + return d->rightPadding / d->devicePixelRatio; +} + +qreal QQuickNinePatchImage::bottomPadding() const +{ + Q_D(const QQuickNinePatchImage); + return d->bottomPadding / d->devicePixelRatio; +} + +qreal QQuickNinePatchImage::topInset() const +{ + Q_D(const QQuickNinePatchImage); + return d->topInset / d->devicePixelRatio; +} + +qreal QQuickNinePatchImage::leftInset() const +{ + Q_D(const QQuickNinePatchImage); + return d->leftInset / d->devicePixelRatio; +} + +qreal QQuickNinePatchImage::rightInset() const +{ + Q_D(const QQuickNinePatchImage); + return d->rightInset / d->devicePixelRatio; +} + +qreal QQuickNinePatchImage::bottomInset() const +{ + Q_D(const QQuickNinePatchImage); + return d->bottomInset / d->devicePixelRatio; +} + +void QQuickNinePatchImage::pixmapChange() +{ + Q_D(QQuickNinePatchImage); + if (QFileInfo(d->url.fileName()).completeSuffix().toLower() == QLatin1String("9.png")) { + // Keep resetNode if it is already set, we do not want to miss an + // ImageNode->NinePatchNode change. Without this there's a chance one gets + // an incorrect cast on oldNode every once in a while with source changes. + if (!d->resetNode) + d->resetNode = d->ninePatch.isNull(); + + d->ninePatch = d->pix.image(); + if (d->ninePatch.depth() != 32) + d->ninePatch = d->ninePatch.convertToFormat(QImage::Format_ARGB32); + + int w = d->ninePatch.width(); + int h = d->ninePatch.height(); + d->pix.setImage(QImage(d->ninePatch.constBits() + 4 * (w + 1), w - 2, h - 2, d->ninePatch.bytesPerLine(), d->ninePatch.format())); + + d->updatePatches(); + } else { + /* + Only change resetNode when it's false; i.e. when no reset is pending. + updatePaintNode() will take care of setting it to false if it's true. + + Consider the following changes in source: + + normal.png => press.9.png => normal.png => focus.png + + If the last two events happen quickly, pixmapChange() can be called + twice with no call to updatePaintNode() inbetween. On the first call, + resetNode will be true (because ninePatch is not null since it is still + in the process of going from a 9-patch image to a regular image), + and on the second call, resetNode would be false if we didn't have this check. + This results in the oldNode never being deleted, and QQuickImage + tries to static_cast a QQuickNinePatchImage to a QSGInternalImageNode. + */ + if (!d->resetNode) + d->resetNode = !d->ninePatch.isNull(); + d->ninePatch = QImage(); + } + QQuickImage::pixmapChange(); +} + +QSGNode *QQuickNinePatchImage::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data) +{ + Q_D(QQuickNinePatchImage); + Q_UNUSED(data); + + if (d->resetNode) { + delete oldNode; + oldNode = nullptr; + d->resetNode = false; + } + + QSizeF sz = size(); + QImage image = d->pix.image(); + if (!sz.isValid() || image.isNull()) { + delete oldNode; + return nullptr; + } + + if (d->ninePatch.isNull()) + return QQuickImage::updatePaintNode(oldNode, data); + + QQuickNinePatchNode *patchNode = static_cast(oldNode); + if (!patchNode) + patchNode = new QQuickNinePatchNode; + +#ifdef QSG_RUNTIME_DESCRIPTION + qsgnode_set_description(patchNode, QString::fromLatin1("QQuickNinePatchImage: '%1'").arg(d->url.toString())); +#endif + + // The image may wrap non-owned data (due to pixmapChange). Ensure we never + // pass such an image to the scenegraph, because with a separate render + // thread the data may become invalid (in a subsequent pixmapChange on the + // gui thread) by the time the renderer gets to do something with the QImage + // passed in here. + image.detach(); + + QSGTexture *texture = window()->createTextureFromImage(image); + patchNode->initialize(texture, sz * d->devicePixelRatio, image.size(), d->xDivs, d->yDivs, d->devicePixelRatio); + return patchNode; +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols2/imagine/impl/qquickninepatchimage_p.h b/src/quickcontrols2/imagine/impl/qquickninepatchimage_p.h new file mode 100644 index 00000000..78cc3068 --- /dev/null +++ b/src/quickcontrols2/imagine/impl/qquickninepatchimage_p.h @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKNINEPATCHIMAGE_P_H +#define QQUICKNINEPATCHIMAGE_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 + +QT_BEGIN_NAMESPACE + +class QQuickNinePatchImagePrivate; + +class QQuickNinePatchImage : public QQuickImage +{ + Q_OBJECT + Q_PROPERTY(qreal topPadding READ topPadding NOTIFY topPaddingChanged FINAL) + Q_PROPERTY(qreal leftPadding READ leftPadding NOTIFY leftPaddingChanged FINAL) + Q_PROPERTY(qreal rightPadding READ rightPadding NOTIFY rightPaddingChanged FINAL) + Q_PROPERTY(qreal bottomPadding READ bottomPadding NOTIFY bottomPaddingChanged FINAL) + Q_PROPERTY(qreal topInset READ topInset NOTIFY topInsetChanged FINAL) + Q_PROPERTY(qreal leftInset READ leftInset NOTIFY leftInsetChanged FINAL) + Q_PROPERTY(qreal rightInset READ rightInset NOTIFY rightInsetChanged FINAL) + Q_PROPERTY(qreal bottomInset READ bottomInset NOTIFY bottomInsetChanged FINAL) + QML_NAMED_ELEMENT(NinePatchImage) + QML_ADDED_IN_VERSION(2, 3) + +public: + explicit QQuickNinePatchImage(QQuickItem *parent = nullptr); + + qreal topPadding() const; + qreal leftPadding() const; + qreal rightPadding() const; + qreal bottomPadding() const; + + qreal topInset() const; + qreal leftInset() const; + qreal rightInset() const; + qreal bottomInset() const; + +Q_SIGNALS: + void topPaddingChanged(); + void leftPaddingChanged(); + void rightPaddingChanged(); + void bottomPaddingChanged(); + + void topInsetChanged(); + void leftInsetChanged(); + void rightInsetChanged(); + void bottomInsetChanged(); + +protected: + void pixmapChange() override; + QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data) override; + +private: + Q_DISABLE_COPY(QQuickNinePatchImage) + Q_DECLARE_PRIVATE(QQuickNinePatchImage) +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickNinePatchImage) + +#endif // QQUICKNINEPATCHIMAGE_P_H diff --git a/src/quickcontrols2/imagine/impl/shaders/+glslcore/OpacityMask.frag b/src/quickcontrols2/imagine/impl/shaders/+glslcore/OpacityMask.frag new file mode 100644 index 00000000..529e2696 --- /dev/null +++ b/src/quickcontrols2/imagine/impl/shaders/+glslcore/OpacityMask.frag @@ -0,0 +1,13 @@ +#version 150 + +uniform float qt_Opacity; +uniform sampler2D source; +uniform sampler2D maskSource; + +in vec2 qt_TexCoord0; +out vec4 fragColor; + +void main() +{ + fragColor = texture(source, qt_TexCoord0.st) * (texture(maskSource, qt_TexCoord0.st).a) * qt_Opacity; +} diff --git a/src/quickcontrols2/imagine/impl/shaders/+qsb/OpacityMask.frag b/src/quickcontrols2/imagine/impl/shaders/+qsb/OpacityMask.frag new file mode 100644 index 00000000..331b30b8 Binary files /dev/null and b/src/quickcontrols2/imagine/impl/shaders/+qsb/OpacityMask.frag differ diff --git a/src/quickcontrols2/imagine/impl/shaders/OpacityMask.frag b/src/quickcontrols2/imagine/impl/shaders/OpacityMask.frag new file mode 100644 index 00000000..84f9bc3e --- /dev/null +++ b/src/quickcontrols2/imagine/impl/shaders/OpacityMask.frag @@ -0,0 +1,7 @@ +varying highp vec2 qt_TexCoord0; +uniform highp float qt_Opacity; +uniform lowp sampler2D source; +uniform lowp sampler2D maskSource; +void main(void) { + gl_FragColor = texture2D(source, qt_TexCoord0.st) * (texture2D(maskSource, qt_TexCoord0.st).a) * qt_Opacity; +} diff --git a/src/quickcontrols2/imagine/impl/shaders/OpacityMask_rhi.frag b/src/quickcontrols2/imagine/impl/shaders/OpacityMask_rhi.frag new file mode 100644 index 00000000..9ae32499 --- /dev/null +++ b/src/quickcontrols2/imagine/impl/shaders/OpacityMask_rhi.frag @@ -0,0 +1,17 @@ +#version 440 + +layout(location = 0) in vec2 qt_TexCoord0; +layout(location = 0) out vec4 fragColor; + +layout(std140, binding = 0) uniform buf { + mat4 qt_Matrix; + float qt_Opacity; +} ubuf; + +layout(binding = 1) uniform sampler2D source; +layout(binding = 2) uniform sampler2D maskSource; + +void main() +{ + fragColor = texture(source, qt_TexCoord0.st) * (texture(maskSource, qt_TexCoord0.st).a) * ubuf.qt_Opacity; +} diff --git a/src/quickcontrols2/imagine/impl/shaders/compile.bat b/src/quickcontrols2/imagine/impl/shaders/compile.bat new file mode 100644 index 00000000..8f16d7ac --- /dev/null +++ b/src/quickcontrols2/imagine/impl/shaders/compile.bat @@ -0,0 +1,40 @@ +::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:: +:: Copyright (C) 2020 The Qt Company Ltd. +:: Contact: https://www.qt.io/licensing/ +:: +:: This file is part of the QtQuick module of the Qt Toolkit. +:: +:: $QT_BEGIN_LICENSE:LGPL$ +:: Commercial License Usage +:: Licensees holding valid commercial Qt licenses may use this file in +:: accordance with the commercial license agreement provided with the +:: Software or, alternatively, in accordance with the terms contained in +:: a written agreement between you and The Qt Company. For licensing terms +:: and conditions see https://www.qt.io/terms-conditions. For further +:: information use the contact form at https://www.qt.io/contact-us. +:: +:: GNU Lesser General Public License Usage +:: Alternatively, this file may be used under the terms of the GNU Lesser +:: General Public License version 3 as published by the Free Software +:: Foundation and appearing in the file LICENSE.LGPL3 included in the +:: packaging of this file. Please review the following information to +:: ensure the GNU Lesser General Public License version 3 requirements +:: will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +:: +:: GNU General Public License Usage +:: Alternatively, this file may be used under the terms of the GNU +:: General Public License version 2.0 or (at your option) the GNU General +:: Public license version 3 or any later version approved by the KDE Free +:: Qt Foundation. The licenses are as published by the Free Software +:: Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +:: included in the packaging of this file. Please review the following +:: information to ensure the GNU General Public License requirements will +:: be met: https://www.gnu.org/licenses/gpl-2.0.html and +:: https://www.gnu.org/licenses/gpl-3.0.html. +:: +:: $QT_END_LICENSE$ +:: +::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + +qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -o +qsb/OpacityMask.frag OpacityMask_rhi.frag diff --git a/src/quickcontrols2/imagine/qquickimaginestyle.cpp b/src/quickcontrols2/imagine/qquickimaginestyle.cpp new file mode 100644 index 00000000..37e55b61 --- /dev/null +++ b/src/quickcontrols2/imagine/qquickimaginestyle.cpp @@ -0,0 +1,168 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickimaginestyle_p.h" + +#include +#include + +QT_BEGIN_NAMESPACE + +Q_GLOBAL_STATIC_WITH_ARGS(QString, GlobalPath, (QLatin1String("qrc:/qt-project.org/imports/QtQuick/Controls/Imagine/images/"))) + +static QString ensureSlash(const QString &path) +{ + const QChar slash = QLatin1Char('/'); + return path.endsWith(slash) ? path : path + slash; +} + +QQuickImagineStyle::QQuickImagineStyle(QObject *parent) + : QQuickAttachedObject(parent), + m_path(*GlobalPath()) +{ + init(); +} + +QQuickImagineStyle *QQuickImagineStyle::qmlAttachedProperties(QObject *object) +{ + return new QQuickImagineStyle(object); +} + +QString QQuickImagineStyle::path() const +{ + return m_path; +} + +void QQuickImagineStyle::setPath(const QString &path) +{ + m_explicitPath = true; + if (m_path == path) + return; + + m_path = path; + propagatePath(); + + emit pathChanged(); +} + +void QQuickImagineStyle::inheritPath(const QString &path) +{ + if (m_explicitPath || m_path == path) + return; + + m_path = path; + propagatePath(); + emit pathChanged(); +} + +void QQuickImagineStyle::propagatePath() +{ + const auto styles = attachedChildren(); + for (QQuickAttachedObject *child : styles) { + QQuickImagineStyle *imagine = qobject_cast(child); + if (imagine) + imagine->inheritPath(m_path); + } +} + +void QQuickImagineStyle::resetPath() +{ + if (!m_explicitPath) + return; + + m_explicitPath = false; + QQuickImagineStyle *imagine = qobject_cast(attachedParent()); + inheritPath(imagine ? imagine->path() : *GlobalPath()); +} + +QUrl QQuickImagineStyle::url() const +{ + // Using ApplicationWindow as an example, its NinePatchImage url + // was previously assigned like this: + // + // soruce: Imagine.path + "applicationwindow-background" + // + // If Imagine.path is set to ":/images" by the user, then the final URL would be: + // + // QUrl("file:///home/user/qt/qtbase/qml/QtQuick/Controls/Imagine/:/images/applicationwindow-background") + // + // To ensure that the correct URL is constructed, we do it ourselves here, + // and then the control QML files use the "url" property instead. + const QString path = ensureSlash(m_path); + if (path.startsWith(QLatin1String("qrc"))) + return QUrl(path); + + if (path.startsWith(QLatin1String(":/"))) + return QUrl(QLatin1String("qrc") + path); + + return QUrl::fromLocalFile(path); +} + +void QQuickImagineStyle::attachedParentChange(QQuickAttachedObject *newParent, QQuickAttachedObject *oldParent) +{ + Q_UNUSED(oldParent); + QQuickImagineStyle *imagine = qobject_cast(newParent); + if (imagine) + inheritPath(imagine->path()); +} + +static QByteArray resolveSetting(const QByteArray &env, const QSharedPointer &settings, const QString &name) +{ + QByteArray value = qgetenv(env); +#if QT_CONFIG(settings) + if (value.isNull() && !settings.isNull()) + value = settings->value(name).toByteArray(); +#endif + return value; +} + +void QQuickImagineStyle::init() +{ + static bool globalsInitialized = false; + if (!globalsInitialized) { + QSharedPointer settings = QQuickStylePrivate::settings(QStringLiteral("Imagine")); + + QString path = QString::fromUtf8(resolveSetting("QT_QUICK_CONTROLS_IMAGINE_PATH", settings, QStringLiteral("Path"))); + if (!path.isEmpty()) + *GlobalPath() = m_path = ensureSlash(path); + + globalsInitialized = true; + } + + QQuickAttachedObject::init(); // TODO: lazy init? +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols2/imagine/qquickimaginestyle_p.h b/src/quickcontrols2/imagine/qquickimaginestyle_p.h new file mode 100644 index 00000000..212096b9 --- /dev/null +++ b/src/quickcontrols2/imagine/qquickimaginestyle_p.h @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKIMAGINESTYLE_P_H +#define QQUICKIMAGINESTYLE_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QQuickImagineStyle : public QQuickAttachedObject +{ + Q_OBJECT + Q_PROPERTY(QString path READ path WRITE setPath RESET resetPath NOTIFY pathChanged FINAL) + Q_PROPERTY(QUrl url READ url NOTIFY pathChanged FINAL) + QML_NAMED_ELEMENT(Imagine) + QML_ATTACHED(QQuickImagineStyle) + QML_UNCREATABLE("") + QML_ADDED_IN_VERSION(2, 3) + +public: + explicit QQuickImagineStyle(QObject *parent = nullptr); + + static QQuickImagineStyle *qmlAttachedProperties(QObject *object); + + QString path() const; + void setPath(const QString &path); + void inheritPath(const QString &path); + void propagatePath(); + void resetPath(); + + QUrl url() const; + +Q_SIGNALS: + void pathChanged(); + +protected: + void attachedParentChange(QQuickAttachedObject *newParent, QQuickAttachedObject *oldParent) override; + +private: + void init(); + + bool m_explicitPath = false; + QString m_path; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPEINFO(QQuickImagineStyle, QML_HAS_ATTACHED_PROPERTIES) + +#endif // QQUICKIMAGINESTYLE_P_H diff --git a/src/quickcontrols2/imagine/qquickimaginetheme.cpp b/src/quickcontrols2/imagine/qquickimaginetheme.cpp new file mode 100644 index 00000000..7bae036a --- /dev/null +++ b/src/quickcontrols2/imagine/qquickimaginetheme.cpp @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickimaginetheme_p.h" + +#include + +QT_BEGIN_NAMESPACE + +void QQuickImagineTheme::initialize(QQuickTheme *theme) +{ + QFont systemFont; + systemFont.setFamilies(QStringList{QLatin1String("Open Sans")}); + theme->setFont(QQuickTheme::System, systemFont); + + const QColor accentColor = QColor::fromRgb(0x4fc1e9); + const QColor windowTextColor = QColor::fromRgb(0x434a54); + const QColor disabledWindowTextColor = QColor::fromRgb(0xccd1d9); + + QPalette systemPalette; + systemPalette.setColor(QPalette::ButtonText, Qt::white); + systemPalette.setColor(QPalette::BrightText, Qt::white); + systemPalette.setColor(QPalette::Highlight, accentColor); + systemPalette.setColor(QPalette::HighlightedText, Qt::white); + systemPalette.setColor(QPalette::Text, windowTextColor); + systemPalette.setColor(QPalette::ToolTipText, Qt::white); + systemPalette.setColor(QPalette::WindowText, windowTextColor); + systemPalette.setColor(QPalette::Disabled, QPalette::Text, disabledWindowTextColor); + systemPalette.setColor(QPalette::Disabled, QPalette::WindowText, disabledWindowTextColor); + theme->setPalette(QQuickTheme::System, systemPalette); +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols2/imagine/qquickimaginetheme_p.h b/src/quickcontrols2/imagine/qquickimaginetheme_p.h new file mode 100644 index 00000000..d3d43074 --- /dev/null +++ b/src/quickcontrols2/imagine/qquickimaginetheme_p.h @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKIMAGINETHEME_P_H +#define QQUICKIMAGINETHEME_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include + +QT_BEGIN_NAMESPACE + +class QQuickTheme; + +class QQuickImagineTheme +{ +public: + static void initialize(QQuickTheme *theme); +}; + +QT_END_NAMESPACE + +#endif // QQUICKIMAGINETHEME_P_H diff --git a/src/quickcontrols2/imagine/qtquickcontrols2imaginestyleplugin.cpp b/src/quickcontrols2/imagine/qtquickcontrols2imaginestyleplugin.cpp new file mode 100644 index 00000000..bc885cfd --- /dev/null +++ b/src/quickcontrols2/imagine/qtquickcontrols2imaginestyleplugin.cpp @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickimaginestyle_p.h" +#include "qquickimaginetheme_p.h" + +#include +#include +#include +#include + +extern void qml_register_types_QtQuick_Controls_Imagine(); + +QT_BEGIN_NAMESPACE + +class QtQuickControls2ImagineStylePlugin : public QQuickStylePlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) + +public: + QtQuickControls2ImagineStylePlugin(QObject *parent = nullptr); + + QString name() const override; + void initializeTheme(QQuickTheme *theme) override; + + QQuickImagineTheme theme; +}; + +QtQuickControls2ImagineStylePlugin::QtQuickControls2ImagineStylePlugin(QObject *parent) : QQuickStylePlugin(parent) +{ + volatile auto registration = &qml_register_types_QtQuick_Controls_Imagine; + Q_UNUSED(registration); +} + +QString QtQuickControls2ImagineStylePlugin::name() const +{ + return QStringLiteral("Imagine"); +} + +void QtQuickControls2ImagineStylePlugin::initializeTheme(QQuickTheme *theme) +{ + this->theme.initialize(theme); +} + +QT_END_NAMESPACE + +#include "qtquickcontrols2imaginestyleplugin.moc" diff --git a/src/quickcontrols2/macos/Button.qml b/src/quickcontrols2/macos/Button.qml new file mode 100644 index 00000000..58658c52 --- /dev/null +++ b/src/quickcontrols2/macos/Button.qml @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.NativeStyle as NativeStyle + +NativeStyle.DefaultButton { + id: control + readonly property Item __focusFrameTarget: control +} diff --git a/src/quickcontrols2/macos/CMakeLists.txt b/src/quickcontrols2/macos/CMakeLists.txt new file mode 100644 index 00000000..05640ac5 --- /dev/null +++ b/src/quickcontrols2/macos/CMakeLists.txt @@ -0,0 +1,56 @@ +##################################################################### +## qtquickcontrols2macosstyleplugin Plugin: +##################################################################### + +set(qml_files + "Button.qml" + "Slider.qml" + "GroupBox.qml" + "CheckBox.qml" + "RadioButton.qml" + "SpinBox.qml" + "TextField.qml" + "Frame.qml" + "TextArea.qml" + "ComboBox.qml" + "ScrollView.qml" + "ScrollBar.qml" + "ProgressBar.qml" + "Dial.qml" +) +set_source_files_properties(${qml_files} PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) + +qt_internal_add_qml_module(qtquickcontrols2macosstyleplugin + URI "QtQuick.Controls.macOS" + VERSION "${PROJECT_VERSION}" + CLASS_NAME QtQuickControls2MacOSStylePlugin + IMPORTS + QtQuick.Controls.Fusion/auto + PAST_MAJOR_VERSIONS 2 + PLUGIN_TARGET qtquickcontrols2macosstyleplugin + NO_PLUGIN_OPTIONAL + NO_GENERATE_PLUGIN_SOURCE + SOURCES + qtquickcontrols2macosstyleplugin.cpp + QML_FILES + ${qml_files} + DEFINES + QT_NO_CAST_FROM_ASCII + QT_NO_CAST_TO_ASCII + LIBRARIES + Qt::CorePrivate + Qt::GuiPrivate + Qt::QmlPrivate + Qt::QuickControls2Private + Qt::QuickPrivate + Qt::QuickTemplates2Private + PUBLIC_LIBRARIES + Qt::Core + Qt::Gui + Qt::Qml + Qt::Quick + Qt::QuickControls2 + Qt::QuickTemplates2 +) diff --git a/src/quickcontrols2/macos/CheckBox.qml b/src/quickcontrols2/macos/CheckBox.qml new file mode 100644 index 00000000..23ad4426 --- /dev/null +++ b/src/quickcontrols2/macos/CheckBox.qml @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.NativeStyle as NativeStyle + +NativeStyle.DefaultCheckBox { + readonly property Item __focusFrameTarget: indicator + readonly property Item __focusFrameStyleItem: indicator +} diff --git a/src/quickcontrols2/macos/ComboBox.qml b/src/quickcontrols2/macos/ComboBox.qml new file mode 100644 index 00000000..53baabf8 --- /dev/null +++ b/src/quickcontrols2/macos/ComboBox.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.NativeStyle as NativeStyle + +NativeStyle.DefaultComboBox { + id: control + readonly property Item __focusFrameTarget: control + + contentItem: T.TextField { + implicitWidth: contentWidth + implicitHeight: contentHeight + text: control.editable ? control.editText : control.displayText + + enabled: control.editable + autoScroll: control.editable + readOnly: control.down + inputMethodHints: control.inputMethodHints + validator: control.validator + selectByMouse: control.selectTextByMouse + + font: control.font + color: control.editable ? control.palette.text : control.palette.buttonText + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + verticalAlignment: Text.AlignVCenter + + readonly property Item __focusFrameControl: control + } +} diff --git a/src/quickcontrols2/macos/Dial.qml b/src/quickcontrols2/macos/Dial.qml new file mode 100644 index 00000000..2076a54a --- /dev/null +++ b/src/quickcontrols2/macos/Dial.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.NativeStyle as NativeStyle + +NativeStyle.DefaultDial { +} diff --git a/src/quickcontrols2/macos/Frame.qml b/src/quickcontrols2/macos/Frame.qml new file mode 100644 index 00000000..f16a0835 --- /dev/null +++ b/src/quickcontrols2/macos/Frame.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.NativeStyle as NativeStyle + +NativeStyle.DefaultFrame { +} diff --git a/src/quickcontrols2/macos/GroupBox.qml b/src/quickcontrols2/macos/GroupBox.qml new file mode 100644 index 00000000..142ddd15 --- /dev/null +++ b/src/quickcontrols2/macos/GroupBox.qml @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.NativeStyle as NativeStyle + +NativeStyle.DefaultGroupBox { + id: control + label: Item { + readonly property point labelPos : control.__nativeBackground + ? background.labelPos + : Qt.point(0,0) + x: labelPos.x + background.x + y: labelPos.y + background.y - groupBoxPadding.top + width: children[0].implicitWidth + height: children[0].implicitHeight + Text { + width: parent.width + height: parent.height + text: control.title + font: control.font + color: control.palette.windowText + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + } +} diff --git a/src/quickcontrols2/macos/ProgressBar.qml b/src/quickcontrols2/macos/ProgressBar.qml new file mode 100644 index 00000000..59a1689d --- /dev/null +++ b/src/quickcontrols2/macos/ProgressBar.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.NativeStyle as NativeStyle + +NativeStyle.DefaultProgressBar { +} diff --git a/src/quickcontrols2/macos/RadioButton.qml b/src/quickcontrols2/macos/RadioButton.qml new file mode 100644 index 00000000..c9cdf985 --- /dev/null +++ b/src/quickcontrols2/macos/RadioButton.qml @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.NativeStyle as NativeStyle + +NativeStyle.DefaultRadioButton { + readonly property Item __focusFrameTarget: indicator + readonly property Item __focusFrameStyleItem: indicator +} diff --git a/src/quickcontrols2/macos/ScrollBar.qml b/src/quickcontrols2/macos/ScrollBar.qml new file mode 100644 index 00000000..4a9f764b --- /dev/null +++ b/src/quickcontrols2/macos/ScrollBar.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.NativeStyle as NativeStyle + +NativeStyle.DefaultScrollBar { + id: controlRoot + + contentItem: NativeStyle.ScrollBar { + control: controlRoot + subControl: NativeStyle.ScrollBar.Handle + overrideState: NativeStyle.ScrollBar.NeverHovered + } + + NativeStyle.ScrollBar { + // Fade a hovered-looking version of the handle + // on top of the default handle when hovering it + x: contentItem.x + y: contentItem.y + width: contentItem.width + height: contentItem.height + control: controlRoot + subControl: NativeStyle.ScrollBar.Handle + overrideState: NativeStyle.StyleItem.AlwaysHovered + opacity: controlRoot.hovered || control.pressed ? 1 : 0 + visible: contentItem instanceof NativeStyle.StyleItem + Behavior on opacity { NumberAnimation { duration: contentItem.transitionDuration } } + } + +} diff --git a/src/quickcontrols2/macos/ScrollView.qml b/src/quickcontrols2/macos/ScrollView.qml new file mode 100644 index 00000000..954c5d8a --- /dev/null +++ b/src/quickcontrols2/macos/ScrollView.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T +import QtQuick.NativeStyle as NativeStyle + +T.ScrollView { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + rightPadding: ScrollBar.vertical.visible ? ScrollBar.vertical.width : 0 + bottomPadding: ScrollBar.horizontal.visible ? ScrollBar.horizontal.height : 0 + + ScrollBar.vertical: ScrollBar { + parent: control + x: control.mirrored ? 0 : control.width - width + y: 0 + height: control.height - (control.ScrollBar.horizontal.visible ? control.ScrollBar.horizontal.height : 0) + active: control.ScrollBar.horizontal.active + + NativeStyle.ScrollViewCorner { + y: parent.height + control: control + visible: control.ScrollBar.horizontal.visible + useNinePatchImage: false + } + } + + ScrollBar.horizontal: ScrollBar { + parent: control + x: 0 + y: control.height - height + width: control.width - (control.ScrollBar.vertical.visible ? control.ScrollBar.vertical.width : 0) + active: control.ScrollBar.vertical.active + } +} diff --git a/src/quickcontrols2/macos/Slider.qml b/src/quickcontrols2/macos/Slider.qml new file mode 100644 index 00000000..77543577 --- /dev/null +++ b/src/quickcontrols2/macos/Slider.qml @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.NativeStyle as NativeStyle + +NativeStyle.DefaultSlider { + id: control + readonly property Item __focusFrameTarget: handle + readonly property Item __focusFrameStyleItem: handle + + background: NativeStyle.Slider { + control: control + subControl: NativeStyle.Slider.Groove | NativeStyle.Slider.Handle + // We normally cannot use a nine patch image for the + // groove if we draw tickmarks (since then the scaling + // would scale the tickmarks too). The groove might + // also use a different background color before, and + // after, the handle. + useNinePatchImage: false + } + + handle: NativeStyle.Slider { + // The handle is hidden, since it will be drawn as a part + // of the background. But will still needs it to be here so + // that we can place the focus rect correctly. + visible: false + + control: control + subControl: NativeStyle.Slider.Handle + x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)) + useNinePatchImage: false + } +} diff --git a/src/quickcontrols2/macos/SpinBox.qml b/src/quickcontrols2/macos/SpinBox.qml new file mode 100644 index 00000000..5928d37e --- /dev/null +++ b/src/quickcontrols2/macos/SpinBox.qml @@ -0,0 +1,126 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.NativeStyle as NativeStyle + +T.SpinBox { + id: control + + property bool __nativeBackground: background instanceof NativeStyle.StyleItem + property bool nativeIndicators: up.indicator.hasOwnProperty("_qt_default") + && down.indicator.hasOwnProperty("_qt_default") + + font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + 90 /* minimum */ ) + implicitHeight: Math.max(implicitBackgroundHeight, up.implicitIndicatorHeight + down.implicitIndicatorHeight) + + topInset + bottomInset + + spacing: 2 + + // Push the background right to make room for the indicators + rightInset: nativeIndicators ? up.implicitIndicatorWidth + spacing : 0 + + leftPadding: __nativeBackground ? background.contentPadding.left: 0 + topPadding: __nativeBackground ? background.contentPadding.top: 0 + rightPadding: (__nativeBackground ? background.contentPadding.right : 0) + rightInset + bottomPadding: __nativeBackground ? background.contentPadding.bottom: 0 + + readonly property Item __focusFrameTarget: contentItem + + validator: IntValidator { + locale: control.locale.name + bottom: Math.min(control.from, control.to) + top: Math.max(control.from, control.to) + } + + contentItem: TextInput { + text: control.displayText + font: control.font + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + horizontalAlignment: Qt.AlignLeft + verticalAlignment: Qt.AlignVCenter + + topPadding: 2 + bottomPadding: 2 + leftPadding: 10 + rightPadding: 10 + + readOnly: !control.editable + validator: control.validator + inputMethodHints: control.inputMethodHints + + readonly property Item __focusFrameControl: control + } + + NativeStyle.SpinBox { + id: upAndDown + control: control + subControl: NativeStyle.SpinBox.Up + visible: nativeIndicators + x: up.indicator.x + y: up.indicator.y + useNinePatchImage: false + } + + up.indicator: Item { + x: parent.width - width + y: (parent.height / 2) - height + implicitWidth: upAndDown.width + implicitHeight: upAndDown.height / 2 + property bool _qt_default + } + + down.indicator: Item { + x: parent.width - width + y: up.indicator.y + upAndDown.height / 2 + implicitWidth: upAndDown.width + implicitHeight: upAndDown.height / 2 + property bool _qt_default + } + + background: NativeStyle.SpinBox { + control: control + subControl: NativeStyle.SpinBox.Frame + contentWidth: contentItem.implicitWidth + contentHeight: contentItem.implicitHeight + } +} diff --git a/src/quickcontrols2/macos/TextArea.qml b/src/quickcontrols2/macos/TextArea.qml new file mode 100644 index 00000000..f6b88303 --- /dev/null +++ b/src/quickcontrols2/macos/TextArea.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.NativeStyle as NativeStyle + +NativeStyle.DefaultTextArea { +} diff --git a/src/quickcontrols2/macos/TextField.qml b/src/quickcontrols2/macos/TextField.qml new file mode 100644 index 00000000..f3a748f6 --- /dev/null +++ b/src/quickcontrols2/macos/TextField.qml @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.NativeStyle as NativeStyle + +NativeStyle.DefaultTextField { + id: control + readonly property Item __focusFrameTarget: control +} diff --git a/src/quickcontrols2/macos/macos.pri b/src/quickcontrols2/macos/macos.pri new file mode 100644 index 00000000..d059151e --- /dev/null +++ b/src/quickcontrols2/macos/macos.pri @@ -0,0 +1,15 @@ +QML_FILES += \ + $$PWD/Button.qml \ + $$PWD/Slider.qml \ + $$PWD/GroupBox.qml \ + $$PWD/CheckBox.qml \ + $$PWD/RadioButton.qml \ + $$PWD/SpinBox.qml \ + $$PWD/TextField.qml \ + $$PWD/Frame.qml \ + $$PWD/TextArea.qml \ + $$PWD/ComboBox.qml \ + $$PWD/ScrollView.qml \ + $$PWD/ScrollBar.qml \ + $$PWD/ProgressBar.qml \ + $$PWD/Dial.qml \ diff --git a/src/quickcontrols2/macos/qtquickcontrols2macosstyleplugin.cpp b/src/quickcontrols2/macos/qtquickcontrols2macosstyleplugin.cpp new file mode 100644 index 00000000..9a4fd0ce --- /dev/null +++ b/src/quickcontrols2/macos/qtquickcontrols2macosstyleplugin.cpp @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +extern void qml_register_types_QtQuick_Controls_macOS(); + +QT_BEGIN_NAMESPACE + +class QtQuickControls2MacOSStylePlugin : public QQuickStylePlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) + +public: + QtQuickControls2MacOSStylePlugin(QObject *parent = nullptr); + QString name() const override; + void initializeTheme(QQuickTheme *theme) override; +}; + + +QtQuickControls2MacOSStylePlugin::QtQuickControls2MacOSStylePlugin(QObject *parent): + QQuickStylePlugin(parent) +{ + volatile auto registration = &qml_register_types_QtQuick_Controls_macOS; + Q_UNUSED(registration); +} + +QString QtQuickControls2MacOSStylePlugin::name() const +{ + return QStringLiteral("macOS"); +} + +void QtQuickControls2MacOSStylePlugin::initializeTheme(QQuickTheme */*theme*/) +{ +} + +QT_END_NAMESPACE + +#include "qtquickcontrols2macosstyleplugin.moc" diff --git a/src/quickcontrols2/material/ApplicationWindow.qml b/src/quickcontrols2/material/ApplicationWindow.qml new file mode 100644 index 00000000..82a0da8b --- /dev/null +++ b/src/quickcontrols2/material/ApplicationWindow.qml @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Window +import QtQuick.Templates as T +import QtQuick.Controls.Material + +T.ApplicationWindow { + id: window + + color: Material.backgroundColor +} diff --git a/src/quickcontrols2/material/BusyIndicator.qml b/src/quickcontrols2/material/BusyIndicator.qml new file mode 100644 index 00000000..621b2b43 --- /dev/null +++ b/src/quickcontrols2/material/BusyIndicator.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.BusyIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + + contentItem: BusyIndicatorImpl { + implicitWidth: control.Material.touchTarget + implicitHeight: control.Material.touchTarget + color: control.Material.accentColor + + running: control.running + opacity: control.running ? 1 : 0 + Behavior on opacity { OpacityAnimator { duration: 250 } } + } +} diff --git a/src/quickcontrols2/material/Button.qml b/src/quickcontrols2/material/Button.qml new file mode 100644 index 00000000..352eebec --- /dev/null +++ b/src/quickcontrols2/material/Button.qml @@ -0,0 +1,117 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.Button { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topInset: 6 + bottomInset: 6 + padding: 12 + horizontalPadding: padding - 4 + spacing: 6 + + icon.width: 24 + icon.height: 24 + icon.color: !enabled ? Material.hintTextColor : + flat && highlighted ? Material.accentColor : + highlighted ? Material.primaryHighlightedTextColor : Material.foreground + + Material.elevation: flat ? control.down || control.hovered ? 2 : 0 + : control.down ? 8 : 2 + Material.background: flat ? "transparent" : undefined + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: !control.enabled ? control.Material.hintTextColor : + control.flat && control.highlighted ? control.Material.accentColor : + control.highlighted ? control.Material.primaryHighlightedTextColor : control.Material.foreground + } + + background: Rectangle { + implicitWidth: 64 + implicitHeight: control.Material.buttonHeight + + radius: 2 + color: !control.enabled ? control.Material.buttonDisabledColor : + control.highlighted ? control.Material.highlightedButtonColor : control.Material.buttonColor + + PaddedRectangle { + y: parent.height - 4 + width: parent.width + height: 4 + radius: 2 + topPadding: -2 + clip: true + visible: control.checkable && (!control.highlighted || control.flat) + color: control.checked && control.enabled ? control.Material.accentColor : control.Material.secondaryTextColor + } + + // The layer is disabled when the button color is transparent so you can do + // Material.background: "transparent" and get a proper flat button without needing + // to set Material.elevation as well + layer.enabled: control.enabled && control.Material.buttonColor.a > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + } + + Ripple { + clipRadius: 2 + width: parent.width + height: parent.height + pressed: control.pressed + anchor: control + active: control.down || control.visualFocus || control.hovered + color: control.flat && control.highlighted ? control.Material.highlightedRippleColor : control.Material.rippleColor + } + } +} diff --git a/src/quickcontrols2/material/CMakeLists.txt b/src/quickcontrols2/material/CMakeLists.txt new file mode 100644 index 00000000..2962385e --- /dev/null +++ b/src/quickcontrols2/material/CMakeLists.txt @@ -0,0 +1,267 @@ +##################################################################### +## qtquickcontrols2materialstyleplugin Plugin: +##################################################################### + +set(qml_files + "ApplicationWindow.qml" + "BusyIndicator.qml" + "Button.qml" + "CheckBox.qml" + "CheckDelegate.qml" + "ComboBox.qml" + "DelayButton.qml" + "Dial.qml" + "Dialog.qml" + "DialogButtonBox.qml" + "Drawer.qml" + "Frame.qml" + "GroupBox.qml" + "HorizontalHeaderView.qml" + "ItemDelegate.qml" + "Label.qml" + "Menu.qml" + "MenuBar.qml" + "MenuBarItem.qml" + "MenuItem.qml" + "MenuSeparator.qml" + "Page.qml" + "PageIndicator.qml" + "Pane.qml" + "Popup.qml" + "ProgressBar.qml" + "RadioButton.qml" + "RadioDelegate.qml" + "RangeSlider.qml" + "RoundButton.qml" + "ScrollView.qml" + "ScrollBar.qml" + "ScrollIndicator.qml" + "Slider.qml" + "SpinBox.qml" + "SplitView.qml" + "StackView.qml" + "SwipeDelegate.qml" + "SwipeView.qml" + "Switch.qml" + "SwitchDelegate.qml" + "TabBar.qml" + "TabButton.qml" + "TextArea.qml" + "TextField.qml" + "ToolBar.qml" + "ToolButton.qml" + "ToolSeparator.qml" + "ToolTip.qml" + "Tumbler.qml" + "VerticalHeaderView.qml" +) +set_source_files_properties(ApplicationWindow.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(BusyIndicator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Button.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(CheckBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(CheckDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ComboBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(DelayButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.2;6.0" +) +set_source_files_properties(Dial.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Dialog.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(DialogButtonBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(Drawer.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Frame.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(GroupBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(HorizontalHeaderView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.15;6.0" +) +set_source_files_properties(ItemDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Label.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Menu.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(MenuBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.3;6.0" +) +set_source_files_properties(MenuBarItem.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.3;6.0" +) +set_source_files_properties(MenuItem.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(MenuSeparator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(Page.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(PageIndicator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Pane.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Popup.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ProgressBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(RadioButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(RadioDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(RangeSlider.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(RoundButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(ScrollView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ScrollBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ScrollIndicator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Slider.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(SpinBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(SplitView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.13;6.0" +) +set_source_files_properties(StackView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(SwipeDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(SwipeView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Switch.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(SwitchDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(TabBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(TabButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(TextArea.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(TextField.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ToolBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ToolButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ToolSeparator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(ToolTip.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Tumbler.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(VerticalHeaderView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.15;6.0" +) + +qt_internal_add_qml_module(qtquickcontrols2materialstyleplugin + URI "QtQuick.Controls.Material" + VERSION "${PROJECT_VERSION}" + CLASS_NAME QtQuickControls2MaterialStylePlugin + IMPORTS + QtQuick.Controls.Basic/auto + PLUGIN_TARGET qtquickcontrols2materialstyleplugin + NO_PLUGIN_OPTIONAL + NO_GENERATE_PLUGIN_SOURCE + SOURCES + qquickmaterialstyle.cpp qquickmaterialstyle_p.h + qquickmaterialtheme.cpp qquickmaterialtheme_p.h + qtquickcontrols2materialstyleplugin.cpp + QML_FILES + ${qml_files} + DEFINES + QT_NO_CAST_FROM_ASCII + QT_NO_CAST_TO_ASCII + LIBRARIES + Qt::CorePrivate + Qt::GuiPrivate + Qt::QmlPrivate + Qt::QuickControls2ImplPrivate + Qt::QuickControls2Private + Qt::QuickPrivate + Qt::QuickTemplates2Private + PUBLIC_LIBRARIES + Qt::Core + Qt::Gui + Qt::Qml + Qt::Quick +) + +qt_internal_add_resource(qtquickcontrols2materialstyleplugin "qtquickcontrols2materialstyleplugin" + PREFIX + "/qt-project.org/imports/QtQuick/Controls/Material" + FILES + "images/arrow-indicator.png" + "images/arrow-indicator@2x.png" + "images/arrow-indicator@3x.png" + "images/arrow-indicator@4x.png" + "images/check.png" + "images/check@2x.png" + "images/check@3x.png" + "images/check@4x.png" + "images/drop-indicator.png" + "images/drop-indicator@2x.png" + "images/drop-indicator@3x.png" + "images/drop-indicator@4x.png" + "shaders/+glslcore/RectangularGlow.frag" + "shaders/+hlsl/RectangularGlow.frag" + "shaders/+qsb/RectangularGlow.frag" + "shaders/RectangularGlow.frag" +) + +add_subdirectory(impl) diff --git a/src/quickcontrols2/material/CheckBox.qml b/src/quickcontrols2/material/CheckBox.qml new file mode 100644 index 00000000..a3f717be --- /dev/null +++ b/src/quickcontrols2/material/CheckBox.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.CheckBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 8 + padding: 8 + verticalPadding: padding + 7 + + indicator: CheckIndicator { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + + Ripple { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 28; height: 28 + + z: -1 + anchor: control + pressed: control.pressed + active: control.down || control.visualFocus || control.hovered + color: control.checked ? control.Material.highlightedRippleColor : control.Material.rippleColor + } + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } +} diff --git a/src/quickcontrols2/material/CheckDelegate.qml b/src/quickcontrols2/material/CheckDelegate.qml new file mode 100644 index 00000000..ea42d666 --- /dev/null +++ b/src/quickcontrols2/material/CheckDelegate.qml @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.CheckDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 16 + verticalPadding: 8 + spacing: 16 + + icon.width: 24 + icon.height: 24 + icon.color: enabled ? Material.foreground : Material.hintTextColor + + indicator: CheckIndicator { + x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: IconLabel { + leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing + rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + } + + background: Rectangle { + implicitHeight: control.Material.delegateHeight + + color: control.highlighted ? control.Material.listHighlightColor : "transparent" + + Ripple { + width: parent.width + height: parent.height + + clip: visible + pressed: control.pressed + anchor: control + active: control.down || control.visualFocus || control.hovered + color: control.Material.rippleColor + } + } +} diff --git a/src/quickcontrols2/material/ComboBox.qml b/src/quickcontrols2/material/ComboBox.qml new file mode 100644 index 00000000..15f4c1ad --- /dev/null +++ b/src/quickcontrols2/material/ComboBox.qml @@ -0,0 +1,179 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Window +import QtQuick.Controls.impl +import QtQuick.Templates as T +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.ComboBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + topInset: 6 + bottomInset: 6 + + leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) + rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) + + Material.elevation: flat ? control.pressed || control.hovered ? 2 : 0 + : control.pressed ? 8 : 2 + Material.background: flat ? "transparent" : undefined + Material.foreground: flat ? undefined : Material.primaryTextColor + + delegate: MenuItem { + width: ListView.view.width + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData + Material.foreground: control.currentIndex === index ? ListView.view.contentItem.Material.accent : ListView.view.contentItem.Material.foreground + highlighted: control.highlightedIndex === index + hoverEnabled: control.hoverEnabled + } + + indicator: ColorImage { + x: control.mirrored ? control.padding : control.width - width - control.padding + y: control.topPadding + (control.availableHeight - height) / 2 + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + source: "qrc:/qt-project.org/imports/QtQuick/Controls/Material/images/drop-indicator.png" + } + + contentItem: T.TextField { + padding: 6 + leftPadding: control.editable ? 2 : control.mirrored ? 0 : 12 + rightPadding: control.editable ? 2 : control.mirrored ? 12 : 0 + + text: control.editable ? control.editText : control.displayText + + enabled: control.editable + autoScroll: control.editable + readOnly: control.down + inputMethodHints: control.inputMethodHints + validator: control.validator + selectByMouse: control.selectTextByMouse + + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + selectionColor: control.Material.accentColor + selectedTextColor: control.Material.primaryHighlightedTextColor + verticalAlignment: Text.AlignVCenter + + cursorDelegate: CursorDelegate { } + } + + background: Rectangle { + implicitWidth: 120 + implicitHeight: control.Material.buttonHeight + + radius: control.flat ? 0 : 2 + color: !control.editable ? control.Material.dialogColor : "transparent" + + layer.enabled: control.enabled && !control.editable && control.Material.background.a > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + } + + Rectangle { + visible: control.editable + y: parent.y + control.baselineOffset + width: parent.width + height: control.activeFocus ? 2 : 1 + color: control.editable && control.activeFocus ? control.Material.accentColor : control.Material.hintTextColor + } + + Ripple { + clip: control.flat + clipRadius: control.flat ? 0 : 2 + x: control.editable && control.indicator ? control.indicator.x : 0 + width: control.editable && control.indicator ? control.indicator.width : parent.width + height: parent.height + pressed: control.pressed + anchor: control.editable && control.indicator ? control.indicator : control + active: control.pressed || control.visualFocus || control.hovered + color: control.Material.rippleColor + } + } + + popup: T.Popup { + y: control.editable ? control.height - 5 : 0 + width: control.width + height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin) + transformOrigin: Item.Top + topMargin: 12 + bottomMargin: 12 + + Material.theme: control.Material.theme + Material.accent: control.Material.accent + Material.primary: control.Material.primary + + enter: Transition { + // grow_fade_in + NumberAnimation { property: "scale"; from: 0.9; easing.type: Easing.OutQuint; duration: 220 } + NumberAnimation { property: "opacity"; from: 0.0; easing.type: Easing.OutCubic; duration: 150 } + } + + exit: Transition { + // shrink_fade_out + NumberAnimation { property: "scale"; to: 0.9; easing.type: Easing.OutQuint; duration: 220 } + NumberAnimation { property: "opacity"; to: 0.0; easing.type: Easing.OutCubic; duration: 150 } + } + + contentItem: ListView { + clip: true + implicitHeight: contentHeight + model: control.delegateModel + currentIndex: control.highlightedIndex + highlightMoveDuration: 0 + + T.ScrollIndicator.vertical: ScrollIndicator { } + } + + background: Rectangle { + radius: 2 + color: parent.Material.dialogColor + + layer.enabled: control.enabled + layer.effect: ElevationEffect { + elevation: 8 + } + } + } +} diff --git a/src/quickcontrols2/material/DelayButton.qml b/src/quickcontrols2/material/DelayButton.qml new file mode 100644 index 00000000..d35df35c --- /dev/null +++ b/src/quickcontrols2/material/DelayButton.qml @@ -0,0 +1,116 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.DelayButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topInset: 6 + bottomInset: 6 + padding: 12 + horizontalPadding: padding - 4 + + Material.elevation: control.down ? 8 : 2 + + transition: Transition { + NumberAnimation { + duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress) + } + } + + contentItem: Text { + text: control.text + font: control.font + color: !control.enabled ? control.Material.hintTextColor : control.Material.foreground + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + + // TODO: Add a proper ripple/ink effect for mouse/touch input and focus state + background: Rectangle { + implicitWidth: 64 + implicitHeight: control.Material.buttonHeight + + radius: 2 + color: !control.enabled ? control.Material.buttonDisabledColor : control.Material.buttonColor + + PaddedRectangle { + y: parent.height - 4 + width: parent.width + height: 4 + radius: 2 + topPadding: -2 + clip: true + color: control.checked && control.enabled ? control.Material.accentColor : control.Material.secondaryTextColor + + PaddedRectangle { + width: parent.width * control.progress + height: 4 + radius: 2 + topPadding: -2 + rightPadding: Math.max(-2, width - parent.width) + clip: true + color: control.Material.accentColor + } + } + + layer.enabled: control.enabled && control.Material.buttonColor.a > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + } + + Ripple { + clipRadius: 2 + width: parent.width + height: parent.height + pressed: control.pressed + anchor: control + active: control.down || control.visualFocus || control.hovered + color: control.Material.rippleColor + } + } +} diff --git a/src/quickcontrols2/material/Dial.qml b/src/quickcontrols2/material/Dial.qml new file mode 100644 index 00000000..2731436f --- /dev/null +++ b/src/quickcontrols2/material/Dial.qml @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.Dial { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 100 + + x: control.width / 2 - width / 2 + y: control.height / 2 - height / 2 + width: Math.max(64, Math.min(control.width, control.height)) + height: width + color: "transparent" + radius: width / 2 + + border.color: control.enabled ? control.Material.accentColor : control.Material.hintTextColor + } + + handle: SliderHandle { + x: control.background.x + control.background.width / 2 - width / 2 + y: control.background.y + control.background.height / 2 - height / 2 + transform: [ + Translate { + y: -control.background.height * 0.4 + control.handle.height / 2 + }, + Rotation { + angle: control.angle + origin.x: control.handle.width / 2 + origin.y: control.handle.height / 2 + } + ] + implicitWidth: 10 + implicitHeight: 10 + + value: control.value + handleHasFocus: control.visualFocus + handlePressed: control.pressed + handleHovered: control.hovered + } +} diff --git a/src/quickcontrols2/material/Dialog.qml b/src/quickcontrols2/material/Dialog.qml new file mode 100644 index 00000000..1cb7f8c1 --- /dev/null +++ b/src/quickcontrols2/material/Dialog.qml @@ -0,0 +1,112 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.Dialog { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitHeaderWidth, + implicitFooterWidth) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + + padding: 24 + topPadding: 20 + + Material.elevation: 24 + + enter: Transition { + // grow_fade_in + NumberAnimation { property: "scale"; from: 0.9; to: 1.0; easing.type: Easing.OutQuint; duration: 220 } + NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutCubic; duration: 150 } + } + + exit: Transition { + // shrink_fade_out + NumberAnimation { property: "scale"; from: 1.0; to: 0.9; easing.type: Easing.OutQuint; duration: 220 } + NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.OutCubic; duration: 150 } + } + + background: Rectangle { + radius: 2 + color: control.Material.dialogColor + + layer.enabled: control.Material.elevation > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + } + } + + header: Label { + text: control.title + visible: control.title + elide: Label.ElideRight + padding: 24 + bottomPadding: 0 + // TODO: QPlatformTheme::TitleBarFont + font.bold: true + font.pixelSize: 16 + background: PaddedRectangle { + radius: 2 + color: control.Material.dialogColor + bottomPadding: -2 + clip: true + } + } + + footer: DialogButtonBox { + visible: count > 0 + } + + T.Overlay.modal: Rectangle { + color: control.Material.backgroundDimColor + Behavior on opacity { NumberAnimation { duration: 150 } } + } + + T.Overlay.modeless: Rectangle { + color: control.Material.backgroundDimColor + Behavior on opacity { NumberAnimation { duration: 150 } } + } +} diff --git a/src/quickcontrols2/material/DialogButtonBox.qml b/src/quickcontrols2/material/DialogButtonBox.qml new file mode 100644 index 00000000..e32fa812 --- /dev/null +++ b/src/quickcontrols2/material/DialogButtonBox.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.DialogButtonBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + spacing: 8 + padding: 8 + verticalPadding: 2 + alignment: Qt.AlignRight + buttonLayout: T.DialogButtonBox.AndroidLayout + + Material.foreground: Material.accent + + delegate: Button { flat: true } + + contentItem: ListView { + model: control.contentModel + spacing: control.spacing + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + snapMode: ListView.SnapToItem + } + + background: PaddedRectangle { + implicitHeight: control.Material.dialogButtonBoxHeight + radius: 2 + color: control.Material.dialogColor + // Rounded corners should be only at the top or at the bottom + topPadding: control.position === T.DialogButtonBox.Footer ? -2 : 0 + bottomPadding: control.position === T.DialogButtonBox.Header ? -2 : 0 + clip: true + } +} diff --git a/src/quickcontrols2/material/Drawer.qml b/src/quickcontrols2/material/Drawer.qml new file mode 100644 index 00000000..93c4bf56 --- /dev/null +++ b/src/quickcontrols2/material/Drawer.qml @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.Drawer { + id: control + + parent: T.Overlay.overlay + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: !dim && edge === Qt.BottomEdge && Material.elevation === 0 + leftPadding: !dim && edge === Qt.RightEdge && Material.elevation === 0 + rightPadding: !dim && edge === Qt.LeftEdge && Material.elevation === 0 + bottomPadding: !dim && edge === Qt.TopEdge && Material.elevation === 0 + + enter: Transition { SmoothedAnimation { velocity: 5 } } + exit: Transition { SmoothedAnimation { velocity: 5 } } + + Material.elevation: !interactive && !dim ? 0 : 16 + + background: Rectangle { + color: control.Material.dialogColor + + Rectangle { + readonly property bool horizontal: control.edge === Qt.LeftEdge || control.edge === Qt.RightEdge + width: horizontal ? 1 : parent.width + height: horizontal ? parent.height : 1 + color: control.Material.dividerColor + x: control.edge === Qt.LeftEdge ? parent.width - 1 : 0 + y: control.edge === Qt.TopEdge ? parent.height - 1 : 0 + visible: !control.dim && control.Material.elevation === 0 + } + + layer.enabled: control.position > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + fullHeight: true + } + } + + T.Overlay.modal: Rectangle { + color: control.Material.backgroundDimColor + Behavior on opacity { NumberAnimation { duration: 150 } } + } + + T.Overlay.modeless: Rectangle { + color: control.Material.backgroundDimColor + Behavior on opacity { NumberAnimation { duration: 150 } } + } +} diff --git a/src/quickcontrols2/material/Frame.qml b/src/quickcontrols2/material/Frame.qml new file mode 100644 index 00000000..8626f766 --- /dev/null +++ b/src/quickcontrols2/material/Frame.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.Frame { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 12 + verticalPadding: Material.frameVerticalPadding + + background: Rectangle { + radius: 2 + color: control.Material.elevation > 0 ? control.Material.backgroundColor : "transparent" + border.color: control.Material.frameColor + + layer.enabled: control.enabled && control.Material.elevation > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + } + } +} diff --git a/src/quickcontrols2/material/GroupBox.qml b/src/quickcontrols2/material/GroupBox.qml new file mode 100644 index 00000000..4a27b832 --- /dev/null +++ b/src/quickcontrols2/material/GroupBox.qml @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.GroupBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitLabelWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + spacing: 6 + padding: 12 + topPadding: Material.frameVerticalPadding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) + bottomPadding: Material.frameVerticalPadding + + label: Text { + x: control.leftPadding + width: control.availableWidth + + text: control.title + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + + background: Rectangle { + y: control.topPadding - control.bottomPadding + width: parent.width + height: parent.height - control.topPadding + control.bottomPadding + + radius: 2 + color: control.Material.elevation > 0 ? control.Material.backgroundColor : "transparent" + border.color: control.Material.frameColor + + layer.enabled: control.enabled && control.Material.elevation > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + } + } +} diff --git a/src/quickcontrols2/material/HorizontalHeaderView.qml b/src/quickcontrols2/material/HorizontalHeaderView.qml new file mode 100644 index 00000000..d2608c76 --- /dev/null +++ b/src/quickcontrols2/material/HorizontalHeaderView.qml @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.HorizontalHeaderView { + id: control + + implicitWidth: syncView ? syncView.width : 0 + implicitHeight: contentHeight + + delegate: Rectangle { + // Qt6: add cellPadding (and font etc) as public API in headerview + readonly property real cellPadding: 8 + + implicitWidth: text.implicitWidth + (cellPadding * 2) + implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2)) + color: control.Material.backgroundColor + + Text { + id: text + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] + : model[control.textRole]) + : modelData + width: parent.width + height: parent.height + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: enabled ? control.Material.foreground : control.Material.hintTextColor + } + } +} diff --git a/src/quickcontrols2/material/ItemDelegate.qml b/src/quickcontrols2/material/ItemDelegate.qml new file mode 100644 index 00000000..7d06b05b --- /dev/null +++ b/src/quickcontrols2/material/ItemDelegate.qml @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.ItemDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 16 + verticalPadding: 8 + spacing: 16 + + icon.width: 24 + icon.height: 24 + icon.color: enabled ? Material.foreground : Material.hintTextColor + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + } + + background: Rectangle { + implicitHeight: control.Material.delegateHeight + + color: control.highlighted ? control.Material.listHighlightColor : "transparent" + + Ripple { + width: parent.width + height: parent.height + + clip: visible + pressed: control.pressed + anchor: control + active: control.down || control.visualFocus || control.hovered + color: control.Material.rippleColor + } + } +} diff --git a/src/quickcontrols2/material/LICENSE_ANGULARJS.txt b/src/quickcontrols2/material/LICENSE_ANGULARJS.txt new file mode 100644 index 00000000..c1f2a826 --- /dev/null +++ b/src/quickcontrols2/material/LICENSE_ANGULARJS.txt @@ -0,0 +1,19 @@ +Copyright (c) 2014-2016 Google, Inc. http://angularjs.org + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/src/quickcontrols2/material/Label.qml b/src/quickcontrols2/material/Label.qml new file mode 100644 index 00000000..77e85f42 --- /dev/null +++ b/src/quickcontrols2/material/Label.qml @@ -0,0 +1,46 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material + +T.Label { + id: control + + color: enabled ? Material.foreground : Material.hintTextColor + linkColor: Material.accentColor +} diff --git a/src/quickcontrols2/material/Menu.qml b/src/quickcontrols2/material/Menu.qml new file mode 100644 index 00000000..b7e80c92 --- /dev/null +++ b/src/quickcontrols2/material/Menu.qml @@ -0,0 +1,107 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl +import QtQuick.Window + +T.Menu { + id: control + + Material.elevation: 8 + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + margins: 0 + verticalPadding: 8 + + transformOrigin: !cascade ? Item.Top : (mirrored ? Item.TopRight : Item.TopLeft) + + delegate: MenuItem { } + + enter: Transition { + // grow_fade_in + NumberAnimation { property: "scale"; from: 0.9; to: 1.0; easing.type: Easing.OutQuint; duration: 220 } + NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutCubic; duration: 150 } + } + + exit: Transition { + // shrink_fade_out + NumberAnimation { property: "scale"; from: 1.0; to: 0.9; easing.type: Easing.OutQuint; duration: 220 } + NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.OutCubic; duration: 150 } + } + + contentItem: ListView { + implicitHeight: contentHeight + + model: control.contentModel + interactive: Window.window + ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height + : false + clip: true + currentIndex: control.currentIndex + + ScrollIndicator.vertical: ScrollIndicator {} + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: control.Material.menuItemHeight + + radius: 3 + color: control.Material.dialogColor + + layer.enabled: control.Material.elevation > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + } + } + + T.Overlay.modal: Rectangle { + color: control.Material.backgroundDimColor + Behavior on opacity { NumberAnimation { duration: 150 } } + } + + T.Overlay.modeless: Rectangle { + color: control.Material.backgroundDimColor + Behavior on opacity { NumberAnimation { duration: 150 } } + } +} diff --git a/src/quickcontrols2/material/MenuBar.qml b/src/quickcontrols2/material/MenuBar.qml new file mode 100644 index 00000000..a0c3bd3f --- /dev/null +++ b/src/quickcontrols2/material/MenuBar.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.MenuBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + delegate: MenuBarItem { } + + contentItem: Row { + spacing: control.spacing + Repeater { + model: control.contentModel + } + } + + background: Rectangle { + implicitHeight: 40 + color: control.Material.dialogColor + } +} diff --git a/src/quickcontrols2/material/MenuBarItem.qml b/src/quickcontrols2/material/MenuBarItem.qml new file mode 100644 index 00000000..f1d4e87d --- /dev/null +++ b/src/quickcontrols2/material/MenuBarItem.qml @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.MenuBarItem { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 16 + verticalPadding: 12 + spacing: 16 + + icon.width: 24 + icon.height: 24 + icon.color: enabled ? Material.foreground : Material.hintTextColor + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + } + + background: Rectangle { + implicitWidth: 40 + implicitHeight: 40 + color: control.highlighted ? control.Material.listHighlightColor : "transparent" + + Ripple { + width: parent.width + height: parent.height + + clip: visible + pressed: control.pressed + anchor: control + active: control.down || control.highlighted + color: control.Material.rippleColor + } + } +} diff --git a/src/quickcontrols2/material/MenuItem.qml b/src/quickcontrols2/material/MenuItem.qml new file mode 100644 index 00000000..fab2de26 --- /dev/null +++ b/src/quickcontrols2/material/MenuItem.qml @@ -0,0 +1,111 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.MenuItem { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 16 + verticalPadding: Material.menuItemVerticalPadding + spacing: 16 + + icon.width: 24 + icon.height: 24 + icon.color: enabled ? Material.foreground : Material.hintTextColor + + indicator: CheckIndicator { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + visible: control.checkable + control: control + checkState: control.checked ? Qt.Checked : Qt.Unchecked + } + + arrow: ColorImage { + x: control.mirrored ? control.padding : control.width - width - control.padding + y: control.topPadding + (control.availableHeight - height) / 2 + + visible: control.subMenu + mirror: control.mirrored + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + source: "qrc:/qt-project.org/imports/QtQuick/Controls/Material/images/arrow-indicator.png" + } + + contentItem: IconLabel { + readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0 + readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0 + leftPadding: !control.mirrored ? indicatorPadding : arrowPadding + rightPadding: control.mirrored ? indicatorPadding : arrowPadding + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: control.Material.menuItemHeight + color: control.highlighted ? control.Material.listHighlightColor : "transparent" + + Ripple { + width: parent.width + height: parent.height + + clip: visible + pressed: control.pressed + anchor: control + active: control.down || control.highlighted + color: control.Material.rippleColor + } + } +} diff --git a/src/quickcontrols2/material/MenuSeparator.qml b/src/quickcontrols2/material/MenuSeparator.qml new file mode 100644 index 00000000..08a33ffe --- /dev/null +++ b/src/quickcontrols2/material/MenuSeparator.qml @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material + +T.MenuSeparator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + verticalPadding: 8 + + contentItem: Rectangle { + implicitWidth: 200 + implicitHeight: 1 + color: control.Material.dividerColor + } +} diff --git a/src/quickcontrols2/material/Page.qml b/src/quickcontrols2/material/Page.qml new file mode 100644 index 00000000..711fac2d --- /dev/null +++ b/src/quickcontrols2/material/Page.qml @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material + +T.Page { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitHeaderWidth, + implicitFooterWidth) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + + background: Rectangle { + color: control.Material.backgroundColor + } +} diff --git a/src/quickcontrols2/material/PageIndicator.qml b/src/quickcontrols2/material/PageIndicator.qml new file mode 100644 index 00000000..8ccd7de3 --- /dev/null +++ b/src/quickcontrols2/material/PageIndicator.qml @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material + +T.PageIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + delegate: Rectangle { + implicitWidth: 8 + implicitHeight: 8 + + radius: width / 2 + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + + opacity: index === currentIndex ? 0.95 : pressed ? 0.7 : 0.45 + Behavior on opacity { OpacityAnimator { duration: 100 } } + } + + contentItem: Row { + spacing: control.spacing + + Repeater { + model: control.count + delegate: control.delegate + } + } +} diff --git a/src/quickcontrols2/material/Pane.qml b/src/quickcontrols2/material/Pane.qml new file mode 100644 index 00000000..055a8d23 --- /dev/null +++ b/src/quickcontrols2/material/Pane.qml @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.Pane { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 12 + + background: Rectangle { + color: control.Material.backgroundColor + radius: control.Material.elevation > 0 ? 2 : 0 + + layer.enabled: control.enabled && control.Material.elevation > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + } + } +} diff --git a/src/quickcontrols2/material/Popup.qml b/src/quickcontrols2/material/Popup.qml new file mode 100644 index 00000000..cb5b62ec --- /dev/null +++ b/src/quickcontrols2/material/Popup.qml @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.Popup { + id: control + + Material.elevation: 24 + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 12 + + enter: Transition { + // grow_fade_in + NumberAnimation { property: "scale"; from: 0.9; to: 1.0; easing.type: Easing.OutQuint; duration: 220 } + NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutCubic; duration: 150 } + } + + exit: Transition { + // shrink_fade_out + NumberAnimation { property: "scale"; from: 1.0; to: 0.9; easing.type: Easing.OutQuint; duration: 220 } + NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.OutCubic; duration: 150 } + } + + background: Rectangle { + radius: 2 + color: control.Material.dialogColor + + layer.enabled: control.Material.elevation > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + } + } + + T.Overlay.modal: Rectangle { + color: control.Material.backgroundDimColor + Behavior on opacity { NumberAnimation { duration: 150 } } + } + + T.Overlay.modeless: Rectangle { + color: control.Material.backgroundDimColor + Behavior on opacity { NumberAnimation { duration: 150 } } + } +} diff --git a/src/quickcontrols2/material/ProgressBar.qml b/src/quickcontrols2/material/ProgressBar.qml new file mode 100644 index 00000000..dd4fae0e --- /dev/null +++ b/src/quickcontrols2/material/ProgressBar.qml @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.ProgressBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + contentItem: ProgressBarImpl { + implicitHeight: 4 + + scale: control.mirrored ? -1 : 1 + color: control.Material.accentColor + progress: control.position + indeterminate: control.visible && control.indeterminate + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 4 + y: (control.height - height) / 2 + height: 4 + + color: Qt.rgba(control.Material.accentColor.r, control.Material.accentColor.g, control.Material.accentColor.b, 0.25) + } +} diff --git a/src/quickcontrols2/material/RadioButton.qml b/src/quickcontrols2/material/RadioButton.qml new file mode 100644 index 00000000..664cb19e --- /dev/null +++ b/src/quickcontrols2/material/RadioButton.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.RadioButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 8 + padding: 8 + verticalPadding: padding + 6 + + indicator: RadioIndicator { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + + Ripple { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 28; height: 28 + + z: -1 + anchor: control + pressed: control.pressed + active: control.down || control.visualFocus || control.hovered + color: control.checked ? control.Material.highlightedRippleColor : control.Material.rippleColor + } + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } +} diff --git a/src/quickcontrols2/material/RadioDelegate.qml b/src/quickcontrols2/material/RadioDelegate.qml new file mode 100644 index 00000000..334e570b --- /dev/null +++ b/src/quickcontrols2/material/RadioDelegate.qml @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.RadioDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 16 + verticalPadding: 8 + spacing: 16 + + icon.width: 24 + icon.height: 24 + icon.color: enabled ? Material.foreground : Material.hintTextColor + + indicator: RadioIndicator { + x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: IconLabel { + leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing + rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + } + + background: Rectangle { + implicitHeight: control.Material.delegateHeight + + color: control.highlighted ? control.Material.listHighlightColor : "transparent" + + Ripple { + width: parent.width + height: parent.height + + clip: visible + pressed: control.pressed + anchor: control + active: control.down || control.visualFocus || control.hovered + color: control.Material.rippleColor + } + } +} diff --git a/src/quickcontrols2/material/RangeSlider.qml b/src/quickcontrols2/material/RangeSlider.qml new file mode 100644 index 00000000..d1d22115 --- /dev/null +++ b/src/quickcontrols2/material/RangeSlider.qml @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.RangeSlider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + first.implicitHandleWidth + leftPadding + rightPadding, + second.implicitHandleWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + first.implicitHandleHeight + topPadding + bottomPadding, + second.implicitHandleHeight + topPadding + bottomPadding) + + padding: 6 + + first.handle: SliderHandle { + x: control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height)) + value: first.value + handleHasFocus: activeFocus + handlePressed: first.pressed + handleHovered: first.hovered + } + + second.handle: SliderHandle { + x: control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height)) + value: second.value + handleHasFocus: activeFocus + handlePressed: second.pressed + handleHovered: second.hovered + } + + background: Rectangle { + x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) + implicitWidth: control.horizontal ? 200 : 48 + implicitHeight: control.horizontal ? 48 : 200 + width: control.horizontal ? control.availableWidth : 4 + height: control.horizontal ? 4 : control.availableHeight + scale: control.horizontal && control.mirrored ? -1 : 1 + color: control.enabled ? Color.transparent(control.Material.accentColor, 0.33) : control.Material.sliderDisabledColor + + Rectangle { + x: control.horizontal ? control.first.position * parent.width : 0 + y: control.horizontal ? 0 : control.second.visualPosition * parent.height + width: control.horizontal ? control.second.position * parent.width - control.first.position * parent.width : 4 + height: control.horizontal ? 4 : control.second.position * parent.height - control.first.position * parent.height + + color: control.enabled ? control.Material.accentColor : control.Material.sliderDisabledColor + } + } +} diff --git a/src/quickcontrols2/material/RoundButton.qml b/src/quickcontrols2/material/RoundButton.qml new file mode 100644 index 00000000..f93f2425 --- /dev/null +++ b/src/quickcontrols2/material/RoundButton.qml @@ -0,0 +1,114 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.RoundButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + topInset: 6 + leftInset: 6 + rightInset: 6 + bottomInset: 6 + padding: 12 + spacing: 6 + + icon.width: 24 + icon.height: 24 + icon.color: !enabled ? Material.hintTextColor : + flat && highlighted ? Material.accentColor : + highlighted ? Material.primaryHighlightedTextColor : Material.foreground + + Material.elevation: flat ? control.down || control.hovered ? 2 : 0 + : control.down ? 12 : 6 + Material.background: flat ? "transparent" : undefined + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: !control.enabled ? control.Material.hintTextColor : + control.flat && control.highlighted ? control.Material.accentColor : + control.highlighted ? control.Material.primaryHighlightedTextColor : control.Material.foreground + } + + // TODO: Add a proper ripple/ink effect for mouse/touch input and focus state + background: Rectangle { + implicitWidth: control.Material.buttonHeight + implicitHeight: control.Material.buttonHeight + + radius: control.radius + color: !control.enabled ? control.Material.buttonDisabledColor + : control.checked || control.highlighted ? control.Material.highlightedButtonColor : control.Material.buttonColor + + Rectangle { + width: parent.width + height: parent.height + radius: control.radius + visible: control.hovered || control.visualFocus + color: control.Material.rippleColor + } + + Rectangle { + width: parent.width + height: parent.height + radius: control.radius + visible: control.down + color: control.Material.rippleColor + } + + // The layer is disabled when the button color is transparent so that you can do + // Material.background: "transparent" and get a proper flat button without needing + // to set Material.elevation as well + layer.enabled: control.enabled && control.Material.buttonColor.a > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + } + } +} diff --git a/src/quickcontrols2/material/ScrollBar.qml b/src/quickcontrols2/material/ScrollBar.qml new file mode 100644 index 00000000..55de0d13 --- /dev/null +++ b/src/quickcontrols2/material/ScrollBar.qml @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material + +T.ScrollBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: control.interactive ? 1 : 2 + visible: control.policy !== T.ScrollBar.AlwaysOff + minimumSize: orientation == Qt.Horizontal ? height / width : width / height + + contentItem: Rectangle { + implicitWidth: control.interactive ? 13 : 4 + implicitHeight: control.interactive ? 13 : 4 + + color: control.pressed ? control.Material.scrollBarPressedColor : + control.interactive && control.hovered ? control.Material.scrollBarHoveredColor : control.Material.scrollBarColor + opacity: 0.0 + } + + background: Rectangle { + implicitWidth: control.interactive ? 16 : 4 + implicitHeight: control.interactive ? 16 : 4 + color: "#0e000000" + opacity: 0.0 + visible: control.interactive + } + + states: State { + name: "active" + when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0) + } + + transitions: [ + Transition { + to: "active" + NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 1.0 } + }, + Transition { + from: "active" + SequentialAnimation { + PropertyAction{ targets: [control.contentItem, control.background]; property: "opacity"; value: 1.0 } + PauseAnimation { duration: 2450 } + NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 0.0 } + } + } + ] +} diff --git a/src/quickcontrols2/material/ScrollIndicator.qml b/src/quickcontrols2/material/ScrollIndicator.qml new file mode 100644 index 00000000..bc81c630 --- /dev/null +++ b/src/quickcontrols2/material/ScrollIndicator.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material + +T.ScrollIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 2 + + contentItem: Rectangle { + implicitWidth: 4 + implicitHeight: 4 + + color: control.Material.scrollBarColor + visible: control.size < 1.0 + opacity: 0.0 + + states: State { + name: "active" + when: control.active + PropertyChanges { target: 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/quickcontrols2/material/ScrollView.qml b/src/quickcontrols2/material/ScrollView.qml new file mode 100644 index 00000000..a6bba9de --- /dev/null +++ b/src/quickcontrols2/material/ScrollView.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.ScrollView { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + ScrollBar.vertical: ScrollBar { + parent: control + x: control.mirrored ? 0 : control.width - width + y: control.topPadding + height: control.availableHeight + active: control.ScrollBar.horizontal.active + } + + ScrollBar.horizontal: ScrollBar { + parent: control + x: control.leftPadding + y: control.height - height + width: control.availableWidth + active: control.ScrollBar.vertical.active + } +} diff --git a/src/quickcontrols2/material/Slider.qml b/src/quickcontrols2/material/Slider.qml new file mode 100644 index 00000000..2a366734 --- /dev/null +++ b/src/quickcontrols2/material/Slider.qml @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.Slider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitHandleWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitHandleHeight + topPadding + bottomPadding) + + padding: 6 + + handle: SliderHandle { + x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)) + value: control.value + handleHasFocus: control.visualFocus + handlePressed: control.pressed + handleHovered: control.hovered + } + + background: Rectangle { + x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) + implicitWidth: control.horizontal ? 200 : 48 + implicitHeight: control.horizontal ? 48 : 200 + width: control.horizontal ? control.availableWidth : 4 + height: control.horizontal ? 4 : control.availableHeight + scale: control.horizontal && control.mirrored ? -1 : 1 + color: control.enabled ? Color.transparent(control.Material.accentColor, 0.33) : control.Material.sliderDisabledColor + + Rectangle { + x: control.horizontal ? 0 : (parent.width - width) / 2 + y: control.horizontal ? (parent.height - height) / 2 : control.visualPosition * parent.height + width: control.horizontal ? control.position * parent.width : 4 + height: control.horizontal ? 4 : control.position * parent.height + + color: control.enabled ? control.Material.accentColor : control.Material.sliderDisabledColor + } + } +} diff --git a/src/quickcontrols2/material/SpinBox.qml b/src/quickcontrols2/material/SpinBox.qml new file mode 100644 index 00000000..4f69dd25 --- /dev/null +++ b/src/quickcontrols2/material/SpinBox.qml @@ -0,0 +1,156 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.SpinBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentItem.implicitWidth + + up.implicitIndicatorWidth + + down.implicitIndicatorWidth) + implicitHeight: Math.max(implicitContentHeight + topPadding + bottomPadding, + implicitBackgroundHeight, + up.implicitIndicatorHeight, + down.implicitIndicatorHeight) + + spacing: 6 + topPadding: 8 + bottomPadding: 16 + leftPadding: (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0)) + rightPadding: (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0)) + + validator: IntValidator { + locale: control.locale.name + bottom: Math.min(control.from, control.to) + top: Math.max(control.from, control.to) + } + + contentItem: TextInput { + text: control.displayText + + font: control.font + color: enabled ? control.Material.foreground : control.Material.hintTextColor + selectionColor: control.Material.textSelectionColor + selectedTextColor: control.Material.foreground + horizontalAlignment: Qt.AlignHCenter + verticalAlignment: Qt.AlignVCenter + + cursorDelegate: CursorDelegate { } + + readOnly: !control.editable + validator: control.validator + inputMethodHints: control.inputMethodHints + } + + up.indicator: Item { + x: control.mirrored ? 0 : parent.width - width + implicitWidth: control.Material.touchTarget + implicitHeight: control.Material.touchTarget + height: parent.height + width: height + + Ripple { + clipRadius: 2 + x: control.spacing + y: control.spacing + width: parent.width - 2 * control.spacing + height: parent.height - 2 * control.spacing + pressed: control.up.pressed + active: control.up.pressed || control.up.hovered || control.visualFocus + color: control.Material.rippleColor + } + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: Math.min(parent.width / 3, parent.height / 3) + height: 2 + color: enabled ? control.Material.foreground : control.Material.spinBoxDisabledIconColor + } + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 2 + height: Math.min(parent.width / 3, parent.height / 3) + color: enabled ? control.Material.foreground : control.Material.spinBoxDisabledIconColor + } + } + + down.indicator: Item { + x: control.mirrored ? parent.width - width : 0 + implicitWidth: control.Material.touchTarget + implicitHeight: control.Material.touchTarget + height: parent.height + width: height + + Ripple { + clipRadius: 2 + x: control.spacing + y: control.spacing + width: parent.width - 2 * control.spacing + height: parent.height - 2 * control.spacing + pressed: control.down.pressed + active: control.down.pressed || control.down.hovered || control.visualFocus + color: control.Material.rippleColor + } + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: parent.width / 3 + height: 2 + color: enabled ? control.Material.foreground : control.Material.spinBoxDisabledIconColor + } + } + + background: Item { + implicitWidth: 192 + implicitHeight: control.Material.touchTarget + + Rectangle { + x: parent.width / 2 - width / 2 + y: parent.y + parent.height - height - control.bottomPadding / 2 + width: control.availableWidth + height: control.activeFocus ? 2 : 1 + color: control.activeFocus ? control.Material.accentColor : control.Material.hintTextColor + } + } +} diff --git a/src/quickcontrols2/material/SplitView.qml b/src/quickcontrols2/material/SplitView.qml new file mode 100644 index 00000000..95556cd0 --- /dev/null +++ b/src/quickcontrols2/material/SplitView.qml @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Material + +T.SplitView { + id: control + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + handle: Rectangle { + implicitWidth: control.orientation === Qt.Horizontal ? 6 : control.width + implicitHeight: control.orientation === Qt.Horizontal ? control.height : 6 + color: T.SplitHandle.pressed ? control.Material.background + : Qt.lighter(control.Material.background, T.SplitHandle.hovered ? 1.2 : 1.1) + + Rectangle { + color: control.Material.secondaryTextColor + width: control.orientation === Qt.Horizontal ? thickness : length + height: control.orientation === Qt.Horizontal ? length : thickness + radius: thickness + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + + property int length: parent.T.SplitHandle.pressed ? 3 : 8 + readonly property int thickness: parent.T.SplitHandle.pressed ? 3 : 1 + + Behavior on length { + NumberAnimation { + duration: 100 + } + } + } + } +} diff --git a/src/quickcontrols2/material/StackView.qml b/src/quickcontrols2/material/StackView.qml new file mode 100644 index 00000000..4c3e6749 --- /dev/null +++ b/src/quickcontrols2/material/StackView.qml @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material + +T.StackView { + id: control + + popEnter: Transition { + // slide_in_left + NumberAnimation { property: "x"; from: (control.mirrored ? -0.5 : 0.5) * -control.width; to: 0; duration: 200; easing.type: Easing.OutCubic } + NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; duration: 200; easing.type: Easing.OutCubic } + } + + popExit: Transition { + // slide_out_right + NumberAnimation { property: "x"; from: 0; to: (control.mirrored ? -0.5 : 0.5) * control.width; duration: 200; easing.type: Easing.OutCubic } + NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; duration: 200; easing.type: Easing.OutCubic } + } + + pushEnter: Transition { + // slide_in_right + NumberAnimation { property: "x"; from: (control.mirrored ? -0.5 : 0.5) * control.width; to: 0; duration: 200; easing.type: Easing.OutCubic } + NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; duration: 200; easing.type: Easing.OutCubic } + } + + pushExit: Transition { + // slide_out_left + NumberAnimation { property: "x"; from: 0; to: (control.mirrored ? -0.5 : 0.5) * -control.width; duration: 200; easing.type: Easing.OutCubic } + NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; duration: 200; easing.type: Easing.OutCubic } + } + + replaceEnter: Transition { + // slide_in_right + NumberAnimation { property: "x"; from: (control.mirrored ? -0.5 : 0.5) * control.width; to: 0; duration: 200; easing.type: Easing.OutCubic } + NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; duration: 200; easing.type: Easing.OutCubic } + } + + replaceExit: Transition { + // slide_out_left + NumberAnimation { property: "x"; from: 0; to: (control.mirrored ? -0.5 : 0.5) * -control.width; duration: 200; easing.type: Easing.OutCubic } + NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; duration: 200; easing.type: Easing.OutCubic } + } +} diff --git a/src/quickcontrols2/material/SwipeDelegate.qml b/src/quickcontrols2/material/SwipeDelegate.qml new file mode 100644 index 00000000..c7aff94a --- /dev/null +++ b/src/quickcontrols2/material/SwipeDelegate.qml @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.SwipeDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 16 + verticalPadding: 8 + spacing: 16 + + icon.width: 24 + icon.height: 24 + icon.color: enabled ? Material.foreground : Material.hintTextColor + + swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } } + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + } + + background: Rectangle { + implicitHeight: control.Material.delegateHeight + + color: control.Material.backgroundColor + + Rectangle { + width: parent.width + height: parent.height + visible: control.highlighted + color: control.Material.listHighlightColor + } + + Ripple { + width: parent.width + height: parent.height + + clip: visible + pressed: control.pressed + anchor: control + active: control.down || control.visualFocus || control.hovered + color: control.Material.rippleColor + enabled: control.swipe.position === 0 + } + } +} diff --git a/src/quickcontrols2/material/SwipeView.qml b/src/quickcontrols2/material/SwipeView.qml new file mode 100644 index 00000000..cd4da229 --- /dev/null +++ b/src/quickcontrols2/material/SwipeView.qml @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material + +T.SwipeView { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + contentItem: ListView { + model: control.contentModel + interactive: control.interactive + currentIndex: control.currentIndex + focus: control.focus + + spacing: control.spacing + orientation: control.orientation + snapMode: ListView.SnapOneItem + boundsBehavior: Flickable.StopAtBounds + + highlightRangeMode: ListView.StrictlyEnforceRange + preferredHighlightBegin: 0 + preferredHighlightEnd: 0 + highlightMoveDuration: 250 + maximumFlickVelocity: 4 * (control.orientation === Qt.Horizontal ? width : height) + } +} diff --git a/src/quickcontrols2/material/Switch.qml b/src/quickcontrols2/material/Switch.qml new file mode 100644 index 00000000..a43e8730 --- /dev/null +++ b/src/quickcontrols2/material/Switch.qml @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl +import QtQuick.Templates as T + +T.Switch { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 8 + spacing: 8 + + indicator: SwitchIndicator { + x: text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + + Ripple { + x: parent.handle.x + parent.handle.width / 2 - width / 2 + y: parent.handle.y + parent.handle.height / 2 - height / 2 + width: 28; height: 28 + pressed: control.pressed + active: control.down || control.visualFocus || control.hovered + color: control.checked ? control.Material.highlightedRippleColor : control.Material.rippleColor + } + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } +} diff --git a/src/quickcontrols2/material/SwitchDelegate.qml b/src/quickcontrols2/material/SwitchDelegate.qml new file mode 100644 index 00000000..fd7b7ab0 --- /dev/null +++ b/src/quickcontrols2/material/SwitchDelegate.qml @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.SwitchDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 16 + verticalPadding: Material.switchDelegateVerticalPadding + spacing: 16 + + icon.width: 24 + icon.height: 24 + icon.color: enabled ? Material.foreground : Material.hintTextColor + + indicator: SwitchIndicator { + x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: IconLabel { + leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing + rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: control.enabled ? control.Material.foreground : control.Material.hintTextColor + } + + background: Rectangle { + implicitHeight: control.Material.delegateHeight + + color: control.highlighted ? control.Material.listHighlightColor : "transparent" + + Ripple { + width: parent.width + height: parent.height + + clip: visible + pressed: control.pressed + anchor: control + active: control.down || control.visualFocus || control.hovered + color: control.Material.rippleColor + } + } +} diff --git a/src/quickcontrols2/material/TabBar.qml b/src/quickcontrols2/material/TabBar.qml new file mode 100644 index 00000000..9e9585f3 --- /dev/null +++ b/src/quickcontrols2/material/TabBar.qml @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.TabBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + spacing: 1 + + contentItem: ListView { + model: control.contentModel + currentIndex: control.currentIndex + + spacing: control.spacing + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + flickableDirection: Flickable.AutoFlickIfNeeded + snapMode: ListView.SnapToItem + + highlightMoveDuration: 250 + highlightResizeDuration: 0 + highlightFollowsCurrentItem: true + highlightRangeMode: ListView.ApplyRange + preferredHighlightBegin: 48 + preferredHighlightEnd: width - 48 + + highlight: Item { + z: 2 + Rectangle { + height: 2 + width: parent.width + y: control.position === T.TabBar.Footer ? 0 : parent.height - height + color: control.Material.accentColor + } + } + } + + background: Rectangle { + color: control.Material.backgroundColor + + layer.enabled: control.Material.elevation > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + fullWidth: true + } + } +} diff --git a/src/quickcontrols2/material/TabButton.qml b/src/quickcontrols2/material/TabButton.qml new file mode 100644 index 00000000..bae0cdb8 --- /dev/null +++ b/src/quickcontrols2/material/TabButton.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.TabButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 12 + spacing: 6 + + icon.width: 24 + icon.height: 24 + icon.color: !enabled ? Material.hintTextColor : down || checked ? Material.accentColor : Material.foreground + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: !control.enabled ? control.Material.hintTextColor : control.down || control.checked ? control.Material.accentColor : control.Material.foreground + } + + background: Ripple { + implicitHeight: control.Material.touchTarget + + clip: true + pressed: control.pressed + anchor: control + active: control.down || control.visualFocus || control.hovered + color: control.Material.rippleColor + } +} diff --git a/src/quickcontrols2/material/TextArea.qml b/src/quickcontrols2/material/TextArea.qml new file mode 100644 index 00000000..a213bd7a --- /dev/null +++ b/src/quickcontrols2/material/TextArea.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.TextArea { + id: control + + implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, + implicitBackgroundWidth + leftInset + rightInset, + placeholder.implicitWidth + leftPadding + rightPadding) + implicitHeight: Math.max(contentHeight + topPadding + bottomPadding, + implicitBackgroundHeight + topInset + bottomInset, + placeholder.implicitHeight + 1 + topPadding + bottomPadding) + + topPadding: 8 + bottomPadding: 16 + + color: enabled ? Material.foreground : Material.hintTextColor + selectionColor: Material.accentColor + selectedTextColor: Material.primaryHighlightedTextColor + placeholderTextColor: Material.hintTextColor + cursorDelegate: CursorDelegate { } + + PlaceholderText { + id: placeholder + x: control.leftPadding + y: control.topPadding + width: control.width - (control.leftPadding + control.rightPadding) + height: control.height - (control.topPadding + control.bottomPadding) + text: control.placeholderText + font: control.font + color: control.placeholderTextColor + verticalAlignment: control.verticalAlignment + elide: Text.ElideRight + renderType: control.renderType + visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) + } + + background: Rectangle { + y: parent.height - height - control.bottomPadding / 2 + implicitWidth: 120 + height: control.activeFocus ? 2 : 1 + color: control.activeFocus ? control.Material.accentColor : control.Material.hintTextColor + } +} diff --git a/src/quickcontrols2/material/TextField.qml b/src/quickcontrols2/material/TextField.qml new file mode 100644 index 00000000..8623ddf5 --- /dev/null +++ b/src/quickcontrols2/material/TextField.qml @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.TextField { + id: control + + implicitWidth: implicitBackgroundWidth + leftInset + rightInset + || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding, + placeholder.implicitHeight + topPadding + bottomPadding) + + topPadding: 8 + bottomPadding: 16 + + color: enabled ? Material.foreground : Material.hintTextColor + selectionColor: Material.accentColor + selectedTextColor: Material.primaryHighlightedTextColor + placeholderTextColor: Material.hintTextColor + verticalAlignment: TextInput.AlignVCenter + + cursorDelegate: CursorDelegate { } + + PlaceholderText { + id: placeholder + x: control.leftPadding + y: control.topPadding + width: control.width - (control.leftPadding + control.rightPadding) + height: control.height - (control.topPadding + control.bottomPadding) + text: control.placeholderText + font: control.font + color: control.placeholderTextColor + verticalAlignment: control.verticalAlignment + elide: Text.ElideRight + renderType: control.renderType + visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) + } + + background: Rectangle { + y: control.height - height - control.bottomPadding + 8 + implicitWidth: 120 + height: control.activeFocus || control.hovered ? 2 : 1 + color: control.activeFocus ? control.Material.accentColor + : (control.hovered ? control.Material.primaryTextColor : control.Material.hintTextColor) + } +} diff --git a/src/quickcontrols2/material/ToolBar.qml b/src/quickcontrols2/material/ToolBar.qml new file mode 100644 index 00000000..a1aa82bd --- /dev/null +++ b/src/quickcontrols2/material/ToolBar.qml @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.ToolBar { + id: control + + Material.elevation: 4 + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + Material.foreground: Material.toolTextColor + + spacing: 16 + + background: Rectangle { + implicitHeight: 48 + color: control.Material.toolBarColor + + layer.enabled: control.Material.elevation > 0 + layer.effect: ElevationEffect { + elevation: control.Material.elevation + fullWidth: true + } + } +} diff --git a/src/quickcontrols2/material/ToolButton.qml b/src/quickcontrols2/material/ToolButton.qml new file mode 100644 index 00000000..be7ae332 --- /dev/null +++ b/src/quickcontrols2/material/ToolButton.qml @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.ToolButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 6 + + icon.width: 24 + icon.height: 24 + icon.color: !enabled ? Material.hintTextColor : checked || highlighted ? Material.accent : Material.foreground + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: !control.enabled ? control.Material.hintTextColor : + control.checked || control.highlighted ? control.Material.accent : control.Material.foreground + } + + background: Ripple { + implicitWidth: control.Material.touchTarget + implicitHeight: control.Material.touchTarget + + readonly property bool square: control.contentItem.width <= control.contentItem.height + + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + clip: !square + width: square ? parent.height / 2 : parent.width + height: square ? parent.height / 2 : parent.height + pressed: control.pressed + anchor: control + active: control.enabled && (control.down || control.visualFocus || control.hovered) + color: control.Material.rippleColor + } +} diff --git a/src/quickcontrols2/material/ToolSeparator.qml b/src/quickcontrols2/material/ToolSeparator.qml new file mode 100644 index 00000000..4bce553d --- /dev/null +++ b/src/quickcontrols2/material/ToolSeparator.qml @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material + +T.ToolSeparator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + horizontalPadding: vertical ? 12 : 5 + verticalPadding: vertical ? 5 : 12 + + contentItem: Rectangle { + implicitWidth: vertical ? 1 : 38 + implicitHeight: vertical ? 38 : 1 + color: control.Material.hintTextColor + } +} diff --git a/src/quickcontrols2/material/ToolTip.qml b/src/quickcontrols2/material/ToolTip.qml new file mode 100644 index 00000000..033e48a3 --- /dev/null +++ b/src/quickcontrols2/material/ToolTip.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material + +T.ToolTip { + id: control + + x: parent ? (parent.width - implicitWidth) / 2 : 0 + y: -implicitHeight - 24 + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + margins: 12 + padding: 8 + horizontalPadding: padding + 8 + + closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent + + Material.theme: Material.Dark + + enter: Transition { + // toast_enter + NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutQuad; duration: 500 } + } + + exit: Transition { + // toast_exit + NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.InQuad; duration: 500 } + } + + contentItem: Text { + text: control.text + font: control.font + wrapMode: Text.Wrap + color: control.Material.foreground + } + + background: Rectangle { + implicitHeight: control.Material.tooltipHeight + color: control.Material.tooltipColor + opacity: 0.9 + radius: 2 + } +} diff --git a/src/quickcontrols2/material/Tumbler.qml b/src/quickcontrols2/material/Tumbler.qml new file mode 100644 index 00000000..2c1e5d66 --- /dev/null +++ b/src/quickcontrols2/material/Tumbler.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T +import QtQuick.Controls.Material + +T.Tumbler { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + delegate: Text { + text: modelData + color: control.Material.foreground + font: control.font + opacity: (1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)) * (control.enabled ? 1 : 0.6) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + contentItem: TumblerView { + implicitWidth: 60 + implicitHeight: 200 + model: control.model + delegate: control.delegate + path: Path { + startX: control.contentItem.width / 2 + startY: -control.contentItem.delegateHeight / 2 + PathLine { + x: control.contentItem.width / 2 + y: (control.visibleItemCount + 1) * control.contentItem.delegateHeight - control.contentItem.delegateHeight / 2 + } + } + + property real delegateHeight: control.availableHeight / control.visibleItemCount + } +} diff --git a/src/quickcontrols2/material/VerticalHeaderView.qml b/src/quickcontrols2/material/VerticalHeaderView.qml new file mode 100644 index 00000000..9769627e --- /dev/null +++ b/src/quickcontrols2/material/VerticalHeaderView.qml @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +T.VerticalHeaderView { + id: control + + implicitWidth: contentWidth + implicitHeight: syncView ? syncView.height : 0 + + delegate: Rectangle { + // Qt6: add cellPadding (and font etc) as public API in headerview + readonly property real cellPadding: 8 + + implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2)) + implicitHeight: text.implicitHeight + (cellPadding * 2) + color: control.Material.backgroundColor + + Text { + id: text + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] + : model[control.textRole]) + : modelData + width: parent.width + height: parent.height + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: enabled ? control.Material.foreground : control.Material.hintTextColor + } + } +} diff --git a/src/quickcontrols2/material/images/arrow-indicator.png b/src/quickcontrols2/material/images/arrow-indicator.png new file mode 100644 index 00000000..5a978001 Binary files /dev/null and b/src/quickcontrols2/material/images/arrow-indicator.png differ diff --git a/src/quickcontrols2/material/images/arrow-indicator.svg b/src/quickcontrols2/material/images/arrow-indicator.svg new file mode 100644 index 00000000..1e7217c8 --- /dev/null +++ b/src/quickcontrols2/material/images/arrow-indicator.svg @@ -0,0 +1,56 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/src/quickcontrols2/material/images/arrow-indicator@2x.png b/src/quickcontrols2/material/images/arrow-indicator@2x.png new file mode 100644 index 00000000..37ce3a95 Binary files /dev/null and b/src/quickcontrols2/material/images/arrow-indicator@2x.png differ diff --git a/src/quickcontrols2/material/images/arrow-indicator@3x.png b/src/quickcontrols2/material/images/arrow-indicator@3x.png new file mode 100644 index 00000000..57abd972 Binary files /dev/null and b/src/quickcontrols2/material/images/arrow-indicator@3x.png differ diff --git a/src/quickcontrols2/material/images/arrow-indicator@4x.png b/src/quickcontrols2/material/images/arrow-indicator@4x.png new file mode 100644 index 00000000..26d3d7c1 Binary files /dev/null and b/src/quickcontrols2/material/images/arrow-indicator@4x.png differ diff --git a/src/quickcontrols2/material/images/check.png b/src/quickcontrols2/material/images/check.png new file mode 100644 index 00000000..756a43a5 Binary files /dev/null and b/src/quickcontrols2/material/images/check.png differ diff --git a/src/quickcontrols2/material/images/check@2x.png b/src/quickcontrols2/material/images/check@2x.png new file mode 100644 index 00000000..9d1d6a32 Binary files /dev/null and b/src/quickcontrols2/material/images/check@2x.png differ diff --git a/src/quickcontrols2/material/images/check@3x.png b/src/quickcontrols2/material/images/check@3x.png new file mode 100644 index 00000000..32ed72f0 Binary files /dev/null and b/src/quickcontrols2/material/images/check@3x.png differ diff --git a/src/quickcontrols2/material/images/check@4x.png b/src/quickcontrols2/material/images/check@4x.png new file mode 100644 index 00000000..1767cee6 Binary files /dev/null and b/src/quickcontrols2/material/images/check@4x.png differ diff --git a/src/quickcontrols2/material/images/drop-indicator.png b/src/quickcontrols2/material/images/drop-indicator.png new file mode 100644 index 00000000..93560f50 Binary files /dev/null and b/src/quickcontrols2/material/images/drop-indicator.png differ diff --git a/src/quickcontrols2/material/images/drop-indicator.svg b/src/quickcontrols2/material/images/drop-indicator.svg new file mode 100644 index 00000000..94b5ca15 --- /dev/null +++ b/src/quickcontrols2/material/images/drop-indicator.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/quickcontrols2/material/images/drop-indicator@2x.png b/src/quickcontrols2/material/images/drop-indicator@2x.png new file mode 100644 index 00000000..d32f8160 Binary files /dev/null and b/src/quickcontrols2/material/images/drop-indicator@2x.png differ diff --git a/src/quickcontrols2/material/images/drop-indicator@3x.png b/src/quickcontrols2/material/images/drop-indicator@3x.png new file mode 100644 index 00000000..34c3e7d1 Binary files /dev/null and b/src/quickcontrols2/material/images/drop-indicator@3x.png differ diff --git a/src/quickcontrols2/material/images/drop-indicator@4x.png b/src/quickcontrols2/material/images/drop-indicator@4x.png new file mode 100644 index 00000000..0613f6dd Binary files /dev/null and b/src/quickcontrols2/material/images/drop-indicator@4x.png differ diff --git a/src/quickcontrols2/material/impl/BoxShadow.qml b/src/quickcontrols2/material/impl/BoxShadow.qml new file mode 100644 index 00000000..ea09570e --- /dev/null +++ b/src/quickcontrols2/material/impl/BoxShadow.qml @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +/* + A implementation of CSS's box-shadow, used by ElevationEffect for a Material Design + elevation shadow effect. + */ +RectangularGlow { + // The 4 properties from CSS box-shadow, plus the inherited color property + property int offsetX + property int offsetY + property int blurRadius + property int spreadRadius + + // The source item the shadow is being applied to, used for correctly + // calculating the corner radious + property Item source + + property bool fullWidth + property bool fullHeight + + x: (parent.width - width)/2 + offsetX + y: (parent.height - height)/2 + offsetY + + implicitWidth: source ? source.width : parent.width + implicitHeight: source ? source.height : parent.height + + width: implicitWidth + 2 * spreadRadius + (fullWidth ? 2 * cornerRadius : 0) + height: implicitHeight + 2 * spreadRadius + (fullHeight ? 2 * cornerRadius : 0) + glowRadius: blurRadius/2 + spread: 0.05 + cornerRadius: blurRadius + (source && source.radius || 0) +} diff --git a/src/quickcontrols2/material/impl/CMakeLists.txt b/src/quickcontrols2/material/impl/CMakeLists.txt new file mode 100644 index 00000000..315081d0 --- /dev/null +++ b/src/quickcontrols2/material/impl/CMakeLists.txt @@ -0,0 +1,46 @@ +##################################################################### +## qtquickcontrols2materialstyleimplplugin Plugin: +##################################################################### + +set(qml_files + "BoxShadow.qml" + "CheckIndicator.qml" + "CursorDelegate.qml" + "ElevationEffect.qml" + "RadioIndicator.qml" + "RectangularGlow.qml" + "SliderHandle.qml" + "SwitchIndicator.qml" +) +set_source_files_properties(${qml_files} PROPERTIES + QT_QML_SOURCE_VERSION "2.0" +) + +qt_internal_add_qml_module(qtquickcontrols2materialstyleimplplugin + URI "QtQuick.Controls.Material.impl" + VERSION "${PROJECT_VERSION}" + CLASS_NAME QtQuickControls2MaterialStyleImplPlugin + PLUGIN_TARGET qtquickcontrols2materialstyleimplplugin + NO_PLUGIN_OPTIONAL + SOURCES + qquickmaterialbusyindicator.cpp qquickmaterialbusyindicator_p.h + qquickmaterialprogressbar.cpp qquickmaterialprogressbar_p.h + qquickmaterialripple.cpp qquickmaterialripple_p.h + QML_FILES + ${qml_files} + DEFINES + QT_NO_CAST_FROM_ASCII + QT_NO_CAST_TO_ASCII + LIBRARIES + Qt::CorePrivate + Qt::Gui + Qt::QmlPrivate + Qt::QuickControls2ImplPrivate + Qt::QuickPrivate + Qt::QuickTemplates2Private + PUBLIC_LIBRARIES + Qt::Core + Qt::Gui + Qt::Qml + Qt::Quick +) diff --git a/src/quickcontrols2/material/impl/CheckIndicator.qml b/src/quickcontrols2/material/impl/CheckIndicator.qml new file mode 100644 index 00000000..b6593fab --- /dev/null +++ b/src/quickcontrols2/material/impl/CheckIndicator.qml @@ -0,0 +1,120 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +Rectangle { + id: indicatorItem + implicitWidth: 18 + implicitHeight: 18 + color: "transparent" + border.color: !control.enabled ? control.Material.hintTextColor + : checkState !== Qt.Unchecked ? control.Material.accentColor : control.Material.secondaryTextColor + border.width: checkState !== Qt.Unchecked ? width / 2 : 2 + radius: 2 + + property Item control + property int checkState: control.checkState + + Behavior on border.width { + NumberAnimation { + duration: 100 + easing.type: Easing.OutCubic + } + } + + Behavior on border.color { + ColorAnimation { + duration: 100 + easing.type: Easing.OutCubic + } + } + + // TODO: This needs to be transparent + Image { + id: checkImage + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 14 + height: 14 + source: "qrc:/qt-project.org/imports/QtQuick/Controls/Material/images/check.png" + fillMode: Image.PreserveAspectFit + + scale: indicatorItem.checkState === Qt.Checked ? 1 : 0 + Behavior on scale { NumberAnimation { duration: 100 } } + } + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 12 + height: 3 + + scale: indicatorItem.checkState === Qt.PartiallyChecked ? 1 : 0 + Behavior on scale { NumberAnimation { duration: 100 } } + } + + states: [ + State { + name: "checked" + when: indicatorItem.checkState === Qt.Checked + }, + State { + name: "partiallychecked" + when: indicatorItem.checkState === Qt.PartiallyChecked + } + ] + + transitions: Transition { + SequentialAnimation { + NumberAnimation { + target: indicatorItem + property: "scale" + // Go down 2 pixels in size. + to: 1 - 2 / indicatorItem.width + duration: 120 + } + NumberAnimation { + target: indicatorItem + property: "scale" + to: 1 + duration: 120 + } + } + } +} diff --git a/src/quickcontrols2/material/impl/CursorDelegate.qml b/src/quickcontrols2/material/impl/CursorDelegate.qml new file mode 100644 index 00000000..a913ab84 --- /dev/null +++ b/src/quickcontrols2/material/impl/CursorDelegate.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.Material + +Rectangle { + id: cursor + + color: parent.Material.accentColor + width: 2 + visible: parent.activeFocus && !parent.readOnly && parent.selectionStart === parent.selectionEnd + + Connections { + target: cursor.parent + function onCursorPositionChanged() { + // keep a moving cursor visible + cursor.opacity = 1 + timer.restart() + } + } + + Timer { + id: timer + running: cursor.parent.activeFocus && !cursor.parent.readOnly && interval != 0 + repeat: true + interval: Qt.styleHints.cursorFlashTime / 2 + onTriggered: cursor.opacity = !cursor.opacity ? 1 : 0 + // force the cursor visible when gaining focus + onRunningChanged: cursor.opacity = 1 + } +} diff --git a/src/quickcontrols2/material/impl/ElevationEffect.qml b/src/quickcontrols2/material/impl/ElevationEffect.qml new file mode 100644 index 00000000..8a4e98e3 --- /dev/null +++ b/src/quickcontrols2/material/impl/ElevationEffect.qml @@ -0,0 +1,279 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +/* + An effect for standard Material Design elevation shadows. Useful for using as \c layer.effect. + */ +Item { + id: effect + + /* + The source the effect is applied to. + */ + property var source + + /* + The elevation of the \l source Item. + */ + property int elevation: 0 + + /* + Set to \c true if the \l source Item is the same width as its parent and the shadow + should be full width instead of rounding around the corner of the Item. + + \sa fullHeight + */ + property bool fullWidth: false + + /* + Set to \c true if the \l source Item is the same height as its parent and the shadow + should be full height instead of rounding around the corner of the Item. + + \sa fullWidth + */ + property bool fullHeight: false + + /* + \internal + + The actual source Item the effect is applied to. + */ + readonly property Item sourceItem: source.sourceItem + + /* + * The following shadow values are taken from Angular Material + * + * The MIT License (MIT) + * + * Copyright (c) 2014-2016 Google, Inc. http://angularjs.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + /* + \internal + + The shadows to use for each possible elevation. There are three shadows that when combined + make up the elevation. + */ + readonly property var _shadows: [ + [{offset: 0, blur: 0, spread: 0}, + {offset: 0, blur: 0, spread: 0}, + {offset: 0, blur: 0, spread: 0}], + + [{offset: 1, blur: 3, spread: 0}, + {offset: 1, blur: 1, spread: 0}, + {offset: 2, blur: 1, spread: -1}], + + [{offset: 1, blur: 5, spread: 0}, + {offset: 2, blur: 2, spread: 0}, + {offset: 3, blur: 1, spread: -2}], + + [{offset: 1, blur: 8, spread: 0}, + {offset: 3, blur: 4, spread: 0}, + {offset: 3, blur: 3, spread: -2}], + + [{offset: 2, blur: 4, spread: -1}, + {offset: 4, blur: 5, spread: 0}, + {offset: 1, blur: 10, spread: 0}], + + [{offset: 3, blur: 5, spread: -1}, + {offset: 5, blur: 8, spread: 0}, + {offset: 1, blur: 14, spread: 0}], + + [{offset: 3, blur: 5, spread: -1}, + {offset: 6, blur: 10, spread: 0}, + {offset: 1, blur: 18, spread: 0}], + + [{offset: 4, blur: 5, spread: -2}, + {offset: 7, blur: 10, spread: 1}, + {offset: 2, blur: 16, spread: 1}], + + [{offset: 5, blur: 5, spread: -3}, + {offset: 8, blur: 10, spread: 1}, + {offset: 3, blur: 14, spread: 2}], + + [{offset: 5, blur: 6, spread: -3}, + {offset: 9, blur: 12, spread: 1}, + {offset: 3, blur: 16, spread: 2}], + + [{offset: 6, blur: 6, spread: -3}, + {offset: 10, blur: 14, spread: 1}, + {offset: 4, blur: 18, spread: 3}], + + [{offset: 6, blur: 7, spread: -4}, + {offset: 11, blur: 15, spread: 1}, + {offset: 4, blur: 20, spread: 3}], + + [{offset: 7, blur: 8, spread: -4}, + {offset: 12, blur: 17, spread: 2}, + {offset: 5, blur: 22, spread: 4}], + + [{offset: 7, blur: 8, spread: -4}, + {offset: 13, blur: 19, spread: 2}, + {offset: 5, blur: 24, spread: 4}], + + [{offset: 7, blur: 9, spread: -4}, + {offset: 14, blur: 21, spread: 2}, + {offset: 5, blur: 26, spread: 4}], + + [{offset: 8, blur: 9, spread: -5}, + {offset: 15, blur: 22, spread: 2}, + {offset: 6, blur: 28, spread: 5}], + + [{offset: 8, blur: 10, spread: -5}, + {offset: 16, blur: 24, spread: 2}, + {offset: 6, blur: 30, spread: 5}], + + [{offset: 8, blur: 11, spread: -5}, + {offset: 17, blur: 26, spread: 2}, + {offset: 6, blur: 32, spread: 5}], + + [{offset: 9, blur: 11, spread: -5}, + {offset: 18, blur: 28, spread: 2}, + {offset: 7, blur: 34, spread: 6}], + + [{offset: 9, blur: 12, spread: -6}, + {offset: 19, blur: 29, spread: 2}, + {offset: 7, blur: 36, spread: 6}], + + [{offset: 10, blur: 13, spread: -6}, + {offset: 20, blur: 31, spread: 3}, + {offset: 8, blur: 38, spread: 7}], + + [{offset: 10, blur: 13, spread: -6}, + {offset: 21, blur: 33, spread: 3}, + {offset: 8, blur: 40, spread: 7}], + + [{offset: 10, blur: 14, spread: -6}, + {offset: 22, blur: 35, spread: 3}, + {offset: 8, blur: 42, spread: 7}], + + [{offset: 11, blur: 14, spread: -7}, + {offset: 23, blur: 36, spread: 3}, + {offset: 9, blur: 44, spread: 8}], + + [{offset: 11, blur: 15, spread: -7}, + {offset: 24, blur: 38, spread: 3}, + {offset: 9, blur: 46, spread: 8}] + ] + + /* + \internal + + The current shadow based on the elevation. + */ + readonly property var _shadow: _shadows[Math.max(0, Math.min(elevation, _shadows.length - 1))] + + // Nest the shadows and source view in two items rendered as a layer + // so the shadow is not clipped by the bounds of the source view + Item { + property int margin: -100 + + x: margin + y: margin + width: parent.width - 2 * margin + height: parent.height - 2 * margin + + // By rendering as a layer, the shadow will never show through the source item, + // even when the source item's opacity is less than 1 + layer.enabled: true + + // The box shadows automatically pick up the size of the source Item and not + // the size of the parent, so we don't need to worry about the extra padding + // in the parent Item + BoxShadow { + offsetY: effect._shadow[0].offset + blurRadius: effect._shadow[0].blur + spreadRadius: effect._shadow[0].spread + color: Qt.rgba(0,0,0, 0.2) + + fullWidth: effect.fullWidth + fullHeight: effect.fullHeight + source: effect.sourceItem + } + + BoxShadow { + offsetY: effect._shadow[1].offset + blurRadius: effect._shadow[1].blur + spreadRadius: effect._shadow[1].spread + color: Qt.rgba(0,0,0, 0.14) + + fullWidth: effect.fullWidth + fullHeight: effect.fullHeight + source: effect.sourceItem + } + + BoxShadow { + offsetY: effect._shadow[2].offset + blurRadius: effect._shadow[2].blur + spreadRadius: effect._shadow[2].spread + color: Qt.rgba(0,0,0, 0.12) + + fullWidth: effect.fullWidth + fullHeight: effect.fullHeight + source: effect.sourceItem + } + + ShaderEffect { + property alias source: effect.source + + x: (parent.width - width)/2 + y: (parent.height - height)/2 + width: effect.sourceItem.width + height: effect.sourceItem.height + } + } +} diff --git a/src/quickcontrols2/material/impl/RadioIndicator.qml b/src/quickcontrols2/material/impl/RadioIndicator.qml new file mode 100644 index 00000000..68681c44 --- /dev/null +++ b/src/quickcontrols2/material/impl/RadioIndicator.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +Rectangle { + id: indicator + implicitWidth: 20 + implicitHeight: 20 + radius: width / 2 + border.width: 2 + border.color: !control.enabled ? control.Material.hintTextColor + : control.checked || control.down ? control.Material.accentColor : control.Material.secondaryTextColor + color: "transparent" + + property Item control + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 10 + height: 10 + radius: width / 2 + color: parent.border.color + visible: indicator.control.checked || indicator.control.down + } +} diff --git a/src/quickcontrols2/material/impl/RectangularGlow.qml b/src/quickcontrols2/material/impl/RectangularGlow.qml new file mode 100644 index 00000000..b2337afc --- /dev/null +++ b/src/quickcontrols2/material/impl/RectangularGlow.qml @@ -0,0 +1,240 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick + +/* + A cross-graphics API implementation of QtGraphicalEffects' RectangularGlow. + */ +Item { + id: rootItem + + /* + This property defines how many pixels outside the item area are reached + by the glow. + + The value ranges from 0.0 (no glow) to inf (infinite glow). By default, + the property is set to \c 0.0. + + \table + \header + \li Output examples with different glowRadius values + \li + \li + \row + \li \image RectangularGlow_glowRadius1.png + \li \image RectangularGlow_glowRadius2.png + \li \image RectangularGlow_glowRadius3.png + \row + \li \b { glowRadius: 10 } + \li \b { glowRadius: 20 } + \li \b { glowRadius: 40 } + \row + \li \l spread: 0 + \li \l spread: 0 + \li \l spread: 0 + \row + \li \l color: #ffffff + \li \l color: #ffffff + \li \l color: #ffffff + \row + \li \l cornerRadius: 25 + \li \l cornerRadius: 25 + \li \l cornerRadius: 25 + \endtable + + */ + property real glowRadius: 0.0 + + /* + This property defines how large part of the glow color is strenghtened + near the source edges. + + The value ranges from 0.0 (no strenght increase) to 1.0 (maximum + strenght increase). By default, the property is set to \c 0.0. + + \table + \header + \li Output examples with different spread values + \li + \li + \row + \li \image RectangularGlow_spread1.png + \li \image RectangularGlow_spread2.png + \li \image RectangularGlow_spread3.png + \row + \li \b { spread: 0.0 } + \li \b { spread: 0.5 } + \li \b { spread: 1.0 } + \row + \li \l glowRadius: 20 + \li \l glowRadius: 20 + \li \l glowRadius: 20 + \row + \li \l color: #ffffff + \li \l color: #ffffff + \li \l color: #ffffff + \row + \li \l cornerRadius: 25 + \li \l cornerRadius: 25 + \li \l cornerRadius: 25 + \endtable + */ + property real spread: 0.0 + + /* + This property defines the RGBA color value which is used for the glow. + + By default, the property is set to \c "white". + + \table + \header + \li Output examples with different color values + \li + \li + \row + \li \image RectangularGlow_color1.png + \li \image RectangularGlow_color2.png + \li \image RectangularGlow_color3.png + \row + \li \b { color: #ffffff } + \li \b { color: #55ff55 } + \li \b { color: #5555ff } + \row + \li \l glowRadius: 20 + \li \l glowRadius: 20 + \li \l glowRadius: 20 + \row + \li \l spread: 0 + \li \l spread: 0 + \li \l spread: 0 + \row + \li \l cornerRadius: 25 + \li \l cornerRadius: 25 + \li \l cornerRadius: 25 + \endtable + */ + property color color: "white" + + /* + This property defines the corner radius that is used to draw a glow with + rounded corners. + + The value ranges from 0.0 to half of the effective width or height of + the glow, whichever is smaller. This can be calculated with: \c{ + min(width, height) / 2.0 + glowRadius} + + By default, the property is bound to glowRadius property. The glow + behaves as if the rectangle was blurred when adjusting the glowRadius + property. + + \table + \header + \li Output examples with different cornerRadius values + \li + \li + \row + \li \image RectangularGlow_cornerRadius1.png + \li \image RectangularGlow_cornerRadius2.png + \li \image RectangularGlow_cornerRadius3.png + \row + \li \b { cornerRadius: 0 } + \li \b { cornerRadius: 25 } + \li \b { cornerRadius: 50 } + \row + \li \l glowRadius: 20 + \li \l glowRadius: 20 + \li \l glowRadius: 20 + \row + \li \l spread: 0 + \li \l spread: 0 + \li \l spread: 0 + \row + \li \l color: #ffffff + \li \l color: #ffffff + \li \l color: #ffffff + \endtable + */ + property real cornerRadius: glowRadius + + /* + This property allows the effect output pixels to be cached in order to + improve the rendering performance. + + Every time the source or effect properties are changed, the pixels in + the cache must be updated. Memory consumption is increased, because an + extra buffer of memory is required for storing the effect output. + + It is recommended to disable the cache when the source or the effect + properties are animated. + + By default, the property is set to \c false. + */ + property bool cached: false + + ShaderEffectSource { + id: cacheItem + anchors.fill: shaderItem + visible: rootItem.cached + smooth: true + sourceItem: shaderItem + live: true + hideSource: visible + } + + ShaderEffect { + id: shaderItem + + x: (parent.width - width) / 2.0 + y: (parent.height - height) / 2.0 + width: parent.width + rootItem.glowRadius * 2 + cornerRadius * 2 + height: parent.height + rootItem.glowRadius * 2 + cornerRadius * 2 + + function clampedCornerRadius() { + var maxCornerRadius = Math.min(rootItem.width, rootItem.height) / 2 + rootItem.glowRadius; + return Math.max(0, Math.min(rootItem.cornerRadius, maxCornerRadius)) + } + + property color color: rootItem.color + property real inverseSpread: 1.0 - rootItem.spread + property real relativeSizeX: ((inverseSpread * inverseSpread) * rootItem.glowRadius + cornerRadius * 2.0) / width + property real relativeSizeY: relativeSizeX * (width / height) + property real spread: rootItem.spread / 2.0 + property real cornerRadius: clampedCornerRadius() + + fragmentShader: "qrc:/qt-project.org/imports/QtQuick/Controls/Material/shaders/RectangularGlow.frag" + } +} diff --git a/src/quickcontrols2/material/impl/SliderHandle.qml b/src/quickcontrols2/material/impl/SliderHandle.qml new file mode 100644 index 00000000..60fd7aed --- /dev/null +++ b/src/quickcontrols2/material/impl/SliderHandle.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +Item { + id: root + implicitWidth: initialSize + implicitHeight: initialSize + + property real value: 0 + property bool handleHasFocus: false + property bool handlePressed: false + property bool handleHovered: false + readonly property int initialSize: 13 + readonly property var control: parent + + Rectangle { + id: handleRect + width: parent.width + height: parent.height + radius: width / 2 + scale: root.handlePressed ? 1.5 : 1 + color: control.enabled ? root.control.Material.accentColor : root.control.Material.sliderDisabledColor + + Behavior on scale { + NumberAnimation { + duration: 250 + } + } + } + + Ripple { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: 22; height: 22 + pressed: root.handlePressed + active: root.handlePressed || root.handleHasFocus || root.handleHovered + color: root.control.Material.highlightedRippleColor + } +} diff --git a/src/quickcontrols2/material/impl/SwitchIndicator.qml b/src/quickcontrols2/material/impl/SwitchIndicator.qml new file mode 100644 index 00000000..ae1709b6 --- /dev/null +++ b/src/quickcontrols2/material/impl/SwitchIndicator.qml @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.Material +import QtQuick.Controls.Material.impl + +Item { + id: indicator + implicitWidth: 38 + implicitHeight: 32 + + property Item control + property alias handle: handle + + Material.elevation: 1 + + Rectangle { + width: parent.width + height: 14 + radius: height / 2 + y: parent.height / 2 - height / 2 + color: indicator.control.enabled ? (indicator.control.checked ? indicator.control.Material.switchCheckedTrackColor : indicator.control.Material.switchUncheckedTrackColor) + : indicator.control.Material.switchDisabledTrackColor + } + + Rectangle { + id: handle + x: Math.max(0, Math.min(parent.width - width, indicator.control.visualPosition * parent.width - (width / 2))) + y: (parent.height - height) / 2 + width: 20 + height: 20 + radius: width / 2 + color: indicator.control.enabled ? (indicator.control.checked ? indicator.control.Material.switchCheckedHandleColor : indicator.control.Material.switchUncheckedHandleColor) + : indicator.control.Material.switchDisabledHandleColor + + Behavior on x { + enabled: !indicator.control.pressed + SmoothedAnimation { + duration: 300 + } + } + layer.enabled: indicator.Material.elevation > 0 + layer.effect: ElevationEffect { + elevation: indicator.Material.elevation + } + } +} diff --git a/src/quickcontrols2/material/impl/qquickmaterialbusyindicator.cpp b/src/quickcontrols2/material/impl/qquickmaterialbusyindicator.cpp new file mode 100644 index 00000000..10bcc035 --- /dev/null +++ b/src/quickcontrols2/material/impl/qquickmaterialbusyindicator.cpp @@ -0,0 +1,245 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickmaterialbusyindicator_p.h" + +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +/* + Relevant Android code: + + - core/res/res/anim/progress_indeterminate_rotation_material.xml contains + the rotation animation data. + - core/res/res/anim/progress_indeterminate_material.xml contains the trim + animation data. + - core/res/res/interpolator/trim_start_interpolator.xml and + core/res/res/interpolator/trim_end_interpolator.xml contain the start + and end trim path interpolators. + - addCommand() in core/java/android/util/PathParser.java has a list of the + different path commands available. +*/ + +static const int SpanAnimationDuration = 700; +static const int RotationAnimationDuration = SpanAnimationDuration * 6; +static const int TargetRotation = 720; +static const int OneDegree = 16; +static const qreal MinSweepSpan = 10 * OneDegree; +static const qreal MaxSweepSpan = 300 * OneDegree; + +class QQuickMaterialBusyIndicatorNode : public QQuickAnimatedNode +{ +public: + QQuickMaterialBusyIndicatorNode(QQuickMaterialBusyIndicator *item); + + void sync(QQuickItem *item) override; + +protected: + void updateCurrentTime(int time) override; + +private: + int m_lastStartAngle = 0; + int m_lastEndAngle = 0; + qreal m_width = 0; + qreal m_height = 0; + qreal m_devicePixelRatio = 1; + QColor m_color; +}; + +QQuickMaterialBusyIndicatorNode::QQuickMaterialBusyIndicatorNode(QQuickMaterialBusyIndicator *item) + : QQuickAnimatedNode(item) +{ + setLoopCount(Infinite); + setCurrentTime(item->elapsed()); + setDuration(RotationAnimationDuration); + + QSGImageNode *textureNode = item->window()->createImageNode(); + textureNode->setOwnsTexture(true); + appendChildNode(textureNode); + + // A texture seems to be required here, but we don't have one yet, as we haven't drawn anything, + // so just use a blank image. + QImage blankImage(item->width(), item->height(), QImage::Format_ARGB32_Premultiplied); + blankImage.fill(Qt::transparent); + textureNode->setTexture(item->window()->createTextureFromImage(blankImage)); +} + +void QQuickMaterialBusyIndicatorNode::updateCurrentTime(int time) +{ + const qreal w = m_width; + const qreal h = m_height; + const qreal size = qMin(w, h); + const qreal dx = (w - size) / 2; + const qreal dy = (h - size) / 2; + + QImage image(size * m_devicePixelRatio, size * m_devicePixelRatio, QImage::Format_ARGB32_Premultiplied); + image.fill(Qt::transparent); + + QPainter painter(&image); + painter.setRenderHint(QPainter::Antialiasing); + + QPen pen; + QSGImageNode *textureNode = static_cast(firstChild()); + pen.setColor(m_color); + pen.setWidth(qCeil(size / 12) * m_devicePixelRatio); + painter.setPen(pen); + + const qreal percentageComplete = time / qreal(RotationAnimationDuration); + const qreal spanPercentageComplete = (time % SpanAnimationDuration) / qreal(SpanAnimationDuration); + const int iteration = time / SpanAnimationDuration; + int startAngle = 0; + int endAngle = 0; + + if (iteration % 2 == 0) { + if (m_lastStartAngle > 360 * OneDegree) + m_lastStartAngle -= 360 * OneDegree; + + // The start angle is only affected by the rotation animation for the "grow" phase. + startAngle = m_lastStartAngle; + QEasingCurve angleCurve(QEasingCurve::OutQuad); + const qreal percentage = angleCurve.valueForProgress(spanPercentageComplete); + endAngle = m_lastStartAngle + MinSweepSpan + percentage * (MaxSweepSpan - MinSweepSpan); + m_lastEndAngle = endAngle; + } else { + // Both the start angle *and* the span are affected by the "shrink" phase. + QEasingCurve angleCurve(QEasingCurve::InQuad); + const qreal percentage = angleCurve.valueForProgress(spanPercentageComplete); + startAngle = m_lastEndAngle - MaxSweepSpan + percentage * (MaxSweepSpan - MinSweepSpan); + endAngle = m_lastEndAngle; + m_lastStartAngle = startAngle; + } + + const int halfPen = pen.width() / 2; + const QRectF arcBounds = QRectF(halfPen, halfPen, + m_devicePixelRatio * size - pen.width(), + m_devicePixelRatio * size - pen.width()); + // The current angle of the rotation animation. + const qreal rotation = OneDegree * percentageComplete * -TargetRotation; + startAngle -= rotation; + endAngle -= rotation; + const int angleSpan = endAngle - startAngle; + painter.drawArc(arcBounds, -startAngle, -angleSpan); + painter.end(); + + textureNode->setRect(QRectF(dx, dy, size, size)); + textureNode->setTexture(window()->createTextureFromImage(image)); +} + +void QQuickMaterialBusyIndicatorNode::sync(QQuickItem *item) +{ + QQuickMaterialBusyIndicator *indicator = static_cast(item); + m_color = indicator->color(); + m_width = indicator->width(); + m_height = indicator->height(); + m_devicePixelRatio = indicator->window()->effectiveDevicePixelRatio(); +} + +QQuickMaterialBusyIndicator::QQuickMaterialBusyIndicator(QQuickItem *parent) : + QQuickItem(parent) +{ + setFlag(ItemHasContents); +} + +QColor QQuickMaterialBusyIndicator::color() const +{ + return m_color; +} + +void QQuickMaterialBusyIndicator::setColor(const QColor &color) +{ + if (m_color == color) + return; + + m_color = color; + update(); +} + +bool QQuickMaterialBusyIndicator::isRunning() const +{ + return isVisible(); +} + +void QQuickMaterialBusyIndicator::setRunning(bool running) +{ + if (running) + setVisible(true); +} + +int QQuickMaterialBusyIndicator::elapsed() const +{ + return m_elapsed; +} + +void QQuickMaterialBusyIndicator::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data) +{ + QQuickItem::itemChange(change, data); + switch (change) { + case ItemOpacityHasChanged: + if (qFuzzyIsNull(data.realValue)) + setVisible(false); + break; + case ItemVisibleHasChanged: + update(); + break; + default: + break; + } +} + +QSGNode *QQuickMaterialBusyIndicator::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) +{ + QQuickMaterialBusyIndicatorNode *node = static_cast(oldNode); + if (isRunning() && width() > 0 && height() > 0) { + if (!node) { + node = new QQuickMaterialBusyIndicatorNode(this); + node->start(); + } + node->sync(this); + } else { + m_elapsed = node ? node->currentTime() : 0; + delete node; + node = nullptr; + } + return node; +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols2/material/impl/qquickmaterialbusyindicator_p.h b/src/quickcontrols2/material/impl/qquickmaterialbusyindicator_p.h new file mode 100644 index 00000000..72aeaf66 --- /dev/null +++ b/src/quickcontrols2/material/impl/qquickmaterialbusyindicator_p.h @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKMATERIALBUSYINDICATOR_P_H +#define QQUICKMATERIALBUSYINDICATOR_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include + +QT_BEGIN_NAMESPACE + +class QQuickMaterialBusyIndicator : public QQuickItem +{ + Q_OBJECT + Q_PROPERTY(QColor color READ color WRITE setColor FINAL) + Q_PROPERTY(bool running READ isRunning WRITE setRunning FINAL) + QML_NAMED_ELEMENT(BusyIndicatorImpl) + QML_ADDED_IN_VERSION(2, 0) + +public: + explicit QQuickMaterialBusyIndicator(QQuickItem *parent = nullptr); + + QColor color() const; + void setColor(const QColor &color); + + bool isRunning() const; + void setRunning(bool running); + + int elapsed() const; + +protected: + void itemChange(ItemChange change, const ItemChangeData &data) override; + QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override; + +private: + int m_elapsed = 0; + QColor m_color = Qt::black; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickMaterialBusyIndicator) + +#endif // QQUICKMATERIALBUSYINDICATOR_P_H diff --git a/src/quickcontrols2/material/impl/qquickmaterialprogressbar.cpp b/src/quickcontrols2/material/impl/qquickmaterialprogressbar.cpp new file mode 100644 index 00000000..8b3dde23 --- /dev/null +++ b/src/quickcontrols2/material/impl/qquickmaterialprogressbar.cpp @@ -0,0 +1,245 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickmaterialprogressbar_p.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +static const int PauseDuration = 520; +static const int SlideDuration = 1240; +static const int TotalDuration = SlideDuration + PauseDuration; + +class QQuickMaterialProgressBarNode : public QQuickAnimatedNode +{ +public: + QQuickMaterialProgressBarNode(QQuickMaterialProgressBar *item); + + void updateCurrentTime(int time) override; + void sync(QQuickItem *item) override; + +private: + void moveNode(QSGTransformNode *node, const QRectF &geometry, qreal progress); + + bool m_indeterminate = false; + QEasingCurve m_easing = QEasingCurve::OutCubic; +}; + +QQuickMaterialProgressBarNode::QQuickMaterialProgressBarNode(QQuickMaterialProgressBar *item) + : QQuickAnimatedNode(item) +{ + setLoopCount(Infinite); + setDuration(TotalDuration); +} + +void QQuickMaterialProgressBarNode::updateCurrentTime(int time) +{ + QSGRectangleNode *geometryNode = static_cast(firstChild()); + Q_ASSERT(geometryNode->type() == QSGNode::GeometryNodeType); + const QRectF geometry = geometryNode->rect(); + + QSGTransformNode *firstNode = static_cast(geometryNode->firstChild()); + if (firstNode) { + Q_ASSERT(firstNode->type() == QSGNode::TransformNodeType); + + const qreal progress = qMin(1.0, static_cast(time) / SlideDuration); + moveNode(static_cast(firstNode), geometry, progress); + } + + QSGTransformNode *secondNode = static_cast(geometryNode->lastChild()); + if (secondNode) { + Q_ASSERT(secondNode->type() == QSGNode::TransformNodeType); + + const qreal progress = qMax(0.0, static_cast(time - PauseDuration) / SlideDuration); + moveNode(static_cast(secondNode), geometry, progress); + } +} + +void QQuickMaterialProgressBarNode::sync(QQuickItem *item) +{ + QQuickMaterialProgressBar *bar = static_cast(item); + if (m_indeterminate != bar->isIndeterminate()) { + m_indeterminate = bar->isIndeterminate(); + if (m_indeterminate) + start(); + else + stop(); + } + + QQuickItemPrivate *d = QQuickItemPrivate::get(item); + + QRectF bounds = item->boundingRect(); + bounds.setHeight(item->implicitHeight()); + bounds.moveTop((item->height() - bounds.height()) / 2.0); + + QSGRectangleNode *geometryNode = static_cast(firstChild()); + if (!geometryNode) { + geometryNode = item->window()->createRectangleNode(); + geometryNode->setColor(Qt::transparent); + appendChildNode(geometryNode); + } + geometryNode->setRect(bounds); + + const int count = m_indeterminate ? 2 : 1; + const qreal w = m_indeterminate ? 0 : bar->progress() * item->width(); + const QRectF rect(0, bounds.y(), w, bounds.height()); + + QSGNode *transformNode = geometryNode->firstChild(); + for (int i = 0; i < count; ++i) { + if (!transformNode) { + transformNode = new QSGTransformNode; + geometryNode->appendChildNode(transformNode); + + QSGInternalRectangleNode *rectNode = d->sceneGraphContext()->createInternalRectangleNode(); + rectNode->setAntialiasing(true); + transformNode->appendChildNode(rectNode); + } + Q_ASSERT(transformNode->type() == QSGNode::TransformNodeType); + static_cast(transformNode)->setMatrix(QMatrix4x4()); + + QSGInternalRectangleNode *rectNode = static_cast(transformNode->firstChild()); + Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType); + + rectNode->setRect(rect); + rectNode->setColor(bar->color()); + rectNode->update(); + + transformNode = transformNode->nextSibling(); + } + + while (transformNode) { + QSGNode *nextSibling = transformNode->nextSibling(); + delete transformNode; + transformNode = nextSibling; + } +} + +void QQuickMaterialProgressBarNode::moveNode(QSGTransformNode *transformNode, const QRectF &geometry, qreal progress) +{ + const qreal value = m_easing.valueForProgress(progress); + const qreal x = value * geometry.width(); + + QMatrix4x4 matrix; + matrix.translate(x, 0); + transformNode->setMatrix(matrix); + + QSGInternalRectangleNode *rectNode = static_cast(transformNode->firstChild()); + Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType); + + QRectF r = geometry; + r.setWidth(value * (geometry.width() - x)); + rectNode->setRect(r); + rectNode->update(); +} + +QQuickMaterialProgressBar::QQuickMaterialProgressBar(QQuickItem *parent) + : QQuickItem(parent) +{ + setFlag(ItemHasContents); +} + +QColor QQuickMaterialProgressBar::color() const +{ + return m_color; +} + +void QQuickMaterialProgressBar::setColor(const QColor &color) +{ + if (color == m_color) + return; + + m_color = color; + update(); +} + +qreal QQuickMaterialProgressBar::progress() const +{ + return m_progress; +} + +void QQuickMaterialProgressBar::setProgress(qreal progress) +{ + if (progress == m_progress) + return; + + m_progress = progress; + update(); +} + +bool QQuickMaterialProgressBar::isIndeterminate() const +{ + return m_indeterminate; +} + +void QQuickMaterialProgressBar::setIndeterminate(bool indeterminate) +{ + if (indeterminate == m_indeterminate) + return; + + m_indeterminate = indeterminate; + update(); +} + +void QQuickMaterialProgressBar::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data) +{ + QQuickItem::itemChange(change, data); + if (change == ItemVisibleHasChanged) + update(); +} + +QSGNode *QQuickMaterialProgressBar::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *) +{ + QQuickMaterialProgressBarNode *node = static_cast(oldNode); + if (isVisible() && width() > 0 && height() > 0) { + if (!node) + node = new QQuickMaterialProgressBarNode(this); + node->sync(this); + } else { + delete node; + node = nullptr; + } + return node; +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols2/material/impl/qquickmaterialprogressbar_p.h b/src/quickcontrols2/material/impl/qquickmaterialprogressbar_p.h new file mode 100644 index 00000000..bf93812d --- /dev/null +++ b/src/quickcontrols2/material/impl/qquickmaterialprogressbar_p.h @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKMATERIALPROGRESSBAR_P_H +#define QQUICKMATERIALPROGRESSBAR_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include + +QT_BEGIN_NAMESPACE + +class QQuickMaterialProgressBar : public QQuickItem +{ + Q_OBJECT + Q_PROPERTY(QColor color READ color WRITE setColor FINAL) + Q_PROPERTY(qreal progress READ progress WRITE setProgress FINAL) + Q_PROPERTY(bool indeterminate READ isIndeterminate WRITE setIndeterminate FINAL) + QML_NAMED_ELEMENT(ProgressBarImpl) + QML_ADDED_IN_VERSION(2, 0) + +public: + explicit QQuickMaterialProgressBar(QQuickItem *parent = nullptr); + + QColor color() const; + void setColor(const QColor &color); + + qreal progress() const; + void setProgress(qreal progress); + + bool isIndeterminate() const; + void setIndeterminate(bool indeterminate); + +protected: + void itemChange(ItemChange change, const ItemChangeData &data) override; + QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override; + +private: + QColor m_color = Qt::black; + qreal m_progress = 0.0; + bool m_indeterminate = false; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickMaterialProgressBar) + +#endif // QQUICKMATERIALPROGRESSBAR_P_H diff --git a/src/quickcontrols2/material/impl/qquickmaterialripple.cpp b/src/quickcontrols2/material/impl/qquickmaterialripple.cpp new file mode 100644 index 00000000..a39a115b --- /dev/null +++ b/src/quickcontrols2/material/impl/qquickmaterialripple.cpp @@ -0,0 +1,442 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickmaterialripple_p.h" + +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +namespace { + enum WavePhase { WaveEnter, WaveExit }; +} + +static const int RIPPLE_ENTER_DELAY = 80; +static const int OPACITY_ENTER_DURATION_FAST = 120; +static const int WAVE_OPACITY_DECAY_DURATION = 333; +static const qreal WAVE_TOUCH_DOWN_ACCELERATION = 1024.0; + +class QQuickMaterialRippleWaveNode : public QQuickAnimatedNode +{ +public: + QQuickMaterialRippleWaveNode(QQuickMaterialRipple *ripple); + + void exit(); + void updateCurrentTime(int time) override; + void sync(QQuickItem *item) override; + +private: + qreal m_from = 0; + qreal m_to = 0; + qreal m_value = 0; + WavePhase m_phase = WaveEnter; + QPointF m_anchor; + QRectF m_bounds; +}; + +QQuickMaterialRippleWaveNode::QQuickMaterialRippleWaveNode(QQuickMaterialRipple *ripple) + : QQuickAnimatedNode(ripple) +{ + start(qRound(1000.0 * qSqrt(ripple->diameter() / 2.0 / WAVE_TOUCH_DOWN_ACCELERATION))); + + QSGOpacityNode *opacityNode = new QSGOpacityNode; + appendChildNode(opacityNode); + + QQuickItemPrivate *d = QQuickItemPrivate::get(ripple); + QSGInternalRectangleNode *rectNode = d->sceneGraphContext()->createInternalRectangleNode(); + rectNode->setAntialiasing(true); + opacityNode->appendChildNode(rectNode); +} + +void QQuickMaterialRippleWaveNode::exit() +{ + m_phase = WaveExit; + m_from = m_value; + setDuration(WAVE_OPACITY_DECAY_DURATION); + restart(); + connect(this, &QQuickAnimatedNode::stopped, this, &QObject::deleteLater); +} + +void QQuickMaterialRippleWaveNode::updateCurrentTime(int time) +{ + qreal p = 1.0; + if (duration() > 0) + p = time / static_cast(duration()); + + m_value = m_from + (m_to - m_from) * p; + p = m_value / m_to; + + const qreal dx = (1.0 - p) * (m_anchor.x() - m_bounds.width() / 2); + const qreal dy = (1.0 - p) * (m_anchor.y() - m_bounds.height() / 2); + + QMatrix4x4 m; + m.translate(qRound((m_bounds.width() - m_value) / 2 + dx), + qRound((m_bounds.height() - m_value) / 2 + dy)); + setMatrix(m); + + QSGOpacityNode *opacityNode = static_cast(firstChild()); + Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType); + qreal opacity = 1.0; + if (m_phase == WaveExit) + opacity -= static_cast(time) / WAVE_OPACITY_DECAY_DURATION; + opacityNode->setOpacity(opacity); + + QSGInternalRectangleNode *rectNode = static_cast(opacityNode->firstChild()); + Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType); + rectNode->setRect(QRectF(0, 0, m_value, m_value)); + rectNode->setRadius(m_value / 2); + rectNode->update(); +} + +void QQuickMaterialRippleWaveNode::sync(QQuickItem *item) +{ + QQuickMaterialRipple *ripple = static_cast(item); + m_to = ripple->diameter(); + m_anchor = ripple->anchorPoint(); + m_bounds = ripple->boundingRect(); + + QSGOpacityNode *opacityNode = static_cast(firstChild()); + Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType); + + QSGInternalRectangleNode *rectNode = static_cast(opacityNode->firstChild()); + Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType); + rectNode->setColor(ripple->color()); +} + +class QQuickMaterialRippleBackgroundNode : public QQuickAnimatedNode +{ + Q_OBJECT + +public: + QQuickMaterialRippleBackgroundNode(QQuickMaterialRipple *ripple); + + void updateCurrentTime(int time) override; + void sync(QQuickItem *item) override; + +private: + bool m_active = false; +}; + +QQuickMaterialRippleBackgroundNode::QQuickMaterialRippleBackgroundNode(QQuickMaterialRipple *ripple) + : QQuickAnimatedNode(ripple) +{ + setDuration(OPACITY_ENTER_DURATION_FAST); + + QSGOpacityNode *opacityNode = new QSGOpacityNode; + opacityNode->setOpacity(0.0); + appendChildNode(opacityNode); + + QQuickItemPrivate *d = QQuickItemPrivate::get(ripple); + QSGInternalRectangleNode *rectNode = d->sceneGraphContext()->createInternalRectangleNode(); + rectNode->setAntialiasing(true); + opacityNode->appendChildNode(rectNode); +} + +void QQuickMaterialRippleBackgroundNode::updateCurrentTime(int time) +{ + qreal opacity = time / static_cast(duration()); + if (!m_active) + opacity = 1.0 - opacity; + + QSGOpacityNode *opacityNode = static_cast(firstChild()); + Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType); + opacityNode->setOpacity(opacity); +} + +void QQuickMaterialRippleBackgroundNode::sync(QQuickItem *item) +{ + QQuickMaterialRipple *ripple = static_cast(item); + if (m_active != ripple->isActive()) { + m_active = ripple->isActive(); + setDuration(m_active ? OPACITY_ENTER_DURATION_FAST : WAVE_OPACITY_DECAY_DURATION); + restart(); + } + + QSGOpacityNode *opacityNode = static_cast(firstChild()); + Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType); + + QSGInternalRectangleNode *rectNode = static_cast(opacityNode->firstChild()); + Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType); + + const qreal w = ripple->width(); + const qreal h = ripple->height(); + const qreal sz = qSqrt(w * w + h * h); + + QMatrix4x4 matrix; + if (qFuzzyIsNull(ripple->clipRadius())) { + matrix.translate(qRound((w - sz) / 2), qRound((h - sz) / 2)); + rectNode->setRect(QRectF(0, 0, sz, sz)); + rectNode->setRadius(sz / 2); + } else { + rectNode->setRect(QRectF(0, 0, w, h)); + rectNode->setRadius(ripple->clipRadius()); + } + + setMatrix(matrix); + rectNode->setColor(ripple->color()); + rectNode->update(); +} + +QQuickMaterialRipple::QQuickMaterialRipple(QQuickItem *parent) + : QQuickItem(parent) +{ + setFlag(ItemHasContents); +} + +bool QQuickMaterialRipple::isActive() const +{ + return m_active; +} + +void QQuickMaterialRipple::setActive(bool active) +{ + if (active == m_active) + return; + + m_active = active; + update(); +} + +QColor QQuickMaterialRipple::color() const +{ + return m_color; +} + +void QQuickMaterialRipple::setColor(const QColor &color) +{ + if (m_color == color) + return; + + m_color = color; + update(); +} + +qreal QQuickMaterialRipple::clipRadius() const +{ + return m_clipRadius; +} + +void QQuickMaterialRipple::setClipRadius(qreal radius) +{ + if (qFuzzyCompare(m_clipRadius, radius)) + return; + + m_clipRadius = radius; + setClip(!qFuzzyIsNull(radius)); + update(); +} + +bool QQuickMaterialRipple::isPressed() const +{ + return m_pressed; +} + +void QQuickMaterialRipple::setPressed(bool pressed) +{ + if (pressed == m_pressed) + return; + + m_pressed = pressed; + + if (!isEnabled()) { + exitWave(); + return; + } + + if (pressed) { + if (m_trigger == Press) + prepareWave(); + else + exitWave(); + } else { + if (m_trigger == Release) + enterWave(); + else + exitWave(); + } +} + +QQuickMaterialRipple::Trigger QQuickMaterialRipple::trigger() const +{ + return m_trigger; +} + +void QQuickMaterialRipple::setTrigger(Trigger trigger) +{ + m_trigger = trigger; +} + +QPointF QQuickMaterialRipple::anchorPoint() const +{ + const QRectF bounds = boundingRect(); + const QPointF center = bounds.center(); + if (!m_anchor) + return center; + + QPointF anchorPoint = bounds.center(); + if (QQuickAbstractButton *button = qobject_cast(m_anchor)) + anchorPoint = QQuickAbstractButtonPrivate::get(button)->pressPoint; + anchorPoint = mapFromItem(m_anchor, anchorPoint); + + // calculate whether the anchor point is within the ripple circle bounds, + // that is, whether waves should start expanding from the anchor point + const qreal r = qSqrt(bounds.width() * bounds.width() + bounds.height() * bounds.height()) / 2; + if (QLineF(center, anchorPoint).length() < r) + return anchorPoint; + + // if the anchor point is outside the ripple circle bounds, start expanding + // from the intersection point of the ripple circle and a line from its center + // to the the anchor point + const qreal p = qAtan2(anchorPoint.y() - center.y(), anchorPoint.x() - center.x()); + return QPointF(center.x() + r * qCos(p), center.y() + r * qSin(p)); +} + +QQuickItem *QQuickMaterialRipple::anchor() const +{ + return m_anchor; +} + +void QQuickMaterialRipple::setAnchor(QQuickItem *item) +{ + m_anchor = item; +} + +qreal QQuickMaterialRipple::diameter() const +{ + const qreal w = width(); + const qreal h = height(); + return qSqrt(w * w + h * h); +} + +void QQuickMaterialRipple::itemChange(ItemChange change, const ItemChangeData &data) +{ + QQuickItem::itemChange(change, data); +} + +QSGNode *QQuickMaterialRipple::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) +{ + QQuickItemPrivate *d = QQuickItemPrivate::get(this); + QQuickDefaultClipNode *clipNode = d->clipNode(); + if (clipNode) { + // TODO: QTBUG-51894 + // clipNode->setRadius(m_clipRadius); + clipNode->setRect(boundingRect()); + clipNode->update(); + } + + QSGNode *container = oldNode; + if (!container) + container = new QSGNode; + + QQuickMaterialRippleBackgroundNode *backgroundNode = static_cast(container->firstChild()); + if (!backgroundNode) { + backgroundNode = new QQuickMaterialRippleBackgroundNode(this); + backgroundNode->setObjectName(objectName()); + container->appendChildNode(backgroundNode); + } + backgroundNode->sync(this); + + // enter new waves + int i = m_waves; + QQuickMaterialRippleWaveNode *enterNode = static_cast(backgroundNode->nextSibling()); + while (i-- > 0) { + if (!enterNode) { + enterNode = new QQuickMaterialRippleWaveNode(this); + container->appendChildNode(enterNode); + } + enterNode->sync(this); + enterNode = static_cast(enterNode->nextSibling()); + } + + // exit old waves + int j = container->childCount() - 1 - m_waves; + while (j-- > 0) { + QQuickMaterialRippleWaveNode *exitNode = static_cast(backgroundNode->nextSibling()); + if (exitNode) { + exitNode->exit(); + exitNode->sync(this); + } + } + + return container; +} + +void QQuickMaterialRipple::timerEvent(QTimerEvent *event) +{ + QQuickItem::timerEvent(event); + + if (event->timerId() == m_enterDelay) + enterWave(); +} + +void QQuickMaterialRipple::prepareWave() +{ + if (m_enterDelay <= 0) + m_enterDelay = startTimer(RIPPLE_ENTER_DELAY); +} + +void QQuickMaterialRipple::enterWave() +{ + if (m_enterDelay > 0) { + killTimer(m_enterDelay); + m_enterDelay = 0; + } + + ++m_waves; + update(); +} + +void QQuickMaterialRipple::exitWave() +{ + if (m_enterDelay > 0) { + killTimer(m_enterDelay); + m_enterDelay = 0; + } + + if (m_waves > 0) { + --m_waves; + update(); + } +} + +QT_END_NAMESPACE + +#include "qquickmaterialripple.moc" diff --git a/src/quickcontrols2/material/impl/qquickmaterialripple_p.h b/src/quickcontrols2/material/impl/qquickmaterialripple_p.h new file mode 100644 index 00000000..51728389 --- /dev/null +++ b/src/quickcontrols2/material/impl/qquickmaterialripple_p.h @@ -0,0 +1,120 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKMATERIALRIPPLE_P_H +#define QQUICKMATERIALRIPPLE_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include + +QT_BEGIN_NAMESPACE + +class QQuickMaterialRipple : public QQuickItem +{ + Q_OBJECT + Q_PROPERTY(QColor color READ color WRITE setColor FINAL) + Q_PROPERTY(qreal clipRadius READ clipRadius WRITE setClipRadius FINAL) + Q_PROPERTY(bool pressed READ isPressed WRITE setPressed FINAL) + Q_PROPERTY(bool active READ isActive WRITE setActive FINAL) + Q_PROPERTY(QQuickItem *anchor READ anchor WRITE setAnchor FINAL) + Q_PROPERTY(Trigger trigger READ trigger WRITE setTrigger FINAL) + QML_NAMED_ELEMENT(Ripple) + QML_ADDED_IN_VERSION(2, 0) + +public: + QQuickMaterialRipple(QQuickItem *parent = nullptr); + + QColor color() const; + void setColor(const QColor &color); + + qreal clipRadius() const; + void setClipRadius(qreal radius); + + bool isActive() const; + void setActive(bool active); + + bool isPressed() const; + void setPressed(bool pressed); + + enum Trigger { Press, Release }; + Q_ENUM (Trigger) + + Trigger trigger() const; + void setTrigger(Trigger trigger); + + QPointF anchorPoint() const; + + QQuickItem *anchor() const; + void setAnchor(QQuickItem *anchor); + + qreal diameter() const; + +protected: + void itemChange(ItemChange change, const ItemChangeData &data) override; + QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override; + void timerEvent(QTimerEvent *event) override; + + void prepareWave(); + void enterWave(); + void exitWave(); + +private: + bool m_active = false; + bool m_pressed = false; + int m_waves = 0; + int m_enterDelay = 0; + Trigger m_trigger = Press; + qreal m_clipRadius = 0.0; + QColor m_color; + QQuickItem *m_anchor = nullptr; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickMaterialRipple) + +#endif // QQUICKMATERIALRIPPLE_P_H diff --git a/src/quickcontrols2/material/material.pri b/src/quickcontrols2/material/material.pri new file mode 100644 index 00000000..9eb14233 --- /dev/null +++ b/src/quickcontrols2/material/material.pri @@ -0,0 +1,60 @@ +HEADERS += \ + $$PWD/qquickmaterialstyle_p.h \ + $$PWD/qquickmaterialtheme_p.h + +SOURCES += \ + $$PWD/qquickmaterialstyle.cpp \ + $$PWD/qquickmaterialtheme.cpp + +QML_FILES += \ + $$PWD/ApplicationWindow.qml \ + $$PWD/BusyIndicator.qml \ + $$PWD/Button.qml \ + $$PWD/CheckBox.qml \ + $$PWD/CheckDelegate.qml \ + $$PWD/ComboBox.qml \ + $$PWD/DelayButton.qml \ + $$PWD/Dial.qml \ + $$PWD/Dialog.qml \ + $$PWD/DialogButtonBox.qml \ + $$PWD/Drawer.qml \ + $$PWD/Frame.qml \ + $$PWD/GroupBox.qml \ + $$PWD/HorizontalHeaderView.qml \ + $$PWD/ItemDelegate.qml \ + $$PWD/Label.qml \ + $$PWD/Menu.qml \ + $$PWD/MenuBar.qml \ + $$PWD/MenuBarItem.qml \ + $$PWD/MenuItem.qml \ + $$PWD/MenuSeparator.qml \ + $$PWD/Page.qml \ + $$PWD/PageIndicator.qml \ + $$PWD/Pane.qml \ + $$PWD/Popup.qml \ + $$PWD/ProgressBar.qml \ + $$PWD/RadioButton.qml \ + $$PWD/RadioDelegate.qml \ + $$PWD/RangeSlider.qml \ + $$PWD/RoundButton.qml \ + $$PWD/ScrollView.qml \ + $$PWD/ScrollBar.qml \ + $$PWD/ScrollIndicator.qml \ + $$PWD/Slider.qml \ + $$PWD/SpinBox.qml \ + $$PWD/SplitView.qml \ + $$PWD/StackView.qml \ + $$PWD/SwipeDelegate.qml \ + $$PWD/SwipeView.qml \ + $$PWD/Switch.qml \ + $$PWD/SwitchDelegate.qml \ + $$PWD/TabBar.qml \ + $$PWD/TabButton.qml \ + $$PWD/TextArea.qml \ + $$PWD/TextField.qml \ + $$PWD/ToolBar.qml \ + $$PWD/ToolButton.qml \ + $$PWD/ToolSeparator.qml \ + $$PWD/ToolTip.qml \ + $$PWD/Tumbler.qml \ + $$PWD/VerticalHeaderView.qml diff --git a/src/quickcontrols2/material/qquickmaterialstyle.cpp b/src/quickcontrols2/material/qquickmaterialstyle.cpp new file mode 100644 index 00000000..d70728a0 --- /dev/null +++ b/src/quickcontrols2/material/qquickmaterialstyle.cpp @@ -0,0 +1,1383 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickmaterialstyle_p.h" + +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +static const QRgb colors[][14] = { + // Red + { + 0xFFFFEBEE, // Shade50 + 0xFFFFCDD2, // Shade100 + 0xFFEF9A9A, // Shade200 + 0xFFE57373, // Shade300 + 0xFFEF5350, // Shade400 + 0xFFF44336, // Shade500 + 0xFFE53935, // Shade600 + 0xFFD32F2F, // Shade700 + 0xFFC62828, // Shade800 + 0xFFB71C1C, // Shade900 + 0xFFFF8A80, // ShadeA100 + 0xFFFF5252, // ShadeA200 + 0xFFFF1744, // ShadeA400 + 0xFFD50000 // ShadeA700 + }, + // Pink + { + 0xFFFCE4EC, // Shade50 + 0xFFF8BBD0, // Shade100 + 0xFFF48FB1, // Shade200 + 0xFFF06292, // Shade300 + 0xFFEC407A, // Shade400 + 0xFFE91E63, // Shade500 + 0xFFD81B60, // Shade600 + 0xFFC2185B, // Shade700 + 0xFFAD1457, // Shade800 + 0xFF880E4F, // Shade900 + 0xFFFF80AB, // ShadeA100 + 0xFFFF4081, // ShadeA200 + 0xFFF50057, // ShadeA400 + 0xFFC51162 // ShadeA700 + }, + // Purple + { + 0xFFF3E5F5, // Shade50 + 0xFFE1BEE7, // Shade100 + 0xFFCE93D8, // Shade200 + 0xFFBA68C8, // Shade300 + 0xFFAB47BC, // Shade400 + 0xFF9C27B0, // Shade500 + 0xFF8E24AA, // Shade600 + 0xFF7B1FA2, // Shade700 + 0xFF6A1B9A, // Shade800 + 0xFF4A148C, // Shade900 + 0xFFEA80FC, // ShadeA100 + 0xFFE040FB, // ShadeA200 + 0xFFD500F9, // ShadeA400 + 0xFFAA00FF // ShadeA700 + }, + // DeepPurple + { + 0xFFEDE7F6, // Shade50 + 0xFFD1C4E9, // Shade100 + 0xFFB39DDB, // Shade200 + 0xFF9575CD, // Shade300 + 0xFF7E57C2, // Shade400 + 0xFF673AB7, // Shade500 + 0xFF5E35B1, // Shade600 + 0xFF512DA8, // Shade700 + 0xFF4527A0, // Shade800 + 0xFF311B92, // Shade900 + 0xFFB388FF, // ShadeA100 + 0xFF7C4DFF, // ShadeA200 + 0xFF651FFF, // ShadeA400 + 0xFF6200EA // ShadeA700 + }, + // Indigo + { + 0xFFE8EAF6, // Shade50 + 0xFFC5CAE9, // Shade100 + 0xFF9FA8DA, // Shade200 + 0xFF7986CB, // Shade300 + 0xFF5C6BC0, // Shade400 + 0xFF3F51B5, // Shade500 + 0xFF3949AB, // Shade600 + 0xFF303F9F, // Shade700 + 0xFF283593, // Shade800 + 0xFF1A237E, // Shade900 + 0xFF8C9EFF, // ShadeA100 + 0xFF536DFE, // ShadeA200 + 0xFF3D5AFE, // ShadeA400 + 0xFF304FFE // ShadeA700 + }, + // Blue + { + 0xFFE3F2FD, // Shade50 + 0xFFBBDEFB, // Shade100 + 0xFF90CAF9, // Shade200 + 0xFF64B5F6, // Shade300 + 0xFF42A5F5, // Shade400 + 0xFF2196F3, // Shade500 + 0xFF1E88E5, // Shade600 + 0xFF1976D2, // Shade700 + 0xFF1565C0, // Shade800 + 0xFF0D47A1, // Shade900 + 0xFF82B1FF, // ShadeA100 + 0xFF448AFF, // ShadeA200 + 0xFF2979FF, // ShadeA400 + 0xFF2962FF // ShadeA700 + }, + // LightBlue + { + 0xFFE1F5FE, // Shade50 + 0xFFB3E5FC, // Shade100 + 0xFF81D4FA, // Shade200 + 0xFF4FC3F7, // Shade300 + 0xFF29B6F6, // Shade400 + 0xFF03A9F4, // Shade500 + 0xFF039BE5, // Shade600 + 0xFF0288D1, // Shade700 + 0xFF0277BD, // Shade800 + 0xFF01579B, // Shade900 + 0xFF80D8FF, // ShadeA100 + 0xFF40C4FF, // ShadeA200 + 0xFF00B0FF, // ShadeA400 + 0xFF0091EA // ShadeA700 + }, + // Cyan + { + 0xFFE0F7FA, // Shade50 + 0xFFB2EBF2, // Shade100 + 0xFF80DEEA, // Shade200 + 0xFF4DD0E1, // Shade300 + 0xFF26C6DA, // Shade400 + 0xFF00BCD4, // Shade500 + 0xFF00ACC1, // Shade600 + 0xFF0097A7, // Shade700 + 0xFF00838F, // Shade800 + 0xFF006064, // Shade900 + 0xFF84FFFF, // ShadeA100 + 0xFF18FFFF, // ShadeA200 + 0xFF00E5FF, // ShadeA400 + 0xFF00B8D4 // ShadeA700 + }, + // Teal + { + 0xFFE0F2F1, // Shade50 + 0xFFB2DFDB, // Shade100 + 0xFF80CBC4, // Shade200 + 0xFF4DB6AC, // Shade300 + 0xFF26A69A, // Shade400 + 0xFF009688, // Shade500 + 0xFF00897B, // Shade600 + 0xFF00796B, // Shade700 + 0xFF00695C, // Shade800 + 0xFF004D40, // Shade900 + 0xFFA7FFEB, // ShadeA100 + 0xFF64FFDA, // ShadeA200 + 0xFF1DE9B6, // ShadeA400 + 0xFF00BFA5 // ShadeA700 + }, + // Green + { + 0xFFE8F5E9, // Shade50 + 0xFFC8E6C9, // Shade100 + 0xFFA5D6A7, // Shade200 + 0xFF81C784, // Shade300 + 0xFF66BB6A, // Shade400 + 0xFF4CAF50, // Shade500 + 0xFF43A047, // Shade600 + 0xFF388E3C, // Shade700 + 0xFF2E7D32, // Shade800 + 0xFF1B5E20, // Shade900 + 0xFFB9F6CA, // ShadeA100 + 0xFF69F0AE, // ShadeA200 + 0xFF00E676, // ShadeA400 + 0xFF00C853 // ShadeA700 + }, + // LightGreen + { + 0xFFF1F8E9, // Shade50 + 0xFFDCEDC8, // Shade100 + 0xFFC5E1A5, // Shade200 + 0xFFAED581, // Shade300 + 0xFF9CCC65, // Shade400 + 0xFF8BC34A, // Shade500 + 0xFF7CB342, // Shade600 + 0xFF689F38, // Shade700 + 0xFF558B2F, // Shade800 + 0xFF33691E, // Shade900 + 0xFFCCFF90, // ShadeA100 + 0xFFB2FF59, // ShadeA200 + 0xFF76FF03, // ShadeA400 + 0xFF64DD17 // ShadeA700 + }, + // Lime + { + 0xFFF9FBE7, // Shade50 + 0xFFF0F4C3, // Shade100 + 0xFFE6EE9C, // Shade200 + 0xFFDCE775, // Shade300 + 0xFFD4E157, // Shade400 + 0xFFCDDC39, // Shade500 + 0xFFC0CA33, // Shade600 + 0xFFAFB42B, // Shade700 + 0xFF9E9D24, // Shade800 + 0xFF827717, // Shade900 + 0xFFF4FF81, // ShadeA100 + 0xFFEEFF41, // ShadeA200 + 0xFFC6FF00, // ShadeA400 + 0xFFAEEA00 // ShadeA700 + }, + // Yellow + { + 0xFFFFFDE7, // Shade50 + 0xFFFFF9C4, // Shade100 + 0xFFFFF59D, // Shade200 + 0xFFFFF176, // Shade300 + 0xFFFFEE58, // Shade400 + 0xFFFFEB3B, // Shade500 + 0xFFFDD835, // Shade600 + 0xFFFBC02D, // Shade700 + 0xFFF9A825, // Shade800 + 0xFFF57F17, // Shade900 + 0xFFFFFF8D, // ShadeA100 + 0xFFFFFF00, // ShadeA200 + 0xFFFFEA00, // ShadeA400 + 0xFFFFD600 // ShadeA700 + }, + // Amber + { + 0xFFFFF8E1, // Shade50 + 0xFFFFECB3, // Shade100 + 0xFFFFE082, // Shade200 + 0xFFFFD54F, // Shade300 + 0xFFFFCA28, // Shade400 + 0xFFFFC107, // Shade500 + 0xFFFFB300, // Shade600 + 0xFFFFA000, // Shade700 + 0xFFFF8F00, // Shade800 + 0xFFFF6F00, // Shade900 + 0xFFFFE57F, // ShadeA100 + 0xFFFFD740, // ShadeA200 + 0xFFFFC400, // ShadeA400 + 0xFFFFAB00 // ShadeA700 + }, + // Orange + { + 0xFFFFF3E0, // Shade50 + 0xFFFFE0B2, // Shade100 + 0xFFFFCC80, // Shade200 + 0xFFFFB74D, // Shade300 + 0xFFFFA726, // Shade400 + 0xFFFF9800, // Shade500 + 0xFFFB8C00, // Shade600 + 0xFFF57C00, // Shade700 + 0xFFEF6C00, // Shade800 + 0xFFE65100, // Shade900 + 0xFFFFD180, // ShadeA100 + 0xFFFFAB40, // ShadeA200 + 0xFFFF9100, // ShadeA400 + 0xFFFF6D00 // ShadeA700 + }, + // DeepOrange + { + 0xFFFBE9E7, // Shade50 + 0xFFFFCCBC, // Shade100 + 0xFFFFAB91, // Shade200 + 0xFFFF8A65, // Shade300 + 0xFFFF7043, // Shade400 + 0xFFFF5722, // Shade500 + 0xFFF4511E, // Shade600 + 0xFFE64A19, // Shade700 + 0xFFD84315, // Shade800 + 0xFFBF360C, // Shade900 + 0xFFFF9E80, // ShadeA100 + 0xFFFF6E40, // ShadeA200 + 0xFFFF3D00, // ShadeA400 + 0xFFDD2C00 // ShadeA700 + }, + // Brown + { + 0xFFEFEBE9, // Shade50 + 0xFFD7CCC8, // Shade100 + 0xFFBCAAA4, // Shade200 + 0xFFA1887F, // Shade300 + 0xFF8D6E63, // Shade400 + 0xFF795548, // Shade500 + 0xFF6D4C41, // Shade600 + 0xFF5D4037, // Shade700 + 0xFF4E342E, // Shade800 + 0xFF3E2723, // Shade900 + 0xFF000000, // ShadeA100 + 0xFF000000, // ShadeA200 + 0xFF000000, // ShadeA400 + 0xFF000000 // ShadeA700 + }, + // Grey + { + 0xFFFAFAFA, // Shade50 + 0xFFF5F5F5, // Shade100 + 0xFFEEEEEE, // Shade200 + 0xFFE0E0E0, // Shade300 + 0xFFBDBDBD, // Shade400 + 0xFF9E9E9E, // Shade500 + 0xFF757575, // Shade600 + 0xFF616161, // Shade700 + 0xFF424242, // Shade800 + 0xFF212121, // Shade900 + 0xFF000000, // ShadeA100 + 0xFF000000, // ShadeA200 + 0xFF000000, // ShadeA400 + 0xFF000000 // ShadeA700 + }, + // BlueGrey + { + 0xFFECEFF1, // Shade50 + 0xFFCFD8DC, // Shade100 + 0xFFB0BEC5, // Shade200 + 0xFF90A4AE, // Shade300 + 0xFF78909C, // Shade400 + 0xFF607D8B, // Shade500 + 0xFF546E7A, // Shade600 + 0xFF455A64, // Shade700 + 0xFF37474F, // Shade800 + 0xFF263238, // Shade900 + 0xFF000000, // ShadeA100 + 0xFF000000, // ShadeA200 + 0xFF000000, // ShadeA400 + 0xFF000000 // ShadeA700 + } +}; + +// If no value was inherited from a parent or explicitly set, the "global" values are used. +// The initial, default values of the globals are hard-coded here, but the environment +// variables and .conf file override them if specified. +static QQuickMaterialStyle::Theme globalTheme = QQuickMaterialStyle::Light; +static uint globalPrimary = QQuickMaterialStyle::Indigo; +static uint globalAccent = QQuickMaterialStyle::Pink; +static uint globalForeground = 0xDD000000; // primaryTextColorLight +static uint globalBackground = 0xFFFAFAFA; // backgroundColorLight +// These represent whether a global foreground/background was set. +// Each style's m_hasForeground/m_hasBackground are initialized to these values. +static bool hasGlobalForeground = false; +static bool hasGlobalBackground = false; +// These represent whether or not the global color value was specified as one of the +// values that QColor accepts, as opposed to one of the pre-defined colors like Red. +static bool globalPrimaryCustom = false; +static bool globalAccentCustom = false; +static bool globalForegroundCustom = true; +static bool globalBackgroundCustom = true; +// This is global because: +// 1) The theme needs access to it to determine font sizes. +// 2) There can only be one variant used for the whole application. +static QQuickMaterialStyle::Variant globalVariant = QQuickMaterialStyle::Normal; + +static const QRgb backgroundColorLight = 0xFFFAFAFA; +static const QRgb backgroundColorDark = 0xFF303030; +static const QRgb dialogColorLight = 0xFFFFFFFF; +static const QRgb dialogColorDark = 0xFF424242; +static const QRgb primaryTextColorLight = 0xDD000000; +static const QRgb primaryTextColorDark = 0xFFFFFFFF; +static const QRgb secondaryTextColorLight = 0x89000000; +static const QRgb secondaryTextColorDark = 0xB2FFFFFF; +static const QRgb hintTextColorLight = 0x60000000; +static const QRgb hintTextColorDark = 0x4CFFFFFF; +static const QRgb dividerColorLight = 0x1E000000; +static const QRgb dividerColorDark = 0x1EFFFFFF; +static const QRgb iconColorLight = 0x89000000; +static const QRgb iconColorDark = 0xFFFFFFFF; +static const QRgb iconDisabledColorLight = 0x42000000; +static const QRgb iconDisabledColorDark = 0x4CFFFFFF; +static const QRgb raisedButtonColorLight = 0xFFD6D7D7; +static const QRgb raisedButtonColorDark = 0x3FCCCCCC; +static const QRgb raisedButtonDisabledColorLight = dividerColorLight; +static const QRgb raisedButtonDisabledColorDark = dividerColorDark; +static const QRgb frameColorLight = hintTextColorLight; +static const QRgb frameColorDark = hintTextColorDark; +static const QRgb switchUncheckedTrackColorLight = 0x42000000; +static const QRgb switchUncheckedTrackColorDark = 0x4CFFFFFF; +static const QRgb switchDisabledTrackColorLight = 0x1E000000; +static const QRgb switchDisabledTrackColorDark = 0x19FFFFFF; +static const QRgb rippleColorLight = 0x10000000; +static const QRgb rippleColorDark = 0x20FFFFFF; +static const QRgb spinBoxDisabledIconColorLight = 0xFFCCCCCC; +static const QRgb spinBoxDisabledIconColorDark = 0xFF666666; +static const QRgb sliderDisabledColorLight = 0xFF9E9E9E; +static const QRgb sliderDisabledColorDark = 0xFF616161; + +static QQuickMaterialStyle::Theme effectiveTheme(QQuickMaterialStyle::Theme theme) +{ + if (theme == QQuickMaterialStyle::System) + theme = QQuickStylePrivate::isDarkSystemTheme() ? QQuickMaterialStyle::Dark : QQuickMaterialStyle::Light; + return theme; +} + +QQuickMaterialStyle::QQuickMaterialStyle(QObject *parent) : QQuickAttachedObject(parent), + m_customPrimary(globalPrimaryCustom), + m_customAccent(globalAccentCustom), + m_customForeground(globalForegroundCustom), + m_customBackground(globalBackgroundCustom), + m_hasForeground(hasGlobalForeground), + m_hasBackground(hasGlobalBackground), + m_theme(globalTheme), + m_primary(globalPrimary), + m_accent(globalAccent), + m_foreground(globalForeground), + m_background(globalBackground) +{ + QQuickAttachedObject::init(); +} + +QQuickMaterialStyle *QQuickMaterialStyle::qmlAttachedProperties(QObject *object) +{ + return new QQuickMaterialStyle(object); +} + +QQuickMaterialStyle::Theme QQuickMaterialStyle::theme() const +{ + return m_theme; +} + +void QQuickMaterialStyle::setTheme(Theme theme) +{ + if (theme == System) + theme = QQuickStylePrivate::isDarkSystemTheme() ? Dark : Light; + + m_explicitTheme = true; + if (m_theme == theme) + return; + + m_theme = theme; + propagateTheme(); + themeChange(); + if (!m_customAccent) + accentChange(); + if (!m_hasBackground) + backgroundChange(); + if (!m_hasForeground) + foregroundChange(); +} + +void QQuickMaterialStyle::inheritTheme(Theme theme) +{ + if (m_explicitTheme || m_theme == theme) + return; + + m_theme = theme; + propagateTheme(); + themeChange(); + if (!m_customAccent) + accentChange(); + if (!m_hasBackground) + backgroundChange(); + if (!m_hasForeground) + foregroundChange(); +} + +void QQuickMaterialStyle::propagateTheme() +{ + const auto styles = attachedChildren(); + for (QQuickAttachedObject *child : styles) { + QQuickMaterialStyle *material = qobject_cast(child); + if (material) + material->inheritTheme(m_theme); + } +} + +void QQuickMaterialStyle::resetTheme() +{ + if (!m_explicitTheme) + return; + + m_explicitTheme = false; + QQuickMaterialStyle *material = qobject_cast(attachedParent()); + inheritTheme(material ? material->theme() : globalTheme); +} + +void QQuickMaterialStyle::themeChange() +{ + emit themeChanged(); + emit themeOrAccentChanged(); + emit primaryHighlightedTextColor(); + emit buttonColorChanged(); + emit buttonDisabledColorChanged(); + emit dialogColorChanged(); + emit tooltipColorChanged(); + emit toolBarColorChanged(); + emit toolTextColorChanged(); +} + +QVariant QQuickMaterialStyle::primary() const +{ + return primaryColor(); +} + +void QQuickMaterialStyle::setPrimary(const QVariant &var) +{ + QRgb primary = 0; + bool custom = false; + if (!variantToRgba(var, "primary", &primary, &custom)) + return; + + m_explicitPrimary = true; + if (m_primary == primary) + return; + + m_customPrimary = custom; + m_primary = primary; + propagatePrimary(); + primaryChange(); +} + +void QQuickMaterialStyle::inheritPrimary(uint primary, bool custom) +{ + if (m_explicitPrimary || m_primary == primary) + return; + + m_customPrimary = custom; + m_primary = primary; + propagatePrimary(); + primaryChange(); +} + +void QQuickMaterialStyle::propagatePrimary() +{ + const auto styles = attachedChildren(); + for (QQuickAttachedObject *child : styles) { + QQuickMaterialStyle *material = qobject_cast(child); + if (material) + material->inheritPrimary(m_primary, m_customPrimary); + } +} + +void QQuickMaterialStyle::resetPrimary() +{ + if (!m_explicitPrimary) + return; + + m_customPrimary = false; + m_explicitPrimary = false; + QQuickMaterialStyle *material = qobject_cast(attachedParent()); + if (material) + inheritPrimary(material->m_primary, material->m_customPrimary); + else + inheritPrimary(globalPrimary, false); +} + +void QQuickMaterialStyle::primaryChange() +{ + emit primaryChanged(); + emit toolBarColorChanged(); + emit toolTextColorChanged(); +} + +QVariant QQuickMaterialStyle::accent() const +{ + return accentColor(); +} + +void QQuickMaterialStyle::setAccent(const QVariant &var) +{ + QRgb accent = 0; + bool custom = false; + if (!variantToRgba(var, "accent", &accent, &custom)) + return; + + m_explicitAccent = true; + if (m_accent == accent) + return; + + m_customAccent = custom; + m_accent = accent; + propagateAccent(); + accentChange(); +} + +void QQuickMaterialStyle::inheritAccent(uint accent, bool custom) +{ + if (m_explicitAccent || m_accent == accent) + return; + + m_customAccent = custom; + m_accent = accent; + propagateAccent(); + accentChange(); +} + +void QQuickMaterialStyle::propagateAccent() +{ + const auto styles = attachedChildren(); + for (QQuickAttachedObject *child : styles) { + QQuickMaterialStyle *material = qobject_cast(child); + if (material) + material->inheritAccent(m_accent, m_customAccent); + } +} + +void QQuickMaterialStyle::resetAccent() +{ + if (!m_explicitAccent) + return; + + m_customAccent = false; + m_explicitAccent = false; + QQuickMaterialStyle *material = qobject_cast(attachedParent()); + if (material) + inheritAccent(material->m_accent, material->m_customAccent); + else + inheritAccent(globalAccent, false); +} + +void QQuickMaterialStyle::accentChange() +{ + emit accentChanged(); + emit themeOrAccentChanged(); + emit buttonColorChanged(); +} + +QVariant QQuickMaterialStyle::foreground() const +{ + if (!m_hasForeground) + return QColor::fromRgba(m_theme == Light ? primaryTextColorLight : primaryTextColorDark); + if (m_customForeground) + return QColor::fromRgba(m_foreground); + if (m_foreground > BlueGrey) + return QColor(); + return QColor::fromRgba(colors[m_foreground][Shade500]); +} + +void QQuickMaterialStyle::setForeground(const QVariant &var) +{ + QRgb foreground = 0; + bool custom = false; + if (!variantToRgba(var, "foreground", &foreground, &custom)) + return; + + m_hasForeground = true; + m_explicitForeground = true; + if (m_foreground == foreground) + return; + + m_customForeground = custom; + m_foreground = foreground; + propagateForeground(); + foregroundChange(); +} + +void QQuickMaterialStyle::inheritForeground(uint foreground, bool custom, bool has) +{ + if (m_explicitForeground || m_foreground == foreground) + return; + + m_hasForeground = has; + m_customForeground = custom; + m_foreground = foreground; + propagateForeground(); + foregroundChange(); +} + +void QQuickMaterialStyle::propagateForeground() +{ + const auto styles = attachedChildren(); + for (QQuickAttachedObject *child : styles) { + QQuickMaterialStyle *material = qobject_cast(child); + if (material) + material->inheritForeground(m_foreground, m_customForeground, m_hasForeground); + } +} + +void QQuickMaterialStyle::resetForeground() +{ + if (!m_explicitForeground) + return; + + m_hasForeground = false; + m_customForeground = false; + m_explicitForeground = false; + QQuickMaterialStyle *material = qobject_cast(attachedParent()); + inheritForeground(material ? material->m_foreground : globalForeground, true, material ? material->m_hasForeground : false); +} + +void QQuickMaterialStyle::foregroundChange() +{ + emit foregroundChanged(); + emit primaryHighlightedTextColorChanged(); + // TODO: This causes a binding loop: see QTBUG-85699 and the comments on its fix +// emit toolTextColorChanged(); +} + +QVariant QQuickMaterialStyle::background() const +{ + return backgroundColor(); +} + +void QQuickMaterialStyle::setBackground(const QVariant &var) +{ + QRgb background = 0; + bool custom = false; + if (!variantToRgba(var, "background", &background, &custom)) + return; + + m_hasBackground = true; + m_explicitBackground = true; + if (m_background == background) + return; + + m_customBackground = custom; + m_background = background; + propagateBackground(); + backgroundChange(); +} + +void QQuickMaterialStyle::inheritBackground(uint background, bool custom, bool has) +{ + if (m_explicitBackground || m_background == background) + return; + + m_hasBackground = has; + m_customBackground = custom; + m_background = background; + propagateBackground(); + backgroundChange(); +} + +void QQuickMaterialStyle::propagateBackground() +{ + const auto styles = attachedChildren(); + for (QQuickAttachedObject *child : styles) { + QQuickMaterialStyle *material = qobject_cast(child); + if (material) + material->inheritBackground(m_background, m_customBackground, m_hasBackground); + } +} + +void QQuickMaterialStyle::resetBackground() +{ + if (!m_explicitBackground) + return; + + m_hasBackground = false; + m_customBackground = false; + m_explicitBackground = false; + QQuickMaterialStyle *material = qobject_cast(attachedParent()); + inheritBackground(material ? material->m_background : globalBackground, true, material ? material->m_hasBackground : false); +} + +void QQuickMaterialStyle::backgroundChange() +{ + emit backgroundChanged(); + emit buttonColorChanged(); + emit dialogColorChanged(); + emit tooltipColorChanged(); + emit toolBarColorChanged(); +} + +int QQuickMaterialStyle::elevation() const +{ + return m_elevation; +} + +void QQuickMaterialStyle::setElevation(int elevation) +{ + if (m_elevation == elevation) + return; + + m_elevation = elevation; + elevationChange(); +} + +void QQuickMaterialStyle::resetElevation() +{ + setElevation(0); +} + +void QQuickMaterialStyle::elevationChange() +{ + emit elevationChanged(); + emit buttonDisabledColorChanged(); +} + +QColor QQuickMaterialStyle::primaryColor() const +{ + if (m_customPrimary) + return QColor::fromRgba(m_primary); + if (m_primary > BlueGrey) + return QColor(); + return colors[m_primary][Shade500]; +} + +QColor QQuickMaterialStyle::accentColor(Shade shade) const +{ + if (m_customAccent) + return shade == themeShade() ? QColor::fromRgba(m_accent) + : this->shade(QColor::fromRgba(m_accent), shade); + if (m_accent > BlueGrey) + return QColor(); + return colors[m_accent][shade]; +} + +QColor QQuickMaterialStyle::accentColor() const +{ + return accentColor(themeShade()); +} + +QColor QQuickMaterialStyle::backgroundColor(Shade shade) const +{ + if (!m_hasBackground) + return QColor::fromRgba(m_theme == Light ? backgroundColorLight : backgroundColorDark); + if (m_customBackground) + return shade == themeShade() ? QColor::fromRgba(m_background) + : this->shade(QColor::fromRgba(m_background), shade); + if (m_background > BlueGrey) + return QColor(); + return colors[m_background][shade]; +} + +QColor QQuickMaterialStyle::backgroundColor() const +{ + return backgroundColor(themeShade()); +} + +QColor QQuickMaterialStyle::primaryTextColor() const +{ + return QColor::fromRgba(m_theme == Light ? primaryTextColorLight : primaryTextColorDark); +} + +QColor QQuickMaterialStyle::primaryHighlightedTextColor() const +{ + if (m_explicitForeground) + return primaryTextColor(); + return QColor::fromRgba(primaryTextColorDark); +} + +QColor QQuickMaterialStyle::secondaryTextColor() const +{ + return QColor::fromRgba(m_theme == Light ? secondaryTextColorLight : secondaryTextColorDark); +} + +QColor QQuickMaterialStyle::hintTextColor() const +{ + return QColor::fromRgba(m_theme == Light ? hintTextColorLight : hintTextColorDark); +} + +QColor QQuickMaterialStyle::textSelectionColor() const +{ + QColor color = accentColor(); + color.setAlphaF(0.4f); + return color; +} + +QColor QQuickMaterialStyle::dropShadowColor() const +{ + return QColor::fromRgba(0x40000000); +} + +QColor QQuickMaterialStyle::dividerColor() const +{ + return QColor::fromRgba(m_theme == Light ? dividerColorLight : dividerColorDark); +} + +QColor QQuickMaterialStyle::iconColor() const +{ + return QColor::fromRgba(m_theme == Light ? iconColorLight : iconColorDark); +} + +QColor QQuickMaterialStyle::iconDisabledColor() const +{ + return QColor::fromRgba(m_theme == Light ? iconDisabledColorLight : iconDisabledColorDark); +} + +QColor QQuickMaterialStyle::buttonColor(bool highlighted) const +{ + Shade shade = themeShade(); + + QColor color = Qt::transparent; + + if (m_explicitBackground) { + color = backgroundColor(shade); + } else if (highlighted) { + color = accentColor(shade); + } else if (elevation() > 0) { + color = QColor::fromRgba(m_theme == Light ? raisedButtonColorLight + : raisedButtonColorDark); + } + + return color; +} + +QColor QQuickMaterialStyle::buttonColor() const +{ + return buttonColor(false); +} + +QColor QQuickMaterialStyle::buttonDisabledColor() const +{ + if (elevation() > 0) { + return QColor::fromRgba(m_theme == Light ? raisedButtonDisabledColorLight + : raisedButtonDisabledColorDark); + } else { + return Qt::transparent; + } +} + +QColor QQuickMaterialStyle::highlightedButtonColor() const +{ + return buttonColor(true); +} + +QColor QQuickMaterialStyle::frameColor() const +{ + return QColor::fromRgba(m_theme == Light ? frameColorLight : frameColorDark); +} + +QColor QQuickMaterialStyle::rippleColor() const +{ + return QColor::fromRgba(m_theme == Light ? rippleColorLight : rippleColorDark); +} + +QColor QQuickMaterialStyle::highlightedRippleColor() const +{ + QColor pressColor = accentColor(); + pressColor.setAlpha(m_theme == Light ? 30 : 50); + return pressColor; +} + +QColor QQuickMaterialStyle::switchUncheckedTrackColor() const +{ + return QColor::fromRgba(m_theme == Light ? switchUncheckedTrackColorLight : switchUncheckedTrackColorDark); +} + +QColor QQuickMaterialStyle::switchCheckedTrackColor() const +{ + QColor trackColor(accentColor()); + trackColor.setAlphaF(0.5); + return trackColor; +} + +QColor QQuickMaterialStyle::switchUncheckedHandleColor() const +{ + return m_theme == Light ? color(Grey, Shade50) : color(Grey, Shade400); +} + +QColor QQuickMaterialStyle::switchCheckedHandleColor() const +{ + return m_theme == Light ? accentColor() : shade(accentColor(), Shade200); +} + +QColor QQuickMaterialStyle::switchDisabledTrackColor() const +{ + return QColor::fromRgba(m_theme == Light ? switchDisabledTrackColorLight : switchDisabledTrackColorDark); +} + +QColor QQuickMaterialStyle::switchDisabledHandleColor() const +{ + return m_theme == Light ? color(Grey, Shade400) : color(Grey, Shade800); +} + +QColor QQuickMaterialStyle::scrollBarColor() const +{ + return QColor::fromRgba(m_theme == Light ? 0x40000000 : 0x40FFFFFF); +} + +QColor QQuickMaterialStyle::scrollBarHoveredColor() const +{ + return QColor::fromRgba(m_theme == Light ? 0x60000000 : 0x60FFFFFF); +} + +QColor QQuickMaterialStyle::scrollBarPressedColor() const +{ + return QColor::fromRgba(m_theme == Light ? 0x80000000 : 0x80FFFFFF); +} + +QColor QQuickMaterialStyle::dialogColor() const +{ + if (m_hasBackground) + return backgroundColor(); + return QColor::fromRgba(m_theme == Light ? dialogColorLight : dialogColorDark); +} + +QColor QQuickMaterialStyle::backgroundDimColor() const +{ + return QColor::fromRgba(m_theme == Light ? 0x99303030 : 0x99fafafa); +} + +QColor QQuickMaterialStyle::listHighlightColor() const +{ + return QColor::fromRgba(m_theme == Light ? 0x1e000000 : 0x1effffff); +} + +QColor QQuickMaterialStyle::tooltipColor() const +{ + if (m_explicitBackground) + return backgroundColor(); + return color(Grey, Shade700); +} + +QColor QQuickMaterialStyle::toolBarColor() const +{ + if (m_explicitBackground) + return backgroundColor(); + return primaryColor(); +} + +QColor QQuickMaterialStyle::toolTextColor() const +{ + if (m_hasForeground || m_customPrimary) + return primaryTextColor(); + + switch (m_primary) { + case Red: + case Pink: + case Purple: + case DeepPurple: + case Indigo: + case Blue: + case Teal: + case DeepOrange: + case Brown: + case BlueGrey: + return QColor::fromRgba(primaryTextColorDark); + + case LightBlue: + case Cyan: + case Green: + case LightGreen: + case Lime: + case Yellow: + case Amber: + case Orange: + case Grey: + return QColor::fromRgba(primaryTextColorLight); + + default: + break; + } + + return primaryTextColor(); +} + +QColor QQuickMaterialStyle::spinBoxDisabledIconColor() const +{ + return QColor::fromRgba(m_theme == Light ? spinBoxDisabledIconColorLight : spinBoxDisabledIconColorDark); +} + +QColor QQuickMaterialStyle::sliderDisabledColor() const +{ + return QColor::fromRgba(m_theme == Light ? sliderDisabledColorLight : sliderDisabledColorDark); +} + +QColor QQuickMaterialStyle::color(QQuickMaterialStyle::Color color, QQuickMaterialStyle::Shade shade) const +{ + int count = sizeof(colors) / sizeof(colors[0]); + if (color < 0 || color >= count) + return QColor(); + + count = sizeof(colors[0]) / sizeof(colors[0][0]); + if (shade < 0 || shade >= count) + return QColor(); + + return colors[color][shade]; +} + +static QColor lighterShade(const QColor &color, qreal amount) +{ + QColor hsl = color.toHsl(); + hsl.setHslF(hsl.hueF(), hsl.saturationF(), qBound(0.0, hsl.lightnessF() + amount, 1.0), color.alphaF()); + return hsl.convertTo(color.spec()); +} + +static QColor darkerShade(const QColor &color, qreal amount) +{ + QColor hsl = color.toHsl(); + hsl.setHslF(hsl.hueF(), hsl.saturationF(), qBound(0.0, hsl.lightnessF() - amount, 1.0), color.alphaF()); + return hsl.convertTo(color.spec()); +} + +QQuickMaterialStyle::Shade QQuickMaterialStyle::themeShade() const +{ + return m_theme == Light ? Shade500 : Shade200; +} + +/* + * The following lightness values originate from the Material Design Color Generator project. + * + * The MIT License (MIT) + * + * Copyright (c) 2015 mbitson + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +// Returns the same color, if shade == themeShade() +QColor QQuickMaterialStyle::shade(const QColor &color, Shade shade) const +{ + switch (shade) { + case Shade50: + return lighterShade(color, m_theme == Light ? 0.52 : 0.26); + case Shade100: + return lighterShade(color, m_theme == Light ? 0.37 : 0.11); + case Shade200: + return m_theme == Light ? lighterShade(color, 0.26) : color; + case Shade300: + return m_theme == Light ? lighterShade(color, 0.12) : darkerShade(color, 0.14); + case Shade400: + return m_theme == Light ? lighterShade(color, 0.06) : darkerShade(color, 0.20); + case Shade500: + return m_theme == Light ? color : darkerShade(color, 0.26); + case Shade600: + return darkerShade(color, m_theme == Light ? 0.06 : 0.32); + case Shade700: + return darkerShade(color, m_theme == Light ? 0.12 : 0.38); + case Shade800: + return darkerShade(color, m_theme == Light ? 0.18 : 0.44); + case Shade900: + return darkerShade(color, m_theme == Light ? 0.24 : 0.50); + case ShadeA100: + return lighterShade(color, m_theme == Light ? 0.54 : 0.28); + case ShadeA200: + return lighterShade(color, m_theme == Light ? 0.37 : 0.11); + case ShadeA400: + return m_theme == Light ? lighterShade(color, 0.06) : darkerShade(color, 0.20); + case ShadeA700: + return darkerShade(color, m_theme == Light ? 0.12 : 0.38); + default: + Q_UNREACHABLE(); + return QColor(); + } +} + +int QQuickMaterialStyle::touchTarget() const +{ + // https://material.io/guidelines/components/buttons.html#buttons-style + return globalVariant == Dense ? 44 : 48; +} + +int QQuickMaterialStyle::buttonHeight() const +{ + // https://material.io/guidelines/components/buttons.html#buttons-style + return globalVariant == Dense ? 32 : 36; +} + +int QQuickMaterialStyle::delegateHeight() const +{ + // https://material.io/guidelines/components/lists.html#lists-specs + return globalVariant == Dense ? 40 : 48; +} + +int QQuickMaterialStyle::dialogButtonBoxHeight() const +{ + return globalVariant == Dense ? 48 : 52; +} + +int QQuickMaterialStyle::frameVerticalPadding() const +{ + return globalVariant == Dense ? 8 : 12; +} + +int QQuickMaterialStyle::menuItemHeight() const +{ + // https://material.io/guidelines/components/menus.html#menus-simple-menus + return globalVariant == Dense ? 32 : 48; +} + +int QQuickMaterialStyle::menuItemVerticalPadding() const +{ + return globalVariant == Dense ? 8 : 12; +} + +int QQuickMaterialStyle::switchDelegateVerticalPadding() const +{ + // SwitchDelegate's indicator is much larger than the others due to the shadow, + // so we must reduce its padding to ensure its implicitHeight is 40 when dense. + return globalVariant == Dense ? 4 : 8; +} + +int QQuickMaterialStyle::tooltipHeight() const +{ + // https://material.io/guidelines/components/tooltips.html + return globalVariant == Dense ? 22 : 32; +} + +QQuickMaterialStyle::Variant QQuickMaterialStyle::variant() +{ + return globalVariant; +} + +template +static Enum toEnumValue(const QByteArray &value, bool *ok) +{ + QMetaEnum enumeration = QMetaEnum::fromType(); + return static_cast(enumeration.keyToValue(value, ok)); +} + +static QByteArray resolveSetting(const QByteArray &env, const QSharedPointer &settings, const QString &name) +{ + QByteArray value = qgetenv(env); +#if QT_CONFIG(settings) + if (value.isNull() && !settings.isNull()) + value = settings->value(name).toByteArray(); +#endif + return value; +} + +void QQuickMaterialStyle::initGlobals() +{ + QSharedPointer settings = QQuickStylePrivate::settings(QStringLiteral("Material")); + + bool ok = false; + QByteArray themeValue = resolveSetting("QT_QUICK_CONTROLS_MATERIAL_THEME", settings, QStringLiteral("Theme")); + Theme themeEnum = toEnumValue(themeValue, &ok); + if (ok) + globalTheme = effectiveTheme(themeEnum); + else if (!themeValue.isEmpty()) + qWarning().nospace().noquote() << "Material: unknown theme value: " << themeValue; + + QByteArray variantValue = resolveSetting("QT_QUICK_CONTROLS_MATERIAL_VARIANT", settings, QStringLiteral("Variant")); + Variant variantEnum = toEnumValue(variantValue, &ok); + if (ok) + globalVariant = variantEnum; + else if (!variantValue.isEmpty()) + qWarning().nospace().noquote() << "Material: unknown variant value: " << variantValue; + + QByteArray primaryValue = resolveSetting("QT_QUICK_CONTROLS_MATERIAL_PRIMARY", settings, QStringLiteral("Primary")); + Color primaryEnum = toEnumValue(primaryValue, &ok); + if (ok) { + globalPrimaryCustom = false; + globalPrimary = primaryEnum; + } else { + QColor color(primaryValue.constData()); + if (color.isValid()) { + globalPrimaryCustom = true; + globalPrimary = color.rgba(); + } else if (!primaryValue.isEmpty()) { + qWarning().nospace().noquote() << "Material: unknown primary value: " << primaryValue; + } + } + + QByteArray accentValue = resolveSetting("QT_QUICK_CONTROLS_MATERIAL_ACCENT", settings, QStringLiteral("Accent")); + Color accentEnum = toEnumValue(accentValue, &ok); + if (ok) { + globalAccentCustom = false; + globalAccent = accentEnum; + } else if (!accentValue.isEmpty()) { + QColor color(accentValue.constData()); + if (color.isValid()) { + globalAccentCustom = true; + globalAccent = color.rgba(); + } else { + qWarning().nospace().noquote() << "Material: unknown accent value: " << accentValue; + } + } + + QByteArray foregroundValue = resolveSetting("QT_QUICK_CONTROLS_MATERIAL_FOREGROUND", settings, QStringLiteral("Foreground")); + Color foregroundEnum = toEnumValue(foregroundValue, &ok); + if (ok) { + globalForegroundCustom = false; + globalForeground = foregroundEnum; + hasGlobalForeground = true; + } else if (!foregroundValue.isEmpty()) { + QColor color(foregroundValue.constData()); + if (color.isValid()) { + globalForegroundCustom = true; + globalForeground = color.rgba(); + hasGlobalForeground = true; + } else { + qWarning().nospace().noquote() << "Material: unknown foreground value: " << foregroundValue; + } + } + + QByteArray backgroundValue = resolveSetting("QT_QUICK_CONTROLS_MATERIAL_BACKGROUND", settings, QStringLiteral("Background")); + Color backgroundEnum = toEnumValue(backgroundValue, &ok); + if (ok) { + globalBackgroundCustom = false; + globalBackground = backgroundEnum; + hasGlobalBackground = true; + } else if (!backgroundValue.isEmpty()) { + QColor color(backgroundValue.constData()); + if (color.isValid()) { + globalBackgroundCustom = true; + globalBackground = color.rgba(); + hasGlobalBackground = true; + } else { + qWarning().nospace().noquote() << "Material: unknown background value: " << backgroundValue; + } + } +} + +void QQuickMaterialStyle::attachedParentChange(QQuickAttachedObject *newParent, QQuickAttachedObject *oldParent) +{ + Q_UNUSED(oldParent); + QQuickMaterialStyle *material = qobject_cast(newParent); + if (material) { + inheritPrimary(material->m_primary, material->m_customPrimary); + inheritAccent(material->m_accent, material->m_customAccent); + inheritForeground(material->m_foreground, material->m_customForeground, material->m_hasForeground); + inheritBackground(material->m_background, material->m_customBackground, material->m_hasBackground); + inheritTheme(material->theme()); + } +} + +bool QQuickMaterialStyle::variantToRgba(const QVariant &var, const char *name, QRgb *rgba, bool *custom) const +{ + *custom = false; + if (var.metaType().id() == QMetaType::Int) { + int val = var.toInt(); + if (val > BlueGrey) { + qmlWarning(parent()) << "unknown Material." << name << " value: " << val; + return false; + } + *rgba = val; + } else { + int val = QMetaEnum::fromType().keyToValue(var.toByteArray()); + if (val != -1) { + *rgba = val; + } else { + QColor color(var.toString()); + if (!color.isValid()) { + qmlWarning(parent()) << "unknown Material." << name << " value: " << var.toString(); + return false; + } + *custom = true; + *rgba = color.rgba(); + } + } + return true; +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols2/material/qquickmaterialstyle_p.h b/src/quickcontrols2/material/qquickmaterialstyle_p.h new file mode 100644 index 00000000..56cf141c --- /dev/null +++ b/src/quickcontrols2/material/qquickmaterialstyle_p.h @@ -0,0 +1,334 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKMATERIALSTYLE_P_H +#define QQUICKMATERIALSTYLE_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include + +QT_BEGIN_NAMESPACE + +class QQuickMaterialStyle : public QQuickAttachedObject +{ + Q_OBJECT + Q_PROPERTY(Theme theme READ theme WRITE setTheme RESET resetTheme NOTIFY themeChanged FINAL) + Q_PROPERTY(QVariant primary READ primary WRITE setPrimary RESET resetPrimary NOTIFY primaryChanged FINAL) + Q_PROPERTY(QVariant accent READ accent WRITE setAccent RESET resetAccent NOTIFY accentChanged FINAL) + Q_PROPERTY(QVariant foreground READ foreground WRITE setForeground RESET resetForeground NOTIFY foregroundChanged FINAL) + Q_PROPERTY(QVariant background READ background WRITE setBackground RESET resetBackground NOTIFY backgroundChanged FINAL) + Q_PROPERTY(int elevation READ elevation WRITE setElevation RESET resetElevation NOTIFY elevationChanged FINAL) + + Q_PROPERTY(QColor primaryColor READ primaryColor NOTIFY primaryChanged FINAL) // TODO: remove? + Q_PROPERTY(QColor accentColor READ accentColor NOTIFY accentChanged FINAL) // TODO: remove? + Q_PROPERTY(QColor backgroundColor READ backgroundColor NOTIFY backgroundChanged FINAL) + Q_PROPERTY(QColor primaryTextColor READ primaryTextColor NOTIFY themeChanged FINAL) + Q_PROPERTY(QColor primaryHighlightedTextColor READ primaryHighlightedTextColor NOTIFY primaryHighlightedTextColorChanged FINAL) + Q_PROPERTY(QColor secondaryTextColor READ secondaryTextColor NOTIFY themeChanged FINAL) + Q_PROPERTY(QColor hintTextColor READ hintTextColor NOTIFY themeChanged FINAL) + Q_PROPERTY(QColor textSelectionColor READ textSelectionColor NOTIFY themeOrAccentChanged FINAL) + Q_PROPERTY(QColor dropShadowColor READ dropShadowColor CONSTANT FINAL) + Q_PROPERTY(QColor dividerColor READ dividerColor NOTIFY themeChanged FINAL) + Q_PROPERTY(QColor iconColor READ iconColor NOTIFY themeChanged FINAL) + Q_PROPERTY(QColor iconDisabledColor READ iconDisabledColor NOTIFY themeChanged FINAL) + Q_PROPERTY(QColor buttonColor READ buttonColor NOTIFY buttonColorChanged FINAL) + Q_PROPERTY(QColor buttonDisabledColor READ buttonDisabledColor NOTIFY buttonDisabledColorChanged FINAL) + Q_PROPERTY(QColor highlightedButtonColor READ highlightedButtonColor NOTIFY buttonColorChanged FINAL) + Q_PROPERTY(QColor frameColor READ frameColor NOTIFY themeChanged FINAL) + Q_PROPERTY(QColor rippleColor READ rippleColor NOTIFY themeChanged FINAL) + Q_PROPERTY(QColor highlightedRippleColor READ highlightedRippleColor NOTIFY themeOrAccentChanged FINAL) + Q_PROPERTY(QColor switchUncheckedTrackColor READ switchUncheckedTrackColor NOTIFY themeChanged FINAL) + Q_PROPERTY(QColor switchCheckedTrackColor READ switchCheckedTrackColor NOTIFY themeOrAccentChanged FINAL) + Q_PROPERTY(QColor switchUncheckedHandleColor READ switchUncheckedHandleColor NOTIFY themeChanged FINAL) + Q_PROPERTY(QColor switchCheckedHandleColor READ switchCheckedHandleColor NOTIFY themeOrAccentChanged FINAL) + Q_PROPERTY(QColor switchDisabledTrackColor READ switchDisabledTrackColor NOTIFY themeChanged FINAL) + Q_PROPERTY(QColor switchDisabledHandleColor READ switchDisabledHandleColor NOTIFY themeChanged FINAL) + Q_PROPERTY(QColor scrollBarColor READ scrollBarColor NOTIFY themeChanged FINAL) + Q_PROPERTY(QColor scrollBarHoveredColor READ scrollBarHoveredColor NOTIFY themeChanged FINAL) + Q_PROPERTY(QColor scrollBarPressedColor READ scrollBarPressedColor NOTIFY themeChanged FINAL) + Q_PROPERTY(QColor dialogColor READ dialogColor NOTIFY dialogColorChanged FINAL) + Q_PROPERTY(QColor backgroundDimColor READ backgroundDimColor NOTIFY themeChanged FINAL) + Q_PROPERTY(QColor listHighlightColor READ listHighlightColor NOTIFY themeChanged FINAL) + Q_PROPERTY(QColor tooltipColor READ tooltipColor NOTIFY tooltipColorChanged FINAL) + Q_PROPERTY(QColor toolBarColor READ toolBarColor NOTIFY toolBarColorChanged FINAL) + Q_PROPERTY(QColor toolTextColor READ toolTextColor NOTIFY toolTextColorChanged FINAL) + Q_PROPERTY(QColor spinBoxDisabledIconColor READ spinBoxDisabledIconColor NOTIFY themeChanged FINAL) + Q_PROPERTY(QColor sliderDisabledColor READ sliderDisabledColor NOTIFY themeChanged FINAL REVISION 15) + + Q_PROPERTY(int touchTarget READ touchTarget CONSTANT FINAL) + Q_PROPERTY(int buttonHeight READ buttonHeight CONSTANT FINAL) + Q_PROPERTY(int delegateHeight READ delegateHeight CONSTANT FINAL) + Q_PROPERTY(int dialogButtonBoxHeight READ dialogButtonBoxHeight CONSTANT FINAL) + Q_PROPERTY(int frameVerticalPadding READ frameVerticalPadding CONSTANT FINAL) + Q_PROPERTY(int menuItemHeight READ menuItemHeight CONSTANT FINAL) + Q_PROPERTY(int menuItemVerticalPadding READ menuItemVerticalPadding CONSTANT FINAL) + Q_PROPERTY(int switchDelegateVerticalPadding READ switchDelegateVerticalPadding CONSTANT FINAL) + Q_PROPERTY(int tooltipHeight READ tooltipHeight CONSTANT FINAL) + + QML_NAMED_ELEMENT(Material) + QML_ATTACHED(QQuickMaterialStyle) + QML_UNCREATABLE("") + QML_ADDED_IN_VERSION(2, 0) + +public: + enum Theme { + Light, + Dark, + System + }; + + enum Variant { + Normal, + Dense + }; + + enum Color { + Red, + Pink, + Purple, + DeepPurple, + Indigo, + Blue, + LightBlue, + Cyan, + Teal, + Green, + LightGreen, + Lime, + Yellow, + Amber, + Orange, + DeepOrange, + Brown, + Grey, + BlueGrey + }; + + enum Shade { + Shade50, + Shade100, + Shade200, + Shade300, + Shade400, + Shade500, + Shade600, + Shade700, + Shade800, + Shade900, + ShadeA100, + ShadeA200, + ShadeA400, + ShadeA700, + }; + + Q_ENUM(Theme) + Q_ENUM(Variant) + Q_ENUM(Color) + Q_ENUM(Shade) + + explicit QQuickMaterialStyle(QObject *parent = nullptr); + + static QQuickMaterialStyle *qmlAttachedProperties(QObject *object); + + Theme theme() const; + void setTheme(Theme theme); + void inheritTheme(Theme theme); + void propagateTheme(); + void resetTheme(); + void themeChange(); + + QVariant primary() const; + void setPrimary(const QVariant &accent); + void inheritPrimary(uint primary, bool custom); + void propagatePrimary(); + void resetPrimary(); + void primaryChange(); + + QVariant accent() const; + void setAccent(const QVariant &accent); + void inheritAccent(uint accent, bool custom); + void propagateAccent(); + void resetAccent(); + void accentChange(); + + QVariant foreground() const; + void setForeground(const QVariant &foreground); + void inheritForeground(uint foreground, bool custom, bool has); + void propagateForeground(); + void resetForeground(); + void foregroundChange(); + + QVariant background() const; + void setBackground(const QVariant &background); + void inheritBackground(uint background, bool custom, bool has); + void propagateBackground(); + void resetBackground(); + void backgroundChange(); + + int elevation() const; + void setElevation(int elevation); + void resetElevation(); + void elevationChange(); + + QColor primaryColor() const; + QColor accentColor() const; + QColor backgroundColor() const; + QColor primaryTextColor() const; + QColor primaryHighlightedTextColor() const; + QColor secondaryTextColor() const; + QColor hintTextColor() const; + QColor textSelectionColor() const; + QColor dropShadowColor() const; + QColor dividerColor() const; + QColor iconColor() const; + QColor iconDisabledColor() const; + QColor buttonColor() const; + QColor buttonDisabledColor() const; + QColor highlightedButtonColor() const; + QColor highlightedButtonDisabledColor() const; + QColor frameColor() const; + QColor rippleColor() const; + QColor highlightedRippleColor() const; + QColor switchUncheckedTrackColor() const; + QColor switchCheckedTrackColor() const; + QColor switchUncheckedHandleColor() const; + QColor switchCheckedHandleColor() const; + QColor switchDisabledTrackColor() const; + QColor switchDisabledHandleColor() const; + QColor scrollBarColor() const; + QColor scrollBarHoveredColor() const; + QColor scrollBarPressedColor() const; + QColor dialogColor() const; + QColor backgroundDimColor() const; + QColor listHighlightColor() const; + QColor tooltipColor() const; + QColor toolBarColor() const; + QColor toolTextColor() const; + QColor spinBoxDisabledIconColor() const; + QColor sliderDisabledColor() const; + + Q_INVOKABLE QColor color(Color color, Shade shade = Shade500) const; + Q_INVOKABLE QColor shade(const QColor &color, Shade shade) const; + + int touchTarget() const; + int buttonHeight() const; + int delegateHeight() const; + int dialogButtonBoxHeight() const; + int frameVerticalPadding() const; + int menuItemHeight() const; + int menuItemVerticalPadding() const; + int switchDelegateVerticalPadding() const; + int tooltipHeight() const; + + static void initGlobals(); + + static Variant variant(); + +Q_SIGNALS: + void themeChanged(); + void primaryChanged(); + void accentChanged(); + void foregroundChanged(); + void backgroundChanged(); + void elevationChanged(); + + void themeOrAccentChanged(); + + void primaryHighlightedTextColorChanged(); + void buttonColorChanged(); + void buttonDisabledColorChanged(); + void dialogColorChanged(); + void tooltipColorChanged(); + void toolBarColorChanged(); + void toolTextColorChanged(); + +protected: + void attachedParentChange(QQuickAttachedObject *newParent, QQuickAttachedObject *oldParent) override; + +private: + void init(); + bool variantToRgba(const QVariant &var, const char *name, QRgb *rgba, bool *custom) const; + + QColor backgroundColor(Shade shade) const; + QColor accentColor(Shade shade) const; + QColor buttonColor(bool highlighted) const; + Shade themeShade() const; + + // These reflect whether a color value was explicitly set on the specific + // item that this attached style object represents. + bool m_explicitTheme = false; + bool m_explicitPrimary = false; + bool m_explicitAccent = false; + bool m_explicitForeground = false; + bool m_explicitBackground = false; + // These reflect whether the color value that was either inherited or + // explicitly set is in the form that QColor expects, rather than one of + // our pre-defined color enum values. + bool m_customPrimary = false; + bool m_customAccent = false; + bool m_customForeground = false; + bool m_customBackground = false; + // These will be true when this item has an explicit or inherited foreground/background + // color, or these colors were declared globally via settings (e.g. conf or env vars). + // Some color properties of the style will return different values depending on whether + // or not these are set. + bool m_hasForeground = false; + bool m_hasBackground = false; + // The actual values for this item, whether explicit, inherited or globally set. + Theme m_theme = Light; + uint m_primary = 0; + uint m_accent = 0; + uint m_foreground = 0; + uint m_background = 0; + int m_elevation = 0; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPEINFO(QQuickMaterialStyle, QML_HAS_ATTACHED_PROPERTIES) + +#endif // QQUICKMATERIALSTYLE_P_H diff --git a/src/quickcontrols2/material/qquickmaterialtheme.cpp b/src/quickcontrols2/material/qquickmaterialtheme.cpp new file mode 100644 index 00000000..aec9e232 --- /dev/null +++ b/src/quickcontrols2/material/qquickmaterialtheme.cpp @@ -0,0 +1,113 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickmaterialtheme_p.h" +#include "qquickmaterialstyle_p.h" + +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +void QQuickMaterialTheme::initialize(QQuickTheme *theme) +{ + QFont systemFont; + QFont buttonFont; + QFont toolTipFont; + QFont itemViewFont; + QFont listViewFont; + QFont menuItemFont; + QFont editorFont; + + QFont font; + font.setFamilies(QStringList{QLatin1String("Roboto")}); + QString family = QFontInfo(font).family(); + + if (family != QLatin1String("Roboto")) { + font.setFamilies(QStringList{QLatin1String("Noto")}); + family = QFontInfo(font).family(); + } + + if (family == QLatin1String("Roboto") || family == QLatin1String("Noto")) { + const QStringList families{family}; + systemFont.setFamilies(families); + buttonFont.setFamilies(families); + toolTipFont.setFamilies(families); + itemViewFont.setFamilies(families); + listViewFont.setFamilies(families); + menuItemFont.setFamilies(families); + editorFont.setFamilies(families); + } + + const bool dense = QQuickMaterialStyle::variant() == QQuickMaterialStyle::Dense; + systemFont.setPixelSize(dense ? 13 : 14); + theme->setFont(QQuickTheme::System, systemFont); + + // https://material.io/guidelines/components/buttons.html#buttons-style + buttonFont.setPixelSize(dense ? 13 : 14); + buttonFont.setCapitalization(QFont::AllUppercase); + buttonFont.setWeight(QFont::Medium); + theme->setFont(QQuickTheme::Button, buttonFont); + theme->setFont(QQuickTheme::TabBar, buttonFont); + theme->setFont(QQuickTheme::ToolBar, buttonFont); + + // https://material.io/guidelines/components/tooltips.html + toolTipFont.setPixelSize(dense ? 10 : 14); + toolTipFont.setWeight(QFont::Medium); + theme->setFont(QQuickTheme::ToolTip, toolTipFont); + + itemViewFont.setPixelSize(dense ? 13 : 14); + itemViewFont.setWeight(QFont::Medium); + theme->setFont(QQuickTheme::ItemView, itemViewFont); + + // https://material.io/guidelines/components/lists.html#lists-specs + listViewFont.setPixelSize(dense ? 13 : 16); + theme->setFont(QQuickTheme::ListView, listViewFont); + + menuItemFont.setPixelSize(dense ? 13 : 16); + theme->setFont(QQuickTheme::Menu, menuItemFont); + theme->setFont(QQuickTheme::MenuBar, menuItemFont); + theme->setFont(QQuickTheme::ComboBox, menuItemFont); + + editorFont.setPixelSize(dense ? 13 : 16); + theme->setFont(QQuickTheme::TextArea, editorFont); + theme->setFont(QQuickTheme::TextField, editorFont); + theme->setFont(QQuickTheme::SpinBox, editorFont); +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols2/material/qquickmaterialtheme_p.h b/src/quickcontrols2/material/qquickmaterialtheme_p.h new file mode 100644 index 00000000..9a1362b8 --- /dev/null +++ b/src/quickcontrols2/material/qquickmaterialtheme_p.h @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKMATERIALTHEME_P_H +#define QQUICKMATERIALTHEME_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include + +QT_BEGIN_NAMESPACE + +class QQuickTheme; + +class QQuickMaterialTheme +{ +public: + static void initialize(QQuickTheme *theme); +}; + +QT_END_NAMESPACE + +#endif // QQUICKMATERIALTHEME_P_H diff --git a/src/quickcontrols2/material/qt_attribution.json b/src/quickcontrols2/material/qt_attribution.json new file mode 100644 index 00000000..85fdadf9 --- /dev/null +++ b/src/quickcontrols2/material/qt_attribution.json @@ -0,0 +1,13 @@ +{ + "Id": "shadow_angular_material", + "Name": "Shadow values from Angular Material", + "QDocModule": "qtquickcontrols", + "QtUsage": "Used in the Material Style of Qt Quick Controls 2.", + "Files": "ElevationEffect.qml", + "Description": "Shadow values for the elevation effect.", + "Homepage": "https://angularjs.org/", + "License": "MIT License", + "LicenseId": "MIT", + "LicenseFile": "LICENSE_ANGULARJS.txt", + "Copyright": "Copyright (c) 2014-2016 Google, Inc" +} diff --git a/src/quickcontrols2/material/qtquickcontrols2materialstyleplugin.cpp b/src/quickcontrols2/material/qtquickcontrols2materialstyleplugin.cpp new file mode 100644 index 00000000..c8e7ebbc --- /dev/null +++ b/src/quickcontrols2/material/qtquickcontrols2materialstyleplugin.cpp @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickmaterialstyle_p.h" +#include "qquickmaterialtheme_p.h" + +#include +#include +#include + +extern void qml_register_types_QtQuick_Controls_Material(); + +QT_BEGIN_NAMESPACE + +class QtQuickControls2MaterialStylePlugin : public QQuickStylePlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) + +public: + QtQuickControls2MaterialStylePlugin(QObject *parent = nullptr); + + QString name() const override; + void initializeTheme(QQuickTheme *theme) override; + + QQuickMaterialTheme theme; +}; + +QtQuickControls2MaterialStylePlugin::QtQuickControls2MaterialStylePlugin(QObject *parent) : QQuickStylePlugin(parent) +{ + volatile auto registration = &qml_register_types_QtQuick_Controls_Material; + Q_UNUSED(registration); +} + +QString QtQuickControls2MaterialStylePlugin::name() const +{ + return QStringLiteral("Material"); +} + +void QtQuickControls2MaterialStylePlugin::initializeTheme(QQuickTheme *theme) +{ + QQuickMaterialStyle::initGlobals(); + this->theme.initialize(theme); +} + +QT_END_NAMESPACE + +#include "qtquickcontrols2materialstyleplugin.moc" diff --git a/src/quickcontrols2/material/qtquickcontrols2materialstyleplugin.qrc b/src/quickcontrols2/material/qtquickcontrols2materialstyleplugin.qrc new file mode 100644 index 00000000..981960c4 --- /dev/null +++ b/src/quickcontrols2/material/qtquickcontrols2materialstyleplugin.qrc @@ -0,0 +1,20 @@ + + + images/arrow-indicator.png + images/arrow-indicator@2x.png + images/arrow-indicator@3x.png + images/arrow-indicator@4x.png + images/check.png + images/check@2x.png + images/check@3x.png + images/check@4x.png + images/drop-indicator.png + images/drop-indicator@2x.png + images/drop-indicator@3x.png + images/drop-indicator@4x.png + shaders/RectangularGlow.frag + shaders/+glslcore/RectangularGlow.frag + shaders/+hlsl/RectangularGlow.frag + shaders/+qsb/RectangularGlow.frag + + diff --git a/src/quickcontrols2/material/shaders/+glslcore/RectangularGlow.frag b/src/quickcontrols2/material/shaders/+glslcore/RectangularGlow.frag new file mode 100644 index 00000000..432d86b5 --- /dev/null +++ b/src/quickcontrols2/material/shaders/+glslcore/RectangularGlow.frag @@ -0,0 +1,25 @@ +#version 150 + +uniform float qt_Opacity; +uniform float relativeSizeX; +uniform float relativeSizeY; +uniform float spread; +uniform vec4 color; + +in vec2 qt_TexCoord0; +out vec4 fragColor; + +float linearstep(float e0, float e1, float x) +{ + return clamp((x - e0) / (e1 - e0), 0.0, 1.0); +} + +void main() +{ + float alpha = + smoothstep(0.0, relativeSizeX, 0.5 - abs(0.5 - qt_TexCoord0.x)) * + smoothstep(0.0, relativeSizeY, 0.5 - abs(0.5 - qt_TexCoord0.y)); + + float spreadMultiplier = linearstep(spread, 1.0 - spread, alpha); + fragColor = color * qt_Opacity * spreadMultiplier * spreadMultiplier; +} diff --git a/src/quickcontrols2/material/shaders/+hlsl/RectangularGlow.frag b/src/quickcontrols2/material/shaders/+hlsl/RectangularGlow.frag new file mode 100644 index 00000000..69d9f852 --- /dev/null +++ b/src/quickcontrols2/material/shaders/+hlsl/RectangularGlow.frag @@ -0,0 +1,21 @@ +cbuffer ConstantBuffer : register(b0) +{ + float4x4 qt_Matrix; + float qt_Opacity; + float relativeSizeX; + float relativeSizeY; + float spread; + float4 color; +} + +float linearstep(float e0, float e1, float x) { return clamp((x - e0) / (e1 - e0), 0.0, 1.0); } + +float4 main(float4 position : SV_POSITION, float2 coord : TEXCOORD0) : SV_TARGET +{ + float alpha = + smoothstep(0.0, relativeSizeX, 0.5 - abs(0.5 - coord.x)) * + smoothstep(0.0, relativeSizeY, 0.5 - abs(0.5 - coord.y)); + + float spreadMultiplier = linearstep(spread, 1.0 - spread, alpha); + return color * qt_Opacity * spreadMultiplier * spreadMultiplier; +} diff --git a/src/quickcontrols2/material/shaders/+qsb/RectangularGlow.frag b/src/quickcontrols2/material/shaders/+qsb/RectangularGlow.frag new file mode 100644 index 00000000..5cfa2db6 Binary files /dev/null and b/src/quickcontrols2/material/shaders/+qsb/RectangularGlow.frag differ diff --git a/src/quickcontrols2/material/shaders/RectangularGlow.frag b/src/quickcontrols2/material/shaders/RectangularGlow.frag new file mode 100644 index 00000000..40bab580 --- /dev/null +++ b/src/quickcontrols2/material/shaders/RectangularGlow.frag @@ -0,0 +1,19 @@ +uniform highp float qt_Opacity; +uniform mediump float relativeSizeX; +uniform mediump float relativeSizeY; +uniform mediump float spread; +uniform lowp vec4 color; +varying highp vec2 qt_TexCoord0; + +highp float linearstep(highp float e0, highp float e1, highp float x) { + return clamp((x - e0) / (e1 - e0), 0.0, 1.0); +} + +void main() { + lowp float alpha = + smoothstep(0.0, relativeSizeX, 0.5 - abs(0.5 - qt_TexCoord0.x)) * + smoothstep(0.0, relativeSizeY, 0.5 - abs(0.5 - qt_TexCoord0.y)); + + highp float spreadMultiplier = linearstep(spread, 1.0 - spread, alpha); + gl_FragColor = color * qt_Opacity * spreadMultiplier * spreadMultiplier; +} diff --git a/src/quickcontrols2/material/shaders/RectangularGlow_rhi.frag b/src/quickcontrols2/material/shaders/RectangularGlow_rhi.frag new file mode 100644 index 00000000..3e7d2dfe --- /dev/null +++ b/src/quickcontrols2/material/shaders/RectangularGlow_rhi.frag @@ -0,0 +1,28 @@ +#version 440 + +layout(location = 0) in vec2 qt_TexCoord0; +layout(location = 0) out vec4 fragColor; + +layout(std140, binding = 0) uniform buf { + mat4 qt_Matrix; + float qt_Opacity; + float relativeSizeX; + float relativeSizeY; + float spread; + vec4 color; +} ubuf; + +float linearstep(float e0, float e1, float x) +{ + return clamp((x - e0) / (e1 - e0), 0.0, 1.0); +} + +void main() +{ + float alpha = + smoothstep(0.0, ubuf.relativeSizeX, 0.5 - abs(0.5 - qt_TexCoord0.x)) * + smoothstep(0.0, ubuf.relativeSizeY, 0.5 - abs(0.5 - qt_TexCoord0.y)); + + float spreadMultiplier = linearstep(ubuf.spread, 1.0 - ubuf.spread, alpha); + fragColor = ubuf.color * ubuf.qt_Opacity * spreadMultiplier * spreadMultiplier; +} diff --git a/src/quickcontrols2/material/shaders/compile.bat b/src/quickcontrols2/material/shaders/compile.bat new file mode 100644 index 00000000..e87efa7a --- /dev/null +++ b/src/quickcontrols2/material/shaders/compile.bat @@ -0,0 +1,40 @@ +::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:: +:: Copyright (C) 2019 The Qt Company Ltd. +:: Contact: https://www.qt.io/licensing/ +:: +:: This file is part of the QtQuick module of the Qt Toolkit. +:: +:: $QT_BEGIN_LICENSE:LGPL$ +:: Commercial License Usage +:: Licensees holding valid commercial Qt licenses may use this file in +:: accordance with the commercial license agreement provided with the +:: Software or, alternatively, in accordance with the terms contained in +:: a written agreement between you and The Qt Company. For licensing terms +:: and conditions see https://www.qt.io/terms-conditions. For further +:: information use the contact form at https://www.qt.io/contact-us. +:: +:: GNU Lesser General Public License Usage +:: Alternatively, this file may be used under the terms of the GNU Lesser +:: General Public License version 3 as published by the Free Software +:: Foundation and appearing in the file LICENSE.LGPL3 included in the +:: packaging of this file. Please review the following information to +:: ensure the GNU Lesser General Public License version 3 requirements +:: will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +:: +:: GNU General Public License Usage +:: Alternatively, this file may be used under the terms of the GNU +:: General Public License version 2.0 or (at your option) the GNU General +:: Public license version 3 or any later version approved by the KDE Free +:: Qt Foundation. The licenses are as published by the Free Software +:: Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +:: included in the packaging of this file. Please review the following +:: information to ensure the GNU General Public License requirements will +:: be met: https://www.gnu.org/licenses/gpl-2.0.html and +:: https://www.gnu.org/licenses/gpl-3.0.html. +:: +:: $QT_END_LICENSE$ +:: +::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: + +qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -o +qsb/RectangularGlow.frag RectangularGlow_rhi.frag diff --git a/src/quickcontrols2/qtquickcontrols2plugin.cpp b/src/quickcontrols2/qtquickcontrols2plugin.cpp new file mode 100644 index 00000000..fcd025e0 --- /dev/null +++ b/src/quickcontrols2/qtquickcontrols2plugin.cpp @@ -0,0 +1,167 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +Q_LOGGING_CATEGORY(lcQtQuickControls2Plugin, "qt.quick.controls.qtquickcontrols2plugin") + +class QtQuickControls2Plugin : public QQmlExtensionPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) + +public: + QtQuickControls2Plugin(QObject *parent = nullptr); + ~QtQuickControls2Plugin(); + + void registerTypes(const char *uri) override; + void unregisterTypes() override; + +private: + // We store these because the style plugins can be unregistered before + // QtQuickControls2Plugin, and since QQuickStylePlugin calls QQuickStylePrivate::reset(), + // the style information can be lost when it comes time to call qmlUnregisterModuleImport(). + // It also avoids unnecessarily resolving the style after resetting it just to get the style + // name in unregisterTypes(). + bool customStyle = false; + QString registeredStyleUri; + QString registeredFallbackStyleUri; +}; + +static const char *qtQuickControlsUri = "QtQuick.Controls"; + +QString styleUri() +{ + const QString style = QQuickStyle::name(); + if (!QQuickStylePrivate::isCustomStyle()) { + // The style set is a built-in style. + const QString styleName = QQuickStylePrivate::effectiveStyleName(style); + return QString::fromLatin1("QtQuick.Controls.%1").arg(styleName); + } + + // This is a custom style, so just use the name as the import uri. + QString styleName = style; + if (styleName.startsWith(QLatin1String(":/"))) + styleName.remove(0, 2); + return styleName; +} + +QString fallbackStyleUri() +{ + // The fallback style must be a built-in style, so we don't need to check for custom styles here. + const QString fallbackStyle = QQuickStylePrivate::fallbackStyle(); + const QString fallbackStyleName = QQuickStylePrivate::effectiveStyleName(fallbackStyle); + return QString::fromLatin1("QtQuick.Controls.%1").arg(fallbackStyleName); +} + +QtQuickControls2Plugin::QtQuickControls2Plugin(QObject *parent) : QQmlExtensionPlugin(parent) +{ + volatile auto registration = &qml_register_types_QtQuick_Controls; + Q_UNUSED(registration); +} + +QtQuickControls2Plugin::~QtQuickControls2Plugin() +{ + // Intentionally empty: we use register/unregisterTypes() to do + // initialization and cleanup, as plugins are not unloaded on macOS. +} + +void QtQuickControls2Plugin::registerTypes(const char *uri) +{ + qCDebug(lcQtQuickControls2Plugin) << "registerTypes() called with uri" << uri; + + // It's OK that the style is resolved more than once; some accessors like name() cause it to be called, for example. + QQuickStylePrivate::init(); + + const QString styleName = QQuickStylePrivate::effectiveStyleName(QQuickStyle::name()); + const QString fallbackStyleName = QQuickStylePrivate::effectiveStyleName(QQuickStylePrivate::fallbackStyle()); + qCDebug(lcQtQuickControls2Plugin) << "style:" << QQuickStyle::name() << "effective style:" << styleName + << "fallback style:" << QQuickStylePrivate::fallbackStyle() << "effective fallback style:" << fallbackStyleName; + + // If the style is Basic, we don't need to register the fallback because the Basic style + // provides all controls. Also, if we didn't return early here, we can get an infinite import loop + // when the style is set to Basic. + if (styleName != fallbackStyleName && styleName != QLatin1String("Basic")) { + registeredFallbackStyleUri = ::fallbackStyleUri(); + qCDebug(lcQtQuickControls2Plugin) << "calling qmlRegisterModuleImport() to register fallback style with" + << " uri \"" << qtQuickControlsUri << "\" moduleMajor" << QQmlModuleImportModuleAny + << "import" << registeredFallbackStyleUri << "importMajor" << QQmlModuleImportAuto; + // The fallback style must be a built-in style, so we match the version number. + qmlRegisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, registeredFallbackStyleUri.toUtf8().constData(), + QQmlModuleImportAuto, QQmlModuleImportAuto); + } + + // If the user imports QtQuick.Controls 2.15, and they're using the Material style, we should import version 2.15. + // However, if they import QtQuick.Controls 2.15, but are using a custom style, we want to use the latest version + // number of their style. + customStyle = QQuickStylePrivate::isCustomStyle(); + registeredStyleUri = ::styleUri(); + const int importMajor = !customStyle ? QQmlModuleImportAuto : QQmlModuleImportLatest; + qCDebug(lcQtQuickControls2Plugin).nospace() << "calling qmlRegisterModuleImport() to register primary style with" + << " uri \"" << qtQuickControlsUri << "\" moduleMajor " << importMajor + << " import " << registeredStyleUri << " importMajor " << importMajor; + qmlRegisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, registeredStyleUri.toUtf8().constData(), importMajor); +} + +void QtQuickControls2Plugin::unregisterTypes() +{ + qCDebug(lcQtQuickControls2Plugin) << "unregisterTypes() called"; + + if (!registeredFallbackStyleUri.isEmpty()) { + // We registered a fallback style, so now we need to unregister it. + qmlUnregisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, registeredFallbackStyleUri.toUtf8().constData(), + QQmlModuleImportAuto, QQmlModuleImportAuto); + registeredFallbackStyleUri.clear(); + } + + const int importMajor = !customStyle ? QQmlModuleImportAuto : QQmlModuleImportLatest; + qmlUnregisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, registeredStyleUri.toUtf8().constData(), importMajor); + customStyle = false; + registeredStyleUri.clear(); +} + +QT_END_NAMESPACE + +#include "qtquickcontrols2plugin.moc" diff --git a/src/quickcontrols2/universal/ApplicationWindow.qml b/src/quickcontrols2/universal/ApplicationWindow.qml new file mode 100644 index 00000000..2ec9c565 --- /dev/null +++ b/src/quickcontrols2/universal/ApplicationWindow.qml @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Window +import QtQuick.Templates as T +import QtQuick.Controls.Universal +import QtQuick.Controls.Universal.impl + +T.ApplicationWindow { + id: window + + color: Universal.background + + FocusRectangle { + parent: window.activeFocusControl + width: parent ? parent.width : 0 + height: parent ? parent.height : 0 + visible: parent && !!parent.useSystemFocusVisuals && !!parent.visualFocus + } +} diff --git a/src/quickcontrols2/universal/BusyIndicator.qml b/src/quickcontrols2/universal/BusyIndicator.qml new file mode 100644 index 00000000..0bd3ca03 --- /dev/null +++ b/src/quickcontrols2/universal/BusyIndicator.qml @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal +import QtQuick.Controls.Universal.impl + +T.BusyIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + contentItem: BusyIndicatorImpl { + implicitWidth: 20 + implicitHeight: 20 + + readonly property real size: Math.min(control.availableWidth, control.availableHeight) + + count: size < 60 ? 5 : 6 // "Small" vs. "Large" + color: control.Universal.accent + visible: control.running + } +} diff --git a/src/quickcontrols2/universal/Button.qml b/src/quickcontrols2/universal/Button.qml new file mode 100644 index 00000000..18a82e17 --- /dev/null +++ b/src/quickcontrols2/universal/Button.qml @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Universal + +T.Button { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 8 + verticalPadding: padding - 4 + spacing: 8 + + icon.width: 20 + icon.height: 20 + icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) + + property bool useSystemFocusVisuals: true + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) + } + + background: Rectangle { + implicitWidth: 32 + implicitHeight: 32 + + visible: !control.flat || control.down || control.checked || control.highlighted + color: control.down ? control.Universal.baseMediumLowColor : + control.enabled && (control.highlighted || control.checked) ? control.Universal.accent : + control.Universal.baseLowColor + + Rectangle { + width: parent.width + height: parent.height + color: "transparent" + visible: control.hovered + border.width: 2 // ButtonBorderThemeThickness + border.color: control.Universal.baseMediumLowColor + } + } +} diff --git a/src/quickcontrols2/universal/CMakeLists.txt b/src/quickcontrols2/universal/CMakeLists.txt new file mode 100644 index 00000000..dddcc63a --- /dev/null +++ b/src/quickcontrols2/universal/CMakeLists.txt @@ -0,0 +1,263 @@ +##################################################################### +## qtquickcontrols2universalstyleplugin Plugin: +##################################################################### + +set(qml_files + "ApplicationWindow.qml" + "BusyIndicator.qml" + "Button.qml" + "CheckBox.qml" + "CheckDelegate.qml" + "ComboBox.qml" + "DelayButton.qml" + "Dial.qml" + "Dialog.qml" + "DialogButtonBox.qml" + "Drawer.qml" + "Frame.qml" + "GroupBox.qml" + "HorizontalHeaderView.qml" + "ItemDelegate.qml" + "Label.qml" + "Menu.qml" + "MenuBar.qml" + "MenuBarItem.qml" + "MenuItem.qml" + "MenuSeparator.qml" + "Page.qml" + "PageIndicator.qml" + "Pane.qml" + "Popup.qml" + "ProgressBar.qml" + "RadioButton.qml" + "RadioDelegate.qml" + "RangeSlider.qml" + "RoundButton.qml" + "ScrollView.qml" + "ScrollBar.qml" + "ScrollIndicator.qml" + "Slider.qml" + "SpinBox.qml" + "SplitView.qml" + "StackView.qml" + "SwipeDelegate.qml" + "SwitchDelegate.qml" + "Switch.qml" + "TabBar.qml" + "TabButton.qml" + "TextArea.qml" + "TextField.qml" + "ToolBar.qml" + "ToolButton.qml" + "ToolSeparator.qml" + "ToolTip.qml" + "Tumbler.qml" + "VerticalHeaderView.qml" +) +set_source_files_properties(ApplicationWindow.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(BusyIndicator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Button.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(CheckBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(CheckDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ComboBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(DelayButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.2;6.0" +) +set_source_files_properties(Dial.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Dialog.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(DialogButtonBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(Drawer.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Frame.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(GroupBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(HorizontalHeaderView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.15;6.0" +) +set_source_files_properties(ItemDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Label.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Menu.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(MenuBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.3;6.0" +) +set_source_files_properties(MenuBarItem.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.3;6.0" +) +set_source_files_properties(MenuItem.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(MenuSeparator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(Page.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(PageIndicator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Pane.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Popup.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ProgressBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(RadioButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(RadioDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(RangeSlider.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(RoundButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(ScrollView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ScrollBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ScrollIndicator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Slider.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(SpinBox.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(SplitView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.13;6.0" +) +set_source_files_properties(StackView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(SwipeDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(SwitchDelegate.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Switch.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(TabBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(TabButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(TextArea.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(TextField.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ToolBar.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ToolButton.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(ToolSeparator.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.1;6.0" +) +set_source_files_properties(ToolTip.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(Tumbler.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) +set_source_files_properties(VerticalHeaderView.qml PROPERTIES + QT_QML_SOURCE_VERSION "2.15;6.0" +) + +qt_internal_add_qml_module(qtquickcontrols2universalstyleplugin + URI "QtQuick.Controls.Universal" + VERSION "${PROJECT_VERSION}" + CLASS_NAME QtQuickControls2UniversalStylePlugin + IMPORTS + QtQuick.Controls.Basic/auto + PLUGIN_TARGET qtquickcontrols2universalstyleplugin + NO_PLUGIN_OPTIONAL + NO_GENERATE_PLUGIN_SOURCE + SOURCES + qquickuniversalstyle.cpp qquickuniversalstyle_p.h + qquickuniversaltheme.cpp qquickuniversaltheme_p.h + qtquickcontrols2universalstyleplugin.cpp + QML_FILES + ${qml_files} + DEFINES + QT_NO_CAST_FROM_ASCII + QT_NO_CAST_TO_ASCII + LIBRARIES + Qt::CorePrivate + Qt::GuiPrivate + Qt::QmlPrivate + Qt::QuickControls2ImplPrivate + Qt::QuickControls2Private + Qt::QuickPrivate + Qt::QuickTemplates2Private + PUBLIC_LIBRARIES + Qt::Core + Qt::Gui + Qt::Qml + Qt::Quick +) + +qt_internal_add_resource(qtquickcontrols2universalstyleplugin "qtquickcontrols2universalstyleplugin" + PREFIX + "/qt-project.org/imports/QtQuick/Controls/Universal" + FILES + "images/checkmark.png" + "images/checkmark@2x.png" + "images/checkmark@3x.png" + "images/checkmark@4x.png" + "images/downarrow.png" + "images/downarrow@2x.png" + "images/downarrow@3x.png" + "images/downarrow@4x.png" + "images/leftarrow.png" + "images/leftarrow@2x.png" + "images/leftarrow@3x.png" + "images/leftarrow@4x.png" + "images/rightarrow.png" + "images/rightarrow@2x.png" + "images/rightarrow@3x.png" + "images/rightarrow@4x.png" +) + +add_subdirectory(impl) diff --git a/src/quickcontrols2/universal/CheckBox.qml b/src/quickcontrols2/universal/CheckBox.qml new file mode 100644 index 00000000..ff35d372 --- /dev/null +++ b/src/quickcontrols2/universal/CheckBox.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal +import QtQuick.Controls.Universal.impl + +T.CheckBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 8 + + property bool useSystemFocusVisuals: true + + indicator: CheckIndicator { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground + } +} diff --git a/src/quickcontrols2/universal/CheckDelegate.qml b/src/quickcontrols2/universal/CheckDelegate.qml new file mode 100644 index 00000000..8e455a56 --- /dev/null +++ b/src/quickcontrols2/universal/CheckDelegate.qml @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Universal +import QtQuick.Controls.Universal.impl + +T.CheckDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 12 + + padding: 12 + topPadding: padding - 1 + bottomPadding: padding + 1 + + icon.width: 20 + icon.height: 20 + icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) + + indicator: CheckIndicator { + x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: IconLabel { + leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing + rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) + } + + background: Rectangle { + visible: control.down || control.highlighted || control.visualFocus || control.hovered + color: control.down ? control.Universal.listMediumColor : + control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor + Rectangle { + width: parent.width + height: parent.height + visible: control.visualFocus || control.highlighted + color: control.Universal.accent + opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 + } + + } +} diff --git a/src/quickcontrols2/universal/ComboBox.qml b/src/quickcontrols2/universal/ComboBox.qml new file mode 100644 index 00000000..b3179849 --- /dev/null +++ b/src/quickcontrols2/universal/ComboBox.qml @@ -0,0 +1,158 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Window +import QtQuick.Controls.impl +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.ComboBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) + rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing) + + Universal.theme: editable && activeFocus ? Universal.Light : undefined + + delegate: ItemDelegate { + width: ListView.view.width + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData + font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal + highlighted: control.highlightedIndex === index + hoverEnabled: control.hoverEnabled + } + + indicator: ColorImage { + x: control.mirrored ? control.padding : control.width - width - control.padding + y: control.topPadding + (control.availableHeight - height) / 2 + color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseMediumHighColor + source: "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/downarrow.png" + + Rectangle { + z: -1 + width: parent.width + height: parent.height + color: control.activeFocus ? control.Universal.accent : + control.pressed ? control.Universal.baseMediumLowColor : + control.hovered ? control.Universal.baseLowColor : "transparent" + visible: control.editable && !contentItem.hovered && (control.pressed || control.hovered) + opacity: control.activeFocus && !control.pressed ? 0.4 : 1.0 + } + } + + contentItem: T.TextField { + leftPadding: control.mirrored ? 1 : 12 + rightPadding: control.mirrored ? 10 : 1 + topPadding: 5 - control.topPadding + bottomPadding: 7 - control.bottomPadding + + text: control.editable ? control.editText : control.displayText + + enabled: control.editable + autoScroll: control.editable + readOnly: control.down + inputMethodHints: control.inputMethodHints + validator: control.validator + selectByMouse: control.selectTextByMouse + + font: control.font + color: !control.enabled ? control.Universal.chromeDisabledLowColor : + control.editable && control.activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.foreground + selectionColor: control.Universal.accent + selectedTextColor: control.Universal.chromeWhiteColor + verticalAlignment: Text.AlignVCenter + } + + background: Rectangle { + implicitWidth: 120 + implicitHeight: 32 + + border.width: control.flat ? 0 : 2 // ComboBoxBorderThemeThickness + border.color: !control.enabled ? control.Universal.baseLowColor : + control.editable && control.activeFocus ? control.Universal.accent : + control.down ? control.Universal.baseMediumLowColor : + control.hovered ? control.Universal.baseMediumColor : control.Universal.baseMediumLowColor + color: !control.enabled ? control.Universal.baseLowColor : + control.down ? control.Universal.listMediumColor : + control.flat && control.hovered ? control.Universal.listLowColor : + control.editable && control.activeFocus ? control.Universal.background : control.Universal.altMediumLowColor + visible: !control.flat || control.pressed || control.hovered || control.visualFocus + + Rectangle { + x: 2 + y: 2 + width: parent.width - 4 + height: parent.height - 4 + + visible: control.visualFocus && !control.editable + color: control.Universal.accent + opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 + } + } + + popup: T.Popup { + width: control.width + height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin) + topMargin: 8 + bottomMargin: 8 + + Universal.theme: control.Universal.theme + Universal.accent: control.Universal.accent + + contentItem: ListView { + clip: true + implicitHeight: contentHeight + model: control.delegateModel + currentIndex: control.highlightedIndex + highlightMoveDuration: 0 + + T.ScrollIndicator.vertical: ScrollIndicator { } + } + + background: Rectangle { + color: control.Universal.chromeMediumLowColor + border.color: control.Universal.chromeHighColor + border.width: 1 // FlyoutBorderThemeThickness + } + } +} diff --git a/src/quickcontrols2/universal/DelayButton.qml b/src/quickcontrols2/universal/DelayButton.qml new file mode 100644 index 00000000..5840fa86 --- /dev/null +++ b/src/quickcontrols2/universal/DelayButton.qml @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.DelayButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 8 + verticalPadding: padding - 4 + + property bool useSystemFocusVisuals: true + + transition: Transition { + NumberAnimation { + duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress) + } + } + + contentItem: Text { + text: control.text + font: control.font + elide: Text.ElideRight + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground + } + + background: Rectangle { + implicitWidth: 32 + implicitHeight: 32 + + color: control.down ? control.Universal.baseMediumLowColor : + control.enabled && control.checked ? control.Universal.accent : control.Universal.baseLowColor + + Rectangle { + visible: !control.checked + width: parent.width * control.progress + height: parent.height + color: control.Universal.accent + } + + Rectangle { + width: parent.width + height: parent.height + color: "transparent" + visible: control.hovered + border.width: 2 // ButtonBorderThemeThickness + border.color: control.Universal.baseMediumLowColor + } + } +} diff --git a/src/quickcontrols2/universal/Dial.qml b/src/quickcontrols2/universal/Dial.qml new file mode 100644 index 00000000..cd9e615e --- /dev/null +++ b/src/quickcontrols2/universal/Dial.qml @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.Dial { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 100 + + x: control.width / 2 - width / 2 + y: control.height / 2 - height / 2 + width: Math.max(64, Math.min(control.width, control.height)) + height: width + radius: width / 2 + color: "transparent" + border.color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseMediumColor + border.width: 2 + } + + handle: Rectangle { + implicitWidth: 14 + implicitHeight: 14 + + x: control.background.x + control.background.width / 2 - width / 2 + y: control.background.y + control.background.height / 2 - height / 2 + + radius: width / 2 + color: !control.enabled ? control.Universal.baseLowColor : + control.pressed ? control.Universal.baseMediumColor : + control.hovered ? control.Universal.baseHighColor : control.Universal.baseMediumHighColor + + transform: [ + Translate { + y: -control.background.height * 0.4 + control.handle.height / 2 + }, + Rotation { + angle: control.angle + origin.x: control.handle.width / 2 + origin.y: control.handle.height / 2 + } + ] + } +} diff --git a/src/quickcontrols2/universal/Dialog.qml b/src/quickcontrols2/universal/Dialog.qml new file mode 100644 index 00000000..3cebf7f0 --- /dev/null +++ b/src/quickcontrols2/universal/Dialog.qml @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.Dialog { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitHeaderWidth, + implicitFooterWidth) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + + padding: 24 + verticalPadding: 18 + + background: Rectangle { + color: control.Universal.chromeMediumLowColor + border.color: control.Universal.chromeHighColor + border.width: 1 // FlyoutBorderThemeThickness + } + + header: Label { + text: control.title + visible: control.title + elide: Label.ElideRight + topPadding: 18 + leftPadding: 24 + rightPadding: 24 + // TODO: QPlatformTheme::TitleBarFont + font.pixelSize: 20 + background: Rectangle { + x: 1; y: 1 // // FlyoutBorderThemeThickness + color: control.Universal.chromeMediumLowColor + width: parent.width - 2 + height: parent.height - 1 + } + } + + footer: DialogButtonBox { + visible: count > 0 + } + + T.Overlay.modal: Rectangle { + color: control.Universal.baseLowColor + } + + T.Overlay.modeless: Rectangle { + color: control.Universal.baseLowColor + } +} diff --git a/src/quickcontrols2/universal/DialogButtonBox.qml b/src/quickcontrols2/universal/DialogButtonBox.qml new file mode 100644 index 00000000..811c12f7 --- /dev/null +++ b/src/quickcontrols2/universal/DialogButtonBox.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.DialogButtonBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + (control.count === 1 ? implicitContentWidth * 2 : implicitContentWidth) + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + contentWidth: contentItem.contentWidth + + spacing: 4 + padding: 24 + topPadding: position === T.DialogButtonBox.Footer ? 6 : 24 + bottomPadding: position === T.DialogButtonBox.Header ? 6 : 24 + alignment: count === 1 ? Qt.AlignRight : undefined + + delegate: Button { + width: control.count === 1 ? control.availableWidth / 2 : undefined + } + + contentItem: ListView { + model: control.contentModel + spacing: control.spacing + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + snapMode: ListView.SnapToItem + } + + background: Rectangle { + implicitHeight: 32 + color: control.Universal.chromeMediumLowColor + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + } +} diff --git a/src/quickcontrols2/universal/Drawer.qml b/src/quickcontrols2/universal/Drawer.qml new file mode 100644 index 00000000..19f78f1e --- /dev/null +++ b/src/quickcontrols2/universal/Drawer.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.Drawer { + id: control + + parent: T.Overlay.overlay + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + topPadding: control.edge === Qt.BottomEdge + leftPadding: control.edge === Qt.RightEdge + rightPadding: control.edge === Qt.LeftEdge + bottomPadding: control.edge === Qt.TopEdge + + enter: Transition { SmoothedAnimation { velocity: 5 } } + exit: Transition { SmoothedAnimation { velocity: 5 } } + + background: Rectangle { + color: control.Universal.chromeMediumLowColor + Rectangle { + readonly property bool horizontal: control.edge === Qt.LeftEdge || control.edge === Qt.RightEdge + width: horizontal ? 1 : parent.width + height: horizontal ? parent.height : 1 + color: control.Universal.chromeHighColor + x: control.edge === Qt.LeftEdge ? parent.width - 1 : 0 + y: control.edge === Qt.TopEdge ? parent.height - 1 : 0 + } + } + + T.Overlay.modal: Rectangle { + color: control.Universal.baseLowColor + } + + T.Overlay.modeless: Rectangle { + color: control.Universal.baseLowColor + } +} diff --git a/src/quickcontrols2/universal/Frame.qml b/src/quickcontrols2/universal/Frame.qml new file mode 100644 index 00000000..780ba734 --- /dev/null +++ b/src/quickcontrols2/universal/Frame.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.Frame { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 12 + + background: Rectangle { + color: "transparent" + border.color: control.Universal.chromeDisabledLowColor + } +} diff --git a/src/quickcontrols2/universal/GroupBox.qml b/src/quickcontrols2/universal/GroupBox.qml new file mode 100644 index 00000000..5104b710 --- /dev/null +++ b/src/quickcontrols2/universal/GroupBox.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.GroupBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitLabelWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + spacing: 12 + padding: 12 + topPadding: padding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0) + + label: Text { + x: control.leftPadding + width: control.availableWidth + + text: control.title + font: control.font + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground + } + + background: Rectangle { + y: control.topPadding - control.bottomPadding + width: parent.width + height: parent.height - control.topPadding + control.bottomPadding + + color: "transparent" + border.color: control.Universal.chromeDisabledLowColor + } +} diff --git a/src/quickcontrols2/universal/HorizontalHeaderView.qml b/src/quickcontrols2/universal/HorizontalHeaderView.qml new file mode 100644 index 00000000..0bf88ebc --- /dev/null +++ b/src/quickcontrols2/universal/HorizontalHeaderView.qml @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T +import QtQuick.Controls.Universal +import QtQuick.Controls.Universal.impl + +T.HorizontalHeaderView { + id: control + + implicitWidth: syncView ? syncView.width : 0 + implicitHeight: contentHeight + + delegate: Rectangle { + // Qt6: add cellPadding (and font etc) as public API in headerview + readonly property real cellPadding: 8 + + implicitWidth: text.implicitWidth + (cellPadding * 2) + implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2)) + color: control.Universal.background + + Text { + id: text + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] + : model[control.textRole]) + : modelData + width: parent.width + height: parent.height + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) + } + } +} diff --git a/src/quickcontrols2/universal/ItemDelegate.qml b/src/quickcontrols2/universal/ItemDelegate.qml new file mode 100644 index 00000000..50fa0af9 --- /dev/null +++ b/src/quickcontrols2/universal/ItemDelegate.qml @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Universal + +T.ItemDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 12 + + padding: 12 + topPadding: padding - 1 + bottomPadding: padding + 1 + + icon.width: 20 + icon.height: 20 + icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) + } + + background: Rectangle { + visible: control.down || control.highlighted || control.visualFocus || control.hovered + color: control.down ? control.Universal.listMediumColor : + control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor + Rectangle { + width: parent.width + height: parent.height + visible: control.visualFocus || control.highlighted + color: control.Universal.accent + opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 + } + + } +} diff --git a/src/quickcontrols2/universal/Label.qml b/src/quickcontrols2/universal/Label.qml new file mode 100644 index 00000000..9460c997 --- /dev/null +++ b/src/quickcontrols2/universal/Label.qml @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.Label { + id: control + + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground + linkColor: Universal.accent +} diff --git a/src/quickcontrols2/universal/Menu.qml b/src/quickcontrols2/universal/Menu.qml new file mode 100644 index 00000000..c4723f32 --- /dev/null +++ b/src/quickcontrols2/universal/Menu.qml @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal +import QtQuick.Window + +T.Menu { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + margins: 0 + overlap: 1 + + delegate: MenuItem { } + + contentItem: ListView { + implicitHeight: contentHeight + model: control.contentModel + interactive: Window.window + ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height + : false + clip: true + currentIndex: control.currentIndex + + ScrollIndicator.vertical: ScrollIndicator {} + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 40 + color: control.Universal.chromeMediumLowColor + border.color: control.Universal.chromeHighColor + border.width: 1 // FlyoutBorderThemeThickness + } + + T.Overlay.modal: Rectangle { + color: control.Universal.baseLowColor + } + + T.Overlay.modeless: Rectangle { + color: control.Universal.baseLowColor + } +} diff --git a/src/quickcontrols2/universal/MenuBar.qml b/src/quickcontrols2/universal/MenuBar.qml new file mode 100644 index 00000000..2ab58919 --- /dev/null +++ b/src/quickcontrols2/universal/MenuBar.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Universal + +T.MenuBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + delegate: MenuBarItem { } + + contentItem: Row { + spacing: control.spacing + Repeater { + model: control.contentModel + } + } + + background: Rectangle { + implicitHeight: 40 + color: control.Universal.chromeMediumColor + } +} diff --git a/src/quickcontrols2/universal/MenuBarItem.qml b/src/quickcontrols2/universal/MenuBarItem.qml new file mode 100644 index 00000000..786be132 --- /dev/null +++ b/src/quickcontrols2/universal/MenuBarItem.qml @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Universal + +T.MenuBarItem { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 12 + topPadding: padding - 1 + bottomPadding: padding + 1 + spacing: 12 + + icon.width: 20 + icon.height: 20 + icon.color: !enabled ? Universal.baseLowColor : Universal.baseHighColor + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor + } + + background: Rectangle { + implicitWidth: 40 + implicitHeight: 40 + + color: !control.enabled ? control.Universal.baseLowColor : + control.down ? control.Universal.listMediumColor : + control.highlighted ? control.Universal.listLowColor : "transparent" + + Rectangle { + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + + visible: control.visualFocus + color: control.Universal.accent + opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 + } + } +} diff --git a/src/quickcontrols2/universal/MenuItem.qml b/src/quickcontrols2/universal/MenuItem.qml new file mode 100644 index 00000000..8287b0a8 --- /dev/null +++ b/src/quickcontrols2/universal/MenuItem.qml @@ -0,0 +1,114 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Universal + +T.MenuItem { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 12 + topPadding: padding - 1 + bottomPadding: padding + 1 + spacing: 12 + + icon.width: 20 + icon.height: 20 + icon.color: !enabled ? Universal.baseLowColor : Universal.baseHighColor + + contentItem: IconLabel { + readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0 + readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0 + leftPadding: !control.mirrored ? indicatorPadding : arrowPadding + rightPadding: control.mirrored ? indicatorPadding : arrowPadding + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor + } + + arrow: ColorImage { + x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding + y: control.topPadding + (control.availableHeight - height) / 2 + + visible: control.subMenu + mirror: control.mirrored + color: !enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor + source: "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/rightarrow.png" + } + + indicator: ColorImage { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + + visible: control.checked + color: !control.enabled ? control.Universal.baseLowColor : control.down ? control.Universal.baseHighColor : control.Universal.baseMediumHighColor + source: !control.checkable ? "" : "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/checkmark.png" + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 40 + + color: !control.enabled ? control.Universal.baseLowColor : + control.down ? control.Universal.listMediumColor : + control.highlighted ? control.Universal.listLowColor : control.Universal.altMediumLowColor + + Rectangle { + x: 1; y: 1 + width: parent.width - 2 + height: parent.height - 2 + + visible: control.visualFocus + color: control.Universal.accent + opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 + } + } +} diff --git a/src/quickcontrols2/universal/MenuSeparator.qml b/src/quickcontrols2/universal/MenuSeparator.qml new file mode 100644 index 00000000..be6fad45 --- /dev/null +++ b/src/quickcontrols2/universal/MenuSeparator.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.MenuSeparator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 12 + topPadding: 9 + bottomPadding: 10 + + contentItem: Rectangle { + implicitWidth: 188 + implicitHeight: 1 + color: control.Universal.baseMediumLowColor + } + + background: Rectangle { + color: control.Universal.altMediumLowColor + } +} diff --git a/src/quickcontrols2/universal/Page.qml b/src/quickcontrols2/universal/Page.qml new file mode 100644 index 00000000..8946e7ad --- /dev/null +++ b/src/quickcontrols2/universal/Page.qml @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.Page { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitHeaderWidth, + implicitFooterWidth) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding + + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) + + background: Rectangle { + color: control.Universal.background + } +} diff --git a/src/quickcontrols2/universal/PageIndicator.qml b/src/quickcontrols2/universal/PageIndicator.qml new file mode 100644 index 00000000..2adb85c6 --- /dev/null +++ b/src/quickcontrols2/universal/PageIndicator.qml @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.PageIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 7 + + delegate: Rectangle { + implicitWidth: 5 + implicitHeight: 5 + + radius: width / 2 + color: index === control.currentIndex ? control.Universal.baseMediumHighColor : + pressed ? control.Universal.baseMediumLowColor : control.Universal.baseLowColor + } + + contentItem: Row { + spacing: control.spacing + + Repeater { + model: control.count + delegate: control.delegate + } + } +} diff --git a/src/quickcontrols2/universal/Pane.qml b/src/quickcontrols2/universal/Pane.qml new file mode 100644 index 00000000..257f9caf --- /dev/null +++ b/src/quickcontrols2/universal/Pane.qml @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.Pane { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 12 + + background: Rectangle { + color: control.Universal.background + } +} diff --git a/src/quickcontrols2/universal/Popup.qml b/src/quickcontrols2/universal/Popup.qml new file mode 100644 index 00000000..5e972ea9 --- /dev/null +++ b/src/quickcontrols2/universal/Popup.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.Popup { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + padding: 12 + + background: Rectangle { + color: control.Universal.chromeMediumLowColor + border.color: control.Universal.chromeHighColor + border.width: 1 // FlyoutBorderThemeThickness + } + + T.Overlay.modal: Rectangle { + color: control.Universal.baseLowColor + } + + T.Overlay.modeless: Rectangle { + color: control.Universal.baseLowColor + } +} diff --git a/src/quickcontrols2/universal/ProgressBar.qml b/src/quickcontrols2/universal/ProgressBar.qml new file mode 100644 index 00000000..4f8cc874 --- /dev/null +++ b/src/quickcontrols2/universal/ProgressBar.qml @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal +import QtQuick.Controls.Universal.impl + +T.ProgressBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + contentItem: ProgressBarImpl { + implicitHeight: 10 + + scale: control.mirrored ? -1 : 1 + color: control.Universal.accent + progress: control.position + indeterminate: control.visible && control.indeterminate + } + + background: Rectangle { + implicitWidth: 100 + implicitHeight: 10 + y: (control.height - height) / 2 + height: 10 + + visible: !control.indeterminate + color: control.Universal.baseLowColor + } +} diff --git a/src/quickcontrols2/universal/README.md b/src/quickcontrols2/universal/README.md new file mode 100644 index 00000000..8d02d18b --- /dev/null +++ b/src/quickcontrols2/universal/README.md @@ -0,0 +1,9 @@ +# Universal Style + +This style is based on the [Microsoft Universal Design Guidelines](https://dev.windows.com/design). + +The colors and metrics used all around the QML and C++ files originate from the Windows 10 SDK. The files are called **generic.xaml** and **themeresources.xml**, and they are located in the following folder: + + \(Program Files)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\\Generic + +See also [XAML theme resources](https://msdn.microsoft.com/en-us/library/windows/apps/mt187274.aspx). diff --git a/src/quickcontrols2/universal/RadioButton.qml b/src/quickcontrols2/universal/RadioButton.qml new file mode 100644 index 00000000..abd386ce --- /dev/null +++ b/src/quickcontrols2/universal/RadioButton.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal +import QtQuick.Controls.Universal.impl + +T.RadioButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 8 + + property bool useSystemFocusVisuals: true + + indicator: RadioIndicator { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground + } +} diff --git a/src/quickcontrols2/universal/RadioDelegate.qml b/src/quickcontrols2/universal/RadioDelegate.qml new file mode 100644 index 00000000..fda2560d --- /dev/null +++ b/src/quickcontrols2/universal/RadioDelegate.qml @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Universal +import QtQuick.Controls.Universal.impl + +T.RadioDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 12 + + padding: 12 + topPadding: padding - 1 + bottomPadding: padding + 1 + + icon.width: 20 + icon.height: 20 + icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) + + indicator: RadioIndicator { + x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: IconLabel { + leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing + rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) + } + + background: Rectangle { + visible: control.down || control.highlighted || control.visualFocus || control.hovered + color: control.down ? control.Universal.listMediumColor : + control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor + Rectangle { + width: parent.width + height: parent.height + visible: control.visualFocus || control.highlighted + color: control.Universal.accent + opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 + } + + } +} diff --git a/src/quickcontrols2/universal/RangeSlider.qml b/src/quickcontrols2/universal/RangeSlider.qml new file mode 100644 index 00000000..5bdc4d8f --- /dev/null +++ b/src/quickcontrols2/universal/RangeSlider.qml @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.RangeSlider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + first.implicitHandleWidth + leftPadding + rightPadding, + second.implicitHandleWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + first.implicitHandleHeight + topPadding + bottomPadding, + second.implicitHandleHeight + topPadding + bottomPadding) + + padding: 6 + + first.handle: Rectangle { + implicitWidth: control.horizontal ? 8 : 24 + implicitHeight: control.horizontal ? 24 : 8 + + x: control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height)) + + radius: 4 + color: control.first.pressed ? control.Universal.chromeHighColor : + control.first.hovered ? control.Universal.chromeAltLowColor : + control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor + } + + second.handle: Rectangle { + implicitWidth: control.horizontal ? 8 : 24 + implicitHeight: control.horizontal ? 24 : 8 + + x: control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height)) + + radius: 4 + color: control.second.pressed ? control.Universal.chromeHighColor : + control.second.hovered ? control.Universal.chromeAltLowColor : + control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor + } + + background: Item { + implicitWidth: control.horizontal ? 200 : 18 + implicitHeight: control.horizontal ? 18 : 200 + + x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) + width: control.horizontal ? control.availableWidth : implicitWidth + height: control.horizontal ? implicitHeight : control.availableHeight + + scale: control.horizontal && control.mirrored ? -1 : 1 + + Rectangle { + x: control.horizontal ? 0 : (parent.width - width) / 2 + y: control.horizontal ? (parent.height - height) / 2 : 0 + width: control.horizontal ? parent.width : 2 // SliderBackgroundThemeHeight + height: control.vertical ? parent.height : 2 // SliderBackgroundThemeHeight + + color: control.hovered && !control.pressed ? control.Universal.baseMediumColor : + control.enabled ? control.Universal.baseMediumLowColor : control.Universal.chromeDisabledHighColor + } + + Rectangle { + x: control.horizontal ? control.first.position * parent.width : (parent.width - width) / 2 + y: control.horizontal ? (parent.height - height) / 2 : control.second.visualPosition * parent.height + width: control.horizontal ? control.second.position * parent.width - control.first.position * parent.width : 2 // SliderBackgroundThemeHeight + height: control.vertical ? control.second.position * parent.height - control.first.position * parent.height : 2 // SliderBackgroundThemeHeight + + color: control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor + } + } +} diff --git a/src/quickcontrols2/universal/RoundButton.qml b/src/quickcontrols2/universal/RoundButton.qml new file mode 100644 index 00000000..156a472c --- /dev/null +++ b/src/quickcontrols2/universal/RoundButton.qml @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Universal + +T.RoundButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 8 + spacing: 8 + + icon.width: 20 + icon.height: 20 + icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) + + property bool useSystemFocusVisuals: true + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) + } + + background: Rectangle { + implicitWidth: 32 + implicitHeight: 32 + + radius: control.radius + visible: !control.flat || control.down || control.checked || control.highlighted + color: control.down ? control.Universal.baseMediumLowColor : + control.enabled && (control.highlighted || control.checked) ? control.Universal.accent : + control.Universal.baseLowColor + + Rectangle { + width: parent.width + height: parent.height + radius: control.radius + color: "transparent" + visible: control.hovered + border.width: 2 // ButtonBorderThemeThickness + border.color: control.Universal.baseMediumLowColor + } + } +} diff --git a/src/quickcontrols2/universal/ScrollBar.qml b/src/quickcontrols2/universal/ScrollBar.qml new file mode 100644 index 00000000..d101658c --- /dev/null +++ b/src/quickcontrols2/universal/ScrollBar.qml @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.ScrollBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + visible: control.policy !== T.ScrollBar.AlwaysOff + minimumSize: orientation == Qt.Horizontal ? height / width : width / height + + // TODO: arrows + + contentItem: Rectangle { + implicitWidth: control.interactive ? 12 : 6 + implicitHeight: control.interactive ? 12: 6 + + color: control.pressed ? control.Universal.baseMediumColor : + control.interactive && control.hovered ? control.Universal.baseMediumLowColor : control.Universal.chromeHighColor + opacity: 0.0 + } + + background: Rectangle { + implicitWidth: control.interactive ? 12 : 6 + implicitHeight: control.interactive ? 12: 6 + + color: control.Universal.chromeLowColor + visible: control.size < 1.0 + opacity: 0.0 + } + + states: [ + State { + name: "active" + when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0) + } + ] + + transitions: [ + Transition { + to: "active" + NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 1.0 } + }, + Transition { + from: "active" + SequentialAnimation { + PropertyAction{ targets: [control.contentItem, control.background]; property: "opacity"; value: 1.0 } + PauseAnimation { duration: 3000 } + NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 0.0 } + } + } + ] +} diff --git a/src/quickcontrols2/universal/ScrollIndicator.qml b/src/quickcontrols2/universal/ScrollIndicator.qml new file mode 100644 index 00000000..f66a9658 --- /dev/null +++ b/src/quickcontrols2/universal/ScrollIndicator.qml @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.ScrollIndicator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + contentItem: Rectangle { + implicitWidth: 6 + implicitHeight: 6 + + color: control.Universal.baseMediumLowColor + visible: control.size < 1.0 + opacity: 0.0 + + states: [ + State { + name: "active" + when: control.active + } + ] + + transitions: [ + Transition { + to: "active" + NumberAnimation { target: control.contentItem; property: "opacity"; to: 1.0 } + }, + Transition { + from: "active" + SequentialAnimation { + PauseAnimation { duration: 5000 } + NumberAnimation { target: control.contentItem; property: "opacity"; to: 0.0 } + } + } + ] + } +} diff --git a/src/quickcontrols2/universal/ScrollView.qml b/src/quickcontrols2/universal/ScrollView.qml new file mode 100644 index 00000000..a6bba9de --- /dev/null +++ b/src/quickcontrols2/universal/ScrollView.qml @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.ScrollView { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + ScrollBar.vertical: ScrollBar { + parent: control + x: control.mirrored ? 0 : control.width - width + y: control.topPadding + height: control.availableHeight + active: control.ScrollBar.horizontal.active + } + + ScrollBar.horizontal: ScrollBar { + parent: control + x: control.leftPadding + y: control.height - height + width: control.availableWidth + active: control.ScrollBar.vertical.active + } +} diff --git a/src/quickcontrols2/universal/Slider.qml b/src/quickcontrols2/universal/Slider.qml new file mode 100644 index 00000000..37c77a35 --- /dev/null +++ b/src/quickcontrols2/universal/Slider.qml @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.Slider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitHandleWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitHandleHeight + topPadding + bottomPadding) + + padding: 6 + + property bool useSystemFocusVisuals: true + + handle: Rectangle { + implicitWidth: control.horizontal ? 8 : 24 + implicitHeight: control.horizontal ? 24 : 8 + + x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)) + + radius: 4 + color: control.pressed ? control.Universal.chromeHighColor : + control.hovered ? control.Universal.chromeAltLowColor : + control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor + } + + background: Item { + implicitWidth: control.horizontal ? 200 : 18 + implicitHeight: control.horizontal ? 18 : 200 + + x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0) + width: control.horizontal ? control.availableWidth : implicitWidth + height: control.horizontal ? implicitHeight : control.availableHeight + + scale: control.horizontal && control.mirrored ? -1 : 1 + + Rectangle { + x: control.horizontal ? 0 : (parent.width - width) / 2 + y: control.horizontal ? (parent.height - height) / 2 : 0 + width: control.horizontal ? parent.width : 2 // SliderTrackThemeHeight + height: !control.horizontal ? parent.height : 2 // SliderTrackThemeHeight + + color: control.hovered && !control.pressed ? control.Universal.baseMediumColor : + control.enabled ? control.Universal.baseMediumLowColor : control.Universal.chromeDisabledHighColor + } + + Rectangle { + x: control.horizontal ? 0 : (parent.width - width) / 2 + y: control.horizontal ? (parent.height - height) / 2 : control.visualPosition * parent.height + width: control.horizontal ? control.position * parent.width : 2 // SliderTrackThemeHeight + height: !control.horizontal ? control.position * parent.height : 2 // SliderTrackThemeHeight + + color: control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor + } + } +} diff --git a/src/quickcontrols2/universal/SpinBox.qml b/src/quickcontrols2/universal/SpinBox.qml new file mode 100644 index 00000000..10c12589 --- /dev/null +++ b/src/quickcontrols2/universal/SpinBox.qml @@ -0,0 +1,147 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Universal + +T.SpinBox { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentItem.implicitWidth + 16 + + up.implicitIndicatorWidth + + down.implicitIndicatorWidth) + implicitHeight: Math.max(implicitContentHeight + topPadding + bottomPadding, + implicitBackgroundHeight, + up.implicitIndicatorHeight, + down.implicitIndicatorHeight) + + // TextControlThemePadding + 2 (border) + padding: 12 + topPadding: padding - 7 + leftPadding: padding + (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0)) + rightPadding: padding - 4 + (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0)) + bottomPadding: padding - 5 + + Universal.theme: activeFocus ? Universal.Light : undefined + + validator: IntValidator { + locale: control.locale.name + bottom: Math.min(control.from, control.to) + top: Math.max(control.from, control.to) + } + + contentItem: TextInput { + text: control.displayText + + font: control.font + color: !enabled ? control.Universal.chromeDisabledLowColor : + activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.foreground + selectionColor: control.Universal.accent + selectedTextColor: control.Universal.chromeWhiteColor + horizontalAlignment: Qt.AlignHCenter + verticalAlignment: TextInput.AlignVCenter + + readOnly: !control.editable + validator: control.validator + inputMethodHints: control.inputMethodHints + } + + up.indicator: Item { + implicitWidth: 28 + height: parent.height + 4 + y: -2 + x: control.mirrored ? 0 : parent.width - width + + Rectangle { + x: 2; y: 4 + width: parent.width - 4 + height: parent.height - 8 + color: control.activeFocus ? control.Universal.accent : + control.up.pressed ? control.Universal.baseMediumLowColor : + control.up.hovered ? control.Universal.baseLowColor : "transparent" + visible: control.up.pressed || control.up.hovered + opacity: control.activeFocus && !control.up.pressed ? 0.4 : 1.0 + } + + ColorImage { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + color: !enabled ? control.Universal.chromeDisabledLowColor : + control.activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.baseHighColor + source: "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/" + (control.mirrored ? "left" : "right") + "arrow.png" + } + } + + down.indicator: Item { + implicitWidth: 28 + height: parent.height + 4 + y: -2 + x: control.mirrored ? parent.width - width : 0 + + Rectangle { + x: 2; y: 4 + width: parent.width - 4 + height: parent.height - 8 + color: control.activeFocus ? control.Universal.accent : + control.down.pressed ? control.Universal.baseMediumLowColor : + control.down.hovered ? control.Universal.baseLowColor : "transparent" + visible: control.down.pressed || control.down.hovered + opacity: control.activeFocus && !control.down.pressed ? 0.4 : 1.0 + } + + ColorImage { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + color: !enabled ? control.Universal.chromeDisabledLowColor : + control.activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.baseHighColor + source: "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/" + (control.mirrored ? "right" : "left") + "arrow.png" + } + } + + background: Rectangle { + implicitWidth: 60 + 28 // TextControlThemeMinWidth - 4 (border) + implicitHeight: 28 // TextControlThemeMinHeight - 4 (border) + + border.width: 2 // TextControlBorderThemeThickness + border.color: !control.enabled ? control.Universal.baseLowColor : + control.activeFocus ? control.Universal.accent : + control.hovered ? control.Universal.baseMediumColor : control.Universal.chromeDisabledLowColor + color: control.enabled ? control.Universal.background : control.Universal.baseLowColor + } +} diff --git a/src/quickcontrols2/universal/SplitView.qml b/src/quickcontrols2/universal/SplitView.qml new file mode 100644 index 00000000..78362cea --- /dev/null +++ b/src/quickcontrols2/universal/SplitView.qml @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2018 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Universal + +T.SplitView { + id: control + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + handle: Rectangle { + implicitWidth: control.orientation === Qt.Horizontal ? 6 : control.width + implicitHeight: control.orientation === Qt.Horizontal ? control.height : 6 + color: T.SplitHandle.pressed ? control.Universal.baseMediumColor + : (T.SplitHandle.hovered ? control.Universal.baseMediumLowColor : control.Universal.chromeHighColor) + } +} diff --git a/src/quickcontrols2/universal/StackView.qml b/src/quickcontrols2/universal/StackView.qml new file mode 100644 index 00000000..41611dd3 --- /dev/null +++ b/src/quickcontrols2/universal/StackView.qml @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.StackView { + id: control + + popEnter: Transition { + ParallelAnimation { + NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 200; easing.type: Easing.InQuint } + NumberAnimation { property: "x"; from: (control.mirrored ? -0.3 : 0.3) * -control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } + } + } + + popExit: Transition { + NumberAnimation { property: "opacity"; from: 1; to: 0; duration: 200; easing.type: Easing.OutQuint } + } + + pushEnter: Transition { + ParallelAnimation { + NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 200; easing.type: Easing.InQuint } + NumberAnimation { property: "x"; from: (control.mirrored ? -0.3 : 0.3) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } + } + } + + pushExit: Transition { + NumberAnimation { property: "opacity"; from: 1; to: 0; duration: 200; easing.type: Easing.OutQuint } + } + + replaceEnter: Transition { + ParallelAnimation { + NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 200; easing.type: Easing.InQuint } + NumberAnimation { property: "x"; from: (control.mirrored ? -0.3 : 0.3) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic } + } + } + + replaceExit: Transition { + NumberAnimation { property: "opacity"; from: 1; to: 0; duration: 200; easing.type: Easing.OutQuint } + } +} diff --git a/src/quickcontrols2/universal/SwipeDelegate.qml b/src/quickcontrols2/universal/SwipeDelegate.qml new file mode 100644 index 00000000..e36f8ee0 --- /dev/null +++ b/src/quickcontrols2/universal/SwipeDelegate.qml @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Universal + +T.SwipeDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 12 + + padding: 12 + topPadding: padding - 1 + bottomPadding: padding + 1 + + icon.width: 20 + icon.height: 20 + icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) + + swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } } + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) + } + + background: Rectangle { + color: control.Universal.background + + Rectangle { + width: parent.width + height: parent.height + color: control.down ? control.Universal.listMediumColor : + control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor + Rectangle { + width: parent.width + height: parent.height + visible: control.visualFocus || control.highlighted + color: control.Universal.accent + opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 + } + } + } +} diff --git a/src/quickcontrols2/universal/Switch.qml b/src/quickcontrols2/universal/Switch.qml new file mode 100644 index 00000000..33ee4abb --- /dev/null +++ b/src/quickcontrols2/universal/Switch.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal +import QtQuick.Controls.Universal.impl + +T.Switch { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + padding: 5 + spacing: 8 + + property bool useSystemFocusVisuals: true + + indicator: SwitchIndicator { + x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: Text { + leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0 + rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0 + + text: control.text + font: control.font + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground + } +} diff --git a/src/quickcontrols2/universal/SwitchDelegate.qml b/src/quickcontrols2/universal/SwitchDelegate.qml new file mode 100644 index 00000000..41ea2ce0 --- /dev/null +++ b/src/quickcontrols2/universal/SwitchDelegate.qml @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Universal +import QtQuick.Controls.Universal.impl + +T.SwitchDelegate { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + spacing: 12 + + padding: 12 + topPadding: padding - 1 + bottomPadding: padding + 1 + + icon.width: 20 + icon.height: 20 + icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) + + indicator: SwitchIndicator { + x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2 + y: control.topPadding + (control.availableHeight - height) / 2 + control: control + } + + contentItem: IconLabel { + leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing + rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing + + spacing: control.spacing + mirrored: control.mirrored + display: control.display + alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft + + icon: control.icon + text: control.text + font: control.font + color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) + } + + background: Rectangle { + visible: control.down || control.highlighted || control.visualFocus || control.hovered + color: control.down ? control.Universal.listMediumColor : + control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor + Rectangle { + width: parent.width + height: parent.height + visible: control.visualFocus || control.highlighted + color: control.Universal.accent + opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6 + } + + } +} diff --git a/src/quickcontrols2/universal/TabBar.qml b/src/quickcontrols2/universal/TabBar.qml new file mode 100644 index 00000000..9b98c10e --- /dev/null +++ b/src/quickcontrols2/universal/TabBar.qml @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.TabBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + contentItem: ListView { + model: control.contentModel + currentIndex: control.currentIndex + + spacing: control.spacing + orientation: ListView.Horizontal + boundsBehavior: Flickable.StopAtBounds + flickableDirection: Flickable.AutoFlickIfNeeded + snapMode: ListView.SnapToItem + + highlightMoveDuration: 100 + highlightRangeMode: ListView.ApplyRange + preferredHighlightBegin: 48 + preferredHighlightEnd: width - 48 + } + + background: Rectangle { + implicitWidth: 200 + implicitHeight: 48 + color: control.Universal.background + } +} diff --git a/src/quickcontrols2/universal/TabButton.qml b/src/quickcontrols2/universal/TabButton.qml new file mode 100644 index 00000000..3709bdda --- /dev/null +++ b/src/quickcontrols2/universal/TabButton.qml @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Universal + +T.TabButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 12 // PivotItemMargin + spacing: 8 + + icon.width: 20 + icon.height: 20 + icon.color: Color.transparent(control.hovered ? control.Universal.baseMediumHighColor : control.Universal.foreground, + control.checked || control.down || control.hovered ? 1.0 : 0.2) + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: Color.transparent(control.hovered ? control.Universal.baseMediumHighColor : control.Universal.foreground, + control.checked || control.down || control.hovered ? 1.0 : 0.2) + } +} diff --git a/src/quickcontrols2/universal/TextArea.qml b/src/quickcontrols2/universal/TextArea.qml new file mode 100644 index 00000000..6fa0066b --- /dev/null +++ b/src/quickcontrols2/universal/TextArea.qml @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Universal + +T.TextArea { + id: control + + implicitWidth: Math.max(contentWidth + leftPadding + rightPadding, + implicitBackgroundWidth + leftInset + rightInset, + placeholder.implicitWidth + leftPadding + rightPadding) + implicitHeight: Math.max(contentHeight + topPadding + bottomPadding, + implicitBackgroundHeight + topInset + bottomInset, + placeholder.implicitHeight + topPadding + bottomPadding) + + // TextControlThemePadding + 2 (border) + padding: 12 + topPadding: padding - 7 + rightPadding: padding - 4 + bottomPadding: padding - 5 + + Universal.theme: activeFocus ? Universal.Light : undefined + + color: !enabled ? Universal.chromeDisabledLowColor : Universal.foreground + selectionColor: Universal.accent + selectedTextColor: Universal.chromeWhiteColor + placeholderTextColor: !enabled ? Universal.chromeDisabledLowColor : + activeFocus ? Universal.chromeBlackMediumLowColor : + Universal.baseMediumColor + + PlaceholderText { + id: placeholder + x: control.leftPadding + y: control.topPadding + width: control.width - (control.leftPadding + control.rightPadding) + height: control.height - (control.topPadding + control.bottomPadding) + + text: control.placeholderText + font: control.font + color: control.placeholderTextColor + visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) + verticalAlignment: control.verticalAlignment + elide: Text.ElideRight + renderType: control.renderType + } + + background: Rectangle { + implicitWidth: 60 // TextControlThemeMinWidth - 4 (border) + implicitHeight: 28 // TextControlThemeMinHeight - 4 (border) + + border.width: 2 // TextControlBorderThemeThickness + border.color: !control.enabled ? control.Universal.baseLowColor : + control.activeFocus ? control.Universal.accent : + control.hovered ? control.Universal.baseMediumColor : control.Universal.chromeDisabledLowColor + color: control.enabled ? control.Universal.background : control.Universal.baseLowColor + } +} diff --git a/src/quickcontrols2/universal/TextField.qml b/src/quickcontrols2/universal/TextField.qml new file mode 100644 index 00000000..903f6728 --- /dev/null +++ b/src/quickcontrols2/universal/TextField.qml @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Universal + +T.TextField { + id: control + + implicitWidth: implicitBackgroundWidth + leftInset + rightInset + || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding, + placeholder.implicitHeight + topPadding + bottomPadding) + + // TextControlThemePadding + 2 (border) + padding: 12 + topPadding: padding - 7 + rightPadding: padding - 4 + bottomPadding: padding - 5 + + Universal.theme: activeFocus ? Universal.Light : undefined + + color: !enabled ? Universal.chromeDisabledLowColor : Universal.foreground + selectionColor: Universal.accent + selectedTextColor: Universal.chromeWhiteColor + placeholderTextColor: !enabled ? Universal.chromeDisabledLowColor : + activeFocus ? Universal.chromeBlackMediumLowColor : + Universal.baseMediumColor + verticalAlignment: TextInput.AlignVCenter + + PlaceholderText { + id: placeholder + x: control.leftPadding + y: control.topPadding + width: control.width - (control.leftPadding + control.rightPadding) + height: control.height - (control.topPadding + control.bottomPadding) + + text: control.placeholderText + font: control.font + color: control.placeholderTextColor + visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter) + verticalAlignment: control.verticalAlignment + elide: Text.ElideRight + renderType: control.renderType + } + + background: Rectangle { + implicitWidth: 60 // TextControlThemeMinWidth - 4 (border) + implicitHeight: 28 // TextControlThemeMinHeight - 4 (border) + + border.width: 2 // TextControlBorderThemeThickness + border.color: !control.enabled ? control.Universal.baseLowColor : + control.activeFocus ? control.Universal.accent : + control.hovered ? control.Universal.baseMediumColor : control.Universal.chromeDisabledLowColor + color: control.enabled ? control.Universal.background : control.Universal.baseLowColor + } +} diff --git a/src/quickcontrols2/universal/ToolBar.qml b/src/quickcontrols2/universal/ToolBar.qml new file mode 100644 index 00000000..0266056f --- /dev/null +++ b/src/quickcontrols2/universal/ToolBar.qml @@ -0,0 +1,53 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.ToolBar { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + background: Rectangle { + implicitHeight: 48 // AppBarThemeCompactHeight + color: control.Universal.chromeMediumColor + } +} diff --git a/src/quickcontrols2/universal/ToolButton.qml b/src/quickcontrols2/universal/ToolButton.qml new file mode 100644 index 00000000..c305342d --- /dev/null +++ b/src/quickcontrols2/universal/ToolButton.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Universal + +T.ToolButton { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + padding: 6 + spacing: 8 + + icon.width: 20 + icon.height: 20 + icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2) + + property bool useSystemFocusVisuals: true + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) + } + + background: Rectangle { + implicitWidth: 68 + implicitHeight: 48 // AppBarThemeCompactHeight + + color: control.enabled && (control.highlighted || control.checked) ? control.Universal.accent : "transparent" + + Rectangle { + width: parent.width + height: parent.height + visible: control.down || control.hovered + color: control.down ? control.Universal.listMediumColor : control.Universal.listLowColor + } + } +} diff --git a/src/quickcontrols2/universal/ToolSeparator.qml b/src/quickcontrols2/universal/ToolSeparator.qml new file mode 100644 index 00000000..cd9be32d --- /dev/null +++ b/src/quickcontrols2/universal/ToolSeparator.qml @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.ToolSeparator { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + leftPadding: vertical ? 16 : 12 + rightPadding: vertical ? 15 : 12 + topPadding: vertical ? 12 : 16 + bottomPadding: vertical ? 12 : 15 + + contentItem: Rectangle { + implicitWidth: vertical ? 1 : 20 + implicitHeight: vertical ? 20 : 1 + color: control.Universal.baseMediumLowColor + } +} diff --git a/src/quickcontrols2/universal/ToolTip.qml b/src/quickcontrols2/universal/ToolTip.qml new file mode 100644 index 00000000..bf931a4c --- /dev/null +++ b/src/quickcontrols2/universal/ToolTip.qml @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +T.ToolTip { + id: control + + x: parent ? (parent.width - implicitWidth) / 2 : 0 + y: -implicitHeight - 16 + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + margins: 8 + padding: 8 + topPadding: padding - 3 + bottomPadding: padding - 1 + + closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent + + contentItem: Text { + text: control.text + font: control.font + wrapMode: Text.Wrap + opacity: enabled ? 1.0 : 0.2 + color: control.Universal.foreground + } + + background: Rectangle { + color: control.Universal.chromeMediumLowColor + border.color: control.Universal.chromeHighColor + border.width: 1 // ToolTipBorderThemeThickness + } +} diff --git a/src/quickcontrols2/universal/Tumbler.qml b/src/quickcontrols2/universal/Tumbler.qml new file mode 100644 index 00000000..5b9f5725 --- /dev/null +++ b/src/quickcontrols2/universal/Tumbler.qml @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal +import QtQuick.Controls.impl + +T.Tumbler { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + delegate: Text { + text: modelData + font: control.font + color: control.Universal.foreground + opacity: (1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)) * (control.enabled ? 1 : 0.6) + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + contentItem: TumblerView { + implicitWidth: 60 + implicitHeight: 200 + model: control.model + delegate: control.delegate + path: Path { + startX: control.contentItem.width / 2 + startY: -control.contentItem.delegateHeight / 2 + PathLine { + x: control.contentItem.width / 2 + y: (control.visibleItemCount + 1) * control.contentItem.delegateHeight - control.contentItem.delegateHeight / 2 + } + } + + property real delegateHeight: control.availableHeight / control.visibleItemCount + } +} diff --git a/src/quickcontrols2/universal/VerticalHeaderView.qml b/src/quickcontrols2/universal/VerticalHeaderView.qml new file mode 100644 index 00000000..7dc1efd3 --- /dev/null +++ b/src/quickcontrols2/universal/VerticalHeaderView.qml @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T +import QtQuick.Controls.Universal +import QtQuick.Controls.Universal.impl + +T.VerticalHeaderView { + id: control + + implicitWidth: contentWidth + implicitHeight: syncView ? syncView.height : 0 + + delegate: Rectangle { + // Qt6: add cellPadding (and font etc) as public API in headerview + readonly property real cellPadding: 8 + + implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2)) + implicitHeight: text.implicitHeight + (cellPadding * 2) + color: control.Universal.background + + Text { + id: text + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] + : model[control.textRole]) + : modelData + width: parent.width + height: parent.height + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2) + } + } +} diff --git a/src/quickcontrols2/universal/images/checkmark.png b/src/quickcontrols2/universal/images/checkmark.png new file mode 100644 index 00000000..e2aae6fe Binary files /dev/null and b/src/quickcontrols2/universal/images/checkmark.png differ diff --git a/src/quickcontrols2/universal/images/checkmark@2x.png b/src/quickcontrols2/universal/images/checkmark@2x.png new file mode 100644 index 00000000..0df4159a Binary files /dev/null and b/src/quickcontrols2/universal/images/checkmark@2x.png differ diff --git a/src/quickcontrols2/universal/images/checkmark@3x.png b/src/quickcontrols2/universal/images/checkmark@3x.png new file mode 100644 index 00000000..43466cbc Binary files /dev/null and b/src/quickcontrols2/universal/images/checkmark@3x.png differ diff --git a/src/quickcontrols2/universal/images/checkmark@4x.png b/src/quickcontrols2/universal/images/checkmark@4x.png new file mode 100644 index 00000000..7a47bd21 Binary files /dev/null and b/src/quickcontrols2/universal/images/checkmark@4x.png differ diff --git a/src/quickcontrols2/universal/images/downarrow.png b/src/quickcontrols2/universal/images/downarrow.png new file mode 100644 index 00000000..b66e2efc Binary files /dev/null and b/src/quickcontrols2/universal/images/downarrow.png differ diff --git a/src/quickcontrols2/universal/images/downarrow@2x.png b/src/quickcontrols2/universal/images/downarrow@2x.png new file mode 100644 index 00000000..a704376c Binary files /dev/null and b/src/quickcontrols2/universal/images/downarrow@2x.png differ diff --git a/src/quickcontrols2/universal/images/downarrow@3x.png b/src/quickcontrols2/universal/images/downarrow@3x.png new file mode 100644 index 00000000..3b6d55ab Binary files /dev/null and b/src/quickcontrols2/universal/images/downarrow@3x.png differ diff --git a/src/quickcontrols2/universal/images/downarrow@4x.png b/src/quickcontrols2/universal/images/downarrow@4x.png new file mode 100644 index 00000000..818c6b24 Binary files /dev/null and b/src/quickcontrols2/universal/images/downarrow@4x.png differ diff --git a/src/quickcontrols2/universal/images/leftarrow.png b/src/quickcontrols2/universal/images/leftarrow.png new file mode 100644 index 00000000..0153ccd4 Binary files /dev/null and b/src/quickcontrols2/universal/images/leftarrow.png differ diff --git a/src/quickcontrols2/universal/images/leftarrow@2x.png b/src/quickcontrols2/universal/images/leftarrow@2x.png new file mode 100644 index 00000000..fa692d5b Binary files /dev/null and b/src/quickcontrols2/universal/images/leftarrow@2x.png differ diff --git a/src/quickcontrols2/universal/images/leftarrow@3x.png b/src/quickcontrols2/universal/images/leftarrow@3x.png new file mode 100644 index 00000000..06b0207a Binary files /dev/null and b/src/quickcontrols2/universal/images/leftarrow@3x.png differ diff --git a/src/quickcontrols2/universal/images/leftarrow@4x.png b/src/quickcontrols2/universal/images/leftarrow@4x.png new file mode 100644 index 00000000..1049f616 Binary files /dev/null and b/src/quickcontrols2/universal/images/leftarrow@4x.png differ diff --git a/src/quickcontrols2/universal/images/rightarrow.png b/src/quickcontrols2/universal/images/rightarrow.png new file mode 100644 index 00000000..b24d117d Binary files /dev/null and b/src/quickcontrols2/universal/images/rightarrow.png differ diff --git a/src/quickcontrols2/universal/images/rightarrow@2x.png b/src/quickcontrols2/universal/images/rightarrow@2x.png new file mode 100644 index 00000000..80aca7c1 Binary files /dev/null and b/src/quickcontrols2/universal/images/rightarrow@2x.png differ diff --git a/src/quickcontrols2/universal/images/rightarrow@3x.png b/src/quickcontrols2/universal/images/rightarrow@3x.png new file mode 100644 index 00000000..ba017240 Binary files /dev/null and b/src/quickcontrols2/universal/images/rightarrow@3x.png differ diff --git a/src/quickcontrols2/universal/images/rightarrow@4x.png b/src/quickcontrols2/universal/images/rightarrow@4x.png new file mode 100644 index 00000000..21f7ed4d Binary files /dev/null and b/src/quickcontrols2/universal/images/rightarrow@4x.png differ diff --git a/src/quickcontrols2/universal/impl/CMakeLists.txt b/src/quickcontrols2/universal/impl/CMakeLists.txt new file mode 100644 index 00000000..b2bdffd2 --- /dev/null +++ b/src/quickcontrols2/universal/impl/CMakeLists.txt @@ -0,0 +1,41 @@ +##################################################################### +## qtquickcontrols2universalstyleimplplugin Plugin: +##################################################################### + +set(qml_files + "CheckIndicator.qml" + "RadioIndicator.qml" + "SwitchIndicator.qml" +) +set_source_files_properties(${qml_files} PROPERTIES + QT_QML_SOURCE_VERSION "2.0" +) + +qt_internal_add_qml_module(qtquickcontrols2universalstyleimplplugin + URI "QtQuick.Controls.Universal.impl" + VERSION "${PROJECT_VERSION}" + CLASS_NAME QtQuickControls2UniversalStyleImplPlugin + PLUGIN_TARGET qtquickcontrols2universalstyleimplplugin + NO_PLUGIN_OPTIONAL + SOURCES + qquickuniversalbusyindicator.cpp qquickuniversalbusyindicator_p.h + qquickuniversalfocusrectangle.cpp qquickuniversalfocusrectangle_p.h + qquickuniversalprogressbar.cpp qquickuniversalprogressbar_p.h + QML_FILES + ${qml_files} + DEFINES + QT_NO_CAST_FROM_ASCII + QT_NO_CAST_TO_ASCII + LIBRARIES + Qt::CorePrivate + Qt::Gui + Qt::QmlPrivate + Qt::QuickControls2ImplPrivate + Qt::QuickPrivate + Qt::QuickTemplates2Private + PUBLIC_LIBRARIES + Qt::Core + Qt::Gui + Qt::Qml + Qt::Quick +) diff --git a/src/quickcontrols2/universal/impl/CheckIndicator.qml b/src/quickcontrols2/universal/impl/CheckIndicator.qml new file mode 100644 index 00000000..e4cd5409 --- /dev/null +++ b/src/quickcontrols2/universal/impl/CheckIndicator.qml @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.impl +import QtQuick.Controls.Universal + +Rectangle { + id: indicator + implicitWidth: 20 + implicitHeight: 20 + + color: !control.enabled ? "transparent" : + control.down && !partiallyChecked ? control.Universal.baseMediumColor : + control.checkState === Qt.Checked ? control.Universal.accent : "transparent" + border.color: !control.enabled ? control.Universal.baseLowColor : + control.down ? control.Universal.baseMediumColor : + control.checked ? control.Universal.accent : control.Universal.baseMediumHighColor + border.width: 2 // CheckBoxBorderThemeThickness + + property Item control + readonly property bool partiallyChecked: control.checkState === Qt.PartiallyChecked + + ColorImage { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + + visible: indicator.control.checkState === Qt.Checked + color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor : indicator.control.Universal.chromeWhiteColor + source: "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/checkmark.png" + } + + Rectangle { + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: indicator.partiallyChecked ? parent.width / 2 : parent.width + height: indicator.partiallyChecked ? parent.height / 2 : parent.height + + visible: !indicator.control.pressed && indicator.control.hovered || indicator.partiallyChecked + color: !indicator.partiallyChecked ? "transparent" : + !indicator.control.enabled ? indicator.control.Universal.baseLowColor : + indicator.control.down ? indicator.control.Universal.baseMediumColor : + indicator.control.hovered ? indicator.control.Universal.baseHighColor : indicator.control.Universal.baseMediumHighColor + border.width: indicator.partiallyChecked ? 0 : 2 // CheckBoxBorderThemeThickness + border.color: indicator.control.Universal.baseMediumLowColor + } +} diff --git a/src/quickcontrols2/universal/impl/RadioIndicator.qml b/src/quickcontrols2/universal/impl/RadioIndicator.qml new file mode 100644 index 00000000..3cf1bf37 --- /dev/null +++ b/src/quickcontrols2/universal/impl/RadioIndicator.qml @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.Universal + +Rectangle { + id: indicator + implicitWidth: 20 + implicitHeight: 20 + radius: width / 2 + color: "transparent" + border.width: 2 // RadioButtonBorderThemeThickness + border.color: control.checked ? "transparent" : + !control.enabled ? control.Universal.baseLowColor : + control.down ? control.Universal.baseMediumColor : + control.hovered ? control.Universal.baseHighColor : control.Universal.baseMediumHighColor + + property var control + + Rectangle { + id: checkOuterEllipse + width: parent.width + height: parent.height + + radius: width / 2 + opacity: indicator.control.checked ? 1 : 0 + color: "transparent" + border.width: 2 // RadioButtonBorderThemeThickness + border.color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor : + indicator.control.down ? indicator.control.Universal.baseMediumColor : indicator.control.Universal.accent + } + + Rectangle { + id: checkGlyph + x: (parent.width - width) / 2 + y: (parent.height - height) / 2 + width: parent.width / 2 + height: parent.height / 2 + + radius: width / 2 + opacity: indicator.control.checked ? 1 : 0 + color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor : + indicator.control.down ? indicator.control.Universal.baseMediumColor : + indicator.control.hovered ? indicator.control.Universal.baseHighColor : indicator.control.Universal.baseMediumHighColor + } +} diff --git a/src/quickcontrols2/universal/impl/SwitchIndicator.qml b/src/quickcontrols2/universal/impl/SwitchIndicator.qml new file mode 100644 index 00000000..aa455419 --- /dev/null +++ b/src/quickcontrols2/universal/impl/SwitchIndicator.qml @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls.Universal + +Item { + id: indicator + implicitWidth: 44 + implicitHeight: 20 + + Rectangle { + width: parent.width + height: parent.height + + radius: 10 + color: !indicator.control.enabled ? "transparent" : + indicator.control.pressed ? indicator.control.Universal.baseMediumColor : + indicator.control.checked ? indicator.control.Universal.accent : "transparent" + border.color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor : + indicator.control.checked && !indicator.control.pressed ? indicator.control.Universal.accent : + indicator.control.hovered && !indicator.control.checked && !indicator.control.pressed ? indicator.control.Universal.baseHighColor : indicator.control.Universal.baseMediumColor + opacity: indicator.control.hovered && indicator.control.checked && !indicator.control.pressed ? (indicator.control.Universal.theme === Universal.Light ? 0.7 : 0.9) : 1.0 + border.width: 2 + } + + property Item control + + Rectangle { + width: 10 + height: 10 + radius: 5 + + color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor : + indicator.control.pressed || indicator.control.checked ? indicator.control.Universal.chromeWhiteColor : + indicator.control.hovered && !indicator.control.checked ? indicator.control.Universal.baseHighColor : indicator.control.Universal.baseMediumHighColor + + x: Math.max(5, Math.min(parent.width - width - 5, + indicator.control.visualPosition * parent.width - (width / 2))) + y: (parent.height - height) / 2 + + Behavior on x { + enabled: !indicator.control.pressed + SmoothedAnimation { velocity: 200 } + } + } +} diff --git a/src/quickcontrols2/universal/impl/qquickuniversalbusyindicator.cpp b/src/quickcontrols2/universal/impl/qquickuniversalbusyindicator.cpp new file mode 100644 index 00000000..2f0ada49 --- /dev/null +++ b/src/quickcontrols2/universal/impl/qquickuniversalbusyindicator.cpp @@ -0,0 +1,251 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickuniversalbusyindicator_p.h" + +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +static const int PhaseCount = 6; +static const int Interval = 167; +static const int TotalDuration = 4052; + +class QQuickUniversalBusyIndicatorNode : public QQuickAnimatedNode +{ +public: + QQuickUniversalBusyIndicatorNode(QQuickUniversalBusyIndicator *item); + + void updateCurrentTime(int time) override; + void sync(QQuickItem *item) override; + +private: + struct Phase { + Phase() = default; + Phase(int d, qreal f, qreal t, QEasingCurve::Type c) : duration(d), from(f), to(t), curve(c) { } + int duration = 0; + qreal from = 0; + qreal to = 0; + QEasingCurve curve = QEasingCurve::Linear; + }; + + Phase m_phases[PhaseCount]; +}; + +QQuickUniversalBusyIndicatorNode::QQuickUniversalBusyIndicatorNode(QQuickUniversalBusyIndicator *item) + : QQuickAnimatedNode(item) +{ + setLoopCount(Infinite); + setDuration(TotalDuration); + setCurrentTime(item->elapsed()); + + m_phases[0] = Phase(433, -110, 10, QEasingCurve::BezierSpline); + m_phases[1] = Phase(767, 10, 93, QEasingCurve::Linear ); + m_phases[2] = Phase(417, 93, 205, QEasingCurve::BezierSpline); + m_phases[3] = Phase(400, 205, 357, QEasingCurve::BezierSpline); + m_phases[4] = Phase(766, 357, 439, QEasingCurve::Linear ); + m_phases[5] = Phase(434, 439, 585, QEasingCurve::BezierSpline); + + m_phases[0].curve.addCubicBezierSegment(QPointF(0.02, 0.33), QPointF(0.38, 0.77), QPointF(1.00, 1.00)); + m_phases[2].curve.addCubicBezierSegment(QPointF(0.57, 0.17), QPointF(0.95, 0.75), QPointF(1.00, 1.00)); + m_phases[3].curve.addCubicBezierSegment(QPointF(0.00, 0.19), QPointF(0.07, 0.72), QPointF(1.00, 1.00)); + m_phases[5].curve.addCubicBezierSegment(QPointF(0.00, 0.00), QPointF(0.95, 0.37), QPointF(1.00, 1.00)); +} + +void QQuickUniversalBusyIndicatorNode::updateCurrentTime(int time) +{ + int nodeIndex = 0; + int count = childCount(); + QSGTransformNode *transformNode = static_cast(firstChild()); + while (transformNode) { + Q_ASSERT(transformNode->type() == QSGNode::TransformNodeType); + + QSGOpacityNode *opacityNode = static_cast(transformNode->firstChild()); + Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType); + + int begin = nodeIndex * Interval; + int end = TotalDuration - (PhaseCount - nodeIndex - 1) * Interval; + + bool visible = time >= begin && time <= end; + opacityNode->setOpacity(visible ? 1.0 : 0.0); + + if (visible) { + int phaseIndex, remain = time, elapsed = 0; + for (phaseIndex = 0; phaseIndex < PhaseCount - 1; ++phaseIndex) { + if (remain <= m_phases[phaseIndex].duration + begin) + break; + remain -= m_phases[phaseIndex].duration; + elapsed += m_phases[phaseIndex].duration; + } + + const Phase &phase = m_phases[phaseIndex]; + + qreal from = phase.from - nodeIndex * count; + qreal to = phase.to - nodeIndex * count; + qreal pos = time - elapsed - begin; + + qreal value = phase.curve.valueForProgress(pos / phase.duration); + qreal rotation = from + (to - from) * value; + + QMatrix4x4 matrix; + matrix.rotate(rotation, 0, 0, 1); + transformNode->setMatrix(matrix); + } + + transformNode = static_cast(transformNode->nextSibling()); + ++nodeIndex; + } +} + +void QQuickUniversalBusyIndicatorNode::sync(QQuickItem *item) +{ + QQuickUniversalBusyIndicator *indicator = static_cast(item); + QQuickItemPrivate *d = QQuickItemPrivate::get(item); + + QMatrix4x4 matrix; + matrix.translate(item->width() / 2, item->height() / 2); + setMatrix(matrix); + + qreal size = qMin(item->width(), item->height()); + qreal diameter = size / 10.0; + qreal radius = diameter / 2; + qreal offset = (size - diameter * 2) / M_PI; + const QRectF rect(offset, offset, diameter, diameter); + + int count = indicator->count(); + QSGNode *transformNode = firstChild(); + for (int i = 0; i < count; ++i) { + if (!transformNode) { + transformNode = new QSGTransformNode; + appendChildNode(transformNode); + + QSGOpacityNode *opacityNode = new QSGOpacityNode; + transformNode->appendChildNode(opacityNode); + + QSGInternalRectangleNode *rectNode = d->sceneGraphContext()->createInternalRectangleNode(); + rectNode->setAntialiasing(true); + opacityNode->appendChildNode(rectNode); + } + + QSGNode *opacityNode = transformNode->firstChild(); + Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType); + + QSGInternalRectangleNode *rectNode = static_cast(opacityNode->firstChild()); + Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType); + + rectNode->setRect(rect); + rectNode->setColor(indicator->color()); + rectNode->setRadius(radius); + rectNode->update(); + + transformNode = transformNode->nextSibling(); + } + + while (transformNode) { + QSGNode *nextSibling = transformNode->nextSibling(); + delete transformNode; + transformNode = nextSibling; + } +} + +QQuickUniversalBusyIndicator::QQuickUniversalBusyIndicator(QQuickItem *parent) + : QQuickItem(parent) +{ + setFlag(ItemHasContents); +} + +int QQuickUniversalBusyIndicator::count() const +{ + return m_count; +} + +void QQuickUniversalBusyIndicator::setCount(int count) +{ + if (m_count == count) + return; + + m_count = count; + update(); +} + +QColor QQuickUniversalBusyIndicator::color() const +{ + return m_color; +} + +void QQuickUniversalBusyIndicator::setColor(const QColor &color) +{ + if (m_color == color) + return; + + m_color = color; + update(); +} + +int QQuickUniversalBusyIndicator::elapsed() const +{ + return m_elapsed; +} + +void QQuickUniversalBusyIndicator::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data) +{ + QQuickItem::itemChange(change, data); + if (change == ItemVisibleHasChanged) + update(); +} + +QSGNode *QQuickUniversalBusyIndicator::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) +{ + QQuickUniversalBusyIndicatorNode *node = static_cast(oldNode); + if (isVisible() && width() > 0 && height() > 0) { + if (!node) { + node = new QQuickUniversalBusyIndicatorNode(this); + node->start(); + } + node->sync(this); + } else { + m_elapsed = node ? node->currentTime() : 0; + delete node; + node = nullptr; + } + return node; +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols2/universal/impl/qquickuniversalbusyindicator_p.h b/src/quickcontrols2/universal/impl/qquickuniversalbusyindicator_p.h new file mode 100644 index 00000000..6d3ebb84 --- /dev/null +++ b/src/quickcontrols2/universal/impl/qquickuniversalbusyindicator_p.h @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKUNIVERSALBUSYINDICATOR_P_H +#define QQUICKUNIVERSALBUSYINDICATOR_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include + +QT_BEGIN_NAMESPACE + +class QQuickUniversalBusyIndicator : public QQuickItem +{ + Q_OBJECT + Q_PROPERTY(int count READ count WRITE setCount FINAL) + Q_PROPERTY(QColor color READ color WRITE setColor FINAL) + QML_NAMED_ELEMENT(BusyIndicatorImpl) + QML_ADDED_IN_VERSION(2, 0) + +public: + explicit QQuickUniversalBusyIndicator(QQuickItem *parent = nullptr); + + int count() const; + void setCount(int count); + + QColor color() const; + void setColor(const QColor &color); + + int elapsed() const; + +protected: + void itemChange(ItemChange change, const ItemChangeData &data) override; + QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override; + +private: + int m_count = 5; + int m_elapsed = 0; + QColor m_color = Qt::black; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickUniversalBusyIndicator) + +#endif // QQUICKUNIVERSALBUSYINDICATOR_P_H diff --git a/src/quickcontrols2/universal/impl/qquickuniversalfocusrectangle.cpp b/src/quickcontrols2/universal/impl/qquickuniversalfocusrectangle.cpp new file mode 100644 index 00000000..51508c6f --- /dev/null +++ b/src/quickcontrols2/universal/impl/qquickuniversalfocusrectangle.cpp @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickuniversalfocusrectangle_p.h" + +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +QQuickUniversalFocusRectangle::QQuickUniversalFocusRectangle(QQuickItem *parent) + : QQuickPaintedItem(parent) +{ + QQuickItemPrivate::get(this)->setTransparentForPositioner(true); +} + +void QQuickUniversalFocusRectangle::paint(QPainter *painter) +{ + if (!isVisible() || width() <= 0 || height() <= 0) + return; + + QRect bounds = boundingRect().toAlignedRect(); + const int boundsWidth = bounds.width(); + const int boundsHeight = bounds.width(); + const QString key = QStringLiteral("qquickuniversalfocusrectangle_%1_%2").arg(QString::number(boundsWidth), QString::number(boundsHeight)); + + QPixmap pixmap(boundsWidth, boundsHeight); + if (!QPixmapCache::find(key, &pixmap)) { + bounds.adjust(0, 0, -1, -1); + pixmap.fill(Qt::transparent); + QPainter p(&pixmap); + + QPen pen; + pen.setWidth(1); + pen.setColor(Qt::white); + p.setPen(pen); + p.drawRect(bounds); + + pen.setColor(Qt::black); + pen.setDashPattern(QList(2, 1)); + p.setPen(pen); + p.drawRect(bounds); + + QPixmapCache::insert(key, pixmap); + } + painter->drawPixmap(0, 0, pixmap); +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols2/universal/impl/qquickuniversalfocusrectangle_p.h b/src/quickcontrols2/universal/impl/qquickuniversalfocusrectangle_p.h new file mode 100644 index 00000000..f309b512 --- /dev/null +++ b/src/quickcontrols2/universal/impl/qquickuniversalfocusrectangle_p.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKUNIVERSALFOCUSRECTANGLE_P_H +#define QQUICKUNIVERSALFOCUSRECTANGLE_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include + +QT_BEGIN_NAMESPACE + +class QQuickUniversalFocusRectangle : public QQuickPaintedItem +{ + Q_OBJECT + QML_NAMED_ELEMENT(FocusRectangle) + QML_ADDED_IN_VERSION(2, 0) + +public: + QQuickUniversalFocusRectangle(QQuickItem *parent = nullptr); + + void paint(QPainter *painter) override; +}; + +QT_END_NAMESPACE + +#endif // QQUICKUNIVERSALFOCUSRECTANGLE_P_H diff --git a/src/quickcontrols2/universal/impl/qquickuniversalprogressbar.cpp b/src/quickcontrols2/universal/impl/qquickuniversalprogressbar.cpp new file mode 100644 index 00000000..8f907b75 --- /dev/null +++ b/src/quickcontrols2/universal/impl/qquickuniversalprogressbar.cpp @@ -0,0 +1,338 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickuniversalprogressbar_p.h" + +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +static const int PhaseCount = 4; +static const int EllipseCount = 5; +static const int Interval = 167; +static const int TotalDuration = 3917; +static const int VisibleDuration = 3000; +static const qreal EllipseDiameter = 4; +static const qreal EllipseOffset = 4; +static const qreal ContainerAnimationStartPosition = -34; // absolute +static const qreal ContainerAnimationEndPosition = 0.435222; // relative +static const qreal EllipseAnimationWellPosition = 0.333333333333333; // relative +static const qreal EllipseAnimationEndPosition = 0.666666666666667; // relative + +class QQuickUniversalProgressBarNode : public QQuickAnimatedNode +{ +public: + QQuickUniversalProgressBarNode(QQuickUniversalProgressBar *item); + + void updateCurrentTime(int time) override; + void sync(QQuickItem *item) override; + +private: + struct Phase { + Phase() = default; + Phase(int d, qreal f, qreal t) : duration(d), from(f), to(t) { } + int duration = 0; + qreal from = 0; + qreal to = 0; + }; + + bool m_indeterminate = false; + Phase m_borderPhases[PhaseCount]; + Phase m_ellipsePhases[PhaseCount]; +}; + +QQuickUniversalProgressBarNode::QQuickUniversalProgressBarNode(QQuickUniversalProgressBar *item) + : QQuickAnimatedNode(item) +{ + setLoopCount(Infinite); + setDuration(TotalDuration); + + m_borderPhases[0] = Phase( 500, -50, 0); + m_borderPhases[1] = Phase(1500, 0, 0); + m_borderPhases[2] = Phase(1000, 0, 100); + m_borderPhases[3] = Phase( 917, 100, 100); + + m_ellipsePhases[0] = Phase(1000, 0, EllipseAnimationWellPosition); + m_ellipsePhases[1] = Phase(1000, EllipseAnimationWellPosition, EllipseAnimationWellPosition); + m_ellipsePhases[2] = Phase(1000, EllipseAnimationWellPosition, EllipseAnimationEndPosition); + m_ellipsePhases[3] = Phase(1000, EllipseAnimationWellPosition, EllipseAnimationEndPosition); +} + +void QQuickUniversalProgressBarNode::updateCurrentTime(int time) +{ + QSGRectangleNode *geometryNode = static_cast(firstChild()); + Q_ASSERT(!geometryNode || geometryNode->type() == QSGNode::GeometryNodeType); + if (!geometryNode) + return; + + QSGTransformNode *gridNode = static_cast(geometryNode->firstChild()); + Q_ASSERT(!gridNode || gridNode->type() == QSGNode::TransformNodeType); + if (!gridNode) + return; + + qreal width = geometryNode->rect().width(); + { + qreal from = ContainerAnimationStartPosition; + qreal to = from + ContainerAnimationEndPosition * width; + qreal progress = static_cast(time) / TotalDuration; + qreal dx = from + (to - from) * progress; + + QMatrix4x4 matrix; + matrix.translate(dx, 0); + gridNode->setMatrix(matrix); + } + + int nodeIndex = 0; + QSGTransformNode *borderNode = static_cast(gridNode->firstChild()); + while (borderNode) { + Q_ASSERT(borderNode->type() == QSGNode::TransformNodeType); + + QSGTransformNode *ellipseNode = static_cast(borderNode->firstChild()); + Q_ASSERT(ellipseNode->type() == QSGNode::TransformNodeType); + + QSGOpacityNode *opacityNode = static_cast(ellipseNode->firstChild()); + Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType); + + int begin = nodeIndex * Interval; + int end = VisibleDuration + nodeIndex * Interval; + + bool visible = time >= begin && time <= end; + opacityNode->setOpacity(visible ? 1.0 : 0.0); + + if (visible) { + { + int phaseIndex, remain = time, elapsed = 0; + for (phaseIndex = 0; phaseIndex < PhaseCount - 1; ++phaseIndex) { + if (remain <= m_borderPhases[phaseIndex].duration + begin) + break; + remain -= m_borderPhases[phaseIndex].duration; + elapsed += m_borderPhases[phaseIndex].duration; + } + + const Phase &phase = m_borderPhases[phaseIndex]; + + qreal pos = time - elapsed - begin; + qreal progress = pos / phase.duration; + qreal dx = phase.from + (phase.to - phase.from) * progress; + + QMatrix4x4 matrix; + matrix.translate(dx, 0); + borderNode->setMatrix(matrix); + } + + { + QEasingCurve curve(QEasingCurve::BezierSpline); + curve.addCubicBezierSegment(QPointF(0.4, 0.0), QPointF(0.6, 1.0), QPointF(1.0, 1.0)); + + int phaseIndex, remain = time, elapsed = 0; + for (phaseIndex = 0; phaseIndex < PhaseCount - 1; ++phaseIndex) { + if (remain <= m_ellipsePhases[phaseIndex].duration + begin) + break; + remain -= m_ellipsePhases[phaseIndex].duration; + elapsed += m_ellipsePhases[phaseIndex].duration; + } + + const Phase &phase = m_ellipsePhases[phaseIndex]; + + qreal from = phase.from * width; + qreal to = phase.to * width; + qreal pos = time - elapsed - begin; + qreal progress = curve.valueForProgress(pos / phase.duration); + qreal dx = from + (to - from) * progress; + + QMatrix4x4 matrix; + matrix.translate(dx, 0); + ellipseNode->setMatrix(matrix); + } + } + + borderNode = static_cast(borderNode->nextSibling()); + ++nodeIndex; + } +} + +void QQuickUniversalProgressBarNode::sync(QQuickItem *item) +{ + QQuickUniversalProgressBar *bar = static_cast(item); + if (m_indeterminate != bar->isIndeterminate()) { + m_indeterminate = bar->isIndeterminate(); + if (m_indeterminate) + start(); + else + stop(); + } + + QQuickItemPrivate *d = QQuickItemPrivate::get(item); + + QRectF bounds = item->boundingRect(); + bounds.setHeight(item->implicitHeight()); + bounds.moveTop((item->height() - bounds.height()) / 2.0); + if (!m_indeterminate) + bounds.setWidth(bar->progress() * bounds.width()); + + QSGRectangleNode *geometryNode = static_cast(firstChild()); + if (!geometryNode) { + geometryNode = item->window()->createRectangleNode(); + appendChildNode(geometryNode); + } + geometryNode->setRect(bounds); + geometryNode->setColor(m_indeterminate ? Qt::transparent : bar->color()); + + if (!m_indeterminate) { + while (QSGNode *node = geometryNode->firstChild()) + delete node; + return; + } + + QSGTransformNode *gridNode = static_cast(geometryNode->firstChild()); + if (!gridNode) { + gridNode = new QSGTransformNode; + geometryNode->appendChildNode(gridNode); + } + Q_ASSERT(gridNode->type() == QSGNode::TransformNodeType); + + QSGNode *borderNode = gridNode->firstChild(); + for (int i = 0; i < EllipseCount; ++i) { + if (!borderNode) { + borderNode = new QSGTransformNode; + gridNode->appendChildNode(borderNode); + + QSGTransformNode *ellipseNode = new QSGTransformNode; + borderNode->appendChildNode(ellipseNode); + + QSGOpacityNode *opacityNode = new QSGOpacityNode; + ellipseNode->appendChildNode(opacityNode); + + QSGInternalRectangleNode *rectNode = d->sceneGraphContext()->createInternalRectangleNode(); + rectNode->setAntialiasing(true); + rectNode->setRadius(EllipseDiameter / 2); + opacityNode->appendChildNode(rectNode); + } + Q_ASSERT(borderNode->type() == QSGNode::TransformNodeType); + + QSGNode *ellipseNode = borderNode->firstChild(); + Q_ASSERT(ellipseNode->type() == QSGNode::TransformNodeType); + + QSGNode *opacityNode = ellipseNode->firstChild(); + Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType); + + QSGInternalRectangleNode *rectNode = static_cast(opacityNode->firstChild()); + Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType); + + rectNode->setRect(QRectF((EllipseCount - i - 1) * (EllipseDiameter + EllipseOffset), (item->height() - EllipseDiameter) / 2, EllipseDiameter, EllipseDiameter)); + rectNode->setColor(bar->color()); + rectNode->update(); + + borderNode = borderNode->nextSibling(); + } +} + +QQuickUniversalProgressBar::QQuickUniversalProgressBar(QQuickItem *parent) + : QQuickItem(parent) +{ + setFlag(ItemHasContents); +} + +QColor QQuickUniversalProgressBar::color() const +{ + return m_color; +} + +void QQuickUniversalProgressBar::setColor(const QColor &color) +{ + if (m_color == color) + return; + + m_color = color; + update(); +} + +qreal QQuickUniversalProgressBar::progress() const +{ + return m_progress; +} + +void QQuickUniversalProgressBar::setProgress(qreal progress) +{ + if (progress == m_progress) + return; + + m_progress = progress; + update(); +} + +bool QQuickUniversalProgressBar::isIndeterminate() const +{ + return m_indeterminate; +} + +void QQuickUniversalProgressBar::setIndeterminate(bool indeterminate) +{ + if (indeterminate == m_indeterminate) + return; + + m_indeterminate = indeterminate; + setClip(m_indeterminate); + update(); +} + +void QQuickUniversalProgressBar::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data) +{ + QQuickItem::itemChange(change, data); + if (change == ItemVisibleHasChanged) + update(); +} + +QSGNode *QQuickUniversalProgressBar::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *) +{ + QQuickUniversalProgressBarNode *node = static_cast(oldNode); + if (isVisible() && width() > 0 && height() > 0) { + if (!node) + node = new QQuickUniversalProgressBarNode(this); + node->sync(this); + } else { + delete node; + node = nullptr; + } + return node; +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols2/universal/impl/qquickuniversalprogressbar_p.h b/src/quickcontrols2/universal/impl/qquickuniversalprogressbar_p.h new file mode 100644 index 00000000..31cb4a32 --- /dev/null +++ b/src/quickcontrols2/universal/impl/qquickuniversalprogressbar_p.h @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKUNIVERSALPROGRESSBAR_P_H +#define QQUICKUNIVERSALPROGRESSBAR_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include + +QT_BEGIN_NAMESPACE + +class QQuickUniversalProgressBar : public QQuickItem +{ + Q_OBJECT + Q_PROPERTY(QColor color READ color WRITE setColor FINAL) + Q_PROPERTY(qreal progress READ progress WRITE setProgress FINAL) + Q_PROPERTY(bool indeterminate READ isIndeterminate WRITE setIndeterminate FINAL) + QML_NAMED_ELEMENT(ProgressBarImpl) + QML_ADDED_IN_VERSION(2, 0) + +public: + explicit QQuickUniversalProgressBar(QQuickItem *parent = nullptr); + + QColor color() const; + void setColor(const QColor &color); + + qreal progress() const; + void setProgress(qreal progress); + + bool isIndeterminate() const; + void setIndeterminate(bool indeterminate); + +protected: + void itemChange(ItemChange change, const ItemChangeData &data) override; + QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override; + +private: + QColor m_color = Qt::black; + qreal m_progress = 0.0; + bool m_indeterminate = false; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickUniversalProgressBar) + +#endif // QQUICKUNIVERSALPROGRESSBAR_P_H diff --git a/src/quickcontrols2/universal/qquickuniversalstyle.cpp b/src/quickcontrols2/universal/qquickuniversalstyle.cpp new file mode 100644 index 00000000..605cfce2 --- /dev/null +++ b/src/quickcontrols2/universal/qquickuniversalstyle.cpp @@ -0,0 +1,618 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickuniversalstyle_p.h" + +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +static QRgb qquickuniversal_light_color(QQuickUniversalStyle::SystemColor role) +{ + static const QRgb colors[] = { + 0xFFFFFFFF, // SystemAltHighColor + 0x33FFFFFF, // SystemAltLowColor + 0x99FFFFFF, // SystemAltMediumColor + 0xCCFFFFFF, // SystemAltMediumHighColor + 0x66FFFFFF, // SystemAltMediumLowColor + 0xFF000000, // SystemBaseHighColor + 0x33000000, // SystemBaseLowColor + 0x99000000, // SystemBaseMediumColor + 0xCC000000, // SystemBaseMediumHighColor + 0x66000000, // SystemBaseMediumLowColor + 0xFF171717, // SystemChromeAltLowColor + 0xFF000000, // SystemChromeBlackHighColor + 0x33000000, // SystemChromeBlackLowColor + 0x66000000, // SystemChromeBlackMediumLowColor + 0xCC000000, // SystemChromeBlackMediumColor + 0xFFCCCCCC, // SystemChromeDisabledHighColor + 0xFF7A7A7A, // SystemChromeDisabledLowColor + 0xFFCCCCCC, // SystemChromeHighColor + 0xFFF2F2F2, // SystemChromeLowColor + 0xFFE6E6E6, // SystemChromeMediumColor + 0xFFF2F2F2, // SystemChromeMediumLowColor + 0xFFFFFFFF, // SystemChromeWhiteColor + 0x19000000, // SystemListLowColor + 0x33000000 // SystemListMediumColor + }; + return colors[role]; +} + +static QRgb qquickuniversal_dark_color(QQuickUniversalStyle::SystemColor role) +{ + static const QRgb colors[] = { + 0xFF000000, // SystemAltHighColor + 0x33000000, // SystemAltLowColor + 0x99000000, // SystemAltMediumColor + 0xCC000000, // SystemAltMediumHighColor + 0x66000000, // SystemAltMediumLowColor + 0xFFFFFFFF, // SystemBaseHighColor + 0x33FFFFFF, // SystemBaseLowColor + 0x99FFFFFF, // SystemBaseMediumColor + 0xCCFFFFFF, // SystemBaseMediumHighColor + 0x66FFFFFF, // SystemBaseMediumLowColor + 0xFFF2F2F2, // SystemChromeAltLowColor + 0xFF000000, // SystemChromeBlackHighColor + 0x33000000, // SystemChromeBlackLowColor + 0x66000000, // SystemChromeBlackMediumLowColor + 0xCC000000, // SystemChromeBlackMediumColor + 0xFF333333, // SystemChromeDisabledHighColor + 0xFF858585, // SystemChromeDisabledLowColor + 0xFF767676, // SystemChromeHighColor + 0xFF171717, // SystemChromeLowColor + 0xFF1F1F1F, // SystemChromeMediumColor + 0xFF2B2B2B, // SystemChromeMediumLowColor + 0xFFFFFFFF, // SystemChromeWhiteColor + 0x19FFFFFF, // SystemListLowColor + 0x33FFFFFF // SystemListMediumColor + }; + return colors[role]; +} + +static QRgb qquickuniversal_accent_color(QQuickUniversalStyle::Color accent) +{ + static const QRgb colors[] = { + 0xFFA4C400, // Lime + 0xFF60A917, // Green + 0xFF008A00, // Emerald + 0xFF00ABA9, // Teal + 0xFF1BA1E2, // Cyan + 0xFF3E65FF, // Cobalt + 0xFF6A00FF, // Indigo + 0xFFAA00FF, // Violet + 0xFFF472D0, // Pink + 0xFFD80073, // Magenta + 0xFFA20025, // Crimson + 0xFFE51400, // Red + 0xFFFA6800, // Orange + 0xFFF0A30A, // Amber + 0xFFE3C800, // Yellow + 0xFF825A2C, // Brown + 0xFF6D8764, // Olive + 0xFF647687, // Steel + 0xFF76608A, // Mauve + 0xFF87794E // Taupe + }; + return colors[accent]; +} + +static QQuickUniversalStyle::Theme qquickuniversal_effective_theme(QQuickUniversalStyle::Theme theme) +{ + if (theme == QQuickUniversalStyle::System) + theme = QQuickStylePrivate::isDarkSystemTheme() ? QQuickUniversalStyle::Dark : QQuickUniversalStyle::Light; + return theme; +} + +// If no value was inherited from a parent or explicitly set, the "global" values are used. +// The initial, default values of the globals are hard-coded here, but the environment +// variables and .conf file override them if specified. +static QQuickUniversalStyle::Theme GlobalTheme = QQuickUniversalStyle::Light; +static QRgb GlobalAccent = qquickuniversal_accent_color(QQuickUniversalStyle::Cobalt); +static QRgb GlobalForeground = qquickuniversal_light_color(QQuickUniversalStyle::BaseHigh); +static QRgb GlobalBackground = qquickuniversal_light_color(QQuickUniversalStyle::AltHigh); +// These represent whether a global foreground/background was set. +// Each style's m_hasForeground/m_hasBackground are initialized to these values. +static bool HasGlobalForeground = false; +static bool HasGlobalBackground = false; + +QQuickUniversalStyle::QQuickUniversalStyle(QObject *parent) : QQuickAttachedObject(parent), + m_hasForeground(HasGlobalForeground), m_hasBackground(HasGlobalBackground), m_theme(GlobalTheme), + m_accent(GlobalAccent), m_foreground(GlobalForeground), m_background(GlobalBackground) +{ + init(); +} + +QQuickUniversalStyle *QQuickUniversalStyle::qmlAttachedProperties(QObject *object) +{ + return new QQuickUniversalStyle(object); +} + +QQuickUniversalStyle::Theme QQuickUniversalStyle::theme() const +{ + return m_theme; +} + +void QQuickUniversalStyle::setTheme(Theme theme) +{ + theme = qquickuniversal_effective_theme(theme); + m_explicitTheme = true; + if (m_theme == theme) + return; + + m_theme = theme; + propagateTheme(); + emit themeChanged(); + emit paletteChanged(); + emit foregroundChanged(); + emit backgroundChanged(); +} + +void QQuickUniversalStyle::inheritTheme(Theme theme) +{ + if (m_explicitTheme || m_theme == theme) + return; + + m_theme = theme; + propagateTheme(); + emit themeChanged(); + emit paletteChanged(); + emit foregroundChanged(); + emit backgroundChanged(); +} + +void QQuickUniversalStyle::propagateTheme() +{ + const auto styles = attachedChildren(); + for (QQuickAttachedObject *child : styles) { + QQuickUniversalStyle *universal = qobject_cast(child); + if (universal) + universal->inheritTheme(m_theme); + } +} + +void QQuickUniversalStyle::resetTheme() +{ + if (!m_explicitTheme) + return; + + m_explicitTheme = false; + QQuickUniversalStyle *universal = qobject_cast(attachedParent()); + inheritTheme(universal ? universal->theme() : GlobalTheme); +} + +QVariant QQuickUniversalStyle::accent() const +{ + return QColor::fromRgba(m_accent); +} + +void QQuickUniversalStyle::setAccent(const QVariant &var) +{ + QRgb accent = 0; + if (!variantToRgba(var, "accent", &accent)) + return; + + m_explicitAccent = true; + if (m_accent == accent) + return; + + m_accent = accent; + propagateAccent(); + emit accentChanged(); +} + +void QQuickUniversalStyle::inheritAccent(QRgb accent) +{ + if (m_explicitAccent || m_accent == accent) + return; + + m_accent = accent; + propagateAccent(); + emit accentChanged(); +} + +void QQuickUniversalStyle::propagateAccent() +{ + const auto styles = attachedChildren(); + for (QQuickAttachedObject *child : styles) { + QQuickUniversalStyle *universal = qobject_cast(child); + if (universal) + universal->inheritAccent(m_accent); + } +} + +void QQuickUniversalStyle::resetAccent() +{ + if (!m_explicitAccent) + return; + + m_explicitAccent = false; + QQuickUniversalStyle *universal = qobject_cast(attachedParent()); + inheritAccent(universal ? universal->m_accent : GlobalAccent); +} + +QVariant QQuickUniversalStyle::foreground() const +{ + if (m_hasForeground) + return QColor::fromRgba(m_foreground); + return baseHighColor(); +} + +void QQuickUniversalStyle::setForeground(const QVariant &var) +{ + QRgb foreground = 0; + if (!variantToRgba(var, "foreground", &foreground)) + return; + + m_hasForeground = true; + m_explicitForeground = true; + if (m_foreground == foreground) + return; + + m_foreground = foreground; + propagateForeground(); + emit foregroundChanged(); +} + +void QQuickUniversalStyle::inheritForeground(QRgb foreground, bool has) +{ + if (m_explicitForeground || m_foreground == foreground) + return; + + m_hasForeground = has; + m_foreground = foreground; + propagateForeground(); + emit foregroundChanged(); +} + +void QQuickUniversalStyle::propagateForeground() +{ + const auto styles = attachedChildren(); + for (QQuickAttachedObject *child : styles) { + QQuickUniversalStyle *universal = qobject_cast(child); + if (universal) + universal->inheritForeground(m_foreground, m_hasForeground); + } +} + +void QQuickUniversalStyle::resetForeground() +{ + if (!m_explicitForeground) + return; + + m_hasForeground = false; + m_explicitForeground = false; + QQuickUniversalStyle *universal = qobject_cast(attachedParent()); + inheritForeground(universal ? universal->m_foreground : GlobalForeground, universal ? universal->m_hasForeground : false); +} + +QVariant QQuickUniversalStyle::background() const +{ + if (m_hasBackground) + return QColor::fromRgba(m_background); + return altHighColor(); +} + +void QQuickUniversalStyle::setBackground(const QVariant &var) +{ + QRgb background = 0; + if (!variantToRgba(var, "background", &background)) + return; + + m_hasBackground = true; + m_explicitBackground = true; + if (m_background == background) + return; + + m_background = background; + propagateBackground(); + emit backgroundChanged(); +} + +void QQuickUniversalStyle::inheritBackground(QRgb background, bool has) +{ + if (m_explicitBackground || m_background == background) + return; + + m_hasBackground = has; + m_background = background; + propagateBackground(); + emit backgroundChanged(); +} + +void QQuickUniversalStyle::propagateBackground() +{ + const auto styles = attachedChildren(); + for (QQuickAttachedObject *child : styles) { + QQuickUniversalStyle *universal = qobject_cast(child); + if (universal) + universal->inheritBackground(m_background, m_hasBackground); + } +} + +void QQuickUniversalStyle::resetBackground() +{ + if (!m_explicitBackground) + return; + + m_hasBackground = false; + m_explicitBackground = false; + QQuickUniversalStyle *universal = qobject_cast(attachedParent()); + inheritBackground(universal ? universal->m_background : GlobalBackground, universal ? universal->m_hasBackground : false); +} + +QColor QQuickUniversalStyle::color(Color color) const +{ + return qquickuniversal_accent_color(color); +} + +QColor QQuickUniversalStyle::altHighColor() const +{ + return systemColor(AltHigh); +} + +QColor QQuickUniversalStyle::altLowColor() const +{ + return systemColor(AltLow); +} + +QColor QQuickUniversalStyle::altMediumColor() const +{ + return systemColor(AltMedium); +} + +QColor QQuickUniversalStyle::altMediumHighColor() const +{ + return systemColor(AltMediumHigh); +} + +QColor QQuickUniversalStyle::altMediumLowColor() const +{ + return systemColor(AltMediumLow); +} + +QColor QQuickUniversalStyle::baseHighColor() const +{ + return systemColor(BaseHigh); +} + +QColor QQuickUniversalStyle::baseLowColor() const +{ + return systemColor(BaseLow); +} + +QColor QQuickUniversalStyle::baseMediumColor() const +{ + return systemColor(BaseMedium); +} + +QColor QQuickUniversalStyle::baseMediumHighColor() const +{ + return systemColor(BaseMediumHigh); +} + +QColor QQuickUniversalStyle::baseMediumLowColor() const +{ + return systemColor(BaseMediumLow); +} + +QColor QQuickUniversalStyle::chromeAltLowColor() const +{ + return systemColor(ChromeAltLow); +} + +QColor QQuickUniversalStyle::chromeBlackHighColor() const +{ + return systemColor(ChromeBlackHigh); +} + +QColor QQuickUniversalStyle::chromeBlackLowColor() const +{ + return systemColor(ChromeBlackLow); +} + +QColor QQuickUniversalStyle::chromeBlackMediumLowColor() const +{ + return systemColor(ChromeBlackMediumLow); +} + +QColor QQuickUniversalStyle::chromeBlackMediumColor() const +{ + return systemColor(ChromeBlackMedium); +} + +QColor QQuickUniversalStyle::chromeDisabledHighColor() const +{ + return systemColor(ChromeDisabledHigh); +} + +QColor QQuickUniversalStyle::chromeDisabledLowColor() const +{ + return systemColor(ChromeDisabledLow); +} + +QColor QQuickUniversalStyle::chromeHighColor() const +{ + return systemColor(ChromeHigh); +} + +QColor QQuickUniversalStyle::chromeLowColor() const +{ + return systemColor(ChromeLow); +} + +QColor QQuickUniversalStyle::chromeMediumColor() const +{ + return systemColor(ChromeMedium); +} + +QColor QQuickUniversalStyle::chromeMediumLowColor() const +{ + return systemColor(ChromeMediumLow); +} + +QColor QQuickUniversalStyle::chromeWhiteColor() const +{ + return systemColor(ChromeWhite); +} + +QColor QQuickUniversalStyle::listLowColor() const +{ + return systemColor(ListLow); +} + +QColor QQuickUniversalStyle::listMediumColor() const +{ + return systemColor(ListMedium); +} + +QColor QQuickUniversalStyle::systemColor(SystemColor role) const +{ + return QColor::fromRgba(m_theme == QQuickUniversalStyle::Dark ? qquickuniversal_dark_color(role) : qquickuniversal_light_color(role)); +} + +void QQuickUniversalStyle::attachedParentChange(QQuickAttachedObject *newParent, QQuickAttachedObject *oldParent) +{ + Q_UNUSED(oldParent); + QQuickUniversalStyle *universal = qobject_cast(newParent); + if (universal) { + inheritTheme(universal->theme()); + inheritAccent(universal->m_accent); + inheritForeground(universal->m_foreground, universal->m_hasForeground); + inheritBackground(universal->m_background, universal->m_hasBackground); + } +} + +template +static Enum toEnumValue(const QByteArray &value, bool *ok) +{ + QMetaEnum enumeration = QMetaEnum::fromType(); + return static_cast(enumeration.keyToValue(value, ok)); +} + +static QByteArray resolveSetting(const QByteArray &env, const QSharedPointer &settings, const QString &name) +{ + QByteArray value = qgetenv(env); +#if QT_CONFIG(settings) + if (value.isNull() && !settings.isNull()) + value = settings->value(name).toByteArray(); +#endif + return value; +} + +void QQuickUniversalStyle::initGlobals() +{ + QSharedPointer settings = QQuickStylePrivate::settings(QStringLiteral("Universal")); + + bool ok = false; + QByteArray themeValue = resolveSetting("QT_QUICK_CONTROLS_UNIVERSAL_THEME", settings, QStringLiteral("Theme")); + Theme themeEnum = toEnumValue(themeValue, &ok); + if (ok) + GlobalTheme = qquickuniversal_effective_theme(themeEnum); + else if (!themeValue.isEmpty()) + qWarning().nospace().noquote() << "Universal: unknown theme value: " << themeValue; + + QByteArray accentValue = resolveSetting("QT_QUICK_CONTROLS_UNIVERSAL_ACCENT", settings, QStringLiteral("Accent")); + Color accentEnum = toEnumValue(accentValue, &ok); + if (ok) { + GlobalAccent = qquickuniversal_accent_color(accentEnum); + } else if (!accentValue.isEmpty()) { + QColor color(accentValue.constData()); + if (color.isValid()) + GlobalAccent = color.rgba(); + else + qWarning().nospace().noquote() << "Universal: unknown accent value: " << accentValue; + } + + QByteArray foregroundValue = resolveSetting("QT_QUICK_CONTROLS_UNIVERSAL_FOREGROUND", settings, QStringLiteral("Foreground")); + Color foregroundEnum = toEnumValue(foregroundValue, &ok); + if (ok) { + GlobalForeground = qquickuniversal_accent_color(foregroundEnum); + HasGlobalForeground = true; + } else if (!foregroundValue.isEmpty()) { + QColor color(foregroundValue.constData()); + if (color.isValid()) { + GlobalForeground = color.rgba(); + HasGlobalForeground = true; + } else { + qWarning().nospace().noquote() << "Universal: unknown foreground value: " << foregroundValue; + } + } + + QByteArray backgroundValue = resolveSetting("QT_QUICK_CONTROLS_UNIVERSAL_BACKGROUND", settings, QStringLiteral("Background")); + Color backgroundEnum = toEnumValue(backgroundValue, &ok); + if (ok) { + GlobalBackground = qquickuniversal_accent_color(backgroundEnum); + HasGlobalBackground = true; + } else if (!backgroundValue.isEmpty()) { + QColor color(backgroundValue.constData()); + if (color.isValid()) { + GlobalBackground = color.rgba(); + HasGlobalBackground = true; + } else { + qWarning().nospace().noquote() << "Universal: unknown background value: " << backgroundValue; + } + } +} + +bool QQuickUniversalStyle::variantToRgba(const QVariant &var, const char *name, QRgb *rgba) const +{ + if (var.metaType().id() == QMetaType::Int) { + int val = var.toInt(); + if (val < Lime || val > Taupe) { + qmlWarning(parent()) << "unknown Universal." << name << " value: " << val; + return false; + } + *rgba = qquickuniversal_accent_color(static_cast(val)); + } else { + int val = QMetaEnum::fromType().keyToValue(var.toByteArray()); + if (val != -1) { + *rgba = qquickuniversal_accent_color(static_cast(val)); + } else { + QColor color(var.toString()); + if (!color.isValid()) { + qmlWarning(parent()) << "unknown Universal." << name << " value: " << var.toString(); + return false; + } + *rgba = color.rgba(); + } + } + return true; +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols2/universal/qquickuniversalstyle_p.h b/src/quickcontrols2/universal/qquickuniversalstyle_p.h new file mode 100644 index 00000000..50b07071 --- /dev/null +++ b/src/quickcontrols2/universal/qquickuniversalstyle_p.h @@ -0,0 +1,246 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKUNIVERSALSTYLE_P_H +#define QQUICKUNIVERSALSTYLE_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include + +QT_BEGIN_NAMESPACE + +class QQuickUniversalStylePrivate; + +class QQuickUniversalStyle : public QQuickAttachedObject +{ + Q_OBJECT + Q_PROPERTY(Theme theme READ theme WRITE setTheme RESET resetTheme NOTIFY themeChanged FINAL) + Q_PROPERTY(QVariant accent READ accent WRITE setAccent RESET resetAccent NOTIFY accentChanged FINAL) + Q_PROPERTY(QVariant foreground READ foreground WRITE setForeground RESET resetForeground NOTIFY foregroundChanged FINAL) + Q_PROPERTY(QVariant background READ background WRITE setBackground RESET resetBackground NOTIFY backgroundChanged FINAL) + + Q_PROPERTY(QColor altHighColor READ altHighColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor altLowColor READ altLowColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor altMediumColor READ altMediumColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor altMediumHighColor READ altMediumHighColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor altMediumLowColor READ altMediumLowColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor baseHighColor READ baseHighColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor baseLowColor READ baseLowColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor baseMediumColor READ baseMediumColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor baseMediumHighColor READ baseMediumHighColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor baseMediumLowColor READ baseMediumLowColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor chromeAltLowColor READ chromeAltLowColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor chromeBlackHighColor READ chromeBlackHighColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor chromeBlackLowColor READ chromeBlackLowColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor chromeBlackMediumLowColor READ chromeBlackMediumLowColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor chromeBlackMediumColor READ chromeBlackMediumColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor chromeDisabledHighColor READ chromeDisabledHighColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor chromeDisabledLowColor READ chromeDisabledLowColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor chromeHighColor READ chromeHighColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor chromeLowColor READ chromeLowColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor chromeMediumColor READ chromeMediumColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor chromeMediumLowColor READ chromeMediumLowColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor chromeWhiteColor READ chromeWhiteColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor listLowColor READ listLowColor NOTIFY paletteChanged FINAL) + Q_PROPERTY(QColor listMediumColor READ listMediumColor NOTIFY paletteChanged FINAL) + + QML_NAMED_ELEMENT(Universal) + QML_ATTACHED(QQuickUniversalStyle) + QML_UNCREATABLE("") + QML_ADDED_IN_VERSION(2, 0) + +public: + explicit QQuickUniversalStyle(QObject *parent = nullptr); + + static QQuickUniversalStyle *qmlAttachedProperties(QObject *object); + + enum Theme { Light, Dark, System }; + Q_ENUM(Theme) + + Theme theme() const; + void setTheme(Theme theme); + void inheritTheme(Theme theme); + void propagateTheme(); + void resetTheme(); + + enum Color { + Lime, + Green, + Emerald, + Teal, + Cyan, + Cobalt, + Indigo, + Violet, + Pink, + Magenta, + Crimson, + Red, + Orange, + Amber, + Yellow, + Brown, + Olive, + Steel, + Mauve, + Taupe + }; + Q_ENUM(Color) + + QVariant accent() const; + void setAccent(const QVariant &accent); + void inheritAccent(QRgb accent); + void propagateAccent(); + void resetAccent(); + + QVariant foreground() const; + void setForeground(const QVariant &foreground); + void inheritForeground(QRgb foreground, bool has); + void propagateForeground(); + void resetForeground(); + + QVariant background() const; + void setBackground(const QVariant &background); + void inheritBackground(QRgb background, bool has); + void propagateBackground(); + void resetBackground(); + + Q_INVOKABLE QColor color(Color color) const; + + QColor altHighColor() const; + QColor altLowColor() const; + QColor altMediumColor() const; + QColor altMediumHighColor() const; + QColor altMediumLowColor() const; + QColor baseHighColor() const; + QColor baseLowColor() const; + QColor baseMediumColor() const; + QColor baseMediumHighColor() const; + QColor baseMediumLowColor() const; + QColor chromeAltLowColor() const; + QColor chromeBlackHighColor() const; + QColor chromeBlackLowColor() const; + QColor chromeBlackMediumLowColor() const; + QColor chromeBlackMediumColor() const; + QColor chromeDisabledHighColor() const; + QColor chromeDisabledLowColor() const; + QColor chromeHighColor() const; + QColor chromeLowColor() const; + QColor chromeMediumColor() const; + QColor chromeMediumLowColor() const; + QColor chromeWhiteColor() const; + QColor listLowColor() const; + QColor listMediumColor() const; + + enum SystemColor { + AltHigh, + AltLow, + AltMedium, + AltMediumHigh, + AltMediumLow, + BaseHigh, + BaseLow, + BaseMedium, + BaseMediumHigh, + BaseMediumLow, + ChromeAltLow, + ChromeBlackHigh, + ChromeBlackLow, + ChromeBlackMediumLow, + ChromeBlackMedium, + ChromeDisabledHigh, + ChromeDisabledLow, + ChromeHigh, + ChromeLow, + ChromeMedium, + ChromeMediumLow, + ChromeWhite, + ListLow, + ListMedium + }; + + QColor systemColor(SystemColor role) const; + + static void initGlobals(); + +Q_SIGNALS: + void themeChanged(); + void accentChanged(); + void foregroundChanged(); + void backgroundChanged(); + void paletteChanged(); + +protected: + void attachedParentChange(QQuickAttachedObject *newParent, QQuickAttachedObject *oldParent) override; + +private: + bool variantToRgba(const QVariant &var, const char *name, QRgb *rgba) const; + + // These reflect whether a color value was explicitly set on the specific + // item that this attached style object represents. + bool m_explicitTheme = false; + bool m_explicitAccent = false; + bool m_explicitForeground = false; + bool m_explicitBackground = false; + // These will be true when this item has an explicit or inherited foreground/background + // color, or these colors were declared globally via settings (e.g. conf or env vars). + // Some color properties of the style will return different values depending on whether + // or not these are set. + bool m_hasForeground = false; + bool m_hasBackground = false; + // The actual values for this item, whether explicit, inherited or globally set. + Theme m_theme = Light; + QRgb m_accent = Qt::blue; + QRgb m_foreground = Qt::black; + QRgb m_background = Qt::white; +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPEINFO(QQuickUniversalStyle, QML_HAS_ATTACHED_PROPERTIES) + +#endif // QQUICKUNIVERSALSTYLE_P_H diff --git a/src/quickcontrols2/universal/qquickuniversaltheme.cpp b/src/quickcontrols2/universal/qquickuniversaltheme.cpp new file mode 100644 index 00000000..46f7c52e --- /dev/null +++ b/src/quickcontrols2/universal/qquickuniversaltheme.cpp @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickuniversaltheme_p.h" + +#include +#include + +QT_BEGIN_NAMESPACE + +void QQuickUniversalTheme::initialize(QQuickTheme *theme) +{ + QFont systemFont; + QFont groupBoxTitleFont; + QFont tabButtonFont; + + const QFont font(QLatin1String("Segoe UI")); + if (QFontInfo(font).family() == QLatin1String("Segoe UI")) { + const QStringList families{font.family()}; + systemFont.setFamilies(families); + groupBoxTitleFont.setFamilies(families); + tabButtonFont.setFamilies(families); + } + + systemFont.setPixelSize(15); + theme->setFont(QQuickTheme::System, systemFont); + + groupBoxTitleFont.setPixelSize(15); + groupBoxTitleFont.setWeight(QFont::DemiBold); + theme->setFont(QQuickTheme::GroupBox, groupBoxTitleFont); + + tabButtonFont.setPixelSize(24); + tabButtonFont.setWeight(QFont::Light); + theme->setFont(QQuickTheme::TabBar, tabButtonFont); +} + +QT_END_NAMESPACE diff --git a/src/quickcontrols2/universal/qquickuniversaltheme_p.h b/src/quickcontrols2/universal/qquickuniversaltheme_p.h new file mode 100644 index 00000000..f762d0e3 --- /dev/null +++ b/src/quickcontrols2/universal/qquickuniversaltheme_p.h @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKUNIVERSALTHEME_P_H +#define QQUICKUNIVERSALTHEME_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include + +QT_BEGIN_NAMESPACE + +class QQuickTheme; + +class QQuickUniversalTheme +{ +public: + static void initialize(QQuickTheme *theme); +}; + +QT_END_NAMESPACE + +#endif // QQUICKUNIVERSALTHEME_P_H diff --git a/src/quickcontrols2/universal/qtquickcontrols2universalstyleplugin.cpp b/src/quickcontrols2/universal/qtquickcontrols2universalstyleplugin.cpp new file mode 100644 index 00000000..e3bbc00a --- /dev/null +++ b/src/quickcontrols2/universal/qtquickcontrols2universalstyleplugin.cpp @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickuniversalstyle_p.h" +#include "qquickuniversaltheme_p.h" + +#include +#include + +extern void qml_register_types_QtQuick_Controls_Universal(); + +QT_BEGIN_NAMESPACE + +class QtQuickControls2UniversalStylePlugin : public QQuickStylePlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) + +public: + QtQuickControls2UniversalStylePlugin(QObject *parent = nullptr); + + QString name() const override; + void initializeTheme(QQuickTheme *theme) override; + + QQuickUniversalTheme theme; +}; + +QtQuickControls2UniversalStylePlugin::QtQuickControls2UniversalStylePlugin(QObject *parent) : QQuickStylePlugin(parent) +{ + volatile auto registration = &qml_register_types_QtQuick_Controls_Universal; + Q_UNUSED(registration); +} + +QString QtQuickControls2UniversalStylePlugin::name() const +{ + return QStringLiteral("Universal"); +} + +void QtQuickControls2UniversalStylePlugin::initializeTheme(QQuickTheme *theme) +{ + QQuickUniversalStyle::initGlobals(); + this->theme.initialize(theme); +} + +QT_END_NAMESPACE + +#include "qtquickcontrols2universalstyleplugin.moc" diff --git a/src/quickcontrols2/universal/qtquickcontrols2universalstyleplugin.qrc b/src/quickcontrols2/universal/qtquickcontrols2universalstyleplugin.qrc new file mode 100644 index 00000000..bfcb0974 --- /dev/null +++ b/src/quickcontrols2/universal/qtquickcontrols2universalstyleplugin.qrc @@ -0,0 +1,20 @@ + + + images/checkmark.png + images/checkmark@2x.png + images/checkmark@3x.png + images/checkmark@4x.png + images/downarrow.png + images/downarrow@2x.png + images/downarrow@3x.png + images/downarrow@4x.png + images/leftarrow.png + images/leftarrow@2x.png + images/leftarrow@3x.png + images/leftarrow@4x.png + images/rightarrow.png + images/rightarrow@2x.png + images/rightarrow@3x.png + images/rightarrow@4x.png + + diff --git a/src/quickcontrols2/universal/universal.pri b/src/quickcontrols2/universal/universal.pri new file mode 100644 index 00000000..b946a8f3 --- /dev/null +++ b/src/quickcontrols2/universal/universal.pri @@ -0,0 +1,59 @@ +HEADERS += \ + $$PWD/qquickuniversalstyle_p.h \ + $$PWD/qquickuniversaltheme_p.h + +SOURCES += \ + $$PWD/qquickuniversalstyle.cpp \ + $$PWD/qquickuniversaltheme.cpp + +QML_FILES += \ + $$PWD/ApplicationWindow.qml \ + $$PWD/BusyIndicator.qml \ + $$PWD/Button.qml \ + $$PWD/CheckBox.qml \ + $$PWD/CheckDelegate.qml \ + $$PWD/ComboBox.qml \ + $$PWD/DelayButton.qml \ + $$PWD/Dial.qml \ + $$PWD/Dialog.qml \ + $$PWD/DialogButtonBox.qml \ + $$PWD/Drawer.qml \ + $$PWD/Frame.qml \ + $$PWD/GroupBox.qml \ + $$PWD/HorizontalHeaderView.qml \ + $$PWD/ItemDelegate.qml \ + $$PWD/Label.qml \ + $$PWD/Menu.qml \ + $$PWD/MenuBar.qml \ + $$PWD/MenuBarItem.qml \ + $$PWD/MenuItem.qml \ + $$PWD/MenuSeparator.qml \ + $$PWD/Page.qml \ + $$PWD/PageIndicator.qml \ + $$PWD/Pane.qml \ + $$PWD/Popup.qml \ + $$PWD/ProgressBar.qml \ + $$PWD/RadioButton.qml \ + $$PWD/RadioDelegate.qml \ + $$PWD/RangeSlider.qml \ + $$PWD/RoundButton.qml \ + $$PWD/ScrollView.qml \ + $$PWD/ScrollBar.qml \ + $$PWD/ScrollIndicator.qml \ + $$PWD/Slider.qml \ + $$PWD/SpinBox.qml \ + $$PWD/SplitView.qml \ + $$PWD/StackView.qml \ + $$PWD/SwipeDelegate.qml \ + $$PWD/SwitchDelegate.qml \ + $$PWD/Switch.qml \ + $$PWD/TabBar.qml \ + $$PWD/TabButton.qml \ + $$PWD/TextArea.qml \ + $$PWD/TextField.qml \ + $$PWD/ToolBar.qml \ + $$PWD/ToolButton.qml \ + $$PWD/ToolSeparator.qml \ + $$PWD/ToolTip.qml \ + $$PWD/Tumbler.qml \ + $$PWD/VerticalHeaderView.qml diff --git a/src/quickcontrols2/windows/Button.qml b/src/quickcontrols2/windows/Button.qml new file mode 100644 index 00000000..5480d7f7 --- /dev/null +++ b/src/quickcontrols2/windows/Button.qml @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T +import QtQuick.NativeStyle as NativeStyle + +T.Button { + id: control + + readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem + + // Since QQuickControl will subtract the insets from the control size to + // figure out the background size, we need to reverse that here, otherwise + // the control ends up too big. + implicitWidth: implicitBackgroundWidth + leftInset + rightInset + implicitHeight: implicitBackgroundHeight + topInset + bottomInset + + font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined + + leftPadding: __nativeBackground ? background.contentPadding.left : 5 + rightPadding: __nativeBackground ? background.contentPadding.right : 5 + topPadding: __nativeBackground ? background.contentPadding.top : 5 + bottomPadding: __nativeBackground ? background.contentPadding.bottom : 5 + + background: NativeStyle.Button { + control: control + contentWidth: contentItem.implicitWidth + contentHeight: contentItem.implicitHeight + useNinePatchImage: false + overrideState: NativeStyle.StyleItem.NeverHovered + } + + NativeStyle.Button { + control: control + x: background.x + y: background.y + width: background.width + height: background.height + useNinePatchImage: false + overrideState: NativeStyle.StyleItem.AlwaysHovered + opacity: control.hovered ? 1 : 0 + Behavior on opacity { NumberAnimation { duration: parent.transitionDuration } } + } + + icon.width: 24 + icon.height: 24 + icon.color: control.checked || control.highlighted ? control.palette.brightText : + control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText + } +} diff --git a/src/quickcontrols2/windows/CMakeLists.txt b/src/quickcontrols2/windows/CMakeLists.txt new file mode 100644 index 00000000..3a90560e --- /dev/null +++ b/src/quickcontrols2/windows/CMakeLists.txt @@ -0,0 +1,55 @@ +##################################################################### +## qtquickcontrols2windowsstyleplugin Plugin: +##################################################################### + +set(qml_files + "Button.qml" + "CheckBox.qml" + "ComboBox.qml" + "Frame.qml" + "GroupBox.qml" + "ProgressBar.qml" + "RadioButton.qml" + "Slider.qml" + "SpinBox.qml" + "TextArea.qml" + "TextField.qml" + "ScrollBar.qml" + "ScrollView.qml" +) +set_source_files_properties(${qml_files} PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) + +qt_internal_add_qml_module(qtquickcontrols2windowsstyleplugin + URI "QtQuick.Controls.Windows" + VERSION "${PROJECT_VERSION}" + CLASS_NAME QtQuickControls2WindowsStylePlugin + IMPORTS + QtQuick.Controls.Fusion/auto + PAST_MAJOR_VERSIONS 2 + PLUGIN_TARGET qtquickcontrols2windowsstyleplugin + NO_PLUGIN_OPTIONAL + NO_GENERATE_PLUGIN_SOURCE + SOURCES + qtquickcontrols2windowsstyleplugin.cpp + QML_FILES + ${qml_files} + DEFINES + QT_NO_CAST_FROM_ASCII + QT_NO_CAST_TO_ASCII + LIBRARIES + Qt::CorePrivate + Qt::GuiPrivate + Qt::QmlPrivate + Qt::QuickControls2Private + Qt::QuickPrivate + Qt::QuickTemplates2Private + PUBLIC_LIBRARIES + Qt::Core + Qt::Gui + Qt::Qml + Qt::Quick + Qt::QuickControls2 + Qt::QuickTemplates2 +) diff --git a/src/quickcontrols2/windows/CheckBox.qml b/src/quickcontrols2/windows/CheckBox.qml new file mode 100644 index 00000000..03778c4f --- /dev/null +++ b/src/quickcontrols2/windows/CheckBox.qml @@ -0,0 +1,107 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls +import QtQuick.Controls.impl +import QtQuick.NativeStyle as NativeStyle + +T.CheckBox { + id: control + + readonly property bool nativeIndicator: indicator instanceof NativeStyle.StyleItem + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + font.pixelSize: nativeIndicator ? indicator.styleFont(control).pixelSize : undefined + + spacing: nativeIndicator ? 0 : 6 + padding: nativeIndicator ? 0 : 6 + + indicator: NativeStyle.CheckBox { + control: control + y: control.topPadding + (control.availableHeight - height) >> 1 + contentWidth: contentItem.implicitWidth + contentHeight: contentItem.implicitHeight + useNinePatchImage: false + overrideState: NativeStyle.StyleItem.NeverHovered + } + + NativeStyle.CheckBox { + control: control + x: indicator.x + y: indicator.y + z: 99 // Needs to be above the "unhovered" indicator + width: indicator.width + height: indicator.height + useNinePatchImage: false + overrideState: NativeStyle.StyleItem.AlwaysHovered + opacity: control.hovered ? 1 : 0 + Behavior on opacity { NumberAnimation { duration: parent.transitionDuration } } + } + + contentItem: CheckLabel { + text: control.text + font: control.font + color: control.palette.windowText + + // For some reason, the other styles set padding here (in the delegate), instead of in + // the control above. And they also adjust the indicator position by setting x and y + // explicitly (instead of using insets). So we follow the same pattern to ensure that + // setting a custom contentItem delegate from the app will end up looking the same for + // all styles. But this should probably be fixed for all styles (to make them work the + // same way as e.g Buttons). + leftPadding: { + if (nativeIndicator) + indicator.contentPadding.left + else + indicator && !mirrored ? indicator.width + spacing : 0 + } + + topPadding: nativeIndicator ? indicator.contentPadding.top : 0 + rightPadding: { + if (nativeIndicator) + indicator.contentPadding.right + else + indicator && mirrored ? indicator.width + spacing : 0 + } + } +} diff --git a/src/quickcontrols2/windows/ComboBox.qml b/src/quickcontrols2/windows/ComboBox.qml new file mode 100644 index 00000000..237d90b5 --- /dev/null +++ b/src/quickcontrols2/windows/ComboBox.qml @@ -0,0 +1,130 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Controls.impl +import QtQuick.Templates as T +import QtQuick.NativeStyle as NativeStyle + +T.ComboBox { + id: control + + readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding, + 90 /* minimum */ ) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined + + leftPadding: __nativeBackground ? background.contentPadding.left : 5 + rightPadding: __nativeBackground ? background.contentPadding.right : 5 + topPadding: __nativeBackground ? background.contentPadding.top : 5 + bottomPadding: __nativeBackground ? background.contentPadding.bottom : 5 + + contentItem: T.TextField { + implicitWidth: contentWidth + implicitHeight: contentHeight + text: control.editable ? control.editText : control.displayText + + enabled: control.editable + autoScroll: control.editable + readOnly: control.down + inputMethodHints: control.inputMethodHints + validator: control.validator + selectByMouse: control.selectTextByMouse + + font: control.font + color: control.editable ? control.palette.text : control.palette.buttonText + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + verticalAlignment: Text.AlignVCenter + } + + background: NativeStyle.ComboBox { + control: control + contentWidth: contentItem.implicitWidth + contentHeight: contentItem.implicitHeight + useNinePatchImage: false + } + + delegate: ItemDelegate { + width: ListView.view.width + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData + palette.text: control.palette.text + palette.highlightedText: control.palette.highlightedText + font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal + highlighted: control.highlightedIndex === index + hoverEnabled: control.hoverEnabled + } + + popup: T.Popup { + readonly property var layoutMargins: control.__nativeBackground ? control.background.layoutMargins : null + x: layoutMargins ? layoutMargins.left : 0 + y: control.height - (layoutMargins ? layoutMargins.bottom : 0) + width: control.width - (layoutMargins ? layoutMargins.left + layoutMargins.right : 0) + height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin) + topMargin: 6 + bottomMargin: 6 + + contentItem: ListView { + clip: true + implicitHeight: contentHeight + model: control.delegateModel + currentIndex: control.highlightedIndex + highlightMoveDuration: 0 + + Rectangle { + z: 10 + width: parent.width + height: parent.height + color: "transparent" + border.color: control.palette.mid + } + + T.ScrollIndicator.vertical: ScrollIndicator { } + } + + background: Rectangle { + color: control.palette.window + } + } +} diff --git a/src/quickcontrols2/windows/Frame.qml b/src/quickcontrols2/windows/Frame.qml new file mode 100644 index 00000000..f16a0835 --- /dev/null +++ b/src/quickcontrols2/windows/Frame.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.NativeStyle as NativeStyle + +NativeStyle.DefaultFrame { +} diff --git a/src/quickcontrols2/windows/GroupBox.qml b/src/quickcontrols2/windows/GroupBox.qml new file mode 100644 index 00000000..4ffbaae6 --- /dev/null +++ b/src/quickcontrols2/windows/GroupBox.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.NativeStyle as NativeStyle + +NativeStyle.DefaultGroupBox { +} diff --git a/src/quickcontrols2/windows/ProgressBar.qml b/src/quickcontrols2/windows/ProgressBar.qml new file mode 100644 index 00000000..59a1689d --- /dev/null +++ b/src/quickcontrols2/windows/ProgressBar.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.NativeStyle as NativeStyle + +NativeStyle.DefaultProgressBar { +} diff --git a/src/quickcontrols2/windows/RadioButton.qml b/src/quickcontrols2/windows/RadioButton.qml new file mode 100644 index 00000000..82b85698 --- /dev/null +++ b/src/quickcontrols2/windows/RadioButton.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.NativeStyle as NativeStyle + +NativeStyle.DefaultRadioButton { +} diff --git a/src/quickcontrols2/windows/ScrollBar.qml b/src/quickcontrols2/windows/ScrollBar.qml new file mode 100644 index 00000000..0ccbb155 --- /dev/null +++ b/src/quickcontrols2/windows/ScrollBar.qml @@ -0,0 +1,128 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.NativeStyle as NativeStyle + +NativeStyle.DefaultScrollBar { + id: controlRoot + + topPadding: orientation === Qt.Vertical ? controlRoot.__decreaseVisual.indicator.height : 0 + bottomPadding: orientation === Qt.Vertical ? controlRoot.__increaseVisual.indicator.height : 0 + leftPadding: orientation === Qt.Horizontal ? controlRoot.__decreaseVisual.indicator.width : 0 + rightPadding: orientation === Qt.Horizontal ? controlRoot.__increaseVisual.indicator.width : 0 + + contentItem: NativeStyle.ScrollBar { + control: controlRoot + subControl: NativeStyle.ScrollBar.Handle + } + + NativeStyle.ScrollBar { + // Fade a hovered-looking version of the handle + // on top of the default handle when hovering it + x: contentItem.x + y: contentItem.y + z: 1 + width: contentItem.width + height: contentItem.height + control: controlRoot + subControl: NativeStyle.ScrollBar.Handle + overrideState: NativeStyle.StyleItem.AlwaysHovered + opacity: controlRoot.hovered || control.pressed ? 1 : 0 + visible: contentItem instanceof NativeStyle.StyleItem + Behavior on opacity { NumberAnimation { duration: contentItem.transitionDuration } } + } + + // The groove background should have window color + Rectangle { + x: background.x + y: background.y + z: -1 + width: background.width + height: background.height + color: controlRoot.palette.window + } + + background: NativeStyle.ScrollBar { + control: controlRoot + subControl: NativeStyle.ScrollBar.Groove + overrideState: NativeStyle.ScrollBar.NeverHovered + } + + __decreaseVisual.indicator: NativeStyle.ScrollBar { + control: controlRoot + subControl: NativeStyle.ScrollBar.SubLine + overrideState: NativeStyle.ScrollBar.AlwaysHovered + opacity: controlRoot.__decreaseVisual.hovered ? 1 : 0 + visible: contentItem instanceof NativeStyle.StyleItem + Behavior on opacity { NumberAnimation { duration: contentItem.transitionDuration } } + useNinePatchImage: false + } + + NativeStyle.ScrollBar { + control: controlRoot + subControl: NativeStyle.ScrollBar.SubLine + overrideState: NativeStyle.ScrollBar.AlwaysSunken + opacity: controlRoot.__decreaseVisual.pressed ? 1 : 0 + visible: contentItem instanceof NativeStyle.StyleItem + useNinePatchImage: false + z: 1 + } + + __increaseVisual.indicator: NativeStyle.ScrollBar { + control: controlRoot + subControl: NativeStyle.ScrollBar.AddLine + x: orientation == Qt.Horizontal ? controlRoot.width - width : 0 + y: orientation == Qt.Vertical ? controlRoot.height - height : 0 + overrideState: NativeStyle.ScrollBar.AlwaysHovered + opacity: controlRoot.__increaseVisual.hovered ? 1 : 0 + visible: contentItem instanceof NativeStyle.StyleItem + Behavior on opacity { NumberAnimation { duration: contentItem.transitionDuration } } + useNinePatchImage: false + } + + NativeStyle.ScrollBar { + control: controlRoot + subControl: NativeStyle.ScrollBar.AddLine + x: __increaseVisual.indicator.x + y: __increaseVisual.indicator.y + z: 1 + overrideState: NativeStyle.ScrollBar.AlwaysSunken + opacity: controlRoot.__increaseVisual.pressed ? 1 : 0 + visible: contentItem instanceof NativeStyle.StyleItem + useNinePatchImage: false + } +} diff --git a/src/quickcontrols2/windows/ScrollView.qml b/src/quickcontrols2/windows/ScrollView.qml new file mode 100644 index 00000000..0e5ffff4 --- /dev/null +++ b/src/quickcontrols2/windows/ScrollView.qml @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls.impl +import QtQuick.Templates as T + +T.ScrollView { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + rightPadding: ScrollBar.vertical.visible ? ScrollBar.vertical.width : 0 + bottomPadding: ScrollBar.horizontal.visible ? ScrollBar.horizontal.height : 0 + + ScrollBar.vertical: ScrollBar { + parent: control + x: control.mirrored ? 0 : control.width - width + y: 0 + height: control.height - (control.ScrollBar.horizontal.visible ? control.ScrollBar.horizontal.height : 0) + active: control.ScrollBar.horizontal.active + } + + ScrollBar.horizontal: ScrollBar { + parent: control + x: 0 + y: control.height - height + width: control.width - (control.ScrollBar.vertical.visible ? control.ScrollBar.vertical.width : 0) + active: control.ScrollBar.vertical.active + } +} diff --git a/src/quickcontrols2/windows/Slider.qml b/src/quickcontrols2/windows/Slider.qml new file mode 100644 index 00000000..ab72fcaa --- /dev/null +++ b/src/quickcontrols2/windows/Slider.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.NativeStyle as NativeStyle + +NativeStyle.DefaultSlider { +} diff --git a/src/quickcontrols2/windows/SpinBox.qml b/src/quickcontrols2/windows/SpinBox.qml new file mode 100644 index 00000000..72309c60 --- /dev/null +++ b/src/quickcontrols2/windows/SpinBox.qml @@ -0,0 +1,124 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.NativeStyle as NativeStyle + +T.SpinBox { + id: control + + property bool __nativeBackground: background instanceof NativeStyle.StyleItem + property bool nativeIndicators: up.indicator.hasOwnProperty("_qt_default") + && down.indicator.hasOwnProperty("_qt_default") + + font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined + + implicitWidth: Math.max(contentItem.implicitWidth + leftInset + rightInset, + 90 /* minimum */ ) + implicitHeight: Math.max(contentItem.implicitHeight, up.implicitIndicatorHeight + down.implicitIndicatorHeight) + + topInset + bottomInset + + spacing: 2 + + leftPadding: __nativeBackground ? background.contentPadding.left: 0 + topPadding: __nativeBackground ? background.contentPadding.top: 0 + rightPadding: (__nativeBackground ? background.contentPadding.right : 0) + rightInset + bottomPadding: __nativeBackground ? background.contentPadding.bottom: 0 + + validator: IntValidator { + locale: control.locale.name + bottom: Math.min(control.from, control.to) + top: Math.max(control.from, control.to) + } + + contentItem: TextField { + text: control.displayText + font: control.font + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + horizontalAlignment: Qt.AlignLeft + verticalAlignment: Qt.AlignVCenter + + topPadding: 0 + bottomPadding: 0 + leftPadding: 10 + rightPadding: 10 + + readOnly: !control.editable + validator: control.validator + inputMethodHints: control.inputMethodHints + + // Since the indicators are embedded inside the TextField we need to avoid that + // the TextField consumes mouse events for that area. + // We achieve that by setting a containmentMask + containmentMask: Item { height: contentItem.height; width: contentItem.width - upAndDown.width } + } + + NativeStyle.SpinBox { + id: upAndDown + control: control + subControl: NativeStyle.SpinBox.Up + visible: nativeIndicators + x: up.indicator.x + y: up.indicator.y + //implicitHeight: contentItem.implicitHeight-2 + height: parent.height-2 + useNinePatchImage: false + z:99 + } + + up.indicator: Item { + x: parent.width - width - 2 + y: 1 + height: upAndDown.height >> 1 + implicitWidth: upAndDown.implicitWidth + implicitHeight: (upAndDown.implicitHeight >> 1) + property bool _qt_default + } + + down.indicator: Item { + x: parent.width - width - 2 + y: up.indicator.y + (upAndDown.height >> 1) + height: upAndDown.height - up.indicator.height + implicitWidth: upAndDown.implicitWidth + implicitHeight: upAndDown.implicitHeight >> 1 + property bool _qt_default + } + + background: Item {} // No background, the TextField will cover the whole control +} diff --git a/src/quickcontrols2/windows/TextArea.qml b/src/quickcontrols2/windows/TextArea.qml new file mode 100644 index 00000000..f6b88303 --- /dev/null +++ b/src/quickcontrols2/windows/TextArea.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.NativeStyle as NativeStyle + +NativeStyle.DefaultTextArea { +} diff --git a/src/quickcontrols2/windows/TextField.qml b/src/quickcontrols2/windows/TextField.qml new file mode 100644 index 00000000..bc0e2cb7 --- /dev/null +++ b/src/quickcontrols2/windows/TextField.qml @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.NativeStyle as NativeStyle + +NativeStyle.DefaultTextField { +} diff --git a/src/quickcontrols2/windows/qtquickcontrols2windowsstyleplugin.cpp b/src/quickcontrols2/windows/qtquickcontrols2windowsstyleplugin.cpp new file mode 100644 index 00000000..c893d93e --- /dev/null +++ b/src/quickcontrols2/windows/qtquickcontrols2windowsstyleplugin.cpp @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +extern void qml_register_types_QtQuick_Controls_Windows(); + +QT_BEGIN_NAMESPACE + +class QtQuickControls2WindowsStylePlugin : public QQuickStylePlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) + +public: + QtQuickControls2WindowsStylePlugin(QObject *parent = nullptr); + QString name() const override; + void initializeTheme(QQuickTheme *theme) override; +}; + +QtQuickControls2WindowsStylePlugin::QtQuickControls2WindowsStylePlugin(QObject *parent): + QQuickStylePlugin(parent) +{ + volatile auto registration = &qml_register_types_QtQuick_Controls_Windows; + Q_UNUSED(registration); +} + +QString QtQuickControls2WindowsStylePlugin::name() const +{ + return QStringLiteral("Windows"); +} + +void QtQuickControls2WindowsStylePlugin::initializeTheme(QQuickTheme */*theme*/) +{ +} + +QT_END_NAMESPACE + +#include "qtquickcontrols2windowsstyleplugin.moc" diff --git a/src/quickcontrols2/windows/windows.pri b/src/quickcontrols2/windows/windows.pri new file mode 100644 index 00000000..7f13eab0 --- /dev/null +++ b/src/quickcontrols2/windows/windows.pri @@ -0,0 +1,14 @@ +QML_FILES += \ + $$PWD/Button.qml \ + $$PWD/CheckBox.qml \ + $$PWD/ComboBox.qml \ + $$PWD/Frame.qml \ + $$PWD/GroupBox.qml \ + $$PWD/ProgressBar.qml \ + $$PWD/RadioButton.qml \ + $$PWD/Slider.qml \ + $$PWD/SpinBox.qml \ + $$PWD/TextArea.qml \ + $$PWD/TextField.qml \ + $$PWD/ScrollBar.qml \ + $$PWD/ScrollView.qml \ diff --git a/src/quickcontrols2impl/CMakeLists.txt b/src/quickcontrols2impl/CMakeLists.txt index 86e3b84a..048938a8 100644 --- a/src/quickcontrols2impl/CMakeLists.txt +++ b/src/quickcontrols2impl/CMakeLists.txt @@ -1,10 +1,14 @@ -# Generated from quickcontrols2impl.pro. - ##################################################################### ## QuickControls2Impl Module: ##################################################################### -qt_internal_add_module(QuickControls2Impl +qt_internal_add_qml_module(QuickControls2Impl + URI "QtQuick.Controls.impl" + VERSION "${PROJECT_VERSION}" + CLASS_NAME QtQuickControls2ImplPlugin + DEPENDENCIES + QtQuick/auto + PLUGIN_TARGET qtquickcontrols2implplugin SOURCES qquickanimatednode.cpp qquickanimatednode_p.h qquickattachedobject.cpp qquickattachedobject_p.h @@ -37,27 +41,7 @@ qt_internal_add_module(QuickControls2Impl Qt::Quick ) -#### Keys ignored in scope 1:.:.:quickcontrols2impl.pro:: -# MODULE = "quickcontrols2impl" -# QMLTYPES_FILENAME = "plugins.qmltypes" -# QMLTYPES_INSTALL_DIR = "$$[QT_INSTALL_QML]/QtQuick/Controls/impl" -# QML_IMPORT_NAME = "QtQuick.Controls.impl" -# QML_IMPORT_VERSION = "$$QT_VERSION" - -## Scopes: -##################################################################### - qt_internal_extend_target(QuickControls2Impl CONDITION QT_FEATURE_quick_listview AND QT_FEATURE_quick_pathview SOURCES qquicktumblerview.cpp qquicktumblerview_p.h ) - -set_target_properties(QuickControls2Impl PROPERTIES - QT_QML_MODULE_INSTALL_QMLTYPES TRUE - QT_QML_MODULE_VERSION ${PROJECT_VERSION} - QT_QML_MODULE_URI QtQuick.Controls.impl - QT_QMLTYPES_FILENAME plugins.qmltypes - QT_QML_MODULE_INSTALL_DIR "${INSTALL_QMLDIR}/QtQuick/Controls/impl" -) - -qt6_qml_type_registration(QuickControls2Impl) diff --git a/src/quickdialogs2/quickdialogs2/CMakeLists.txt b/src/quickdialogs2/quickdialogs2/CMakeLists.txt index 560460d6..e01cd692 100644 --- a/src/quickdialogs2/quickdialogs2/CMakeLists.txt +++ b/src/quickdialogs2/quickdialogs2/CMakeLists.txt @@ -2,7 +2,11 @@ ## QuickDialogs2 Module: ##################################################################### -qt_internal_add_module(QuickDialogs2 +qt_internal_add_qml_module(QuickDialogs2 + URI "QtQuick.Dialogs" + VERSION "${PROJECT_VERSION}" + CLASS_NAME QtQuickDialogsPlugin + PLUGIN_TARGET qtquickdialogsplugin SOURCES qquickabstractdialog.cpp qquickabstractdialog_p.h @@ -31,15 +35,6 @@ qt_internal_add_module(QuickDialogs2 Qt::Quick ) -## Scopes: -##################################################################### - -set_target_properties(QuickDialogs2 PROPERTIES - QT_QML_MODULE_INSTALL_QMLTYPES TRUE - QT_QML_MODULE_VERSION ${CMAKE_PROJECT_VERSION} - QT_QML_MODULE_URI QtQuick.Dialogs - QT_QMLTYPES_FILENAME plugins.qmltypes - QT_QML_MODULE_INSTALL_DIR "${INSTALL_QMLDIR}/QtQuick/Dialogs" +qt_internal_add_docs(QuickDialogs2 + doc/qtquickdialogs.qdocconf ) - -qt6_qml_type_registration(QuickDialogs2) diff --git a/src/quickdialogs2/quickdialogs2/doc/images/qtquickdialogs-filedialog-gtk.png b/src/quickdialogs2/quickdialogs2/doc/images/qtquickdialogs-filedialog-gtk.png new file mode 100644 index 00000000..9360d747 Binary files /dev/null and b/src/quickdialogs2/quickdialogs2/doc/images/qtquickdialogs-filedialog-gtk.png differ diff --git a/src/quickdialogs2/quickdialogs2/doc/images/qtquickdialogs-fontdialog-gtk.png b/src/quickdialogs2/quickdialogs2/doc/images/qtquickdialogs-fontdialog-gtk.png new file mode 100644 index 00000000..0c6217bd Binary files /dev/null and b/src/quickdialogs2/quickdialogs2/doc/images/qtquickdialogs-fontdialog-gtk.png differ diff --git a/src/quickdialogs2/quickdialogs2/doc/qtquickdialogs.qdocconf b/src/quickdialogs2/quickdialogs2/doc/qtquickdialogs.qdocconf new file mode 100644 index 00000000..e53a5c22 --- /dev/null +++ b/src/quickdialogs2/quickdialogs2/doc/qtquickdialogs.qdocconf @@ -0,0 +1,40 @@ +include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf) +include($QT_INSTALL_DOCS/config/exampleurl-qtquickcontrols2.qdocconf) + +project = QtQuickDialogs +description = Qt Quick Dialogs Reference Documentation +version = $QT_VERSION + +qhp.projects = QtQuickDialogs + +qhp.QtQuickDialogs.file = qtquickdialogs.qhp +qhp.QtQuickDialogs.namespace = org.qt-project.qtquickdialogs.$QT_VERSION_TAG +qhp.QtQuickDialogs.virtualFolder = qtquickdialogs +qhp.QtQuickDialogs.indexTitle = Qt Quick Dialogs +qhp.QtQuickDialogs.indexRoot = + +qhp.QtQuickDialogs.filterAttributes = qtquickdialogs $QT_VERSION qtrefdoc +qhp.QtQuickDialogs.customFilters.Qt.name = QtQuickDialogs $QT_VERSION +qhp.QtQuickDialogs.customFilters.Qt.filterAttributes = qtquickdialogs $QT_VERSION + +qhp.QtQuickDialogs.subprojects = qmltypes +qhp.QtQuickDialogs.subprojects.qmltypes.title = QML Types +qhp.QtQuickDialogs.subprojects.qmltypes.indexTitle = Qt Quick Dialogs QML Types +qhp.QtQuickDialogs.subprojects.qmltypes.selectors = qmlclass +qhp.QtQuickDialogs.subprojects.qmltypes.sortPages = true + +depends = qtcore qtgui qtdoc qtqml qtquick qtquickcontrols + +# This module has no documented C++ types, clear the module header +moduleheader = + +headerdirs += .. +sourcedirs += .. \ + src + +imagedirs += images + +navigation.landingpage = "Qt Quick Dialogs" +navigation.qmltypespage = "Qt Quick Dialogs QML Types" + +tagfile = qtquickdialogs.tags diff --git a/src/quickdialogs2/quickdialogs2/doc/src/includes/fallback.qdocinc b/src/quickdialogs2/quickdialogs2/doc/src/includes/fallback.qdocinc new file mode 100644 index 00000000..f3a4a180 --- /dev/null +++ b/src/quickdialogs2/quickdialogs2/doc/src/includes/fallback.qdocinc @@ -0,0 +1 @@ +Qt Quick Dialogs uses a Qt Quick implementation as a fallback on platforms that do not have a native implementation available. diff --git a/src/quickdialogs2/quickdialogs2quickimpl/CMakeLists.txt b/src/quickdialogs2/quickdialogs2quickimpl/CMakeLists.txt index 277be0a3..20d090c8 100644 --- a/src/quickdialogs2/quickdialogs2quickimpl/CMakeLists.txt +++ b/src/quickdialogs2/quickdialogs2quickimpl/CMakeLists.txt @@ -2,7 +2,36 @@ ## QuickDialogs2QuickImpl Module: ##################################################################### -qt_internal_add_module(QuickDialogs2QuickImpl +set(qml_files + "qml/FileDialog.qml" + "qml/FileDialogDelegate.qml" + "qml/FileDialogDelegateLabel.qml" + "qml/FolderBreadcrumbBar.qml" + "qml/FontDialog.qml" + "qml/FontDialogContent.qml" + "qml/+Fusion/FileDialog.qml" + "qml/+Fusion/FileDialogDelegate.qml" + "qml/+Fusion/FolderBreadcrumbBar.qml" + "qml/+Fusion/FontDialog.qml" + "qml/+Imagine/FileDialog.qml" + "qml/+Imagine/FileDialogDelegate.qml" + "qml/+Imagine/FolderBreadcrumbBar.qml" + "qml/+Imagine/FontDialog.qml" + "qml/+Material/FileDialog.qml" + "qml/+Material/FileDialogDelegate.qml" + "qml/+Material/FolderBreadcrumbBar.qml" + "qml/+Material/FontDialog.qml" + "qml/+Universal/FileDialog.qml" + "qml/+Universal/FileDialogDelegate.qml" + "qml/+Universal/FolderBreadcrumbBar.qml" + "qml/+Universal/FontDialog.qml" +) + +qt_internal_add_qml_module(QuickDialogs2QuickImpl + URI "QtQuick.Dialogs.quickimpl" + VERSION "${PROJECT_VERSION}" + CLASS_NAME QtQuickDialogs2QuickImplPlugin + PLUGIN_TARGET qtquickdialogs2quickimplplugin SOURCES qquickdialogimplfactory.cpp qquickdialogimplfactory_p.h @@ -23,6 +52,8 @@ qt_internal_add_module(QuickDialogs2QuickImpl qquickfontdialogimpl_p.h qquickfontdialogimpl_p_p.h qquickfontdialogimpl.cpp + QML_FILES + ${qml_files} DEFINES QT_BUILD_QUICKDIALOGS2QUICKIMPL_LIB QT_NO_CAST_FROM_ASCII @@ -100,28 +131,6 @@ set(qtquickdialogs2quickimpl_resource_files "images/up-icon-thick-square@2x.png" "images/up-icon-thick-square@3x.png" "images/up-icon-thick-square@4x.png" - "qml/FileDialog.qml" - "qml/FileDialogDelegate.qml" - "qml/FileDialogDelegateLabel.qml" - "qml/FolderBreadcrumbBar.qml" - "qml/FontDialog.qml" - "qml/FontDialogContent.qml" - "qml/+Fusion/FileDialog.qml" - "qml/+Fusion/FileDialogDelegate.qml" - "qml/+Fusion/FolderBreadcrumbBar.qml" - "qml/+Fusion/FontDialog.qml" - "qml/+Imagine/FileDialog.qml" - "qml/+Imagine/FileDialogDelegate.qml" - "qml/+Imagine/FolderBreadcrumbBar.qml" - "qml/+Imagine/FontDialog.qml" - "qml/+Material/FileDialog.qml" - "qml/+Material/FileDialogDelegate.qml" - "qml/+Material/FolderBreadcrumbBar.qml" - "qml/+Material/FontDialog.qml" - "qml/+Universal/FileDialog.qml" - "qml/+Universal/FileDialogDelegate.qml" - "qml/+Universal/FolderBreadcrumbBar.qml" - "qml/+Universal/FontDialog.qml" ) qt_internal_add_resource(QuickDialogs2QuickImpl "QuickDialogs2QuickImpl" @@ -130,16 +139,3 @@ qt_internal_add_resource(QuickDialogs2QuickImpl "QuickDialogs2QuickImpl" FILES ${qtquickdialogs2quickimpl_resource_files} ) - -## Scopes: -##################################################################### - -set_target_properties(QuickDialogs2QuickImpl PROPERTIES - QT_QML_MODULE_INSTALL_QMLTYPES TRUE - QT_QML_MODULE_VERSION ${CMAKE_PROJECT_VERSION} - QT_QML_MODULE_URI QtQuick.Dialogs.quickimpl - QT_QMLTYPES_FILENAME plugins.qmltypes - QT_QML_MODULE_INSTALL_DIR "${INSTALL_QMLDIR}/QtQuick/Dialogs/quickimpl" -) - -qt6_qml_type_registration(QuickDialogs2QuickImpl) diff --git a/src/quicknativestyle/CMakeLists.txt b/src/quicknativestyle/CMakeLists.txt new file mode 100644 index 00000000..e34ccf7c --- /dev/null +++ b/src/quicknativestyle/CMakeLists.txt @@ -0,0 +1,110 @@ +##################################################################### +## qtquickcontrols2nativestyleplugin Plugin: +##################################################################### + +set(qml_files + "controls/DefaultButton.qml" + "controls/DefaultSlider.qml" + "controls/DefaultGroupBox.qml" + "controls/DefaultCheckBox.qml" + "controls/DefaultRadioButton.qml" + "controls/DefaultSpinBox.qml" + "controls/DefaultTextField.qml" + "controls/DefaultFrame.qml" + "controls/DefaultTextArea.qml" + "controls/DefaultComboBox.qml" + "controls/DefaultScrollBar.qml" + "controls/DefaultProgressBar.qml" + "controls/DefaultDial.qml" +) +set_source_files_properties(${qml_files} PROPERTIES + QT_QML_SOURCE_VERSION "2.0;6.0" +) + +if(MACOS) + # TODO: QT_QML_SOURCE_VERSION wasn't set on this file before, should it be? + list(APPEND qml_files "util/FocusFrame.qml") +endif() + +qt_internal_add_qml_module(qtquickcontrols2nativestyleplugin + URI "QtQuick.NativeStyle" + VERSION "${PROJECT_VERSION}" + CLASSNAME QtQuickControls2NativeStylePlugin + DEPENDENCIES + QtQuick.Controls/auto + QtQuick.Layouts/auto + PAST_MAJOR_VERSIONS 2 + PLUGIN_TARGET qtquickcontrols2nativestyleplugin + NO_PLUGIN_OPTIONAL + NO_GENERATE_PLUGIN_SOURCE + SOURCES + items/qquickstyleitem.cpp items/qquickstyleitem.h + items/qquickstyleitembutton.cpp items/qquickstyleitembutton.h + items/qquickstyleitemcheckbox.cpp items/qquickstyleitemcheckbox.h + items/qquickstyleitemcombobox.cpp items/qquickstyleitemcombobox.h + items/qquickstyleitemdial.cpp items/qquickstyleitemdial.h + items/qquickstyleitemframe.cpp items/qquickstyleitemframe.h + items/qquickstyleitemgroupbox.cpp items/qquickstyleitemgroupbox.h + items/qquickstyleitemprogressbar.cpp items/qquickstyleitemprogressbar.h + items/qquickstyleitemradiobutton.cpp items/qquickstyleitemradiobutton.h + items/qquickstyleitemscrollbar.cpp items/qquickstyleitemscrollbar.h + items/qquickstyleitemslider.cpp items/qquickstyleitemslider.h + items/qquickstyleitemspinbox.cpp items/qquickstyleitemspinbox.h + items/qquickstyleitemtextfield.cpp items/qquickstyleitemtextfield.h + qstyle/qquickcommonstyle.cpp qstyle/qquickcommonstyle.h qstyle/qquickcommonstyle_p.h + qstyle/qquickcommonstylepixmaps_p.h + qstyle/qquickdrawutil.cpp qstyle/qquickdrawutil.h + qstyle/qquicknativestyle.cpp qstyle/qquicknativestyle.h + qstyle/qquickstyle.cpp qstyle/qquickstyle.h qstyle/qquickstyle_p.h + qstyle/qquickstylehelper.cpp qstyle/qquickstylehelper_p.h + qstyle/qquickstyleoption.cpp qstyle/qquickstyleoption.h + qtquickcontrols2nativestyleplugin.cpp + QML_FILES + ${qml_files} + DEFINES + QT_NO_CAST_FROM_ASCII + QT_NO_CAST_TO_ASCII + INCLUDE_DIRECTORIES + items + qstyle + util + LIBRARIES + Qt::CorePrivate + Qt::GuiPrivate + Qt::QmlPrivate + Qt::QuickControls2Private + Qt::QuickPrivate + Qt::QuickTemplates2Private + PUBLIC_LIBRARIES + Qt::Core + Qt::Gui + Qt::Qml + Qt::Quick + Qt::QuickControls2 + Qt::QuickTemplates2 +) + +qt_internal_extend_target(qtquickcontrols2nativestyleplugin CONDITION MACOS + SOURCES + items/qquickstyleitemscrollviewcorner.cpp items/qquickstyleitemscrollviewcorner.h + qstyle/mac/qquickmacstyle_mac.mm qstyle/mac/qquickmacstyle_mac_p.h + qstyle/mac/qquickmacstyle_mac_p_p.h + util/qquickmacfocusframe.h util/qquickmacfocusframe.mm + INCLUDE_DIRECTORIES + qstyle/mac + LIBRARIES + ${FWAppKit} +) + +qt_internal_extend_target(qtquickcontrols2nativestyleplugin CONDITION WIN32 + SOURCES + qstyle/windows/qquickwindowsstyle.cpp qstyle/windows/qquickwindowsstyle_p.h + qstyle/windows/qquickwindowsstyle_p_p.h + qstyle/windows/qquickwindowsxpstyle.cpp + INCLUDE_DIRECTORIES + qstyle/windows + LIBRARIES + gdi32 + user32 + uxtheme +) diff --git a/src/quicknativestyle/controls/DefaultButton.qml b/src/quicknativestyle/controls/DefaultButton.qml new file mode 100644 index 00000000..7e55aaa2 --- /dev/null +++ b/src/quicknativestyle/controls/DefaultButton.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls +import QtQuick.Controls.impl +import QtQuick.Templates as T +import QtQuick.NativeStyle as NativeStyle + +T.Button { + id: control + + readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem + + // Since QQuickControl will subtract the insets from the control size to + // figure out the background size, we need to reverse that here, otherwise + // the control ends up too big. + implicitWidth: implicitBackgroundWidth + leftInset + rightInset + implicitHeight: implicitBackgroundHeight + topInset + bottomInset + + font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined + + leftPadding: __nativeBackground ? background.contentPadding.left : 5 + rightPadding: __nativeBackground ? background.contentPadding.right : 5 + topPadding: __nativeBackground ? background.contentPadding.top : 5 + bottomPadding: __nativeBackground ? background.contentPadding.bottom : 5 + + background: NativeStyle.Button { + control: control + contentWidth: contentItem.implicitWidth + contentHeight: contentItem.implicitHeight + } + + icon.width: 24 + icon.height: 24 + icon.color: control.checked || control.highlighted ? control.palette.brightText : + control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText + + contentItem: IconLabel { + spacing: control.spacing + mirrored: control.mirrored + display: control.display + + icon: control.icon + text: control.text + font: control.font + color: control.checked || control.highlighted ? control.palette.brightText : + control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText + } +} diff --git a/src/quicknativestyle/controls/DefaultCheckBox.qml b/src/quicknativestyle/controls/DefaultCheckBox.qml new file mode 100644 index 00000000..09166820 --- /dev/null +++ b/src/quicknativestyle/controls/DefaultCheckBox.qml @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls +import QtQuick.Controls.impl +import QtQuick.NativeStyle as NativeStyle + +T.CheckBox { + id: control + + readonly property bool nativeIndicator: indicator instanceof NativeStyle.StyleItem + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + font.pixelSize: nativeIndicator ? indicator.styleFont(control).pixelSize : undefined + + spacing: nativeIndicator ? 0 : 6 + padding: nativeIndicator ? 0 : 6 + + indicator: NativeStyle.CheckBox { + control: control + y: control.topPadding + (control.availableHeight - height) >> 1 + contentWidth: contentItem.implicitWidth + contentHeight: contentItem.implicitHeight + useNinePatchImage: false + } + + contentItem: CheckLabel { + text: control.text + font: control.font + color: control.palette.windowText + + // For some reason, the other styles set padding here (in the delegate), instead of in + // the control above. And they also adjust the indicator position by setting x and y + // explicitly (instead of using insets). So we follow the same pattern to ensure that + // setting a custom contentItem delegate from the app will end up looking the same for + // all styles. But this should probably be fixed for all styles (to make them work the + // same way as e.g Buttons). + leftPadding: { + if (nativeIndicator) + indicator.contentPadding.left + else + indicator && !mirrored ? indicator.width + spacing : 0 + } + + topPadding: nativeIndicator ? indicator.contentPadding.top : 0 + rightPadding: { + if (nativeIndicator) + indicator.contentPadding.right + else + indicator && mirrored ? indicator.width + spacing : 0 + } + } +} diff --git a/src/quicknativestyle/controls/DefaultComboBox.qml b/src/quicknativestyle/controls/DefaultComboBox.qml new file mode 100644 index 00000000..7b286a1e --- /dev/null +++ b/src/quicknativestyle/controls/DefaultComboBox.qml @@ -0,0 +1,129 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Window +import QtQuick.Controls +import QtQuick.Controls.impl +import QtQuick.Templates as T +import QtQuick.NativeStyle as NativeStyle + +T.ComboBox { + id: control + + readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding, + 90 /* minimum */ ) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined + + leftPadding: __nativeBackground ? background.contentPadding.left : 5 + rightPadding: __nativeBackground ? background.contentPadding.right : 5 + topPadding: __nativeBackground ? background.contentPadding.top : 5 + bottomPadding: __nativeBackground ? background.contentPadding.bottom : 5 + + contentItem: T.TextField { + implicitWidth: contentWidth + implicitHeight: contentHeight + text: control.editable ? control.editText : control.displayText + + enabled: control.editable + autoScroll: control.editable + readOnly: control.down + inputMethodHints: control.inputMethodHints + validator: control.validator + selectByMouse: control.selectTextByMouse + + font: control.font + color: control.editable ? control.palette.text : control.palette.buttonText + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + verticalAlignment: Text.AlignVCenter + } + + background: NativeStyle.ComboBox { + control: control + contentWidth: contentItem.implicitWidth + contentHeight: contentItem.implicitHeight + } + + delegate: ItemDelegate { + width: ListView.view.width + text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData + palette.text: control.palette.text + palette.highlightedText: control.palette.highlightedText + font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal + highlighted: control.highlightedIndex === index + hoverEnabled: control.hoverEnabled + } + + popup: T.Popup { + readonly property var layoutMargins: control.__nativeBackground ? control.background.layoutMargins : null + x: layoutMargins ? layoutMargins.left : 0 + y: control.height - (layoutMargins ? layoutMargins.bottom : 0) + width: control.width - (layoutMargins ? layoutMargins.left + layoutMargins.right : 0) + height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin) + topMargin: 6 + bottomMargin: 6 + + contentItem: ListView { + clip: true + implicitHeight: contentHeight + model: control.delegateModel + currentIndex: control.highlightedIndex + highlightMoveDuration: 0 + + Rectangle { + z: 10 + width: parent.width + height: parent.height + color: "transparent" + border.color: control.palette.mid + } + + T.ScrollIndicator.vertical: ScrollIndicator { } + } + + background: Rectangle { + color: control.palette.window + } + } +} diff --git a/src/quicknativestyle/controls/DefaultDial.qml b/src/quicknativestyle/controls/DefaultDial.qml new file mode 100644 index 00000000..b628ed09 --- /dev/null +++ b/src/quicknativestyle/controls/DefaultDial.qml @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls +import QtQuick.Templates as T +import QtQuick.NativeStyle as NativeStyle + +T.Dial { + id: control + + readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding, + 80 /* minimum */ ) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + 80 /* minimum */ ) + + font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined + + background: NativeStyle.Dial { + control: control + useNinePatchImage: false + } +} diff --git a/src/quicknativestyle/controls/DefaultFrame.qml b/src/quicknativestyle/controls/DefaultFrame.qml new file mode 100644 index 00000000..77ca6125 --- /dev/null +++ b/src/quicknativestyle/controls/DefaultFrame.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls +import QtQuick.Templates as T +import QtQuick.NativeStyle as NativeStyle + +T.Frame { + id: control + + readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + leftPadding: __nativeBackground ? background.contentPadding.left : 12 + rightPadding: __nativeBackground ? background.contentPadding.right : 12 + topPadding: __nativeBackground ? background.contentPadding.top : 12 + bottomPadding: __nativeBackground ? background.contentPadding.bottom : 12 + + background: NativeStyle.Frame { + control: control + contentWidth: control.contentWidth + contentHeight: control.contentHeight + } +} diff --git a/src/quicknativestyle/controls/DefaultGroupBox.qml b/src/quicknativestyle/controls/DefaultGroupBox.qml new file mode 100644 index 00000000..a7f3f9d0 --- /dev/null +++ b/src/quicknativestyle/controls/DefaultGroupBox.qml @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls +import QtQuick.Templates as T +import QtQuick.NativeStyle as NativeStyle + +T.GroupBox { + id: control + + readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + contentWidth + leftPadding + rightPadding, + implicitLabelWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding) + + font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined + + label: Rectangle { + color: control.palette.window + property point labelPos : control.__nativeBackground + ? background.labelPos + : Qt.point(0,0) + x: labelPos.x + background.x + y: labelPos.y + background.y - (__nativeBackground ? background.groupBoxPadding.top : 0) + width: children[0].implicitWidth + height: children[0].implicitHeight + Text { + width: parent.width + height: parent.height + text: control.title + font: control.font + color: control.palette.windowText + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + } + + leftPadding: __nativeBackground ? background.contentPadding.left : 0 + rightPadding: __nativeBackground ? background.contentPadding.right : 0 + topPadding: __nativeBackground ? background.contentPadding.top : 0 + bottomPadding: __nativeBackground ? background.contentPadding.bottom : 0 + + background: NativeStyle.GroupBox { + control: control + + x: groupBoxPadding.left + y: groupBoxPadding.top + width: contentItem.width + control.leftPadding + control.rightPadding - groupBoxPadding.left - groupBoxPadding.right + height: contentItem.height + control.topPadding + control.bottomPadding - groupBoxPadding.top - groupBoxPadding.bottom + + contentWidth: contentItem.implicitWidth + contentHeight: contentItem.implicitHeight + } +} diff --git a/src/quicknativestyle/controls/DefaultProgressBar.qml b/src/quicknativestyle/controls/DefaultProgressBar.qml new file mode 100644 index 00000000..037bdbae --- /dev/null +++ b/src/quicknativestyle/controls/DefaultProgressBar.qml @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls +import QtQuick.NativeStyle as NativeStyle + +T.ProgressBar { + id: control + + readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding, + control.horizontal ? 90 : 0 /* minimum */ ) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + control.vertical ? 90 : 0 /* minimum */ ) + + font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined + + background: NativeStyle.ProgressBar { + control: control + useNinePatchImage: false + } +} diff --git a/src/quicknativestyle/controls/DefaultRadioButton.qml b/src/quicknativestyle/controls/DefaultRadioButton.qml new file mode 100644 index 00000000..29746ba7 --- /dev/null +++ b/src/quicknativestyle/controls/DefaultRadioButton.qml @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Templates as T +import QtQuick.Controls +import QtQuick.Controls.impl +import QtQuick.NativeStyle as NativeStyle + +T.RadioButton { + id: control + + readonly property bool nativeIndicator: indicator instanceof NativeStyle.StyleItem + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding, + implicitIndicatorHeight + topPadding + bottomPadding) + + font.pixelSize: nativeIndicator ? indicator.styleFont(control).pixelSize : undefined + + spacing: nativeIndicator ? 0 : 6 + padding: nativeIndicator ? 0 : 6 + + indicator: NativeStyle.RadioButton { + control: control + contentWidth: contentItem.implicitWidth + contentHeight: contentItem.implicitHeight + useNinePatchImage: false +// Component.onCompleted: { +// var f = indicator.font(control) +// control.font.pixelSize = f.pixelSize +// print(f) +// } + } + + contentItem: CheckLabel { + text: control.text + font: control.font + color: control.palette.windowText + + // For some reason, the other styles set padding here (in the delegate), instead of in + // the control above. And they also adjust the indicator position by setting x and y + // explicitly (instead of using insets). So we follow the same pattern to ensure that + // setting a custom contentItem delegate from the app will end up looking the same for + // all styles. But this should probably be fixed for all styles (to make them work the + // same way as e.g Buttons). + leftPadding: { + if (nativeIndicator) + indicator.contentPadding.left + else + indicator && !mirrored ? indicator.width + spacing : 0 + } + + rightPadding: { + if (nativeIndicator) + indicator.contentPadding.right + else + indicator && mirrored ? indicator.width + spacing : 0 + } + } +} diff --git a/src/quicknativestyle/controls/DefaultScrollBar.qml b/src/quicknativestyle/controls/DefaultScrollBar.qml new file mode 100644 index 00000000..b7b78732 --- /dev/null +++ b/src/quicknativestyle/controls/DefaultScrollBar.qml @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls +import QtQuick.Templates as T +import QtQuick.NativeStyle as NativeStyle + +T.ScrollBar { + id: control + + readonly property bool __nativeContentItem: contentItem instanceof NativeStyle.StyleItem + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitContentWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitContentHeight + topPadding + bottomPadding) + + font.pixelSize: __nativeContentItem ? contentItem.styleFont(control).pixelSize : undefined + + visible: policy === T.ScrollBar.AlwaysOn || (policy === T.ScrollBar.AsNeeded && size < 1.0) + minimumSize: !__nativeContentItem ? 10 : orientation === Qt.Vertical ? + contentItem.minimumSize.height / height : contentItem.minimumSize.width / width + + background: NativeStyle.ScrollBar { + control: control + subControl: NativeStyle.ScrollBar.Groove + } + + contentItem: NativeStyle.ScrollBar { + control: control + subControl: NativeStyle.ScrollBar.Handle + } +} diff --git a/src/quicknativestyle/controls/DefaultSlider.qml b/src/quicknativestyle/controls/DefaultSlider.qml new file mode 100644 index 00000000..ebc1c265 --- /dev/null +++ b/src/quicknativestyle/controls/DefaultSlider.qml @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls +import QtQuick.Templates as T +import QtQuick.NativeStyle as NativeStyle + +T.Slider { + id: control + + readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + implicitHandleWidth + leftPadding + rightPadding, + control.horizontal ? 90 : 0 /* minimum */ ) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + implicitHandleHeight + topPadding + bottomPadding, + control.vertical ? 90 : 0 /* minimum */ ) + + font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined + + background: NativeStyle.Slider { + control: control + subControl: NativeStyle.Slider.Groove + // We normally cannot use a nine patch image for the + // groove if we draw tickmarks (since then the scaling + // would scale the tickmarks too). The groove might + // also use a different background color before, and + // after, the handle. + useNinePatchImage: false + } + + handle: NativeStyle.Slider { + control: control + subControl: NativeStyle.Slider.Handle + x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)) + useNinePatchImage: false + } +} diff --git a/src/quicknativestyle/controls/DefaultSpinBox.qml b/src/quicknativestyle/controls/DefaultSpinBox.qml new file mode 100644 index 00000000..869ff411 --- /dev/null +++ b/src/quicknativestyle/controls/DefaultSpinBox.qml @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls +import QtQuick.Templates as T +import QtQuick.NativeStyle as NativeStyle + +T.SpinBox { + id: control + + readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem + + implicitWidth: Math.max(implicitBackgroundWidth + spacing + up.implicitIndicatorWidth + + leftInset + rightInset, + 90 /* minimum */ ) + implicitHeight: Math.max(implicitBackgroundHeight, up.implicitIndicatorHeight + down.implicitIndicatorHeight + + (spacing * 3)) + topInset + bottomInset + + font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined + + spacing: 2 + + leftPadding: (__nativeBackground ? background.contentPadding.left: 0) + topPadding: (__nativeBackground ? background.contentPadding.top: 0) + rightPadding: (__nativeBackground ? background.contentPadding.right : 0) + up.implicitIndicatorWidth + spacing + bottomPadding: (__nativeBackground ? background.contentPadding.bottom: 0) + spacing + + validator: IntValidator { + locale: control.locale.name + bottom: Math.min(control.from, control.to) + top: Math.max(control.from, control.to) + } + + contentItem: TextInput { + text: control.displayText + font: font.font + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + horizontalAlignment: Qt.AlignLeft + verticalAlignment: Qt.AlignVCenter + + topPadding: 2 + bottomPadding: 2 + leftPadding: 10 + rightPadding: 10 + + readOnly: !control.editable + validator: control.validator + inputMethodHints: control.inputMethodHints + } + + up.indicator: NativeStyle.SpinBox { + control: control + subControl: NativeStyle.SpinBox.Up + x: parent.width - width - spacing + y: (parent.height / 2) - height + useNinePatchImage: false + } + + down.indicator: NativeStyle.SpinBox { + control: control + subControl: NativeStyle.SpinBox.Down + x: up.indicator.x + y: up.indicator.y + up.indicator.height + useNinePatchImage: false + } + + background: NativeStyle.SpinBox { + control: control + subControl: NativeStyle.SpinBox.Frame + contentWidth: contentItem.implicitWidth + contentHeight: contentItem.implicitHeight + } +} diff --git a/src/quicknativestyle/controls/DefaultTextArea.qml b/src/quicknativestyle/controls/DefaultTextArea.qml new file mode 100644 index 00000000..5a72b91a --- /dev/null +++ b/src/quicknativestyle/controls/DefaultTextArea.qml @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls +import QtQuick.Controls.impl +import QtQuick.Templates as T +import QtQuick.NativeStyle as NativeStyle + +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: 7 + rightPadding: 7 + topPadding: 3 + bottomPadding: 3 + + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + placeholderTextColor: Color.transparent(control.color, 0.5) + verticalAlignment: TextInput.AlignTop + + PlaceholderText { + id: placeholder + height: control.height + topPadding: control.topPadding + bottomPadding: control.bottomPadding + leftPadding: control.leftPadding + rightPadding: control.rightPadding + 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 { + color: control.palette.light + } +} diff --git a/src/quicknativestyle/controls/DefaultTextField.qml b/src/quicknativestyle/controls/DefaultTextField.qml new file mode 100644 index 00000000..d8bee337 --- /dev/null +++ b/src/quicknativestyle/controls/DefaultTextField.qml @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls +import QtQuick.Controls.impl +import QtQuick.Templates as T +import QtQuick.NativeStyle as NativeStyle + +T.TextField { + id: control + + readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem + + implicitWidth: Math.max(Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding, + implicitBackgroundWidth + leftInset + rightInset, + 90 /* minimum */ ) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + contentHeight + topPadding + bottomPadding, + placeholder.implicitHeight + topPadding + bottomPadding) + + font.pixelSize: __nativeBackground ? background.styleFont(control).pixelSize : undefined + + leftPadding: __nativeBackground ? background.contentPadding.left: 7 + rightPadding: __nativeBackground ? background.contentPadding.right: 7 + topPadding: __nativeBackground ? background.contentPadding.top: 3 + bottomPadding: __nativeBackground ? background.contentPadding.bottom: 3 + + color: control.palette.text + selectionColor: control.palette.highlight + selectedTextColor: control.palette.highlightedText + placeholderTextColor: Color.transparent(control.color, 0.5) + verticalAlignment: TextInput.AlignTop + + PlaceholderText { + id: placeholder + height: control.height + topPadding: control.topPadding + bottomPadding: control.bottomPadding + leftPadding: control.leftPadding + rightPadding: control.rightPadding + 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: NativeStyle.TextField { + control: control + contentWidth: Math.max(control.contentWidth, placeholder.implicitWidth) + contentHeight: control.contentHeight + } +} diff --git a/src/quicknativestyle/controls/controls.pri b/src/quicknativestyle/controls/controls.pri new file mode 100644 index 00000000..8675989e --- /dev/null +++ b/src/quicknativestyle/controls/controls.pri @@ -0,0 +1,14 @@ +QML_FILES += \ + $$PWD/DefaultButton.qml \ + $$PWD/DefaultSlider.qml \ + $$PWD/DefaultGroupBox.qml \ + $$PWD/DefaultCheckBox.qml \ + $$PWD/DefaultRadioButton.qml \ + $$PWD/DefaultSpinBox.qml \ + $$PWD/DefaultTextField.qml \ + $$PWD/DefaultFrame.qml \ + $$PWD/DefaultTextArea.qml \ + $$PWD/DefaultComboBox.qml \ + $$PWD/DefaultScrollBar.qml \ + $$PWD/DefaultProgressBar.qml \ + $$PWD/DefaultDial.qml \ diff --git a/src/quicknativestyle/items/items.pri b/src/quicknativestyle/items/items.pri new file mode 100644 index 00000000..5b6d9251 --- /dev/null +++ b/src/quicknativestyle/items/items.pri @@ -0,0 +1,36 @@ +INCLUDEPATH += $$PWD + +HEADERS += \ + $$PWD/qquickstyleitem.h \ + $$PWD/qquickstyleitembutton.h \ + $$PWD/qquickstyleitemgroupbox.h \ + $$PWD/qquickstyleitemcheckbox.h \ + $$PWD/qquickstyleitemradiobutton.h \ + $$PWD/qquickstyleitemslider.h \ + $$PWD/qquickstyleitemspinbox.h \ + $$PWD/qquickstyleitemtextfield.h \ + $$PWD/qquickstyleitemframe.h \ + $$PWD/qquickstyleitemcombobox.h \ + $$PWD/qquickstyleitemscrollbar.h \ + $$PWD/qquickstyleitemprogressbar.h \ + $$PWD/qquickstyleitemdial.h \ + +SOURCES += \ + $$PWD/qquickstyleitem.cpp \ + $$PWD/qquickstyleitembutton.cpp \ + $$PWD/qquickstyleitemgroupbox.cpp \ + $$PWD/qquickstyleitemcheckbox.cpp \ + $$PWD/qquickstyleitemradiobutton.cpp \ + $$PWD/qquickstyleitemslider.cpp \ + $$PWD/qquickstyleitemspinbox.cpp \ + $$PWD/qquickstyleitemtextfield.cpp \ + $$PWD/qquickstyleitemframe.cpp \ + $$PWD/qquickstyleitemcombobox.cpp \ + $$PWD/qquickstyleitemscrollbar.cpp \ + $$PWD/qquickstyleitemprogressbar.cpp \ + $$PWD/qquickstyleitemdial.cpp \ + +macos { + HEADERS += $$PWD/qquickstyleitemscrollviewcorner.h + SOURCES += $$PWD/qquickstyleitemscrollviewcorner.cpp +} diff --git a/src/quicknativestyle/items/qquickstyleitem.cpp b/src/quicknativestyle/items/qquickstyleitem.cpp new file mode 100644 index 00000000..23f290d3 --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitem.cpp @@ -0,0 +1,561 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickstyleitem.h" + +#include +#include + +#include +#include +#include + +#include +#include + +#include + +#include "qquickstyleitembutton.h" +#include "qquickstylehelper_p.h" + +QT_BEGIN_NAMESPACE + +QDebug operator<<(QDebug debug, const QQuickStyleMargins &padding) +{ + QDebugStateSaver saver(debug); + debug.nospace(); + debug << "StyleMargins("; + debug << padding.left() << ", "; + debug << padding.top() << ", "; + debug << padding.right() << ", "; + debug << padding.bottom(); + debug << ')'; + return debug; +} + +QDebug operator<<(QDebug debug, const StyleItemGeometry &cg) +{ + QDebugStateSaver saver(debug); + debug.nospace(); + debug << "StyleItemGeometry("; + debug << "implicitSize:" << cg.implicitSize << ", "; + debug << "contentRect:" << cg.contentRect << ", "; + debug << "layoutRect:" << cg.layoutRect << ", "; + debug << "minimumSize:" << cg.minimumSize << ", "; + debug << "9patchMargins:" << cg.ninePatchMargins; + debug << ')'; + return debug; +} + +int QQuickStyleItem::dprAlignedSize(const int size) const +{ + // Return the first value equal to or bigger than size + // that is a whole number when multiplied with the dpr. + static int multiplier = [&]() { + const qreal dpr = window()->devicePixelRatio(); + for (int m = 1; m <= 10; ++m) { + const qreal v = m * dpr; + if (v == int(v)) + return m; + } + + qWarning() << "The current dpr (" << dpr << ") is not supported" + << "by the style and might result in drawing artifacts"; + return 1; + }(); + + return int(qCeil(qreal(size) / qreal(multiplier)) * multiplier); +} + +QQuickStyleItem::QQuickStyleItem(QQuickItem *parent) + : QQuickItem(parent) +{ + setFlag(QQuickItem::ItemHasContents); +} + +QQuickStyleItem::~QQuickStyleItem() +{ +} + +void QQuickStyleItem::connectToControl() const +{ + connect(m_control, &QQuickStyleItem::enabledChanged, this, &QQuickStyleItem::markImageDirty); + connect(m_control, &QQuickItem::activeFocusChanged, this, &QQuickStyleItem::markImageDirty); + + if (QQuickWindow *win = window()) { + connect(win, &QQuickWindow::activeChanged, this, &QQuickStyleItem::markImageDirty); + m_connectedWindow = win; + } +} + +void QQuickStyleItem::markImageDirty() +{ + m_dirty.setFlag(DirtyFlag::Image); + polish(); +} + +void QQuickStyleItem::markGeometryDirty() +{ + m_dirty.setFlag(DirtyFlag::Geometry); + polish(); +} + +QSGNode *QQuickStyleItem::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *) +{ + QSGNinePatchNode *node = static_cast(oldNode); + if (!node) + node = window()->createNinePatchNode(); + if (m_paintedImage.isNull()) + return node; + + const auto texture = window()->createTextureFromImage(m_paintedImage, QQuickWindow::TextureCanUseAtlas); + + QRectF bounds = boundingRect(); + const qreal dpr = window()->devicePixelRatio(); + const QSizeF unscaledImageSize = QSizeF(m_paintedImage.size()) / dpr; + + // We can scale the image up with a nine patch node, but should + // avoid to scale it down. Otherwise the nine patch image will look + // wrapped (or look truncated, in case of no padding). So if the + // item is smaller that the image, don't scale. + if (bounds.width() < unscaledImageSize.width()) + bounds.setWidth(unscaledImageSize.width()); + if (bounds.height() < unscaledImageSize.height()) + bounds.setHeight(unscaledImageSize.height()); + +#ifdef QT_DEBUG + if (m_debugFlags.testFlag(Unscaled)) { + bounds.setSize(unscaledImageSize); + qqc2Info() << "Setting qsg node size to the unscaled size of m_paintedImage:" << bounds; + } +#endif + + if (m_useNinePatchImage) { + QMargins padding = m_styleItemGeometry.ninePatchMargins; + if (padding.right() == -1) { + // Special case: a padding of -1 means that + // the image shouldn't scale in the given direction. + padding.setLeft(0); + padding.setRight(0); + } + if (padding.bottom() == -1) { + padding.setTop(0); + padding.setBottom(0); + } + node->setPadding(padding.left(), padding.top(), padding.right(), padding.bottom()); + } + + node->setBounds(bounds); + node->setTexture(texture); + node->setDevicePixelRatio(dpr); + node->update(); + + return node; +} + +QStyle::State QQuickStyleItem::controlSize(QQuickItem *item) +{ + // TODO: add proper API for small and mini + if (item->metaObject()->indexOfProperty("qqc2_style_small") != -1) + return QStyle::State_Small; + if (item->metaObject()->indexOfProperty("qqc2_style_mini") != -1) + return QStyle::State_Mini; + return QStyle::State_None; +} + +void QQuickStyleItem::initStyleOptionBase(QStyleOption &styleOption) const +{ + Q_ASSERT(m_control); + + styleOption.control = const_cast(control()); + styleOption.window = window(); + styleOption.palette = QQuickItemPrivate::get(m_control)->palette()->toQPalette(); + styleOption.rect = QRect(QPoint(0, 0), imageSize()); + + styleOption.state = QStyle::State_None; + styleOption.state |= controlSize(styleOption.control); + + // Note: not all controls inherit from QQuickControl (e.g QQuickTextField) + if (const auto quickControl = dynamic_cast(m_control.data())) + styleOption.direction = quickControl->isMirrored() ? Qt::RightToLeft : Qt::LeftToRight; + + if (window()) { + if (styleOption.window->isActive()) + styleOption.state |= QStyle::State_Active; + if (m_control->isEnabled()) + styleOption.state |= QStyle::State_Enabled; + if (m_control->hasActiveFocus()) + styleOption.state |= QStyle::State_HasFocus; + if (m_control->isUnderMouse()) + styleOption.state |= QStyle::State_MouseOver; + // Should this depend on the focusReason (e.g. only TabFocus) ? + styleOption.state |= QStyle::State_KeyboardFocusChange; + } + + if (m_overrideState != None) { + // In Button.qml we fade between two versions of + // the handle, depending on if it's hovered or not + if (m_overrideState & AlwaysHovered) + styleOption.state |= QStyle::State_MouseOver; + else if (m_overrideState & NeverHovered) + styleOption.state &= ~QStyle::State_MouseOver; + } + + qqc2Info() << styleOption; +} + +void QQuickStyleItem::geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) +{ + QQuickItem::geometryChange(newGeometry, oldGeometry); + + // Ensure that we only schedule a new geometry update + // and polish if this geometry change was caused by + // something else than us already updating geometry. + if (!m_polishing) + markGeometryDirty(); +} + +void QQuickStyleItem::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data) +{ + QQuickItem::itemChange(change, data); + + switch (change) { + case QQuickItem::ItemVisibleHasChanged: + if (data.boolValue) + markImageDirty(); + break; + case QQuickItem::ItemSceneChange: { + markImageDirty(); + QQuickWindow *win = data.window; + if (m_connectedWindow) + disconnect(m_connectedWindow, &QQuickWindow::activeChanged, this, &QQuickStyleItem::markImageDirty); + if (win) + connect(win, &QQuickWindow::activeChanged, this, &QQuickStyleItem::markImageDirty); + m_connectedWindow = win; + break;} + default: + break; + } +} + +void QQuickStyleItem::updateGeometry() +{ + qqc2InfoHeading("GEOMETRY"); + m_dirty.setFlag(DirtyFlag::Geometry, false); + + const QQuickStyleMargins oldContentPadding = contentPadding(); + const QQuickStyleMargins oldLayoutMargins = layoutMargins(); + const QSize oldMinimumSize = minimumSize(); + + m_styleItemGeometry = calculateGeometry(); + +#ifdef QT_DEBUG + if (m_styleItemGeometry.minimumSize.isEmpty()) + qmlWarning(this) << "minimumSize is empty!"; +#endif + + if (m_styleItemGeometry.implicitSize.isEmpty()) { + // If the item has no contents (or its size is + // empty), we just use the minimum size as implicit size. + m_styleItemGeometry.implicitSize = m_styleItemGeometry.minimumSize; + qqc2Info() << "implicitSize is empty, using minimumSize instead"; + } + + if (contentPadding() != oldContentPadding) + emit contentPaddingChanged(); + if (layoutMargins() != oldLayoutMargins) + emit layoutMarginsChanged(); + if (minimumSize() != oldMinimumSize) + emit minimumSizeChanged(); + + setImplicitSize(m_styleItemGeometry.implicitSize.width(), m_styleItemGeometry.implicitSize.height()); + + qqc2Info() << m_styleItemGeometry + << "bounding rect:" << boundingRect() + << "layout margins:" << layoutMargins() + << "content padding:" << contentPadding() + << "input content size:" << m_contentSize; +} + +void QQuickStyleItem::paintControlToImage() +{ + qqc2InfoHeading("PAINT"); + const QSize imgSize = imageSize(); + if (imgSize.isEmpty()) + return; + + m_dirty.setFlag(DirtyFlag::Image, false); + + // The size of m_paintedImage should normally be imgSize * dpr. The problem is + // that the dpr can be e.g 1.25, which means that the size can end up having a + // fraction. But an image cannot have a size with a fraction, so it would need + // to be rounded. But on the flip side, rounding the size means that the size + // of the scene graph node (which is, when the texture is not scaled, + // m_paintedImage.size() / dpr), will end up with a fraction instead. And this + // causes rendering artifacts in the scene graph when the texture is mapped + // to physical screen coordinates. So for that reason we calculate an image size + // that might be slightly larger than imgSize, so that imgSize * dpr lands on a + // whole number. The result is that neither the image size, nor the scene graph + // node, ends up with a size that has a fraction. + const qreal dpr = window()->devicePixelRatio(); + const int alignedW = int(dprAlignedSize(imgSize.width()) * dpr); + const int alignedH = int(dprAlignedSize(imgSize.height()) * dpr); + const QSize alignedSize = QSize(alignedW, alignedH); + + if (m_paintedImage.size() != alignedSize) { + m_paintedImage = QImage(alignedSize, QImage::Format_ARGB32_Premultiplied); + m_paintedImage.setDevicePixelRatio(dpr); + qqc2Info() << "created image with dpr aligned size:" << alignedSize; + } + + m_paintedImage.fill(Qt::transparent); + + QPainter painter(&m_paintedImage); + paintEvent(&painter); + +#ifdef QT_DEBUG + if (m_debugFlags != NoDebug) { + painter.setPen(QColor(255, 0, 0, 255)); + if (m_debugFlags.testFlag(ImageRect)) + painter.drawRect(QRect(QPoint(0, 0), alignedSize / dpr)); + if (m_debugFlags.testFlag(LayoutRect)) { + const auto m = layoutMargins(); + QRect rect = QRect(QPoint(0, 0), imgSize); + rect.adjust(m.left(), m.top(), -m.right(), -m.bottom()); + painter.drawRect(rect); + } + if (m_debugFlags.testFlag(ContentRect)) { + const auto p = contentPadding(); + QRect rect = QRect(QPoint(0, 0), imgSize); + rect.adjust(p.left(), p.top(), -p.right(), -p.bottom()); + painter.drawRect(rect); + } + if (m_debugFlags.testFlag(InputContentSize)) { + const int offset = 2; + const QPoint p = m_styleItemGeometry.contentRect.topLeft(); + painter.drawLine(p.x() - offset, p.y() - offset, p.x() + m_contentSize.width(), p.y() - offset); + painter.drawLine(p.x() - offset, p.y() - offset, p.x() - offset, p.y() + m_contentSize.height()); + } + if (m_debugFlags.testFlag(NinePatchMargins)) { + const QMargins m = m_styleItemGeometry.ninePatchMargins; + if (m.right() != -1) { + painter.drawLine(m.left(), 0, m.left(), imgSize.height()); + painter.drawLine(imgSize.width() - m.right(), 0, imgSize.width() - m.right(), imgSize.height()); + } + if (m.bottom() != -1) { + painter.drawLine(0, m.top(), imgSize.width(), m.top()); + painter.drawLine(0, imgSize.height() - m.bottom(), imgSize.width(), imgSize.height() - m.bottom()); + } + } + if (m_debugFlags.testFlag(SaveImage)) { + static int nr = -1; + ++nr; + static QString filename = QStringLiteral("styleitem_saveimage_"); + const QString path = QDir::current().absoluteFilePath(filename); + const QString name = path + QString::number(nr) + QStringLiteral(".png"); + m_paintedImage.save(name); + qDebug() << "image saved to:" << name; + } + } +#endif + + update(); +} + +void QQuickStyleItem::updatePolish() +{ + QScopedValueRollback guard(m_polishing, true); + + const bool dirtyGeometry = m_dirty & DirtyFlag::Geometry; + const bool dirtyImage = isVisible() && ((m_dirty & DirtyFlag::Image) || (!m_useNinePatchImage && dirtyGeometry)); + + if (dirtyGeometry) + updateGeometry(); + if (dirtyImage) + paintControlToImage(); +} + +#ifdef QT_DEBUG +void QQuickStyleItem::addDebugInfo() +{ + // Example debug strings: + // "QQC2_NATIVESTYLE_DEBUG="myButton output contentRect" + // "QQC2_NATIVESTYLE_DEBUG="ComboBox ninepatchmargins" + // "QQC2_NATIVESTYLE_DEBUG="All layoutrect" + + static const auto debugString = qEnvironmentVariable("QQC2_NATIVESTYLE_DEBUG"); + static const auto matchAll = debugString.startsWith(QLatin1String("All ")); + static const auto prefix = QStringLiteral("QQuickStyleItem"); + if (debugString.isEmpty()) + return; + + const auto objectName = m_control->objectName(); + const auto typeName = QString::fromUtf8(metaObject()->className()).remove(prefix); + const bool matchName = !objectName.isEmpty() && debugString.startsWith(objectName); + const bool matchType = debugString.startsWith(typeName); + + if (!(matchAll || matchName || matchType)) + return; + +#define QQC2_DEBUG_FLAG(FLAG) \ + if (debugString.contains(QLatin1String(#FLAG), Qt::CaseInsensitive)) m_debugFlags |= FLAG + + QQC2_DEBUG_FLAG(Info); + QQC2_DEBUG_FLAG(ImageRect); + QQC2_DEBUG_FLAG(ContentRect); + QQC2_DEBUG_FLAG(LayoutRect); + QQC2_DEBUG_FLAG(InputContentSize); + QQC2_DEBUG_FLAG(DontUseNinePatchImage); + QQC2_DEBUG_FLAG(NinePatchMargins); + QQC2_DEBUG_FLAG(Unscaled); + QQC2_DEBUG_FLAG(Debug); + QQC2_DEBUG_FLAG(SaveImage); + + if (m_debugFlags & (DontUseNinePatchImage + | InputContentSize + | ContentRect + | LayoutRect + | NinePatchMargins)) { + // Some rects will not fit inside the drawn image unless + // we switch off (nine patch) image scaling. + m_debugFlags |= DontUseNinePatchImage; + m_useNinePatchImage = false; + } + + if (m_debugFlags != NoDebug) + qDebug() << "debug options set for" << typeName << "(" << objectName << "):" << m_debugFlags; + else + qDebug() << "available debug options:" << DebugFlags(0xFFFF); +} +#endif + +void QQuickStyleItem::componentComplete() +{ + Q_ASSERT_X(m_control, Q_FUNC_INFO, "You need to assign a value to property 'control'"); +#ifdef QT_DEBUG + addDebugInfo(); +#endif + QQuickItem::componentComplete(); + connectToControl(); + polish(); +} + +qreal QQuickStyleItem::contentWidth() +{ + return m_contentSize.width(); +} + +void QQuickStyleItem::setContentWidth(qreal contentWidth) +{ + if (qFuzzyCompare(m_contentSize.width(), contentWidth)) + return; + + m_contentSize.setWidth(contentWidth); + markGeometryDirty(); +} + +qreal QQuickStyleItem::contentHeight() +{ + return m_contentSize.height(); +} + +void QQuickStyleItem::setContentHeight(qreal contentHeight) +{ + if (qFuzzyCompare(m_contentSize.height(), contentHeight)) + return; + + m_contentSize.setHeight(contentHeight); + markGeometryDirty(); +} + +QQuickStyleMargins QQuickStyleItem::contentPadding() const +{ + const QRect outerRect(QPoint(0, 0), m_styleItemGeometry.implicitSize); + return QQuickStyleMargins(outerRect, m_styleItemGeometry.contentRect); +} + +QQuickStyleMargins QQuickStyleItem::layoutMargins() const +{ + // ### TODO: layoutRect is currently not being used for anything. But + // eventually this information will be needed by layouts to align the controls + // correctly. This because the images drawn by QStyle are usually a bit bigger + // than the control(frame) itself, to e.g make room for shadow effects + // or focus rects/glow. And this will differ from control to control. The + // layoutRect will then inform where the frame of the control is. + QQuickStyleMargins margins; + if (m_styleItemGeometry.layoutRect.isValid()) { + const QRect outerRect(QPoint(0, 0), m_styleItemGeometry.implicitSize); + margins = QQuickStyleMargins(outerRect, m_styleItemGeometry.layoutRect); + } + return margins; +} + +QSize QQuickStyleItem::minimumSize() const +{ + // The style item should not be scaled below this size. + // Otherwise the image will be truncated. + return m_styleItemGeometry.minimumSize; +} + +QSize QQuickStyleItem::imageSize() const +{ + // Returns the size of the QImage (unscaled) that + // is used to draw the control from QStyle. + return m_useNinePatchImage ? m_styleItemGeometry.minimumSize : size().toSize(); +} + +qreal QQuickStyleItem::focusFrameRadius() const +{ + return m_styleItemGeometry.focusFrameRadius; +} + +QFont QQuickStyleItem::styleFont(QQuickItem *control) const +{ + Q_ASSERT(control); + // Note: This function should be treated as if it was static + // (meaning, don't assume anything in this object to be initialized). + // Resolving the font/font size should be done early on from QML, before we get + // around to calculate geometry and paint. Otherwise we typically need to do it + // all over again when/if the font changes. In practice this means that other + // items in QML that uses a style font, and at the same time, affects our input + // contentSize, cannot wait for this item to be fully constructed before it + // gets the font. So we need to resolve it here and now, even if this + // object might be in a half initialized state (hence also the control + // argument, instead of relying on m_control to be set). + return QGuiApplication::font(); +} + +QT_END_NAMESPACE diff --git a/src/quicknativestyle/items/qquickstyleitem.h b/src/quicknativestyle/items/qquickstyleitem.h new file mode 100644 index 00000000..3b87faf6 --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitem.h @@ -0,0 +1,311 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKSTYLEITEM_H +#define QQUICKSTYLEITEM_H + +#include +#include +#include +#include +#include + +#include "qquicknativestyle.h" +#include "qquickstyle.h" +#include "qquickstyleoption.h" + +// Work-around for now, to avoid creator getting confused +// about missing macros. Should eventually be defined +// in qt declarative somewhere I assume. +#ifndef QML_NAMED_ELEMENT +#define QML_NAMED_ELEMENT(NAME) +#define QML_UNCREATABLE(NAME) +#endif + +#ifdef QT_DEBUG +#define qqc2Debug() if (m_debugFlags.testFlag(Debug)) qDebug() << __FUNCTION__ << ":" +#define qqc2Info() if (m_debugFlags.testFlag(Info)) qDebug() << __FUNCTION__ << ":" +#define qqc2InfoHeading(HEADING) if (m_debugFlags.testFlag(Info)) qDebug() << "--------" << HEADING << "--------" +#else +#define qqc2Debug() if (false) qDebug() +#define qqc2Info() if (false) qDebug() +#define qqc2InfoHeading(HEADING) if (false) qDebug() +#endif + +QT_BEGIN_NAMESPACE + +using namespace QQC2; + +class QQuickStyleMargins +{ + Q_GADGET + + Q_PROPERTY(int left READ left()) + Q_PROPERTY(int top READ top()) + Q_PROPERTY(int right READ right()) + Q_PROPERTY(int bottom READ bottom()) + + QML_NAMED_ELEMENT(stylemargins) + QML_UNCREATABLE("") + +public: + QQuickStyleMargins() {} + QQuickStyleMargins(const QQuickStyleMargins &other) : m_margins(other.m_margins) {} + QQuickStyleMargins(const QMargins &margins) : m_margins(margins) {} + QQuickStyleMargins(const QRect &outer, const QRect &inner) + { + const int left = inner.left() - outer.left(); + const int top = inner.top() - outer.top(); + const int right = outer.right() - inner.right(); + const int bottom = outer.bottom() - inner.bottom(); + m_margins = QMargins(left, top, right, bottom); + } + + inline void operator=(const QQuickStyleMargins &other) { m_margins = other.m_margins; } + inline bool operator==(const QQuickStyleMargins &other) const { return other.m_margins == m_margins; } + inline bool operator!=(const QQuickStyleMargins &other) const { return other.m_margins != m_margins; } + + inline int left() const { return m_margins.left(); } + inline int right() const { return m_margins.right(); } + inline int top() const { return m_margins.top(); } + inline int bottom() const { return m_margins.bottom(); } + + QMargins m_margins; +}; + +QDebug operator<<(QDebug debug, const QQuickStyleMargins &padding); + +struct StyleItemGeometry +{ + /* + A QQuickStyleItem is responsible for drawing a control, or a part of it. + + 'minimumSize' should be the minimum possible size that the item can + have _without_ taking content size into consideration (and still render + correctly). This will also be the size of the image that the item is drawn + to, unless QQuickStyleItem::useNinePatchImage is set to false. In that + case, the size of the image will be set to the size of the item instead + (which is set from QML, and will typically be the same as the size of the control). + The default way to calculate minimumSize is to call style()->sizeFromContents() + with an empty content size. This is not always well supported by the legacy QStyle + implementation, which means that you might e.g get an empty size in return. + For those cases, the correct solution is to go into the specific platform style + and change it so that it returns a valid size also for this special case. + + 'implicitSize' should reflect the preferred size of the item, taking the + given content size (as set from QML) into account. But not all controls + have contents (slider), and for many controls, the content/label is instead + placed outside the item/background image (radiobutton). In both cases, the + size of the item will not include the content size, and implicitSize can + usually be set equal to minimumSize instead. + + 'contentRect' should be the free space where the contents can be placed. Note that + this rect doesn't need to have the same size as the contentSize provided as input + to the style item. Instead, QStyle can typically calculate a rect that is bigger, to + e.g center the contents inside the control. + + 'layoutRect' can be set to shift the position of the whole control so + that aligns correctly with the other controls. This is important for + controls that draws e.g shadows or focus rings. Such adornments should + be painted, but not be included when aligning the controls. + */ + + QSize minimumSize; + QSize implicitSize; + QRect contentRect; + QRect layoutRect; // If invalid, there are no layout margins! + QMargins ninePatchMargins; + qreal focusFrameRadius; +}; + +QDebug operator<<(QDebug debug, const StyleItemGeometry &cg); + +class QQuickStyleItem : public QQuickItem +{ + Q_OBJECT + + // Input + Q_PROPERTY(QQuickItem *control MEMBER m_control NOTIFY controlChanged) + Q_PROPERTY(qreal contentWidth READ contentWidth WRITE setContentWidth) + Q_PROPERTY(qreal contentHeight READ contentHeight WRITE setContentHeight) + Q_PROPERTY(bool useNinePatchImage MEMBER m_useNinePatchImage) + Q_PROPERTY(OverrideState overrideState MEMBER m_overrideState) + + // Output + Q_PROPERTY(QQuickStyleMargins contentPadding READ contentPadding() NOTIFY contentPaddingChanged) + Q_PROPERTY(QQuickStyleMargins layoutMargins READ layoutMargins() NOTIFY layoutMarginsChanged) + Q_PROPERTY(QSize minimumSize READ minimumSize() NOTIFY minimumSizeChanged) + Q_PROPERTY(int transitionDuration MEMBER m_transitionDuration CONSTANT) + + QML_NAMED_ELEMENT(StyleItem) + QML_UNCREATABLE("StyleItem is an abstract base class.") + +public: + enum DirtyFlag { + Nothing = 0, + Geometry, + Image, + Everything = 255 + }; + Q_DECLARE_FLAGS(DirtyFlags, DirtyFlag) + + enum OverrideState { + None = 0, + AlwaysHovered, + NeverHovered, + AlwaysSunken + }; + Q_ENUM(OverrideState) + + +#ifdef QT_DEBUG + enum DebugFlag { + NoDebug = 0x000, + Debug = 0x001, + Info = 0x002, + ImageRect = 0x004, + ContentRect = 0x008, + LayoutRect = 0x010, + Unscaled = 0x020, + InputContentSize = 0x040, + DontUseNinePatchImage = 0x080, + NinePatchMargins = 0x100, + SaveImage = 0x200, + }; + Q_FLAG(DebugFlag) + Q_DECLARE_FLAGS(DebugFlags, DebugFlag) +#endif + + explicit QQuickStyleItem(QQuickItem *parent = nullptr); + ~QQuickStyleItem() override; + + qreal contentWidth(); + void setContentWidth(qreal contentWidth); + qreal contentHeight(); + void setContentHeight(qreal contentHeight); + + QQuickStyleMargins contentPadding() const; + QQuickStyleMargins layoutMargins() const; + QSize minimumSize() const; + QSize imageSize() const; + qreal focusFrameRadius() const; + + Q_INVOKABLE virtual QFont styleFont(QQuickItem *control) const; + + void markGeometryDirty(); + void markImageDirty(); + +signals: + void controlChanged(); + void contentPaddingChanged(); + void layoutMarginsChanged(); + void fontChanged(); + void minimumSizeChanged(); + +protected: + void componentComplete() override; + QSGNode *updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *updatePaintNodeData) override; + void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override; + void itemChange(ItemChange change, const ItemChangeData &data) override; + void updatePolish() override; + + virtual void connectToControl() const; + virtual void paintEvent(QPainter *painter) const = 0; + virtual StyleItemGeometry calculateGeometry() = 0; + + static QStyle::State controlSize(QQuickItem *item); + void initStyleOptionBase(QStyleOption &styleOption) const; + + inline QSize contentSize() const { return QSize(qCeil(m_contentSize.width()), qCeil(m_contentSize.height())); } + inline static QStyle *style() { return QQuickNativeStyle::style(); } + + template inline const T* control() const { +#ifdef QT_DEBUG + if (!dynamic_cast(m_control.data())) { + qmlWarning(this) << "control property is not of correct type"; + Q_UNREACHABLE(); + } +#endif + return static_cast(m_control.data()); + } + +#ifdef QT_DEBUG + DebugFlags m_debugFlags = NoDebug; +#endif + OverrideState m_overrideState = None; + +private: + inline void updateGeometry(); + inline void paintControlToImage(); + + int dprAlignedSize(const int size) const; + +#ifdef QT_DEBUG + void addDebugInfo(); +#endif + +private: + QPointer m_control; + QImage m_paintedImage; + StyleItemGeometry m_styleItemGeometry; + QSizeF m_contentSize; + + DirtyFlags m_dirty = Everything; + bool m_useNinePatchImage = true; + bool m_polishing = false; + mutable QQuickWindow *m_connectedWindow = nullptr; + +#ifdef Q_OS_MACOS + int m_transitionDuration = 150; +#else + int m_transitionDuration = 400; +#endif + +private: + friend class QtQuickControls2MacOSStylePlugin; +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(QQuickStyleItem::DirtyFlags) + +#ifdef QT_DEBUG +Q_DECLARE_OPERATORS_FOR_FLAGS(QQuickStyleItem::DebugFlags) +#endif + +QT_END_NAMESPACE + +QML_DECLARE_TYPE(QQuickStyleItem) + +#endif // QQUICKSTYLEITEM_H diff --git a/src/quicknativestyle/items/qquickstyleitembutton.cpp b/src/quicknativestyle/items/qquickstyleitembutton.cpp new file mode 100644 index 00000000..5dfe060f --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitembutton.cpp @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickstyleitembutton.h" + +QFont QQuickStyleItemButton::styleFont(QQuickItem *control) const +{ + return style()->font(QStyle::CE_PushButtonLabel, controlSize(control)); +} + +void QQuickStyleItemButton::connectToControl() const +{ + QQuickStyleItem::connectToControl(); + auto button = control(); + connect(button, &QQuickButton::downChanged, this, &QQuickStyleItem::markImageDirty); +} + +StyleItemGeometry QQuickStyleItemButton::calculateGeometry() +{ + QStyleOptionButton styleOption; + initStyleOption(styleOption); + StyleItemGeometry geometry; + + geometry.minimumSize = style()->sizeFromContents(QStyle::CT_PushButton, &styleOption, QSize(0, 0)); + geometry.implicitSize = style()->sizeFromContents(QStyle::CT_PushButton, &styleOption, contentSize()); + styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize); + geometry.contentRect = style()->subElementRect(QStyle::SE_PushButtonContents, &styleOption); + geometry.layoutRect = style()->subElementRect(QStyle::SE_PushButtonLayoutItem, &styleOption); + geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CE_PushButtonBevel, &styleOption, geometry.minimumSize); + geometry.focusFrameRadius = style()->pixelMetric(QStyle::PM_PushButtonFocusFrameRadius, &styleOption); + + return geometry; +} + +void QQuickStyleItemButton::paintEvent(QPainter *painter) const +{ + QStyleOptionButton styleOption; + initStyleOption(styleOption); + style()->drawControl(QStyle::CE_PushButtonBevel, &styleOption, painter); +} + +void QQuickStyleItemButton::initStyleOption(QStyleOptionButton &styleOption) const +{ + initStyleOptionBase(styleOption); + auto button = control(); + + if (button->isDown()) + styleOption.state |= QStyle::State_Sunken; + if (!button->isFlat() && !button->isDown()) + styleOption.state |= QStyle::State_Raised; + if (button->isHighlighted() || button->isChecked()) + styleOption.state |= QStyle::State_On; + if (button->isFlat()) + styleOption.features |= QStyleOptionButton::Flat; +} diff --git a/src/quicknativestyle/items/qquickstyleitembutton.h b/src/quicknativestyle/items/qquickstyleitembutton.h new file mode 100644 index 00000000..41ca0cf1 --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitembutton.h @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKSTYLEITEMBUTTON_H +#define QQUICKSTYLEITEMBUTTON_H + +#include "qquickstyleitem.h" +#include + +class QQuickStyleItemButton : public QQuickStyleItem +{ + Q_OBJECT + QML_NAMED_ELEMENT(Button) + +public: + QFont styleFont(QQuickItem *control) const override; + +protected: + void connectToControl() const override; + void paintEvent(QPainter *painter) const override; + StyleItemGeometry calculateGeometry() override; + +private: + void initStyleOption(QStyleOptionButton &styleOption) const; +}; + +#endif // QQUICKSTYLEITEMBUTTON_H diff --git a/src/quicknativestyle/items/qquickstyleitemcheckbox.cpp b/src/quicknativestyle/items/qquickstyleitemcheckbox.cpp new file mode 100644 index 00000000..6c4ac8ea --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemcheckbox.cpp @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickstyleitemcheckbox.h" + +QFont QQuickStyleItemCheckBox::styleFont(QQuickItem *control) const +{ + return style()->font(QStyle::CE_RadioButtonLabel, controlSize(control)); +} + +void QQuickStyleItemCheckBox::connectToControl() const +{ + QQuickStyleItem::connectToControl(); + auto checkbox = control(); + connect(checkbox, &QQuickCheckBox::downChanged, this, &QQuickStyleItem::markImageDirty); + connect(checkbox, &QQuickCheckBox::checkStateChanged, this, &QQuickStyleItem::markImageDirty); +} + +StyleItemGeometry QQuickStyleItemCheckBox::calculateGeometry() +{ + QStyleOptionButton styleOption; + initStyleOption(styleOption); + StyleItemGeometry geometry; + + geometry.minimumSize = style()->sizeFromContents(QStyle::CT_CheckBox, &styleOption, QSize(0, 0)); + geometry.implicitSize = geometry.minimumSize; + styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize); + geometry.contentRect = style()->subElementRect(QStyle::SE_CheckBoxContents, &styleOption); + geometry.layoutRect = style()->subElementRect(QStyle::SE_CheckBoxLayoutItem, &styleOption); + geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CE_CheckBox, &styleOption, geometry.minimumSize); + geometry.focusFrameRadius = style()->pixelMetric(QStyle::PM_CheckBoxFocusFrameRadius, &styleOption); + + // Spacing seems to already be baked into SE_CheckBoxContents, so ignore until needed + //const int space = style()->pixelMetric(QStyle::PM_CheckBoxLabelSpacing, &styleOption); + + return geometry; +} + +void QQuickStyleItemCheckBox::paintEvent(QPainter *painter) const +{ + QStyleOptionButton styleOption; + initStyleOption(styleOption); + style()->drawControl(QStyle::CE_CheckBox, &styleOption, painter); +} + +void QQuickStyleItemCheckBox::initStyleOption(QStyleOptionButton &styleOption) const +{ + initStyleOptionBase(styleOption); + auto checkbox = control(); + + styleOption.state |= checkbox->isDown() ? QStyle::State_Sunken : QStyle::State_Raised; + if (checkbox->isTristate() && checkbox->checkState() == Qt::PartiallyChecked) + styleOption.state |= QStyle::State_NoChange; + else + styleOption.state |= checkbox->isChecked() ? QStyle::State_On : QStyle::State_Off; +} diff --git a/src/quicknativestyle/items/qquickstyleitemcheckbox.h b/src/quicknativestyle/items/qquickstyleitemcheckbox.h new file mode 100644 index 00000000..03bf34b9 --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemcheckbox.h @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKSTYLEITEMCHECKBOX_H +#define QQUICKSTYLEITEMCHECKBOX_H + +#include "qquickstyleitem.h" +#include + +class QQuickStyleItemCheckBox : public QQuickStyleItem +{ + Q_OBJECT + QML_NAMED_ELEMENT(CheckBox) + +public: + QFont styleFont(QQuickItem *control) const override; + +protected: + void connectToControl() const override; + void paintEvent(QPainter *painter) const override; + StyleItemGeometry calculateGeometry() override; + +private: + void initStyleOption(QStyleOptionButton &styleOption) const; +}; + +#endif // QQUICKSTYLEITEMCHECKBOX_H diff --git a/src/quicknativestyle/items/qquickstyleitemcombobox.cpp b/src/quicknativestyle/items/qquickstyleitemcombobox.cpp new file mode 100644 index 00000000..0ac3756e --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemcombobox.cpp @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickstyleitemcombobox.h" + +QFont QQuickStyleItemComboBox::styleFont(QQuickItem *control) const +{ + return style()->font(QStyle::CE_PushButtonLabel, controlSize(control)); +} + +void QQuickStyleItemComboBox::connectToControl() const +{ + QQuickStyleItem::connectToControl(); + auto comboBox = control(); + connect(comboBox, &QQuickComboBox::downChanged, this, &QQuickStyleItem::markImageDirty); +} + +StyleItemGeometry QQuickStyleItemComboBox::calculateGeometry() +{ + QStyleOptionComboBox styleOption; + initStyleOption(styleOption); + StyleItemGeometry geometry; + + geometry.minimumSize = style()->sizeFromContents(QStyle::CT_ComboBox, &styleOption, QSize(0, 0)); + geometry.implicitSize = style()->sizeFromContents(QStyle::CT_ComboBox, &styleOption, contentSize()); + styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize); + geometry.contentRect = style()->subControlRect(QStyle::CC_ComboBox, &styleOption, QStyle::SC_ComboBoxEditField); + geometry.layoutRect = style()->subElementRect(QStyle::SE_ComboBoxLayoutItem, &styleOption); + geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CC_ComboBox, &styleOption, geometry.minimumSize); + geometry.focusFrameRadius = style()->pixelMetric(QStyle::PM_ComboBoxFocusFrameRadius, &styleOption); + + return geometry; +} + +void QQuickStyleItemComboBox::paintEvent(QPainter *painter) const +{ + QStyleOptionComboBox styleOption; + initStyleOption(styleOption); + style()->drawComplexControl(QStyle::CC_ComboBox, &styleOption, painter); +} + +void QQuickStyleItemComboBox::initStyleOption(QStyleOptionComboBox &styleOption) const +{ + initStyleOptionBase(styleOption); + auto comboBox = control(); + + styleOption.subControls = QStyle::SC_ComboBoxArrow | QStyle::SC_ComboBoxFrame | QStyle::SC_ComboBoxEditField; + styleOption.frame = true; + styleOption.state |= QStyle::State_Selected; + styleOption.editable = comboBox->isEditable(); + + if (comboBox->isDown()) + styleOption.state |= QStyle::State_Sunken; + if (!comboBox->isFlat() && !comboBox->isDown()) + styleOption.state |= QStyle::State_Raised; +} diff --git a/src/quicknativestyle/items/qquickstyleitemcombobox.h b/src/quicknativestyle/items/qquickstyleitemcombobox.h new file mode 100644 index 00000000..79f1995e --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemcombobox.h @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKSTYLEITEMCOMBOBOX_H +#define QQUICKSTYLEITEMCOMBOBOX_H + +#include "qquickstyleitem.h" +#include + +class QQuickStyleItemComboBox : public QQuickStyleItem +{ + Q_OBJECT + QML_NAMED_ELEMENT(ComboBox) + +public: + QFont styleFont(QQuickItem *control) const override; + +protected: + void connectToControl() const override; + void paintEvent(QPainter *painter) const override; + StyleItemGeometry calculateGeometry() override; + +private: + void initStyleOption(QStyleOptionComboBox &styleOption) const; +}; + +#endif // QQUICKSTYLEITEMCOMBOBOX_H diff --git a/src/quicknativestyle/items/qquickstyleitemdial.cpp b/src/quicknativestyle/items/qquickstyleitemdial.cpp new file mode 100644 index 00000000..bf5784e1 --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemdial.cpp @@ -0,0 +1,111 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickstyleitemdial.h" + +QFont QQuickStyleItemDial::styleFont(QQuickItem *control) const +{ + return style()->font(QStyle::CE_ProgressBarLabel, controlSize(control)); +} + +void QQuickStyleItemDial::connectToControl() const +{ + QQuickStyleItem::connectToControl(); + auto dial = control(); + connect(dial, &QQuickDial::fromChanged, this, &QQuickStyleItem::markImageDirty); + connect(dial, &QQuickDial::toChanged, this, &QQuickStyleItem::markImageDirty); + connect(dial, &QQuickDial::positionChanged, this, &QQuickStyleItem::markImageDirty); + connect(dial, &QQuickDial::valueChanged, this, &QQuickStyleItem::markImageDirty); + connect(dial, &QQuickDial::stepSizeChanged, this, &QQuickStyleItem::markImageDirty); + connect(dial, &QQuickDial::pressedChanged, this, &QQuickStyleItem::markImageDirty); +} + +StyleItemGeometry QQuickStyleItemDial::calculateGeometry() +{ + QStyleOptionSlider styleOption; + initStyleOption(styleOption); + + StyleItemGeometry geometry; + geometry.minimumSize = style()->sizeFromContents(QStyle::CT_Dial, &styleOption, QSize(0, 0)); + geometry.implicitSize = geometry.minimumSize; + geometry.layoutRect = style()->subElementRect(QStyle::SE_SliderLayoutItem, &styleOption); + geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CC_Dial, &styleOption, geometry.minimumSize); + geometry.focusFrameRadius = style()->pixelMetric(QStyle::PM_DialFocusFrameRadius, &styleOption); + + return geometry; +} + +void QQuickStyleItemDial::paintEvent(QPainter *painter) const +{ + QStyleOptionSlider styleOption; + initStyleOption(styleOption); + style()->drawComplexControl(QStyle::CC_Dial, &styleOption, painter); +} + +void QQuickStyleItemDial::initStyleOption(QStyleOptionSlider &styleOption) const +{ + initStyleOptionBase(styleOption); + auto dial = control(); + + styleOption.subControls = QStyle::SC_SliderGroove | QStyle::SC_SliderHandle; + styleOption.activeSubControls = QStyle::SC_None; + styleOption.tickInterval = dial->stepSize(); + styleOption.dialWrapping = dial->wrap(); + styleOption.upsideDown = true; + + if (dial->isPressed()) + styleOption.state |= QStyle::State_Sunken; + + if (dial->stepSize() == 0) { + styleOption.minimum = 0; + styleOption.maximum = 10000; + styleOption.sliderPosition = dial->position() * styleOption.maximum; + } else { + styleOption.minimum = dial->from(); + styleOption.maximum = dial->to(); + styleOption.sliderPosition = dial->value(); + } + + // TODO: add proper API for tickmarks + const int index = dial->metaObject()->indexOfProperty("qqc2_style_tickPosition"); + if (index != -1) { + const int tickPosition = dial->metaObject()->property(index).read(dial).toInt(); + styleOption.tickPosition = QStyleOptionSlider::TickPosition(tickPosition); + if (styleOption.tickPosition != QStyleOptionSlider::NoTicks) + styleOption.subControls |= QStyle::SC_DialTickmarks; + } + +} diff --git a/src/quicknativestyle/items/qquickstyleitemdial.h b/src/quicknativestyle/items/qquickstyleitemdial.h new file mode 100644 index 00000000..569820fe --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemdial.h @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKSTYLEITEMDIAL_H +#define QQUICKSTYLEITEMDIAL_H + +#include "qquickstyleitem.h" +#include + +class QQuickStyleItemDial : public QQuickStyleItem +{ + Q_OBJECT + QML_NAMED_ELEMENT(Dial) + +public: + QFont styleFont(QQuickItem *control) const override; + +protected: + void connectToControl() const override; + void paintEvent(QPainter *painter) const override; + StyleItemGeometry calculateGeometry() override; + +private: + void initStyleOption(QStyleOptionSlider &styleOption) const; +}; + +#endif // QQUICKSTYLEITEMDIAL_H diff --git a/src/quicknativestyle/items/qquickstyleitemframe.cpp b/src/quicknativestyle/items/qquickstyleitemframe.cpp new file mode 100644 index 00000000..cf060492 --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemframe.cpp @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickstyleitemframe.h" + +StyleItemGeometry QQuickStyleItemFrame::calculateGeometry() +{ + QStyleOptionFrame styleOption; + initStyleOption(styleOption); + StyleItemGeometry geometry; + + geometry.minimumSize = style()->sizeFromContents(QStyle::CT_Frame, &styleOption, QSize(0, 0)); + geometry.implicitSize = contentSize(); + styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize); + geometry.contentRect = style()->subElementRect(QStyle::SE_FrameContents, &styleOption); + geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CE_ShapedFrame, &styleOption, geometry.minimumSize); + + return geometry; +} + +void QQuickStyleItemFrame::paintEvent(QPainter *painter) const +{ + QStyleOptionFrame styleOption; + initStyleOption(styleOption); + style()->drawControl(QStyle::CE_ShapedFrame, &styleOption, painter); +} + +void QQuickStyleItemFrame::initStyleOption(QStyleOptionFrame &styleOption) const +{ + initStyleOptionBase(styleOption); + styleOption.lineWidth = 1; + styleOption.frameShape = QStyleOptionFrame::StyledPanel; + styleOption.features = QStyleOptionFrame::Flat; +} diff --git a/src/quicknativestyle/items/qquickstyleitemframe.h b/src/quicknativestyle/items/qquickstyleitemframe.h new file mode 100644 index 00000000..8e8da68b --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemframe.h @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKSTYLEITEMFRAME_H +#define QQUICKSTYLEITEMFRAME_H + +#include "qquickstyleitem.h" +#include + +class QQuickStyleItemFrame : public QQuickStyleItem +{ + Q_OBJECT + QML_NAMED_ELEMENT(Frame) + +protected: + void paintEvent(QPainter *painter) const override; + StyleItemGeometry calculateGeometry() override; + +private: + void initStyleOption(QStyleOptionFrame &styleOption) const; +}; + +#endif // QQUICKSTYLEITEMFRAME_H diff --git a/src/quicknativestyle/items/qquickstyleitemgroupbox.cpp b/src/quicknativestyle/items/qquickstyleitemgroupbox.cpp new file mode 100644 index 00000000..a828160d --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemgroupbox.cpp @@ -0,0 +1,100 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickstyleitemgroupbox.h" + +QFont QQuickStyleItemGroupBox::styleFont(QQuickItem *control) const +{ + return style()->font(QStyle::CE_HeaderLabel, controlSize(control)); +} + +StyleItemGeometry QQuickStyleItemGroupBox::calculateGeometry() +{ + QStyleOptionGroupBox styleOption; + initStyleOption(styleOption); + + StyleItemGeometry geometry; + geometry.minimumSize = style()->sizeFromContents(QStyle::CT_GroupBox, &styleOption, QSize(0, 0)); + + if (!control()->title().isEmpty()) { + // We don't draw the title, but we need to take + // it into calculation for the control size + styleOption.text = QStringLiteral(" "); + styleOption.subControls |= QStyle::SC_GroupBoxLabel; + } + + geometry.implicitSize = style()->sizeFromContents(QStyle::CT_GroupBox, &styleOption, contentSize()); + styleOption.rect.setSize(geometry.implicitSize); + geometry.contentRect = style()->subControlRect(QStyle::CC_GroupBox, &styleOption, QStyle::SC_GroupBoxContents); + geometry.layoutRect = style()->subElementRect(QStyle::SE_GroupBoxLayoutItem, &styleOption); + geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CC_GroupBox, &styleOption, geometry.minimumSize); + + const QQuickStyleMargins oldGroupBoxPadding = m_groupBoxPadding; + const QRect frame = style()->subControlRect(QStyle::CC_GroupBox, &styleOption, QStyle::SC_GroupBoxFrame); + m_groupBoxPadding = QQuickStyleMargins(QRect(QPoint(), geometry.implicitSize), frame); + if (m_groupBoxPadding != oldGroupBoxPadding) + emit groupBoxPaddingChanged(); + + const QPointF oldLabelPos = m_labelPos; + m_labelPos = style()->subControlRect(QStyle::CC_GroupBox, &styleOption, QStyle::SC_GroupBoxLabel).topLeft(); + if (m_labelPos != oldLabelPos) + emit labelPosChanged(); + return geometry; +} + +void QQuickStyleItemGroupBox::paintEvent(QPainter *painter) const +{ + QStyleOptionGroupBox styleOption; + initStyleOption(styleOption); + style()->drawComplexControl(QStyle::CC_GroupBox, &styleOption, painter); +} + +void QQuickStyleItemGroupBox::initStyleOption(QStyleOptionGroupBox &styleOption) const +{ + initStyleOptionBase(styleOption); + styleOption.subControls = QStyle::SC_GroupBoxFrame; + styleOption.lineWidth = 1; +} + +QQuickStyleMargins QQuickStyleItemGroupBox::groupBoxPadding() const +{ + return m_groupBoxPadding; +} + +QPointF QQuickStyleItemGroupBox::labelPos() const +{ + return m_labelPos; +} diff --git a/src/quicknativestyle/items/qquickstyleitemgroupbox.h b/src/quicknativestyle/items/qquickstyleitemgroupbox.h new file mode 100644 index 00000000..2b07287f --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemgroupbox.h @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKSTYLEITEMGROUPBOX_H +#define QQUICKSTYLEITEMGROUPBOX_H + +#include "qquickstyleitem.h" +#include + +class QQuickStyleItemGroupBox : public QQuickStyleItem +{ + Q_OBJECT + Q_PROPERTY(QQuickStyleMargins groupBoxPadding READ groupBoxPadding NOTIFY groupBoxPaddingChanged) + Q_PROPERTY(QPointF labelPos READ labelPos NOTIFY labelPosChanged) + QML_NAMED_ELEMENT(GroupBox) + +public: + QQuickStyleMargins groupBoxPadding() const; + QPointF labelPos() const; + QFont styleFont(QQuickItem *control) const override; + +signals: + void groupBoxPaddingChanged(); + void labelPosChanged(); + +protected: + void paintEvent(QPainter *painter) const override; + StyleItemGeometry calculateGeometry() override; + +private: + QQuickStyleMargins m_groupBoxPadding; + QPointF m_labelPos; + + void initStyleOption(QStyleOptionGroupBox &styleOption) const; +}; + +#endif // QQUICKSTYLEITEMGROUPBOX_H diff --git a/src/quicknativestyle/items/qquickstyleitemprogressbar.cpp b/src/quicknativestyle/items/qquickstyleitemprogressbar.cpp new file mode 100644 index 00000000..480e8981 --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemprogressbar.cpp @@ -0,0 +1,114 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickstyleitemprogressbar.h" + +QFont QQuickStyleItemProgressBar::styleFont(QQuickItem *control) const +{ + return style()->font(QStyle::CE_ProgressBarLabel, controlSize(control)); +} + +void QQuickStyleItemProgressBar::connectToControl() const +{ + QQuickStyleItem::connectToControl(); + auto progressBar = control(); + connect(progressBar, &QQuickProgressBar::fromChanged, this, &QQuickStyleItem::markImageDirty); + connect(progressBar, &QQuickProgressBar::toChanged, this, &QQuickStyleItem::markImageDirty); + connect(progressBar, &QQuickProgressBar::positionChanged, this, &QQuickStyleItem::markImageDirty); +} + +StyleItemGeometry QQuickStyleItemProgressBar::calculateGeometry() +{ + QStyleOptionProgressBar styleOption; + initStyleOption(styleOption); + + StyleItemGeometry geometry; + geometry.minimumSize = style()->sizeFromContents(QStyle::CT_ProgressBar, &styleOption, QSize(0, 0)); + + // From qprogressbar.cpp in qtbase: + const int cw = style()->pixelMetric(QStyle::PM_ProgressBarChunkWidth, &styleOption); + QFontMetrics fm(control()->font()); + QSize size = QSize(qMax(9, cw) * 7 + fm.horizontalAdvance(QLatin1Char('0')) * 4, fm.height() + 8); + if (!(styleOption.state & QStyle::State_Horizontal)) + size = size.transposed(); + + geometry.implicitSize = style()->sizeFromContents(QStyle::CT_ProgressBar, &styleOption, size); + styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize); + geometry.contentRect = style()->subElementRect(QStyle::SE_ProgressBarContents, &styleOption); + geometry.layoutRect = style()->subElementRect(QStyle::SE_ProgressBarLayoutItem, &styleOption); + geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CE_ProgressBar, &styleOption, geometry.minimumSize); + + return geometry; +} + +void QQuickStyleItemProgressBar::paintEvent(QPainter *painter) const +{ + QStyleOptionProgressBar styleOption; + initStyleOption(styleOption); +#ifndef Q_OS_MACOS + const QRect r = styleOption.rect; +#endif + // Note: on macOS, the groove will paint both the background and the contents + styleOption.rect = style()->subElementRect(QStyle::SE_ProgressBarGroove, &styleOption); + style()->drawControl(QStyle::CE_ProgressBarGroove, &styleOption, painter); +#ifndef Q_OS_MACOS + styleOption.rect = r; + styleOption.rect = style()->subElementRect(QStyle::SE_ProgressBarContents, &styleOption); + style()->drawControl(QStyle::CE_ProgressBarContents, &styleOption, painter); +#endif +} + +void QQuickStyleItemProgressBar::initStyleOption(QStyleOptionProgressBar &styleOption) const +{ + initStyleOptionBase(styleOption); + auto progressBar = control(); + + styleOption.state = QStyle::State_Horizontal; + + if (progressBar->isIndeterminate()) { + styleOption.minimum = 0; + styleOption.maximum = 0; + } else if (progressBar->to() - progressBar->from() < 100) { + // Add some range to support float numbers + styleOption.minimum = 0; + styleOption.maximum = (progressBar->to() - progressBar->from()) * 100; + styleOption.progress = (progressBar->value() - progressBar->from()) * 100; + } else { + styleOption.minimum = progressBar->from(); + styleOption.maximum = progressBar->to(); + styleOption.progress = progressBar->value(); + } +} diff --git a/src/quicknativestyle/items/qquickstyleitemprogressbar.h b/src/quicknativestyle/items/qquickstyleitemprogressbar.h new file mode 100644 index 00000000..53692dbe --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemprogressbar.h @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKSTYLEITEMPROGRESSBAR_H +#define QQUICKSTYLEITEMPROGRESSBAR_H + +#include "qquickstyleitem.h" +#include + +class QQuickStyleItemProgressBar : public QQuickStyleItem +{ + Q_OBJECT + + QML_NAMED_ELEMENT(ProgressBar) + +public: + QFont styleFont(QQuickItem *control) const override; + +protected: + void connectToControl() const override; + void paintEvent(QPainter *painter) const override; + StyleItemGeometry calculateGeometry() override; + +private: + void initStyleOption(QStyleOptionProgressBar &styleOption) const; +}; + +#endif // QQUICKSTYLEITEMPROGRESSBAR_H diff --git a/src/quicknativestyle/items/qquickstyleitemradiobutton.cpp b/src/quicknativestyle/items/qquickstyleitemradiobutton.cpp new file mode 100644 index 00000000..655bb0b6 --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemradiobutton.cpp @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickstyleitemradiobutton.h" + +QFont QQuickStyleItemRadioButton::styleFont(QQuickItem *control) const +{ + return style()->font(QStyle::CE_RadioButtonLabel, controlSize(control)); +} + +void QQuickStyleItemRadioButton::connectToControl() const +{ + QQuickStyleItem::connectToControl(); + auto checkbox = control(); + connect(checkbox, &QQuickRadioButton::downChanged, this, &QQuickStyleItem::markImageDirty); + connect(checkbox, &QQuickRadioButton::checkedChanged, this, &QQuickStyleItem::markImageDirty); +} + +StyleItemGeometry QQuickStyleItemRadioButton::calculateGeometry() +{ + QStyleOptionButton styleOption; + initStyleOption(styleOption); + StyleItemGeometry geometry; + + geometry.minimumSize = style()->sizeFromContents(QStyle::CT_RadioButton, &styleOption, QSize(0, 0)); + geometry.implicitSize = geometry.minimumSize; + styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize); + geometry.contentRect = style()->subElementRect(QStyle::SE_RadioButtonContents, &styleOption); + geometry.layoutRect = style()->subElementRect(QStyle::SE_RadioButtonLayoutItem, &styleOption); + geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CE_RadioButton, &styleOption, geometry.minimumSize); + geometry.focusFrameRadius = style()->pixelMetric(QStyle::PM_RadioButtonFocusFrameRadius, &styleOption); + + return geometry; +} + +void QQuickStyleItemRadioButton::paintEvent(QPainter *painter) const +{ + QStyleOptionButton styleOption; + initStyleOption(styleOption); + style()->drawControl(QStyle::CE_RadioButton, &styleOption, painter); +} + +void QQuickStyleItemRadioButton::initStyleOption(QStyleOptionButton &styleOption) const +{ + initStyleOptionBase(styleOption); + auto checkbox = control(); + + styleOption.state |= checkbox->isDown() ? QStyle::State_Sunken : QStyle::State_Raised; + styleOption.state |= checkbox->isChecked() ? QStyle::State_On : QStyle::State_Off; +} diff --git a/src/quicknativestyle/items/qquickstyleitemradiobutton.h b/src/quicknativestyle/items/qquickstyleitemradiobutton.h new file mode 100644 index 00000000..56073d8f --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemradiobutton.h @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKSTYLEITEMRADIOBUTTON_H +#define QQUICKSTYLEITEMRADIOBUTTON_H + +#include "qquickstyleitem.h" +#include + +class QQuickStyleItemRadioButton : public QQuickStyleItem +{ + Q_OBJECT + QML_NAMED_ELEMENT(RadioButton) + +public: + QFont styleFont(QQuickItem *control) const override; + +protected: + void connectToControl() const override; + void paintEvent(QPainter *painter) const override; + StyleItemGeometry calculateGeometry() override; + +private: + void initStyleOption(QStyleOptionButton &styleOption) const; +}; + +#endif // QQUICKSTYLEITEMRADIOBUTTON_H diff --git a/src/quicknativestyle/items/qquickstyleitemscrollbar.cpp b/src/quicknativestyle/items/qquickstyleitemscrollbar.cpp new file mode 100644 index 00000000..d6d41d96 --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemscrollbar.cpp @@ -0,0 +1,151 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickstyleitemscrollbar.h" + +QFont QQuickStyleItemScrollBar::styleFont(QQuickItem *control) const +{ + return style()->font(QStyle::CE_ProgressBarLabel, controlSize(control)); +} + +void QQuickStyleItemScrollBar::connectToControl() const +{ + QQuickStyleItem::connectToControl(); + auto scrollBar = control(); + connect(scrollBar, &QQuickScrollBar::orientationChanged, this, &QQuickStyleItem::markImageDirty); + connect(scrollBar, &QQuickScrollBar::pressedChanged, this, &QQuickStyleItem::markImageDirty); +} + +StyleItemGeometry QQuickStyleItemScrollBar::calculateGeometry() +{ + QStyleOptionSlider styleOption; + initStyleOption(styleOption); + + StyleItemGeometry geometry; + geometry.minimumSize = style()->sizeFromContents(QStyle::CT_ScrollBar, &styleOption, QSize(0, 0)); + if (m_subControl == SubLine || m_subControl == AddLine) { + // So far, we know that only the windows style uses these subcontrols, + // so we can use hardcoded sizes... + QSize sz(16, 17); + if (styleOption.orientation == Qt::Vertical) + sz.transpose(); + geometry.minimumSize = sz; + } + geometry.implicitSize = geometry.minimumSize; + styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize); + geometry.layoutRect = style()->subElementRect(QStyle::SE_ScrollBarLayoutItem, &styleOption); + geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CC_ScrollBar, &styleOption, geometry.minimumSize); + + return geometry; +} + +void QQuickStyleItemScrollBar::paintEvent(QPainter *painter) const +{ + QStyleOptionSlider styleOption; + initStyleOption(styleOption); + if (m_subControl == SubLine || m_subControl == AddLine) { + QStyle::SubControl sc = m_subControl == SubLine ? QStyle::SC_ScrollBarSubLine : QStyle::SC_ScrollBarAddLine; + QStyleOptionSlider opt = styleOption; + opt.subControls = QStyle::SC_ScrollBarAddLine + | QStyle::SC_ScrollBarSubLine + | QStyle::SC_ScrollBarGroove; + + const qreal scale = window()->devicePixelRatio(); + const QSize scrollBarMinSize = style()->sizeFromContents(QStyle::CT_ScrollBar, &opt, QSize(0, 0)); + const QSize sz = scrollBarMinSize * scale; + QImage scrollBarImage(sz, QImage::Format_ARGB32_Premultiplied); + scrollBarImage.setDevicePixelRatio(scale); + QPainter p(&scrollBarImage); + opt.rect = QRect(QPoint(0, 0), scrollBarMinSize); + style()->drawComplexControl(QStyle::CC_ScrollBar, &opt, &p); + QRect sourceImageRect = style()->subControlRect(QStyle::CC_ScrollBar, &opt, sc); + sourceImageRect = QRect(sourceImageRect.topLeft() * scale, sourceImageRect.size() * scale); + painter->drawImage(QPoint(0, 0), scrollBarImage, sourceImageRect); + } else { + style()->drawComplexControl(QStyle::CC_ScrollBar, &styleOption, painter); + } +} + +void QQuickStyleItemScrollBar::initStyleOption(QStyleOptionSlider &styleOption) const +{ + initStyleOptionBase(styleOption); + auto scrollBar = control(); + + switch (m_subControl) { + case Groove: + styleOption.subControls = QStyle::SC_ScrollBarGroove | QStyle::SC_ScrollBarAddLine | QStyle::SC_ScrollBarSubLine; + break; + case Handle: + styleOption.subControls = QStyle::SC_ScrollBarSlider; + break; + case AddLine: + styleOption.subControls = QStyle::SC_ScrollBarAddLine; + break; + case SubLine: + styleOption.subControls = QStyle::SC_ScrollBarSubLine; + break; + } + + styleOption.activeSubControls = QStyle::SC_None; + styleOption.orientation = scrollBar->orientation(); + if (styleOption.orientation == Qt::Horizontal) + styleOption.state |= QStyle::State_Horizontal; + + if (scrollBar->isPressed()) + styleOption.state |= QStyle::State_Sunken; + + if (m_overrideState != None) { + // In ScrollBar.qml we fade between two versions of + // the handle, depending on if it's hovered or not + + if (m_overrideState == AlwaysHovered) { + styleOption.activeSubControls = (styleOption.subControls & (QStyle::SC_ScrollBarSlider | QStyle::SC_ScrollBarGroove | QStyle::SC_ScrollBarAddLine | QStyle::SC_ScrollBarSubLine)); + } else if (m_overrideState == NeverHovered) { + styleOption.activeSubControls &= ~(styleOption.subControls & (QStyle::SC_ScrollBarSlider | QStyle::SC_ScrollBarGroove | QStyle::SC_ScrollBarAddLine | QStyle::SC_ScrollBarSubLine)); + } else if (m_overrideState == AlwaysSunken) { + styleOption.state |= QStyle::State_Sunken; + styleOption.activeSubControls = (styleOption.subControls & (QStyle::SC_ScrollBarSlider | QStyle::SC_ScrollBarGroove | QStyle::SC_ScrollBarAddLine | QStyle::SC_ScrollBarSubLine)); + } + } + + // The following values will let the handle fill 100% of the + // groove / imageSize. But when the handle is resized by + // QQuickScrollBar, it will end up with the correct size visually. + styleOption.pageStep = 1000; + styleOption.minimum = 0; + styleOption.maximum = 1; + styleOption.sliderValue = 0; +} diff --git a/src/quicknativestyle/items/qquickstyleitemscrollbar.h b/src/quicknativestyle/items/qquickstyleitemscrollbar.h new file mode 100644 index 00000000..f89d8d3e --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemscrollbar.h @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKSTYLEITEMSCROLLBAR_H +#define QQUICKSTYLEITEMSCROLLBAR_H + +#include "qquickstyleitem.h" +#include + +class QQuickStyleItemScrollBar : public QQuickStyleItem +{ + Q_OBJECT + + Q_PROPERTY(SubControl subControl MEMBER m_subControl) + + QML_NAMED_ELEMENT(ScrollBar) + +public: + enum SubControl { + Groove = 1, + Handle, + AddLine, + SubLine + }; + Q_ENUM(SubControl) + + QFont styleFont(QQuickItem *control) const override; + +protected: + void connectToControl() const override; + void paintEvent(QPainter *painter) const override; + StyleItemGeometry calculateGeometry() override; + +private: + void initStyleOption(QStyleOptionSlider &styleOption) const; + +private: + SubControl m_subControl = Groove; +}; + +#endif // QQUICKSTYLEITEMSCROLLBAR_H diff --git a/src/quicknativestyle/items/qquickstyleitemscrollviewcorner.cpp b/src/quicknativestyle/items/qquickstyleitemscrollviewcorner.cpp new file mode 100644 index 00000000..3a992f2d --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemscrollviewcorner.cpp @@ -0,0 +1,119 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickstyleitemscrollviewcorner.h" + +StyleItemGeometry QQuickStyleItemScrollViewCorner::calculateGeometry() +{ + QStyleOptionSlider styleOption; + initStyleOption(styleOption); + + StyleItemGeometry geometry; + + // The size of the corner should be the width of the vertical + // scrollbar and the height of the horizontal scrollbar. + styleOption.orientation = Qt::Vertical; + const auto vScrollBarWidth = style()->sizeFromContents(QStyle::CT_ScrollBar, &styleOption, QSize(0, 0)).width(); + styleOption.orientation = Qt::Horizontal; + const auto hScrollBarHeight = style()->sizeFromContents(QStyle::CT_ScrollBar, &styleOption, QSize(0, 0)).height(); + + geometry.minimumSize = QSize(vScrollBarWidth, hScrollBarHeight); + geometry.implicitSize = geometry.minimumSize; + + return geometry; +} + +void QQuickStyleItemScrollViewCorner::paintEvent(QPainter *painter) const +{ + QStyleOptionSlider styleOption; + initStyleOption(styleOption); + + // Grab a center piece of a vertical scrollbar groove onto a QImage, and use this + // image to draw a corner. We draw the corner by first drawing the piece as it is, and + // then rotate it 90 degrees, clip it into a triangle, and draw it once more on top. + // The result is that we end up with one vertical and one horizontal triangle that + // together form a filled corner rectangle. + + styleOption.orientation = Qt::Vertical; + + const qreal scale = window()->devicePixelRatio(); + const int grooveWidth = minimumSize().width(); + const int grooveHeight = minimumSize().height(); + const QSize scrollBarMinSize = style()->sizeFromContents(QStyle::CT_ScrollBar, &styleOption, QSize(0, 0)); + const QSize scrollBarSize = scrollBarMinSize + QSize(0, grooveHeight); + const int hStart = scrollBarMinSize.height() / 2; + const QRect targetImageRect(0, hStart * scale, grooveWidth * scale, grooveHeight * scale); + + QImage scrollBarImage(scrollBarSize * scale, QImage::Format_ARGB32_Premultiplied); + scrollBarImage.setDevicePixelRatio(scale); + scrollBarImage.fill(Qt::transparent); + QPainter scrollBarPainter(&scrollBarImage); + styleOption.rect = QRect(QPoint(0, 0), scrollBarSize); + style()->drawComplexControl(QStyle::CC_ScrollBar, &styleOption, &scrollBarPainter); + + // Draw vertical groove + painter->drawImage(QPoint(0, 0), scrollBarImage, targetImageRect); + + QPainterPath path; + path.moveTo(0, 0); + path.lineTo(0, grooveHeight); + path.lineTo(grooveWidth, grooveHeight); + path.closeSubpath(); + + QTransform transform; + transform.translate(grooveWidth, 0); + transform.rotate(90); + + painter->save(); + painter->setCompositionMode(QPainter::CompositionMode_Source); + painter->setClipPath(path); + painter->setTransform(transform); + // Draw horizontal groove, clipped to a triangle + painter->drawImage(QPoint(0, 0), scrollBarImage, targetImageRect); + painter->restore(); +} + +void QQuickStyleItemScrollViewCorner::initStyleOption(QStyleOptionSlider &styleOption) const +{ + initStyleOptionBase(styleOption); + + styleOption.subControls = QStyle::SC_ScrollBarGroove; + styleOption.activeSubControls = QStyle::SC_None; + styleOption.pageStep = 1000; + styleOption.minimum = 0; + styleOption.maximum = 1; + styleOption.sliderValue = 0; +} diff --git a/src/quicknativestyle/items/qquickstyleitemscrollviewcorner.h b/src/quicknativestyle/items/qquickstyleitemscrollviewcorner.h new file mode 100644 index 00000000..637a8ea8 --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemscrollviewcorner.h @@ -0,0 +1,56 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKSTYLEITEMSCROLLVIEWCORNER_H +#define QQUICKSTYLEITEMSCROLLVIEWCORNER_H + +#include "qquickstyleitem.h" +#include + +class QQuickStyleItemScrollViewCorner : public QQuickStyleItem +{ + Q_OBJECT + QML_NAMED_ELEMENT(ScrollViewCorner) + +protected: + void paintEvent(QPainter *painter) const override; + StyleItemGeometry calculateGeometry() override; + +private: + void initStyleOption(QStyleOptionSlider &styleOption) const; +}; + +#endif // QQUICKSTYLEITEMSCROLLVIEWCORNER_H diff --git a/src/quicknativestyle/items/qquickstyleitemslider.cpp b/src/quicknativestyle/items/qquickstyleitemslider.cpp new file mode 100644 index 00000000..67161ad3 --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemslider.cpp @@ -0,0 +1,123 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickstyleitemslider.h" + +QFont QQuickStyleItemSlider::styleFont(QQuickItem *control) const +{ + return style()->font(QStyle::CE_ProgressBarLabel, controlSize(control)); +} + +void QQuickStyleItemSlider::connectToControl() const +{ + QQuickStyleItem::connectToControl(); + auto slider = control(); + connect(slider, &QQuickSlider::fromChanged, this, &QQuickStyleItem::markImageDirty); + connect(slider, &QQuickSlider::toChanged, this, &QQuickStyleItem::markImageDirty); + connect(slider, &QQuickSlider::positionChanged, this, &QQuickStyleItem::markImageDirty); + connect(slider, &QQuickSlider::valueChanged, this, &QQuickStyleItem::markImageDirty); + connect(slider, &QQuickSlider::stepSizeChanged, this, &QQuickStyleItem::markImageDirty); + connect(slider, &QQuickSlider::pressedChanged, this, &QQuickStyleItem::markImageDirty); + connect(slider, &QQuickSlider::orientationChanged, this, &QQuickStyleItem::markImageDirty); +} + +StyleItemGeometry QQuickStyleItemSlider::calculateGeometry() +{ + QStyleOptionSlider styleOption; + initStyleOption(styleOption); + + StyleItemGeometry geometry; + geometry.minimumSize = style()->sizeFromContents(QStyle::CT_Slider, &styleOption, QSize(0, 0)); + geometry.implicitSize = geometry.minimumSize; + styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize); + geometry.layoutRect = style()->subElementRect(QStyle::SE_SliderLayoutItem, &styleOption); + geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CC_Slider, &styleOption, geometry.minimumSize); + geometry.focusFrameRadius = style()->pixelMetric(QStyle::PM_SliderFocusFrameRadius, &styleOption); + + return geometry; +} + +void QQuickStyleItemSlider::paintEvent(QPainter *painter) const +{ + QStyleOptionSlider styleOption; + initStyleOption(styleOption); + style()->drawComplexControl(QStyle::CC_Slider, &styleOption, painter); +} + +void QQuickStyleItemSlider::initStyleOption(QStyleOptionSlider &styleOption) const +{ + initStyleOptionBase(styleOption); + auto slider = control(); + + styleOption.subControls = QStyle::SC_None; + if (m_subControl & Groove) + styleOption.subControls |= QStyle::SC_SliderGroove; + if (m_subControl & Handle) + styleOption.subControls |= QStyle::SC_SliderHandle; + styleOption.activeSubControls = QStyle::SC_None; + styleOption.orientation = slider->orientation(); + + if (slider->isPressed()) + styleOption.state |= QStyle::State_Sunken; + + qreal min = 0; + qreal max = 1; + if (!qFuzzyIsNull(slider->stepSize())) { + min = slider->from(); + max = slider->to(); + + // TODO: add proper API for tickmarks + const int index = slider->metaObject()->indexOfProperty("qqc2_style_tickPosition"); + if (index != -1) { + const int tickPosition = slider->metaObject()->property(index).read(slider).toInt(); + styleOption.tickPosition = QStyleOptionSlider::TickPosition(tickPosition); + if (styleOption.tickPosition != QStyleOptionSlider::NoTicks) + styleOption.subControls |= QStyle::SC_SliderTickmarks; + } + } + + // Since the [from, to] interval in QQuickSlider is floating point, users can + // specify very small ranges and step sizes, (e.g. [0.., 0.25], step size 0.05). + // Since the style operates on ints, we cannot pass these values directly to the style, + // so we normalize all values to the range [0, 10000] + static const qreal Scale = 10000; + const qreal normalizeMultiplier = Scale/(max - min); + styleOption.tickInterval = int(slider->stepSize() * normalizeMultiplier); + styleOption.minimum = 0; + styleOption.maximum = int(Scale); + styleOption.sliderValue = int((slider->value() - min) * normalizeMultiplier); + styleOption.sliderPosition = int(slider->position() * styleOption.maximum); +} diff --git a/src/quicknativestyle/items/qquickstyleitemslider.h b/src/quicknativestyle/items/qquickstyleitemslider.h new file mode 100644 index 00000000..9a514207 --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemslider.h @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKSTYLEITEMSLIDER_H +#define QQUICKSTYLEITEMSLIDER_H + +#include "qquickstyleitem.h" +#include + +class QQuickStyleItemSlider : public QQuickStyleItem +{ + Q_OBJECT + + Q_PROPERTY(SubControl subControl MEMBER m_subControl) + + QML_NAMED_ELEMENT(Slider) + +public: + enum SubControl { + Groove = 1, + Handle, + }; + Q_ENUM(SubControl) + + QFont styleFont(QQuickItem *control) const override; + +protected: + void connectToControl() const override; + void paintEvent(QPainter *painter) const override; + StyleItemGeometry calculateGeometry() override; + +private: + void initStyleOption(QStyleOptionSlider &styleOption) const; + +private: + SubControl m_subControl = Groove; +}; + +#endif // QQUICKSTYLEITEMSLIDER_H diff --git a/src/quicknativestyle/items/qquickstyleitemspinbox.cpp b/src/quicknativestyle/items/qquickstyleitemspinbox.cpp new file mode 100644 index 00000000..2a232b8a --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemspinbox.cpp @@ -0,0 +1,110 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickstyleitemspinbox.h" +#include + +QFont QQuickStyleItemSpinBox::styleFont(QQuickItem *control) const +{ + return style()->font(QStyle::CE_ComboBoxLabel, controlSize(control)); +} + +void QQuickStyleItemSpinBox::connectToControl() const +{ + QQuickStyleItem::connectToControl(); + auto spinbox = control(); + connect(spinbox->up(), &QQuickIndicatorButton::pressedChanged, this, &QQuickStyleItem::markImageDirty); + connect(spinbox->down(), &QQuickIndicatorButton::pressedChanged, this, &QQuickStyleItem::markImageDirty); +} + +StyleItemGeometry QQuickStyleItemSpinBox::calculateGeometry() +{ + QStyleOptionSpinBox styleOption; + initStyleOption(styleOption); + StyleItemGeometry geometry; + + geometry.minimumSize = style()->sizeFromContents(QStyle::CT_SpinBox, &styleOption, QSize(0, 0)); + + if (styleOption.subControls == QStyle::SC_SpinBoxFrame) { + geometry.implicitSize = style()->sizeFromContents(QStyle::CT_SpinBox, &styleOption, contentSize()); + styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize); + geometry.contentRect = style()->subControlRect(QStyle::CC_SpinBox, &styleOption, QStyle::SC_SpinBoxEditField); + geometry.layoutRect = style()->subElementRect(QStyle::SE_SpinBoxLayoutItem, &styleOption); + geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CC_SpinBox, &styleOption, geometry.minimumSize); + geometry.focusFrameRadius = style()->pixelMetric(QStyle::PM_SpinBoxFocusFrameRadius, &styleOption); + } else { + geometry.implicitSize = geometry.minimumSize; + } + + return geometry; +} + +void QQuickStyleItemSpinBox::paintEvent(QPainter *painter) const +{ + QStyleOptionSpinBox styleOption; + initStyleOption(styleOption); + style()->drawComplexControl(QStyle::CC_SpinBox, &styleOption, painter); +} + +void QQuickStyleItemSpinBox::initStyleOption(QStyleOptionSpinBox &styleOption) const +{ + initStyleOptionBase(styleOption); + auto spinbox = control(); + + switch (m_subControl) { + case Frame: + styleOption.subControls = QStyle::SC_SpinBoxFrame; + styleOption.frame = true; + break; + case Up: + styleOption.subControls = (QStyle::SC_SpinBoxUp | QStyle::SC_SpinBoxDown); + break; + case Down: + styleOption.subControls = QStyle::SC_SpinBoxDown; + break; + } + + if (spinbox->up()->isPressed()) { + styleOption.activeSubControls = QStyle::SC_SpinBoxUp; + styleOption.state |= QStyle::State_Sunken; + } else if (spinbox->down()->isPressed()) { + styleOption.activeSubControls = QStyle::SC_SpinBoxDown; + styleOption.state |= QStyle::State_Sunken; + } + + styleOption.buttonSymbols = QStyleOptionSpinBox::UpDownArrows; + styleOption.stepEnabled = QStyleOptionSpinBox::StepEnabled; +} diff --git a/src/quicknativestyle/items/qquickstyleitemspinbox.h b/src/quicknativestyle/items/qquickstyleitemspinbox.h new file mode 100644 index 00000000..d4b9f9fa --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemspinbox.h @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKSTYLEITEMSPINBOX_H +#define QQUICKSTYLEITEMSPINBOX_H + +#include "qquickstyleitem.h" +#include + +class QQuickStyleItemSpinBox : public QQuickStyleItem +{ + Q_OBJECT + + Q_PROPERTY(SubControl subControl MEMBER m_subControl) + + QML_NAMED_ELEMENT(SpinBox) + +public: + enum SubControl { + Frame = 1, + Up, + Down, + }; + Q_ENUM(SubControl) + + QFont styleFont(QQuickItem *control) const override; + +protected: + void connectToControl() const override; + void paintEvent(QPainter *painter) const override; + StyleItemGeometry calculateGeometry() override; + +private: + void initStyleOption(QStyleOptionSpinBox &styleOption) const; + +private: + SubControl m_subControl = Frame; +}; + +#endif // QQUICKSTYLEITEMSPINBOX_H diff --git a/src/quicknativestyle/items/qquickstyleitemtextfield.cpp b/src/quicknativestyle/items/qquickstyleitemtextfield.cpp new file mode 100644 index 00000000..cd7d35aa --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemtextfield.cpp @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickstyleitemtextfield.h" + +QFont QQuickStyleItemTextField::styleFont(QQuickItem *control) const +{ + return style()->font(QStyle::CE_ComboBoxLabel, controlSize(control)); +} + +void QQuickStyleItemTextField::connectToControl() const +{ + QQuickStyleItem::connectToControl(); + auto textField = control(); + connect(textField, &QQuickTextField::readOnlyChanged, this, &QQuickStyleItem::markImageDirty); + connect(textField, &QQuickTextField::focusChanged, this, &QQuickStyleItem::markImageDirty); +} + +StyleItemGeometry QQuickStyleItemTextField::calculateGeometry() +{ + QStyleOptionFrame styleOption; + initStyleOption(styleOption); + StyleItemGeometry geometry; + + geometry.minimumSize = style()->sizeFromContents(QStyle::CT_LineEdit, &styleOption, QSize(0, 0)); + geometry.implicitSize = style()->sizeFromContents(QStyle::CT_LineEdit, &styleOption, contentSize()); + styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize); + geometry.layoutRect = styleOption.rect; + geometry.contentRect = style()->subElementRect(QStyle::SE_LineEditContents, &styleOption); + geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CE_ShapedFrame, &styleOption, geometry.minimumSize); + geometry.focusFrameRadius = style()->pixelMetric(QStyle::PM_TextFieldFocusFrameRadius, &styleOption); + + return geometry; +} + +void QQuickStyleItemTextField::paintEvent(QPainter *painter) const +{ + QStyleOptionFrame styleOption; + initStyleOption(styleOption); + style()->drawPrimitive(QStyle::PE_PanelLineEdit, &styleOption, painter); +} + +void QQuickStyleItemTextField::initStyleOption(QStyleOptionFrame &styleOption) const +{ + initStyleOptionBase(styleOption); + auto textField = control(); + + styleOption.lineWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth, &styleOption); + styleOption.midLineWidth = 0; + styleOption.state |= QStyle::State_Sunken; + if (textField->isReadOnly()) + styleOption.state |= QStyle::State_ReadOnly; +} diff --git a/src/quicknativestyle/items/qquickstyleitemtextfield.h b/src/quicknativestyle/items/qquickstyleitemtextfield.h new file mode 100644 index 00000000..35aaf753 --- /dev/null +++ b/src/quicknativestyle/items/qquickstyleitemtextfield.h @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKSTYLEITEMTEXTFIELD_H +#define QQUICKSTYLEITEMTEXTFIELD_H + +#include "qquickstyleitem.h" +#include + +class QQuickStyleItemTextField : public QQuickStyleItem +{ + Q_OBJECT + QML_NAMED_ELEMENT(TextField) + +public: + QFont styleFont(QQuickItem *control) const override; + +protected: + void connectToControl() const override; + void paintEvent(QPainter *painter) const override; + StyleItemGeometry calculateGeometry() override; + +private: + void initStyleOption(QStyleOptionFrame &styleOption) const; +}; + +#endif // QQUICKSTYLEITEMTEXTFIELD_H diff --git a/src/quicknativestyle/qstyle/mac/mac.pri b/src/quicknativestyle/qstyle/mac/mac.pri new file mode 100644 index 00000000..2f7ee7d4 --- /dev/null +++ b/src/quicknativestyle/qstyle/mac/mac.pri @@ -0,0 +1,12 @@ +LIBS_PRIVATE += -framework AppKit + +INCLUDEPATH += $$PWD + +HEADERS += \ + $$PWD/qquickmacstyle_mac_p.h \ + $$PWD/qquickmacstyle_mac_p_p.h + +SOURCES += + +OBJECTIVE_SOURCES += \ + $$PWD/qquickmacstyle_mac.mm diff --git a/src/quicknativestyle/qstyle/mac/qquickmacstyle_mac.mm b/src/quicknativestyle/qstyle/mac/qquickmacstyle_mac.mm new file mode 100644 index 00000000..5d061667 --- /dev/null +++ b/src/quicknativestyle/qstyle/mac/qquickmacstyle_mac.mm @@ -0,0 +1,6072 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + Note: The qdoc comments for QMacStyle are contained in + .../doc/src/qstyles.qdoc. +*/ + +#include + +#include "qquickmacstyle_mac_p.h" +#include "qquickmacstyle_mac_p_p.h" +#include "qquickstylehelper_p.h" + +#include + +#define QMAC_QAQUASTYLE_SIZE_CONSTRAIN +//#define DEBUG_SIZE_CONSTRAINT + +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include + +#include + +QT_USE_NAMESPACE + +// OBS! Changing QT_MANGLE_NAMESPACE and QT_NAMESPACE_ALIAS_OBJC_CLASS to take +// both QT_NAMESPACE and QQC2_NAMESPACE into account (and not only QT_NAMESPACE, which +// would otherwise be the case). This will make it possible to link in both widgets and +// controls in the same application when building statically. +#undef QT_MANGLE_NAMESPACE +#undef QT_NAMESPACE_ALIAS_OBJC_CLASS + +#define QQC2_MANGLE1(a, b) a##_##b +#define QQC2_MANGLE2(a, b) QQC2_MANGLE1(a, b) + +#if defined(QT_NAMESPACE) + #define QT_MANGLE_NAMESPACE(name) QQC2_MANGLE2(QQC2_MANGLE1(name, QQC2_NAMESPACE), QT_NAMESPACE) + #define QT_NAMESPACE_ALIAS_OBJC_CLASS(name) @compatibility_alias name QT_MANGLE_NAMESPACE(name) +#else + #define QT_MANGLE_NAMESPACE(name) QQC2_MANGLE2(name, QQC2_NAMESPACE) + #define QT_NAMESPACE_ALIAS_OBJC_CLASS(name) @compatibility_alias name QT_MANGLE_NAMESPACE(name) +#endif + +@interface QT_MANGLE_NAMESPACE(QIndeterminateProgressIndicator) : NSProgressIndicator + +@property (readonly, nonatomic) NSInteger animators; + +- (instancetype)init; + +- (void)startAnimation; +- (void)stopAnimation; + +- (void)drawWithFrame:(CGRect)rect inView:(NSView *)view; + +@end + +QT_NAMESPACE_ALIAS_OBJC_CLASS(QIndeterminateProgressIndicator); + +@implementation QIndeterminateProgressIndicator + +- (instancetype)init +{ + if ((self = [super init])) { + _animators = 0; + self.indeterminate = YES; + self.usesThreadedAnimation = NO; + self.alphaValue = 0.0; + } + + return self; +} + +- (void)startAnimation +{ + if (_animators == 0) { + self.hidden = NO; + [super startAnimation:self]; + } + ++_animators; +} + +- (void)stopAnimation +{ + --_animators; + if (_animators == 0) { + [super stopAnimation:self]; + self.hidden = YES; + [self removeFromSuperviewWithoutNeedingDisplay]; + } +} + +- (void)drawWithFrame:(CGRect)rect inView:(NSView *)view +{ + // The alphaValue change is not strictly necessary, but feels safer. + self.alphaValue = 1.0; + if (self.superview != view) + [view addSubview:self]; + if (!CGRectEqualToRect(self.frame, rect)) + self.frame = rect; + [self drawRect:rect]; + self.alphaValue = 0.0; +} + +@end + +@interface QT_MANGLE_NAMESPACE(QVerticalSplitView) : NSSplitView +- (BOOL)isVertical; +@end + +QT_NAMESPACE_ALIAS_OBJC_CLASS(QVerticalSplitView); + +@implementation QVerticalSplitView +- (BOOL)isVertical +{ + return YES; +} +@end + +// See render code in drawPrimitive(PE_FrameTabWidget) +@interface QT_MANGLE_NAMESPACE(QDarkNSBox) : NSBox +@end + +QT_NAMESPACE_ALIAS_OBJC_CLASS(QDarkNSBox); + +@implementation QDarkNSBox +- (instancetype)init +{ + if ((self = [super init])) { + self.title = @""; + self.titlePosition = NSNoTitle; + self.boxType = NSBoxCustom; + self.cornerRadius = 3; + self.borderColor = [NSColor.controlColor colorWithAlphaComponent:0.1]; + self.fillColor = [NSColor.darkGrayColor colorWithAlphaComponent:0.2]; + } + + return self; +} + +- (void)drawRect:(NSRect)rect +{ + [super drawRect:rect]; +} +@end + +QT_BEGIN_NAMESPACE + +namespace QQC2_NAMESPACE { + +// The following constants are used for adjusting the size +// of push buttons so that they are drawn inside their bounds. +const int QMacStylePrivate::PushButtonLeftOffset = 6; +const int QMacStylePrivate::PushButtonRightOffset = 12; +const int QMacStylePrivate::PushButtonContentPadding = 6; + +QVector > QMacStylePrivate::scrollBars; + +// Title bar gradient colors for Lion were determined by inspecting PSDs exported +// using CoreUI's CoreThemeDocument; there is no public API to retrieve them + +static QLinearGradient titlebarGradientActive() +{ + static QLinearGradient darkGradient = [](){ + QLinearGradient gradient; + // FIXME: colors are chosen somewhat arbitrarily and could be fine-tuned, + // or ideally determined by calling a native API. + gradient.setColorAt(0, QColor(47, 47, 47)); + return gradient; + }(); + static QLinearGradient lightGradient = [](){ + QLinearGradient gradient; + gradient.setColorAt(0, QColor(235, 235, 235)); + gradient.setColorAt(0.5, QColor(210, 210, 210)); + gradient.setColorAt(0.75, QColor(195, 195, 195)); + gradient.setColorAt(1, QColor(180, 180, 180)); + return gradient; + }(); + return qt_mac_applicationIsInDarkMode() ? darkGradient : lightGradient; +} + +static QLinearGradient titlebarGradientInactive() +{ + static QLinearGradient darkGradient = [](){ + QLinearGradient gradient; + gradient.setColorAt(1, QColor(42, 42, 42)); + return gradient; + }(); + static QLinearGradient lightGradient = [](){ + QLinearGradient gradient; + gradient.setColorAt(0, QColor(250, 250, 250)); + gradient.setColorAt(1, QColor(225, 225, 225)); + return gradient; + }(); + return qt_mac_applicationIsInDarkMode() ? darkGradient : lightGradient; +} + +/* + Since macOS 10.14 AppKit is using transparency more extensively, especially for the + dark theme. Inactive buttons, for example, are semi-transparent. And we use them to + draw tab widget's tab bar. The combination of NSBox (also a part of tab widget) + and these transparent buttons gives us an undesired side-effect: an outline of + NSBox is visible through transparent buttons. To avoid this, we have this hack below: + we clip the area where the line would be visible through the buttons. The area we + want to clip away can be described as an intersection of the option's rect and + the tab widget's tab bar rect. But some adjustments are required, since those rects + are anyway adjusted during the rendering and they are not exactly what you'll see on + the screen. Thus this switch-statement inside. +*/ +static void clipTabBarFrame(const QStyleOption *option, const QMacStyle *style, CGContextRef ctx) +{ + Q_ASSERT(option); + Q_ASSERT(style); + Q_ASSERT(ctx); + + if (qt_mac_applicationIsInDarkMode()) { +// QTabWidget *tabWidget = qobject_cast(option->styleObject); +// Q_ASSERT(tabWidget); + +// QRect tabBarRect = style->subElementRect(QStyle::SE_TabWidgetTabBar, option, tabWidget).adjusted(2, 0, -3, 0); +// switch (tabWidget->tabPosition()) { +// case QTabWidget::South: +// tabBarRect.setY(tabBarRect.y() + tabBarRect.height() / 2); +// break; +// case QTabWidget::North: +// case QTabWidget::West: +// tabBarRect = tabBarRect.adjusted(0, 2, 0, -2); +// break; +// case QTabWidget::East: +// tabBarRect = tabBarRect.adjusted(tabBarRect.width() / 2, 2, tabBarRect.width() / 2, -2); +// } + +// const QRegion clipPath = QRegion(option->rect) - tabBarRect; +// QVarLengthArray cgRects; +// for (const QRect &qtRect : clipPath) +// cgRects.push_back(qtRect.toCGRect()); +// if (cgRects.size()) +// CGContextClipToRects(ctx, &cgRects[0], size_t(cgRects.size())); + } +} + +static const QColor titlebarSeparatorLineActive(111, 111, 111); +static const QColor titlebarSeparatorLineInactive(131, 131, 131); +static const QColor darkModeSeparatorLine(88, 88, 88); + +// Gradient colors used for the dock widget title bar and +// non-unifed tool bar background. +static const QColor lightMainWindowGradientBegin(240, 240, 240); +static const QColor lightMainWindowGradientEnd(200, 200, 200); +static const QColor darkMainWindowGradientBegin(47, 47, 47); +static const QColor darkMainWindowGradientEnd(47, 47, 47); + +static const int DisclosureOffset = 4; + +static const qreal titleBarIconTitleSpacing = 5; +static const qreal titleBarTitleRightMargin = 12; +static const qreal titleBarButtonSpacing = 8; + +// Tab bar colors +// active: window is active +// selected: tab is selected +// hovered: tab is hovered +bool isDarkMode() { return qt_mac_applicationIsInDarkMode(); } + +static const QColor lightTabBarTabBackgroundActive(190, 190, 190); +static const QColor darkTabBarTabBackgroundActive(38, 38, 38); +static const QColor tabBarTabBackgroundActive() { return isDarkMode() ? darkTabBarTabBackgroundActive : lightTabBarTabBackgroundActive; } + +static const QColor lightTabBarTabBackgroundActiveHovered(178, 178, 178); +static const QColor darkTabBarTabBackgroundActiveHovered(32, 32, 32); +static const QColor tabBarTabBackgroundActiveHovered() { return isDarkMode() ? darkTabBarTabBackgroundActiveHovered : lightTabBarTabBackgroundActiveHovered; } + +static const QColor lightTabBarTabBackgroundActiveSelected(211, 211, 211); +static const QColor darkTabBarTabBackgroundActiveSelected(52, 52, 52); +static const QColor tabBarTabBackgroundActiveSelected() { return isDarkMode() ? darkTabBarTabBackgroundActiveSelected : lightTabBarTabBackgroundActiveSelected; } + +static const QColor lightTabBarTabBackground(227, 227, 227); +static const QColor darkTabBarTabBackground(38, 38, 38); +static const QColor tabBarTabBackground() { return isDarkMode() ? darkTabBarTabBackground : lightTabBarTabBackground; } + +static const QColor lightTabBarTabBackgroundSelected(246, 246, 246); +static const QColor darkTabBarTabBackgroundSelected(52, 52, 52); +static const QColor tabBarTabBackgroundSelected() { return isDarkMode() ? darkTabBarTabBackgroundSelected : lightTabBarTabBackgroundSelected; } + +static const QColor lightTabBarTabLineActive(160, 160, 160); +static const QColor darkTabBarTabLineActive(90, 90, 90); +static const QColor tabBarTabLineActive() { return isDarkMode() ? darkTabBarTabLineActive : lightTabBarTabLineActive; } + +static const QColor lightTabBarTabLineActiveHovered(150, 150, 150); +static const QColor darkTabBarTabLineActiveHovered(90, 90, 90); +static const QColor tabBarTabLineActiveHovered() { return isDarkMode() ? darkTabBarTabLineActiveHovered : lightTabBarTabLineActiveHovered; } + +static const QColor lightTabBarTabLine(210, 210, 210); +static const QColor darkTabBarTabLine(90, 90, 90); +static const QColor tabBarTabLine() { return isDarkMode() ? darkTabBarTabLine : lightTabBarTabLine; } + +static const QColor lightTabBarTabLineSelected(189, 189, 189); +static const QColor darkTabBarTabLineSelected(90, 90, 90); +static const QColor tabBarTabLineSelected() { return isDarkMode() ? darkTabBarTabLineSelected : lightTabBarTabLineSelected; } + +static const QColor tabBarCloseButtonBackgroundHovered(162, 162, 162); +static const QColor tabBarCloseButtonBackgroundPressed(153, 153, 153); +static const QColor tabBarCloseButtonBackgroundSelectedHovered(192, 192, 192); +static const QColor tabBarCloseButtonBackgroundSelectedPressed(181, 181, 181); +static const QColor tabBarCloseButtonCross(100, 100, 100); +static const QColor tabBarCloseButtonCrossSelected(115, 115, 115); + +static const int closeButtonSize = 14; +static const qreal closeButtonCornerRadius = 2.0; + +#ifndef QT_NO_ACCESSIBILITY // This ifdef to avoid "unused function" warning. +QBrush brushForToolButton(bool isOnKeyWindow) +{ + // When a toolbutton in a toolbar is in the 'ON' state, we draw a + // partially transparent background. The colors must be different + // for 'Aqua' and 'DarkAqua' appearances though. + if (isDarkMode()) + return isOnKeyWindow ? QColor(73, 73, 73, 100) : QColor(56, 56, 56, 100); + + return isOnKeyWindow ? QColor(0, 0, 0, 28) : QColor(0, 0, 0, 21); +} +#endif // QT_NO_ACCESSIBILITY + +static const int headerSectionArrowHeight = 6; +static const int headerSectionSeparatorInset = 2; + +// One for each of QStyleHelper::WidgetSizePolicy +static const QMarginsF comboBoxFocusRingMargins[3] = { + { 0.5, 2, 3.5, 4 }, + { 0.5, 1, 2.5, 4 }, + { 0.5, 1.5, 2.5, 3.5 } +}; + +static const QMarginsF pullDownButtonShadowMargins[3] = { + { 0.5, -1, 0.5, 2 }, + { 0.5, -1.5, 0.5, 2.5 }, + { 0.5, 0, 0.5, 1 } +}; + +static const QMarginsF pushButtonShadowMargins[3] = { + { 1.5, -1.5, 1.5, 4.5 }, + { 1.5, -1, 1.5, 4 }, + { 1.5, 0.5, 1.5, 2.5 } +}; + +// These are frame heights as reported by Xcode 9's Interface Builder. +// Alignemnet rectangle's heights match for push and popup buttons +// with respective values 21, 18 and 15. + +static const qreal comboBoxDefaultHeight[3] = { + 26, 22, 19 +}; + +static const qreal pushButtonDefaultHeight[3] = { + 32, 28, 16 +}; + +static const qreal popupButtonDefaultHeight[3] = { + 26, 22, 15 +}; + +static const int toolButtonArrowSize = 7; +static const int toolButtonArrowMargin = 2; + +static const qreal focusRingWidth = 3.5; + +// An application can force 'Aqua' theme while the system theme is one of +// the 'Dark' variants. Since in Qt we sometimes use NSControls and even +// NSCells directly without attaching them to any view hierarchy, we have +// to set NSAppearance.currentAppearance to 'Aqua' manually, to make sure +// the correct rendering path is triggered. Apple recommends us to un-set +// the current appearance back after we finished with drawing. This is what +// AppearanceSync is for. + +class AppearanceSync { +public: + AppearanceSync() + { +#if QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_14) + if (QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSMojave + && !qt_mac_applicationIsInDarkMode()) { + auto requiredAppearanceName = NSApplication.sharedApplication.effectiveAppearance.name; + if (![NSAppearance.currentAppearance.name isEqualToString:requiredAppearanceName]) { + previous = NSAppearance.currentAppearance; + NSAppearance.currentAppearance = [NSAppearance appearanceNamed:requiredAppearanceName]; + } + } +#endif // QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_14) + } + + ~AppearanceSync() + { + if (previous) + NSAppearance.currentAppearance = previous; + } + +private: + NSAppearance *previous = nil; + + Q_DISABLE_COPY(AppearanceSync) +}; + +static bool setupScroller(NSScroller *scroller, const QStyleOptionSlider *sb) +{ + const qreal length = sb->maximum - sb->minimum + sb->pageStep; + if (qFuzzyIsNull(length)) + return false; + const qreal proportion = sb->pageStep / length; + const qreal range = qreal(sb->maximum - sb->minimum); + qreal value = range ? qreal(sb->sliderValue - sb->minimum) / range : 0; + if (sb->orientation == Qt::Horizontal && sb->direction == Qt::RightToLeft) + value = 1.0 - value; + + scroller.frame = sb->rect.toCGRect(); + scroller.floatValue = value; + scroller.knobProportion = proportion; + return true; +} + +static bool setupSlider(NSSlider *slider, const QStyleOptionSlider *sl) +{ + if (sl->minimum >= sl->maximum) + return false; + + slider.frame = sl->rect.toCGRect(); + slider.minValue = sl->minimum; + slider.maxValue = sl->maximum; + slider.intValue = sl->sliderPosition; + slider.enabled = sl->state & QStyle::State_Enabled; + if (sl->tickPosition != QStyleOptionSlider::NoTicks) { + // Set numberOfTickMarks, but TicksBothSides will be treated differently + int interval = sl->tickInterval; + if (interval == 0) { + interval = sl->pageStep; + if (interval == 0) + interval = sl->singleStep; + if (interval == 0) + interval = 1; // return false? + } + slider.numberOfTickMarks = 1 + ((sl->maximum - sl->minimum) / interval); + + const bool ticksAbove = sl->tickPosition == QStyleOptionSlider::TicksAbove; + if (sl->orientation == Qt::Horizontal) + slider.tickMarkPosition = ticksAbove ? NSTickMarkPositionAbove : NSTickMarkPositionBelow; + else + slider.tickMarkPosition = ticksAbove ? NSTickMarkPositionLeading : NSTickMarkPositionTrailing; + } else { + slider.numberOfTickMarks = 0; + } + + // Ensure the values set above are reflected when asking + // the cell for its metrics and to draw itself. + [slider layoutSubtreeIfNeeded]; + + return true; +} + +static bool isInMacUnifiedToolbarArea(QWindow *window, int windowY) +{ + QPlatformNativeInterface *nativeInterface = QGuiApplication::platformNativeInterface(); + QPlatformNativeInterface::NativeResourceForIntegrationFunction function = + nativeInterface->nativeResourceFunctionForIntegration("testContentBorderPosition"); + if (!function) + return false; // Not Cocoa platform plugin. + + typedef bool (*TestContentBorderPositionFunction)(QWindow *, int); + return (reinterpret_cast(function))(window, windowY); +} + + +static void drawTabCloseButton(QPainter *p, bool hover, bool selected, bool pressed, bool documentMode) +{ + p->setRenderHints(QPainter::Antialiasing); + QRect rect(0, 0, closeButtonSize, closeButtonSize); + const int width = rect.width(); + const int height = rect.height(); + + if (hover) { + // draw background circle + QColor background; + if (selected) { + if (documentMode) + background = pressed ? tabBarCloseButtonBackgroundSelectedPressed : tabBarCloseButtonBackgroundSelectedHovered; + else + background = QColor(255, 255, 255, pressed ? 150 : 100); // Translucent white + } else { + background = pressed ? tabBarCloseButtonBackgroundPressed : tabBarCloseButtonBackgroundHovered; + if (!documentMode) + background = background.lighter(pressed ? 135 : 140); // Lighter tab background, lighter color + } + + p->setPen(Qt::transparent); + p->setBrush(background); + p->drawRoundedRect(rect, closeButtonCornerRadius, closeButtonCornerRadius); + } + + // draw cross + const int margin = 3; + QPen crossPen; + crossPen.setColor(selected ? (documentMode ? tabBarCloseButtonCrossSelected : Qt::white) : tabBarCloseButtonCross); + crossPen.setWidthF(1.1); + crossPen.setCapStyle(Qt::FlatCap); + p->setPen(crossPen); + p->drawLine(margin, margin, width - margin, height - margin); + p->drawLine(margin, height - margin, width - margin, margin); +} + +QRect rotateTabPainter(QPainter *p, QStyleOptionTab::Shape shape, QRect tabRect) +{ + const auto tabDirection = QMacStylePrivate::tabDirection(shape); + if (QMacStylePrivate::verticalTabs(tabDirection)) { + int newX, newY, newRot; + if (tabDirection == QMacStylePrivate::East) { + newX = tabRect.width(); + newY = tabRect.y(); + newRot = 90; + } else { + newX = 0; + newY = tabRect.y() + tabRect.height(); + newRot = -90; + } + tabRect.setRect(0, 0, tabRect.height(), tabRect.width()); + QTransform transform; + transform.translate(newX, newY); + transform.rotate(newRot); + p->setTransform(transform, true); + } + return tabRect; +} + +void drawTabShape(QPainter *p, const QStyleOptionTab *tabOpt, bool isUnified, int tabOverlap) +{ + QRect rect = tabOpt->rect; + if (QMacStylePrivate::verticalTabs(QMacStylePrivate::tabDirection(tabOpt->shape))) + rect = rect.adjusted(-tabOverlap, 0, 0, 0); + else + rect = rect.adjusted(0, -tabOverlap, 0, 0); + + p->translate(rect.x(), rect.y()); + rect.moveLeft(0); + rect.moveTop(0); + const QRect tabRect = rotateTabPainter(p, tabOpt->shape, rect); + + const int width = tabRect.width(); + const int height = tabRect.height(); + const bool active = (tabOpt->state & QStyle::State_Active); + const bool selected = (tabOpt->state & QStyle::State_Selected); + + const QRect bodyRect(1, 2, width - 2, height - 3); + const QRect topLineRect(1, 0, width - 2, 1); + const QRect bottomLineRect(1, height - 1, width - 2, 1); + if (selected) { + // fill body + if (tabOpt->documentMode && isUnified) { + p->save(); + p->setCompositionMode(QPainter::CompositionMode_Source); + p->fillRect(tabRect, QColor(Qt::transparent)); + p->restore(); + } else if (active) { + p->fillRect(bodyRect, tabBarTabBackgroundActiveSelected()); + // top line + p->fillRect(topLineRect, tabBarTabLineSelected()); + } else { + p->fillRect(bodyRect, tabBarTabBackgroundSelected()); + } + } else { + // when the mouse is over non selected tabs they get a new color + const bool hover = (tabOpt->state & QStyle::State_MouseOver); + if (hover) { + // fill body + p->fillRect(bodyRect, tabBarTabBackgroundActiveHovered()); + // bottom line + p->fillRect(bottomLineRect, isDarkMode() ? QColor(Qt::black) : tabBarTabLineActiveHovered()); + } + } + + // separator lines between tabs + const QRect leftLineRect(0, 1, 1, height - 2); + const QRect rightLineRect(width - 1, 1, 1, height - 2); + const QColor separatorLineColor = active ? tabBarTabLineActive() : tabBarTabLine(); + p->fillRect(leftLineRect, separatorLineColor); + p->fillRect(rightLineRect, separatorLineColor); +} + +void drawTabBase(QPainter *p, const QStyleOptionTabBarBase *tbb) +{ + QRect r = tbb->rect; +// if (QMacStylePrivate::verticalTabs(QMacStylePrivate::tabDirection(tbb->shape))) +// r.setWidth(w->width()); +// else +// r.setHeight(w->height()); + + const QRect tabRect = rotateTabPainter(p, tbb->shape, r); + const int width = tabRect.width(); + const int height = tabRect.height(); + const bool active = (tbb->state & QStyle::State_Active); + + // fill body + const QRect bodyRect(0, 1, width, height - 1); + const QColor bodyColor = active ? tabBarTabBackgroundActive() : tabBarTabBackground(); + p->fillRect(bodyRect, bodyColor); + + // top line + const QRect topLineRect(0, 0, width, 1); + const QColor topLineColor = active ? tabBarTabLineActive() : tabBarTabLine(); + p->fillRect(topLineRect, topLineColor); + + // bottom line + const QRect bottomLineRect(0, height - 1, width, 1); + bool isDocument = false; +// if (const QTabBar *tabBar = qobject_cast(w)) +// isDocument = tabBar->documentMode(); + const QColor bottomLineColor = isDocument && isDarkMode() ? QColor(Qt::black) : active ? tabBarTabLineActive() : tabBarTabLine(); + p->fillRect(bottomLineRect, bottomLineColor); +} + +static QStyleHelper::WidgetSizePolicy getControlSize(const QStyleOption *option) +{ + const auto wsp = QStyleHelper::widgetSizePolicy(option); + if (wsp == QStyleHelper::SizeDefault) + return QStyleHelper::SizeLarge; + + return wsp; +} + +static QString qt_mac_removeMnemonics(const QString &original) +{ + QString returnText(original.size(), QChar()); + int finalDest = 0; + int currPos = 0; + int l = original.length(); + while (l) { + if (original.at(currPos) == QLatin1Char('&')) { + ++currPos; + --l; + if (l == 0) + break; + } else if (original.at(currPos) == QLatin1Char('(') && l >= 4 && + original.at(currPos + 1) == QLatin1Char('&') && + original.at(currPos + 2) != QLatin1Char('&') && + original.at(currPos + 3) == QLatin1Char(')')) { + /* remove mnemonics its format is "\s*(&X)" */ + int n = 0; + while (finalDest > n && returnText.at(finalDest - n - 1).isSpace()) + ++n; + finalDest -= n; + currPos += 4; + l -= 4; + continue; + } + returnText[finalDest] = original.at(currPos); + ++currPos; + ++finalDest; + --l; + } + returnText.truncate(finalDest); + return returnText; +} + +static bool qt_macWindowMainWindow(const QWindow *window) +{ + if (window->handle()) { + if (NSWindow *nswindow = static_cast( + QGuiApplication::platformNativeInterface()-> + nativeResourceForWindow(QByteArrayLiteral("nswindow"), + const_cast(window)))) { + return [nswindow isMainWindow]; + } + } + return false; +} + +#define LargeSmallMini(option, large, small, mini) \ + (option->state & QStyle::State_Small) ? small : ((option->state & QStyle::State_Mini) ? mini : large) + +/***************************************************************************** + QMacCGStyle globals + *****************************************************************************/ +const int macItemFrame = 2; // menu item frame width +const int macItemHMargin = 3; // menu item hor text margin +const int macRightBorder = 12; // right border on mac + +/***************************************************************************** + QMacCGStyle utility functions + *****************************************************************************/ + +enum QAquaMetric { + // Prepend kThemeMetric to get the HIToolBox constant. + // Represents the values already used in QMacStyle. + CheckBoxHeight = 0, + CheckBoxWidth, + EditTextFrameOutset, + FocusRectOutset, + HSliderHeight, + HSliderTickHeight, + LargeProgressBarThickness, + ListHeaderHeight, + MenuSeparatorHeight, // GetThemeMenuSeparatorHeight + MiniCheckBoxHeight, + MiniCheckBoxWidth, + MiniHSliderHeight, + MiniHSliderTickHeight, + MiniPopupButtonHeight, + MiniPushButtonHeight, + MiniRadioButtonHeight, + MiniRadioButtonWidth, + MiniVSliderTickWidth, + MiniVSliderWidth, + NormalProgressBarThickness, + PopupButtonHeight, + ProgressBarShadowOutset, + PushButtonHeight, + RadioButtonHeight, + RadioButtonWidth, + SeparatorSize, + SmallCheckBoxHeight, + SmallCheckBoxWidth, + SmallHSliderHeight, + SmallHSliderTickHeight, + SmallPopupButtonHeight, + SmallProgressBarShadowOutset, + SmallPushButtonHeight, + SmallRadioButtonHeight, + SmallRadioButtonWidth, + SmallVSliderTickWidth, + SmallVSliderWidth, + VSliderTickWidth, + VSliderWidth +}; + +static const int qt_mac_aqua_metrics[] = { + // Values as of macOS 10.12.4 and Xcode 8.3.1 + 18 /* CheckBoxHeight */, + 18 /* CheckBoxWidth */, + 1 /* EditTextFrameOutset */, + 4 /* FocusRectOutset */, + 22 /* HSliderHeight */, + 5 /* HSliderTickHeight */, + 16 /* LargeProgressBarThickness */, + 17 /* ListHeaderHeight */, + 12 /* MenuSeparatorHeight, aka GetThemeMenuSeparatorHeight */, + 11 /* MiniCheckBoxHeight */, + 11 /* MiniCheckBoxWidth */, + 12 /* MiniHSliderHeight */, + 4 /* MiniHSliderTickHeight */, + 15 /* MiniPopupButtonHeight */, + 16 /* MiniPushButtonHeight */, + 11 /* MiniRadioButtonHeight */, + 11 /* MiniRadioButtonWidth */, + 4 /* MiniVSliderTickWidth */, + 12 /* MiniVSliderWidth */, + 12 /* NormalProgressBarThickness */, + 20 /* PopupButtonHeight */, + 4 /* ProgressBarShadowOutset */, + 20 /* PushButtonHeight */, + 18 /* RadioButtonHeight */, + 18 /* RadioButtonWidth */, + 1 /* SeparatorSize */, + 16 /* SmallCheckBoxHeight */, + 14 /* SmallCheckBoxWidth */, + 15 /* SmallHSliderHeight */, + 4 /* SmallHSliderTickHeight */, + 17 /* SmallPopupButtonHeight */, + 2 /* SmallProgressBarShadowOutset */, + 17 /* SmallPushButtonHeight */, + 15 /* SmallRadioButtonHeight */, + 15 /* SmallRadioButtonWidth */, + 4 /* SmallVSliderTickWidth */, + 15 /* SmallVSliderWidth */, + 5 /* VSliderTickWidth */, + 22 /* VSliderWidth */ +}; + +static inline int qt_mac_aqua_get_metric(QAquaMetric m) +{ + return qt_mac_aqua_metrics[m]; +} + +static QSize qt_aqua_get_known_size(QStyle::ContentsType ct, const QStyleOption *opt, + QSize szHint, QStyleHelper::WidgetSizePolicy sz) +{ + QSize ret(-1, -1); + if (sz != QStyleHelper::SizeSmall && sz != QStyleHelper::SizeLarge && sz != QStyleHelper::SizeMini) { + qDebug("Not sure how to return this..."); + return ret; + } +// if ((widget && widget->testAttribute(Qt::WA_SetFont)) || !QApplication::desktopSettingsAware()) { +// // If you're using a custom font and it's bigger than the default font, +// // then no constraints for you. If you are smaller, we can try to help you out +// QFont font = qt_app_fonts_hash()->value(widget->metaObject()->className(), QFont()); +// if (widget->font().pointSize() > font.pointSize()) +// return ret; +// } + + // TODO: investigate how this function is used. 'ct' can/should be + // filled out correctly in the styleoption already from the styleitem? + Q_ASSERT(ct != QStyle::CT_CustomBase); +// if (ct == QStyle::CT_CustomBase && widget) { +//#if QT_CONFIG(pushbutton) +// if (qobject_cast(widg)) +// ct = QStyle::CT_PushButton; +//#endif +// else if (qobject_cast(widget)) +// ct = QStyle::CT_RadioButton; +//#if QT_CONFIG(checkbox) +// else if (qobject_cast(widg)) +// ct = QStyle::CT_CheckBox; +//#endif +//#if QT_CONFIG(combobox) +// else if (qobject_cast(widg)) +// ct = QStyle::CT_ComboBox; +//#endif +//#if QT_CONFIG(toolbutton) +// else if (qobject_cast(widg)) +// ct = QStyle::CT_ToolButton; +//#endif +// else if (qobject_cast(widget)) +// ct = QStyle::CT_Slider; +//#if QT_CONFIG(progressbar) +// else if (qobject_cast(widg)) +// ct = QStyle::CT_ProgressBar; +//#endif +//#if QT_CONFIG(lineedit) +// else if (qobject_cast(widg)) +// ct = QStyle::CT_LineEdit; +//#endif +//#if QT_CONFIG(itemviews) +// else if (qobject_cast(widg)) +// ct = QStyle::CT_HeaderSection; +//#endif +//#if QT_CONFIG(menubar) +// else if (qobject_cast(widg)) +// ct = QStyle::CT_MenuBar; +//#endif +//#if QT_CONFIG(sizegrip) +// else if (qobject_cast(widg)) +// ct = QStyle::CT_SizeGrip; +//#endif +// else +// return ret; +// } + + switch (ct) { + case QStyle::CT_PushButton: { + const QStyleOptionButton *btn = qstyleoption_cast(opt); + if (btn) { + QString buttonText = qt_mac_removeMnemonics(btn->text); + if (buttonText.contains(QLatin1Char('\n'))) + ret = QSize(-1, -1); + else if (sz == QStyleHelper::SizeLarge) + ret = QSize(-1, qt_mac_aqua_get_metric(PushButtonHeight)); + else if (sz == QStyleHelper::SizeSmall) + ret = QSize(-1, qt_mac_aqua_get_metric(SmallPushButtonHeight)); + else if (sz == QStyleHelper::SizeMini) + ret = QSize(-1, qt_mac_aqua_get_metric(MiniPushButtonHeight)); + + if (!btn->icon.isNull()){ + // If the button got an icon, and the icon is larger than the + // button, we can't decide on a default size + ret.setWidth(-1); + if (ret.height() < btn->iconSize.height()) + ret.setHeight(-1); + } + else if (buttonText == QLatin1String("OK") || buttonText == QLatin1String("Cancel")){ + // Aqua Style guidelines restrict the size of OK and Cancel buttons to 68 pixels. + // However, this doesn't work for German, therefore only do it for English, + // I suppose it would be better to do some sort of lookups for languages + // that like to have really long words. + // FIXME This is not exactly true. Out of context, OK buttons have their + // implicit size calculated the same way as any other button. Inside a + // QDialogButtonBox, their size should be calculated such that the action + // or accept button (i.e., rightmost) and cancel button have the same width. + ret.setWidth(69); + } + } else { + // The only sensible thing to do is to return whatever the style suggests... + if (sz == QStyleHelper::SizeLarge) + ret = QSize(-1, qt_mac_aqua_get_metric(PushButtonHeight)); + else if (sz == QStyleHelper::SizeSmall) + ret = QSize(-1, qt_mac_aqua_get_metric(SmallPushButtonHeight)); + else if (sz == QStyleHelper::SizeMini) + ret = QSize(-1, qt_mac_aqua_get_metric(MiniPushButtonHeight)); + else + // Since there's no default size we return the large size... + ret = QSize(-1, qt_mac_aqua_get_metric(PushButtonHeight)); + } + break; } + case QStyle::CT_SizeGrip: + // Not HIG kosher: mimic what we were doing earlier until we support 4-edge resizing in MDI subwindows + if (sz == QStyleHelper::SizeLarge || sz == QStyleHelper::SizeSmall) { + int s = sz == QStyleHelper::SizeSmall ? 16 : 22; // large: pixel measured from HITheme, small: from my hat + int width = 0; +//#if QT_CONFIG(mdiarea) +// if (widg && qobject_cast(widg->parentWidget())) +// width = s; +//#endif + ret = QSize(width, s); + } + break; + case QStyle::CT_ComboBox: + switch (sz) { + case QStyleHelper::SizeLarge: + ret = QSize(-1, qt_mac_aqua_get_metric(PopupButtonHeight)); + break; + case QStyleHelper::SizeSmall: + ret = QSize(-1, qt_mac_aqua_get_metric(SmallPopupButtonHeight)); + break; + case QStyleHelper::SizeMini: + ret = QSize(-1, qt_mac_aqua_get_metric(MiniPopupButtonHeight)); + break; + default: + break; + } + break; + case QStyle::CT_ToolButton: + if (sz == QStyleHelper::SizeSmall) { + int width = 0, height = 0; + if (szHint == QSize(-1, -1)) { //just 'guess'.. +//#if QT_CONFIG(toolbutton) +// const QStyleOptionToolButton *bt = qstyleoption_cast(opt); +// // If this conversion fails then the widget was not what it claimed to be. +// if(bt) { +// if (!bt->icon.isNull()) { +// QSize iconSize = bt->iconSize; +// QSize pmSize = bt->icon.actualSize(QSize(32, 32), QIcon::Normal); +// width = qMax(width, qMax(iconSize.width(), pmSize.width())); +// height = qMax(height, qMax(iconSize.height(), pmSize.height())); +// } +// if (!bt->text.isNull() && bt->toolButtonStyle != Qt::ToolButtonIconOnly) { +// int text_width = bt->fontMetrics.horizontalAdvance(bt->text), +// text_height = bt->fontMetrics.height(); +// if (bt->toolButtonStyle == Qt::ToolButtonTextUnderIcon) { +// width = qMax(width, text_width); +// height += text_height; +// } else { +// width += text_width; +// width = qMax(height, text_height); +// } +// } +// } else +//#endif + { + // Let's return the size hint... + width = szHint.width(); + height = szHint.height(); + } + } else { + width = szHint.width(); + height = szHint.height(); + } + width = qMax(20, width + 5); //border + height = qMax(20, height + 5); //border + ret = QSize(width, height); + } + break; + case QStyle::CT_Slider: { + int w = -1; + const QStyleOptionSlider *sld = qstyleoption_cast(opt); + // If this conversion fails then the widget was not what it claimed to be. + if(sld) { + if (sz == QStyleHelper::SizeLarge) { + if (sld->orientation == Qt::Horizontal) { + w = qt_mac_aqua_get_metric(HSliderHeight); + if (sld->tickPosition != QStyleOptionSlider::NoTicks) + w += qt_mac_aqua_get_metric(HSliderTickHeight); + } else { + w = qt_mac_aqua_get_metric(VSliderWidth); + if (sld->tickPosition != QStyleOptionSlider::NoTicks) + w += qt_mac_aqua_get_metric(VSliderTickWidth); + } + } else if (sz == QStyleHelper::SizeSmall) { + if (sld->orientation == Qt::Horizontal) { + w = qt_mac_aqua_get_metric(SmallHSliderHeight); + if (sld->tickPosition != QStyleOptionSlider::NoTicks) + w += qt_mac_aqua_get_metric(SmallHSliderTickHeight); + } else { + w = qt_mac_aqua_get_metric(SmallVSliderWidth); + if (sld->tickPosition != QStyleOptionSlider::NoTicks) + w += qt_mac_aqua_get_metric(SmallVSliderTickWidth); + } + } else if (sz == QStyleHelper::SizeMini) { + if (sld->orientation == Qt::Horizontal) { + w = qt_mac_aqua_get_metric(MiniHSliderHeight); + if (sld->tickPosition != QStyleOptionSlider::NoTicks) + w += qt_mac_aqua_get_metric(MiniHSliderTickHeight); + } else { + w = qt_mac_aqua_get_metric(MiniVSliderWidth); + if (sld->tickPosition != QStyleOptionSlider::NoTicks) + w += qt_mac_aqua_get_metric(MiniVSliderTickWidth); + } + } + } else { + // This is tricky, we were requested to find a size for a slider which is not + // a slider. We don't know if this is vertical or horizontal or if we need to + // have tick marks or not. + // For this case we will return an horizontal slider without tick marks. + w = qt_mac_aqua_get_metric(HSliderHeight); + w += qt_mac_aqua_get_metric(HSliderTickHeight); + } + if (sld->orientation == Qt::Horizontal) + ret.setHeight(w); + else + ret.setWidth(w); + break; + } +//#if QT_CONFIG(progressbar) +// case QStyle::CT_ProgressBar: { +// int finalValue = -1; +// Qt::Orientation orient = Qt::Horizontal; +// if (const QProgressBar *pb = qobject_cast(widg)) +// orient = pb->orientation(); + +// if (sz == QStyleHelper::SizeLarge) +// finalValue = qt_mac_aqua_get_metric(LargeProgressBarThickness) +// + qt_mac_aqua_get_metric(ProgressBarShadowOutset); +// else +// finalValue = qt_mac_aqua_get_metric(NormalProgressBarThickness) +// + qt_mac_aqua_get_metric(SmallProgressBarShadowOutset); +// if (orient == Qt::Horizontal) +// ret.setHeight(finalValue); +// else +// ret.setWidth(finalValue); +// break; +// } +//#endif +//#if QT_CONFIG(combobox) +// case QStyle::CT_LineEdit: +// if (!widg || !qobject_cast(widg->parentWidget())) { +// //should I take into account the font dimentions of the lineedit? -Sam +// if (sz == QStyleHelper::SizeLarge) +// ret = QSize(-1, 21); +// else +// ret = QSize(-1, 19); +// } +// break; +//#endif + case QStyle::CT_HeaderSection: +//#if QT_CONFIG(treeview) +// if (isTreeView(widg)) +// ret = QSize(-1, qt_mac_aqua_get_metric(ListHeaderHeight)); +//#endif + break; + case QStyle::CT_MenuBar: + if (sz == QStyleHelper::SizeLarge) { + ret = QSize(-1, [[NSApp mainMenu] menuBarHeight]); + // In the qt_mac_set_native_menubar(false) case, + // we come it here with a zero-height main menu, + // preventing the in-window menu from displaying. + // Use 22 pixels for the height, by observation. + if (ret.height() <= 0) + ret.setHeight(22); + } + break; + default: + break; + } + return ret; +} + +#if defined(QMAC_QAQUASTYLE_SIZE_CONSTRAIN) || defined(DEBUG_SIZE_CONSTRAINT) +static QStyleHelper::WidgetSizePolicy qt_aqua_guess_size( + const QSize &large, + const QSize &small, + const QSize &mini) +{ + if (large == QSize(-1, -1)) { + if (small != QSize(-1, -1)) + return QStyleHelper::SizeSmall; + if (mini != QSize(-1, -1)) + return QStyleHelper::SizeMini; + return QStyleHelper::SizeDefault; + } else if (small == QSize(-1, -1)) { + if (mini != QSize(-1, -1)) + return QStyleHelper::SizeMini; + return QStyleHelper::SizeLarge; + } else if (mini == QSize(-1, -1)) { + return QStyleHelper::SizeLarge; + } + + if (qEnvironmentVariableIsSet("QWIDGET_ALL_SMALL")) + return QStyleHelper::SizeSmall; + else if (qEnvironmentVariableIsSet("QWIDGET_ALL_MINI")) + return QStyleHelper::SizeMini; + + return QStyleHelper::SizeLarge; +} +#endif + +QPainterPath QMacStylePrivate::windowPanelPath(const QRectF &r) const +{ + static const qreal CornerPointOffset = 5.5; + static const qreal CornerControlOffset = 2.1; + + QPainterPath path; + // Top-left corner + path.moveTo(r.left(), r.top() + CornerPointOffset); + path.cubicTo(r.left(), r.top() + CornerControlOffset, + r.left() + CornerControlOffset, r.top(), + r.left() + CornerPointOffset, r.top()); + // Top-right corner + path.lineTo(r.right() - CornerPointOffset, r.top()); + path.cubicTo(r.right() - CornerControlOffset, r.top(), + r.right(), r.top() + CornerControlOffset, + r.right(), r.top() + CornerPointOffset); + // Bottom-right corner + path.lineTo(r.right(), r.bottom() - CornerPointOffset); + path.cubicTo(r.right(), r.bottom() - CornerControlOffset, + r.right() - CornerControlOffset, r.bottom(), + r.right() - CornerPointOffset, r.bottom()); + // Bottom-right corner + path.lineTo(r.left() + CornerPointOffset, r.bottom()); + path.cubicTo(r.left() + CornerControlOffset, r.bottom(), + r.left(), r.bottom() - CornerControlOffset, + r.left(), r.bottom() - CornerPointOffset); + path.lineTo(r.left(), r.top() + CornerPointOffset); + + return path; +} + +QMacStylePrivate::CocoaControlType QMacStylePrivate::windowButtonCocoaControl(QStyle::SubControl sc) const +{ + struct WindowButtons { + QStyle::SubControl sc; + QMacStylePrivate::CocoaControlType ct; + }; + + static const WindowButtons buttons[] = { + { QStyle::SC_TitleBarCloseButton, QMacStylePrivate::Button_WindowClose }, + { QStyle::SC_TitleBarMinButton, QMacStylePrivate::Button_WindowMiniaturize }, + { QStyle::SC_TitleBarMaxButton, QMacStylePrivate::Button_WindowZoom } + }; + + for (const auto &wb : buttons) + if (wb.sc == sc) + return wb.ct; + + return NoControl; +} + + +void QMacStylePrivate::tabLayout(const QStyleOptionTab *opt, QRect *textRect, QRect *iconRect) const +{ + Q_ASSERT(textRect); + Q_ASSERT(iconRect); + QRect tr = opt->rect; + const bool verticalTabs = opt->shape == QStyleOptionTab::RoundedEast + || opt->shape == QStyleOptionTab::RoundedWest + || opt->shape == QStyleOptionTab::TriangularEast + || opt->shape == QStyleOptionTab::TriangularWest; + if (verticalTabs) + tr.setRect(0, 0, tr.height(), tr.width()); // 0, 0 as we will have a translate transform + + int verticalShift = proxyStyle->pixelMetric(QStyle::PM_TabBarTabShiftVertical, opt); + int horizontalShift = proxyStyle->pixelMetric(QStyle::PM_TabBarTabShiftHorizontal, opt); + const int hpadding = 4; + const int vpadding = proxyStyle->pixelMetric(QStyle::PM_TabBarTabVSpace, opt) / 2; + if (opt->shape == QStyleOptionTab::RoundedSouth || opt->shape == QStyleOptionTab::TriangularSouth) + verticalShift = -verticalShift; + tr.adjust(hpadding, verticalShift - vpadding, horizontalShift - hpadding, vpadding); + + // left widget + if (!opt->leftButtonSize.isEmpty()) { + const int buttonSize = verticalTabs ? opt->leftButtonSize.height() : opt->leftButtonSize.width(); + tr.setLeft(tr.left() + 4 + buttonSize); + // make text aligned to center + if (opt->rightButtonSize.isEmpty()) + tr.setRight(tr.right() - 4 - buttonSize); + } + // right widget + if (!opt->rightButtonSize.isEmpty()) { + const int buttonSize = verticalTabs ? opt->rightButtonSize.height() : opt->rightButtonSize.width(); + tr.setRight(tr.right() - 4 - buttonSize); + // make text aligned to center + if (opt->leftButtonSize.isEmpty()) + tr.setLeft(tr.left() + 4 + buttonSize); + } + + // icon + if (!opt->icon.isNull()) { + QSize iconSize = opt->iconSize; + if (!iconSize.isValid()) { + int iconExtent = proxyStyle->pixelMetric(QStyle::PM_SmallIconSize); + iconSize = QSize(iconExtent, iconExtent); + } + QSize tabIconSize = opt->icon.actualSize(iconSize, + (opt->state & QStyle::State_Enabled) ? QIcon::Normal : QIcon::Disabled, + (opt->state & QStyle::State_Selected) ? QIcon::On : QIcon::Off); + // High-dpi icons do not need adjustment; make sure tabIconSize is not larger than iconSize + tabIconSize = QSize(qMin(tabIconSize.width(), iconSize.width()), qMin(tabIconSize.height(), iconSize.height())); + + const int stylePadding = proxyStyle->pixelMetric(QStyle::PM_TabBarTabHSpace, opt) / 2 - hpadding; + + if (opt->documentMode) { + // documents show the icon as part of the the text + const int textWidth = + opt->fontMetrics.boundingRect(tr, Qt::AlignCenter | Qt::TextShowMnemonic, opt->text).width(); + *iconRect = QRect(tr.center().x() - textWidth / 2 - stylePadding - tabIconSize.width(), + tr.center().y() - tabIconSize.height() / 2, + tabIconSize.width(), tabIconSize.height()); + } else { + *iconRect = QRect(tr.left() + stylePadding, tr.center().y() - tabIconSize.height() / 2, + tabIconSize.width(), tabIconSize.height()); + } + if (!verticalTabs) + *iconRect = proxyStyle->visualRect(opt->direction, opt->rect, *iconRect); + + tr.setLeft(tr.left() + stylePadding + tabIconSize.width() + 4); + tr.setRight(tr.right() - stylePadding - tabIconSize.width() - 4); + } + + if (!verticalTabs) + tr = proxyStyle->visualRect(opt->direction, opt->rect, tr); + + *textRect = tr; +} + +QMacStylePrivate::Direction QMacStylePrivate::tabDirection(QStyleOptionTab::Shape shape) +{ + switch (shape) { + case QStyleOptionTab::RoundedSouth: + case QStyleOptionTab::TriangularSouth: + return South; + case QStyleOptionTab::RoundedNorth: + case QStyleOptionTab::TriangularNorth: + return North; + case QStyleOptionTab::RoundedWest: + case QStyleOptionTab::TriangularWest: + return West; + case QStyleOptionTab::RoundedEast: + case QStyleOptionTab::TriangularEast: + return East; + } +} + +bool QMacStylePrivate::verticalTabs(QMacStylePrivate::Direction direction) +{ + return (direction == QMacStylePrivate::East + || direction == QMacStylePrivate::West); +} + +QStyleHelper::WidgetSizePolicy QMacStylePrivate::effectiveAquaSizeConstrain(const QStyleOption *option, + QStyle::ContentsType ct, + QSize szHint, QSize *insz) const +{ + QStyleHelper::WidgetSizePolicy sz = aquaSizeConstrain(option, ct, szHint, insz); + if (sz == QStyleHelper::SizeDefault) + return QStyleHelper::SizeLarge; + return sz; +} + +QStyleHelper::WidgetSizePolicy QMacStylePrivate::aquaSizeConstrain(const QStyleOption *option, + QStyle::ContentsType ct, QSize szHint, QSize *insz) const +{ + if (!option) + return QStyleHelper::SizeLarge; + + if (option->state & QStyle::State_Small) + return QStyleHelper::SizeSmall; + if (option->state & QStyle::State_Mini) + return QStyleHelper::SizeMini; + + return QStyleHelper::SizeLarge; + +} + +uint qHash(const QMacStylePrivate::CocoaControl &cw, uint seed = 0) +{ + return ((cw.type << 2) | cw.size) ^ seed; +} + +QMacStylePrivate::CocoaControl::CocoaControl() + : type(NoControl), size(QStyleHelper::SizeDefault) +{ +} + +QMacStylePrivate::CocoaControl::CocoaControl(CocoaControlType t, QStyleHelper::WidgetSizePolicy s) + : type(t), size(s) +{ +} + +bool QMacStylePrivate::CocoaControl::operator==(const CocoaControl &other) const +{ + return other.type == type && other.size == size; +} + +QSizeF QMacStylePrivate::CocoaControl::defaultFrameSize() const +{ + // We need this because things like NSView.alignmentRectInsets + // or -[NSCell titleRectForBounds:] won't work unless the control + // has a reasonable frame set. IOW, it's a chicken and egg problem. + // These values are as observed in Xcode 9's Interface Builder. + + if (type == Button_PushButton) + return QSizeF(-1, pushButtonDefaultHeight[size]); + + if (type == Button_PopupButton + || type == Button_PullDown) + return QSizeF(-1, popupButtonDefaultHeight[size]); + + if (type == ComboBox) + return QSizeF(-1, comboBoxDefaultHeight[size]); + + return QSizeF(); +} + +QRectF QMacStylePrivate::CocoaControl::adjustedControlFrame(const QRectF &rect) const +{ + QRectF frameRect; + const auto frameSize = defaultFrameSize(); + if (type == QMacStylePrivate::Button_SquareButton) { + frameRect = rect.adjusted(3, 1, -3, -1) + .adjusted(focusRingWidth, focusRingWidth, -focusRingWidth, -focusRingWidth); + } else if (type == QMacStylePrivate::Button_PushButton) { + // Start from the style option's top-left corner. + frameRect = QRectF(rect.topLeft(), + QSizeF(rect.width(), frameSize.height())); + if (size == QStyleHelper::SizeSmall) + frameRect = frameRect.translated(0, 1.5); + else if (size == QStyleHelper::SizeMini) + frameRect = frameRect.adjusted(0, 0, -8, 0).translated(4, 4); + } else { + // Center in the style option's rect. + frameRect = QRectF(QPointF(0, (rect.height() - frameSize.height()) / 2.0), + QSizeF(rect.width(), frameSize.height())); + frameRect = frameRect.translated(rect.topLeft()); + if (type == QMacStylePrivate::Button_PullDown || type == QMacStylePrivate::Button_PopupButton) { + if (size == QStyleHelper::SizeLarge) + frameRect = frameRect.adjusted(0, 0, -6, 0).translated(3, 0); + else if (size == QStyleHelper::SizeSmall) + frameRect = frameRect.adjusted(0, 0, -4, 0).translated(2, 1); + else if (size == QStyleHelper::SizeMini) + frameRect = frameRect.adjusted(0, 0, -9, 0).translated(5, 0); + } else if (type == QMacStylePrivate::ComboBox) { + frameRect = frameRect.adjusted(0, 0, -6, 0).translated(4, 0); + } + } + + return frameRect; +} + +QMarginsF QMacStylePrivate::CocoaControl::titleMargins() const +{ + if (type == QMacStylePrivate::Button_PushButton) { + if (size == QStyleHelper::SizeLarge) + return QMarginsF(12, 5, 12, 9); + if (size == QStyleHelper::SizeSmall) + return QMarginsF(12, 4, 12, 9); + if (size == QStyleHelper::SizeMini) + return QMarginsF(10, 1, 10, 2); + } + + if (type == QMacStylePrivate::Button_PullDown) { + if (size == QStyleHelper::SizeLarge) + return QMarginsF(7.5, 2.5, 22.5, 5.5); + if (size == QStyleHelper::SizeSmall) + return QMarginsF(7.5, 2, 20.5, 4); + if (size == QStyleHelper::SizeMini) + return QMarginsF(4.5, 0, 16.5, 2); + } + + if (type == QMacStylePrivate::Button_SquareButton) + return QMarginsF(6, 1, 6, 2); + + return QMarginsF(); +} + +bool QMacStylePrivate::CocoaControl::getCocoaButtonTypeAndBezelStyle(NSButtonType *buttonType, NSBezelStyle *bezelStyle) const +{ + switch (type) { + case Button_CheckBox: + *buttonType = NSSwitchButton; + *bezelStyle = NSRegularSquareBezelStyle; + break; + case Button_Disclosure: + *buttonType = NSOnOffButton; + *bezelStyle = NSDisclosureBezelStyle; + break; + case Button_RadioButton: + *buttonType = NSRadioButton; + *bezelStyle = NSRegularSquareBezelStyle; + break; + case Button_SquareButton: + *buttonType = NSPushOnPushOffButton; + *bezelStyle = NSShadowlessSquareBezelStyle; + break; + case Button_PushButton: + *buttonType = NSPushOnPushOffButton; + *bezelStyle = NSRoundedBezelStyle; + break; + default: + return false; + } + + return true; +} + +QMacStylePrivate::CocoaControlType cocoaControlType(const QStyleOption *opt) +{ + if (const auto *btn = qstyleoption_cast(opt)) { + const bool hasMenu = btn->features & QStyleOptionButton::HasMenu; + // When the contents won't fit in a large sized button, + // and WA_MacNormalSize is not set, make the button square. + // Threshold used to be at 34, not 32. + const auto maxNonSquareHeight = pushButtonDefaultHeight[QStyleHelper::SizeLarge]; + const bool isSquare = (btn->features & QStyleOptionButton::Flat) + || (btn->rect.height() > maxNonSquareHeight); +// && !(w && w->testAttribute(Qt::WA_MacNormalSize))); + return (isSquare? QMacStylePrivate::Button_SquareButton : + hasMenu ? QMacStylePrivate::Button_PullDown : + QMacStylePrivate::Button_PushButton); + } + + if (const auto *combo = qstyleoption_cast(opt)) { + if (combo->editable) + return QMacStylePrivate::ComboBox; + // TODO Me may support square, non-editable combo boxes, but not more than that + return QMacStylePrivate::Button_PopupButton; + } + + return QMacStylePrivate::NoControl; +} + +/** + Carbon draws comboboxes (and other views) outside the rect given as argument. Use this function to obtain + the corresponding inner rect for drawing the same combobox so that it stays inside the given outerBounds. +*/ +CGRect QMacStylePrivate::comboboxInnerBounds(const CGRect &outerBounds, const CocoaControl &cocoaWidget) +{ + CGRect innerBounds = outerBounds; + // Carbon draw parts of the view outside the rect. + // So make the rect a bit smaller to compensate + // (I wish HIThemeGetButtonBackgroundBounds worked) + if (cocoaWidget.type == Button_PopupButton) { + switch (cocoaWidget.size) { + case QStyleHelper::SizeSmall: + innerBounds.origin.x += 3; + innerBounds.origin.y += 3; + innerBounds.size.width -= 6; + innerBounds.size.height -= 7; + break; + case QStyleHelper::SizeMini: + innerBounds.origin.x += 2; + innerBounds.origin.y += 2; + innerBounds.size.width -= 5; + innerBounds.size.height -= 6; + break; + case QStyleHelper::SizeLarge: + case QStyleHelper::SizeDefault: + innerBounds.origin.x += 2; + innerBounds.origin.y += 2; + innerBounds.size.width -= 5; + innerBounds.size.height -= 6; + } + } else if (cocoaWidget.type == ComboBox) { + switch (cocoaWidget.size) { + case QStyleHelper::SizeSmall: + innerBounds.origin.x += 3; + innerBounds.origin.y += 3; + innerBounds.size.width -= 7; + innerBounds.size.height -= 8; + break; + case QStyleHelper::SizeMini: + innerBounds.origin.x += 3; + innerBounds.origin.y += 3; + innerBounds.size.width -= 4; + innerBounds.size.height -= 8; + break; + case QStyleHelper::SizeLarge: + case QStyleHelper::SizeDefault: + innerBounds.origin.x += 3; + innerBounds.origin.y += 2; + innerBounds.size.width -= 6; + innerBounds.size.height -= 8; + } + } + + return innerBounds; +} + +/** + Inside a combobox Qt places a line edit widget. The size of this widget should depend on the kind + of combobox we choose to draw. This function calculates and returns this size. +*/ +QRectF QMacStylePrivate::comboboxEditBounds(const QRectF &outerBounds, const CocoaControl &cw) +{ + QRectF ret = outerBounds; + if (cw.type == ComboBox) { + switch (cw.size) { + case QStyleHelper::SizeLarge: + ret = ret.adjusted(0, 0, -25, 0).translated(2, 4.5); + ret.setHeight(16); + break; + case QStyleHelper::SizeSmall: + ret = ret.adjusted(0, 0, -22, 0).translated(2, 3); + ret.setHeight(14); + break; + case QStyleHelper::SizeMini: + ret = ret.adjusted(0, 0, -19, 0).translated(2, 2.5); + ret.setHeight(10.5); + break; + default: + break; + } + } else if (cw.type == Button_PopupButton) { + switch (cw.size) { + case QStyleHelper::SizeLarge: + ret.adjust(10, 1, -23, -4); + break; + case QStyleHelper::SizeSmall: + ret.adjust(10, 4, -20, -3); + break; + case QStyleHelper::SizeMini: + ret.adjust(9, 0, -19, 0); + ret.setHeight(13); + break; + default: + break; + } + } + return ret; +} + +QMacStylePrivate::QMacStylePrivate() + : backingStoreNSView(nil) +{ + if (auto *ssf = QGuiApplicationPrivate::platformTheme()->font(QPlatformTheme::SmallFont)) + smallSystemFont = *ssf; + if (auto *msf = QGuiApplicationPrivate::platformTheme()->font(QPlatformTheme::MiniFont)) + miniSystemFont = *msf; +} + +QMacStylePrivate::~QMacStylePrivate() +{ + QMacAutoReleasePool pool; + for (NSView *b : cocoaControls) + [b release]; + for (NSCell *cell : cocoaCells) + [cell release]; +} + +NSView *QMacStylePrivate::cocoaControl(CocoaControl cocoaControl) const +{ + if (cocoaControl.type == QMacStylePrivate::NoControl + || cocoaControl.size == QStyleHelper::SizeDefault) + return nil; + + if (cocoaControl.type == Box) { + if (__builtin_available(macOS 10.14, *)) { + if (qt_mac_applicationIsInDarkMode()) { + // See render code in drawPrimitive(PE_FrameTabWidget) + cocoaControl.type = Box_Dark; + } + } + } + + NSView *bv = cocoaControls.value(cocoaControl, nil); + if (!bv) { + switch (cocoaControl.type) { + case Box: { + NSBox *box = [[NSBox alloc] init]; + bv = box; + box.title = @""; + box.titlePosition = NSNoTitle; + break; + } + case Box_Dark: + bv = [[QDarkNSBox alloc] init]; + break; + case Button_CheckBox: + case Button_Disclosure: + case Button_PushButton: + case Button_RadioButton: + case Button_SquareButton: { + NSButton *bc = [[NSButton alloc] init]; + bc.title = @""; + // See below for style and bezel setting. + bv = bc; + break; + } + case Button_PopupButton: + case Button_PullDown: { + NSPopUpButton *bc = [[NSPopUpButton alloc] init]; + bc.title = @""; + if (cocoaControl.type == Button_PullDown) + bc.pullsDown = YES; + bv = bc; + break; + } + case Button_WindowClose: + case Button_WindowMiniaturize: + case Button_WindowZoom: { + const NSWindowButton button = [=] { + switch (cocoaControl.type) { + case Button_WindowClose: + return NSWindowCloseButton; + case Button_WindowMiniaturize: + return NSWindowMiniaturizeButton; + case Button_WindowZoom: + return NSWindowZoomButton; + default: + break; + } + Q_UNREACHABLE(); + } (); + const auto styleMask = NSWindowStyleMaskTitled + | NSWindowStyleMaskClosable + | NSWindowStyleMaskMiniaturizable + | NSWindowStyleMaskResizable; + bv = [NSWindow standardWindowButton:button forStyleMask:styleMask]; + [bv retain]; + break; + } + case ComboBox: + bv = [[NSComboBox alloc] init]; + break; + case ProgressIndicator_Determinate: + bv = [[NSProgressIndicator alloc] init]; + break; + case ProgressIndicator_Indeterminate: + bv = [[QIndeterminateProgressIndicator alloc] init]; + break; + case Scroller_Horizontal: + bv = [[NSScroller alloc] initWithFrame:NSMakeRect(0, 0, 200, 20)]; + break; + case Scroller_Vertical: + // Cocoa sets the orientation from the view's frame + // at construction time, and it cannot be changed later. + bv = [[NSScroller alloc] initWithFrame:NSMakeRect(0, 0, 20, 200)]; + break; + case Slider_Horizontal: + bv = [[NSSlider alloc] initWithFrame:NSMakeRect(0, 0, 200, 20)]; + break; + case Slider_Vertical: + // Cocoa sets the orientation from the view's frame + // at construction time, and it cannot be changed later. + bv = [[NSSlider alloc] initWithFrame:NSMakeRect(0, 0, 20, 200)]; + break; + case SplitView_Horizontal: + bv = [[NSSplitView alloc] init]; + break; + case SplitView_Vertical: + bv = [[QVerticalSplitView alloc] init]; + break; + case TextField: + bv = [[NSTextField alloc] init]; + break; + default: + break; + } + + if ([bv isKindOfClass:[NSControl class]]) { + auto *ctrl = static_cast(bv); + switch (cocoaControl.size) { + case QStyleHelper::SizeSmall: + ctrl.controlSize = NSControlSizeSmall; + break; + case QStyleHelper::SizeMini: + ctrl.controlSize = NSControlSizeMini; + break; + default: + break; + } + } else if (cocoaControl.type == ProgressIndicator_Determinate || + cocoaControl.type == ProgressIndicator_Indeterminate) { + auto *pi = static_cast(bv); + pi.indeterminate = (cocoaControl.type == ProgressIndicator_Indeterminate); + switch (cocoaControl.size) { + case QStyleHelper::SizeSmall: + pi.controlSize = NSControlSizeSmall; + break; + case QStyleHelper::SizeMini: + pi.controlSize = NSControlSizeMini; + break; + default: + break; + } + } + + cocoaControls.insert(cocoaControl, bv); + } + + NSButtonType buttonType; + NSBezelStyle bezelStyle; + if (cocoaControl.getCocoaButtonTypeAndBezelStyle(&buttonType, &bezelStyle)) { + // FIXME We need to reset the button's type and + // bezel style properties, even when cached. + auto *button = static_cast(bv); + button.buttonType = buttonType; + button.bezelStyle = bezelStyle; + if (cocoaControl.type == Button_CheckBox) + button.allowsMixedState = YES; + } + + return bv; +} + +NSCell *QMacStylePrivate::cocoaCell(CocoaControl cocoaControl) const +{ + NSCell *cell = cocoaCells[cocoaControl]; + if (!cell) { + switch (cocoaControl.type) { + case Stepper: + cell = [[NSStepperCell alloc] init]; + break; + case Button_Disclosure: { + NSButtonCell *bc = [[NSButtonCell alloc] init]; + bc.buttonType = NSOnOffButton; + bc.bezelStyle = NSDisclosureBezelStyle; + cell = bc; + break; + } + default: + break; + } + + switch (cocoaControl.size) { + case QStyleHelper::SizeSmall: + cell.controlSize = NSControlSizeSmall; + break; + case QStyleHelper::SizeMini: + cell.controlSize = NSControlSizeMini; + break; + default: + break; + } + + cocoaCells.insert(cocoaControl, cell); + } + + return cell; +} + +void QMacStylePrivate::drawNSViewInRect(NSView *view, const QRectF &rect, QPainter *p, DrawRectBlock drawRectBlock) const +{ + QMacAutoReleasePool pool; + QMacCGContext ctx(p); + setupNSGraphicsContext(ctx, YES); + + // FIXME: The rect that we get in is relative to the widget that we're drawing + // style on behalf of, and doesn't take into account the offset of that widget + // to the widget that owns the backingstore, which we are placing the native + // view into below. This means most of the views are placed in the upper left + // corner of backingStoreNSView, which does not map to where the actual widget + // is, and which may cause problems such as triggering a setNeedsDisplay of the + // backingStoreNSView for the wrong rect. We work around this by making the view + // layer-backed, which prevents triggering display of the backingStoreNSView, but + // but there may be other issues lurking here due to the wrong position. QTBUG-68023 + view.wantsLayer = YES; + + // FIXME: We are also setting the frame of the incoming view a lot at the call + // sites of this function, making it unclear who's actually responsible for + // maintaining the size and position of the view. In theory the call sites + // should ensure the _size_ of the view is correct, and then let this code + // take care of _positioning_ the view at the right place inside backingStoreNSView. + // For now we pass on the rect as is, to prevent any regressions until this + // can be investigated properly. + view.frame = rect.toCGRect(); + + [backingStoreNSView addSubview:view]; + + // FIXME: Based on the code below, this method isn't drawing an NSView into + // a rect, it's drawing _part of the NSView_, defined by the incoming clip + // or dirty rect, into the current graphics context. We're doing some manual + // translations at the call sites that would indicate that this relationship + // is a bit fuzzy. + const CGRect dirtyRect = rect.toCGRect(); + + if (drawRectBlock) + drawRectBlock(ctx, dirtyRect); + else + [view drawRect:dirtyRect]; + + [view removeFromSuperviewWithoutNeedingDisplay]; + + restoreNSGraphicsContext(ctx); +} + +void QMacStylePrivate::resolveCurrentNSView(QWindow *window) const +{ + backingStoreNSView = window ? (NSView *)window->winId() : nil; +} + +QMacStyle::QMacStyle() + : QCommonStyle(*new QMacStylePrivate) +{ + QMacAutoReleasePool pool; + + static QMacNotificationObserver scrollbarStyleObserver(nil, + NSPreferredScrollerStyleDidChangeNotification, []() { + // Purge destroyed scroll bars + QMacStylePrivate::scrollBars.removeAll(QPointer()); + + QEvent event(QEvent::StyleChange); + for (const auto &o : QMacStylePrivate::scrollBars) + QCoreApplication::sendEvent(o, &event); + }); + +#if QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_14) + Q_D(QMacStyle); + // FIXME: Tie this logic into theme change, or even polish/unpolish + if (QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSMojave) { + d->appearanceObserver = QMacKeyValueObserver(NSApp, @"effectiveAppearance", [this] { + Q_D(QMacStyle); + for (NSView *b : d->cocoaControls) + [b release]; + d->cocoaControls.clear(); + }); + } +#endif +} + +QMacStyle::~QMacStyle() +{ +} + +int QMacStyle::pixelMetric(PixelMetric metric, const QStyleOption *opt) const +{ + Q_D(const QMacStyle); + const int controlSize = getControlSize(opt); + int ret = 0; + + switch (metric) { + case PM_TabCloseIndicatorWidth: + case PM_TabCloseIndicatorHeight: + ret = closeButtonSize; + break; + case PM_ToolBarIconSize: + ret = proxy()->pixelMetric(PM_LargeIconSize); + break; + case PM_FocusFrameVMargin: + case PM_FocusFrameHMargin: + ret = qt_mac_aqua_get_metric(FocusRectOutset); + break; + case PM_DialogButtonsSeparator: + ret = -5; + break; + case PM_DialogButtonsButtonHeight: { + QSize sz; + ret = d->aquaSizeConstrain(opt, QStyle::CT_PushButton, QSize(-1, -1), &sz); + if (sz == QSize(-1, -1)) + ret = 32; + else + ret = sz.height(); + break; } + case PM_DialogButtonsButtonWidth: { + QSize sz; + ret = d->aquaSizeConstrain(opt, QStyle::CT_PushButton, QSize(-1, -1), &sz); + if (sz == QSize(-1, -1)) + ret = 70; + else + ret = sz.width(); + break; } + + case PM_MenuBarHMargin: + ret = 8; + break; + + case PM_MenuBarVMargin: + ret = 0; + break; + + case PM_MenuBarPanelWidth: + ret = 0; + break; + + case PM_MenuButtonIndicator: + ret = toolButtonArrowSize; + break; + + case QStyle::PM_MenuDesktopFrameWidth: + ret = 5; + break; + + case PM_CheckBoxLabelSpacing: + case PM_RadioButtonLabelSpacing: + ret = [=] { + if (opt) { + if (opt->state & State_Mini) + return 4; + if (opt->state & State_Small) + return 3; + } + return 2; + } (); + break; + case PM_MenuScrollerHeight: + ret = 15; // I hate having magic numbers in here... + break; + case PM_DefaultFrameWidth: +//#if QT_CONFIG(mainwindow) +// if (widget && (widget->isWindow() || !widget->parentWidget() +// || (qobject_cast(widget->parentWidget()) +// && static_cast(widget->parentWidget())->centralWidget() == widget)) +// && qobject_cast(widget)) +// ret = 0; +// else +//#endif + // The combo box popup has no frame. + if (qstyleoption_cast(opt) != 0) + ret = 0; + else + ret = 1; + break; + case PM_MaximumDragDistance: + ret = -1; + break; + case PM_ScrollBarSliderMin: + ret = 24; + break; + case PM_SpinBoxFrameWidth: + ret = qt_mac_aqua_get_metric(EditTextFrameOutset); + break; + case PM_ButtonShiftHorizontal: + case PM_ButtonShiftVertical: + ret = 0; + break; + case PM_SliderLength: + ret = 17; + break; + // Returns the number of pixels to use for the business part of the + // slider (i.e., the non-tickmark portion). The remaining space is shared + // equally between the tickmark regions. + case PM_SliderControlThickness: + if (const QStyleOptionSlider *sl = qstyleoption_cast(opt)) { + int space = (sl->orientation == Qt::Horizontal) ? sl->rect.height() : sl->rect.width(); + int ticks = sl->tickPosition; + int n = 0; + if (ticks & QStyleOptionSlider::TicksAbove) + ++n; + if (ticks & QStyleOptionSlider::TicksBelow) + ++n; + if (!n) { + ret = space; + break; + } + + int thick = 6; // Magic constant to get 5 + 16 + 5 + if (ticks != QStyleOptionSlider::TicksBothSides && ticks != QStyleOptionSlider::NoTicks) + thick += proxy()->pixelMetric(PM_SliderLength, sl) / 4; + + space -= thick; + if (space > 0) + thick += (space * 2) / (n + 2); + ret = thick; + } else { + ret = 0; + } + break; + case PM_SmallIconSize: + ret = int(QStyleHelper::dpiScaled(16., opt)); + break; + + case PM_LargeIconSize: + ret = int(QStyleHelper::dpiScaled(32., opt)); + break; + + case PM_IconViewIconSize: + ret = proxy()->pixelMetric(PM_LargeIconSize, opt); + break; + + case PM_ButtonDefaultIndicator: + ret = 0; + break; + case PM_TitleBarHeight: { + NSUInteger style = NSWindowStyleMaskTitled; +// if (widget && ((widget->windowFlags() & Qt::Tool) == Qt::Tool)) +// style |= NSWindowStyleMaskUtilityWindow; + ret = int([NSWindow frameRectForContentRect:NSZeroRect + styleMask:style].size.height); + break; } + case QStyle::PM_TabBarTabHSpace: + switch (d->aquaSizeConstrain(opt)) { + case QStyleHelper::SizeLarge: + ret = QCommonStyle::pixelMetric(metric, opt); + break; + case QStyleHelper::SizeSmall: + ret = 20; + break; + case QStyleHelper::SizeMini: + ret = 16; + break; + case QStyleHelper::SizeDefault: + const QStyleOptionTab *tb = qstyleoption_cast(opt); + if (tb && tb->documentMode) + ret = 30; + else + ret = QCommonStyle::pixelMetric(metric, opt); + break; + } + break; + case PM_TabBarTabVSpace: + ret = 4; + break; + case PM_TabBarTabShiftHorizontal: + case PM_TabBarTabShiftVertical: + ret = 0; + break; + case PM_TabBarBaseHeight: + ret = 0; + break; + case PM_TabBarTabOverlap: + ret = 1; + break; + case PM_TabBarBaseOverlap: + switch (d->aquaSizeConstrain(opt)) { + case QStyleHelper::SizeDefault: + case QStyleHelper::SizeLarge: + ret = 11; + break; + case QStyleHelper::SizeSmall: + ret = 8; + break; + case QStyleHelper::SizeMini: + ret = 7; + break; + } + break; + case PM_ScrollBarExtent: { + const QStyleHelper::WidgetSizePolicy size = d->effectiveAquaSizeConstrain(opt); + ret = static_cast([NSScroller + scrollerWidthForControlSize:static_cast(size) + scrollerStyle:[NSScroller preferredScrollerStyle]]); + break; } + case PM_IndicatorHeight: { + switch (d->aquaSizeConstrain(opt)) { + case QStyleHelper::SizeDefault: + case QStyleHelper::SizeLarge: + ret = qt_mac_aqua_get_metric(CheckBoxHeight); + break; + case QStyleHelper::SizeMini: + ret = qt_mac_aqua_get_metric(MiniCheckBoxHeight); + break; + case QStyleHelper::SizeSmall: + ret = qt_mac_aqua_get_metric(SmallCheckBoxHeight); + break; + } + break; } + case PM_IndicatorWidth: { + switch (d->aquaSizeConstrain(opt)) { + case QStyleHelper::SizeDefault: + case QStyleHelper::SizeLarge: + ret = qt_mac_aqua_get_metric(CheckBoxWidth); + break; + case QStyleHelper::SizeMini: + ret = qt_mac_aqua_get_metric(MiniCheckBoxWidth); + break; + case QStyleHelper::SizeSmall: + ret = qt_mac_aqua_get_metric(SmallCheckBoxWidth); + break; + } + ++ret; + break; } + case PM_ExclusiveIndicatorHeight: { + switch (d->aquaSizeConstrain(opt)) { + case QStyleHelper::SizeDefault: + case QStyleHelper::SizeLarge: + ret = qt_mac_aqua_get_metric(RadioButtonHeight); + break; + case QStyleHelper::SizeMini: + ret = qt_mac_aqua_get_metric(MiniRadioButtonHeight); + break; + case QStyleHelper::SizeSmall: + ret = qt_mac_aqua_get_metric(SmallRadioButtonHeight); + break; + } + break; } + case PM_ExclusiveIndicatorWidth: { + switch (d->aquaSizeConstrain(opt)) { + case QStyleHelper::SizeDefault: + case QStyleHelper::SizeLarge: + ret = qt_mac_aqua_get_metric(RadioButtonWidth); + break; + case QStyleHelper::SizeMini: + ret = qt_mac_aqua_get_metric(MiniRadioButtonWidth); + break; + case QStyleHelper::SizeSmall: + ret = qt_mac_aqua_get_metric(SmallRadioButtonWidth); + break; + } + ++ret; + break; } + case PM_MenuVMargin: + ret = 4; + break; + case PM_MenuPanelWidth: + ret = 0; + break; + case PM_ToolTipLabelFrameWidth: + ret = 0; + break; + case PM_SizeGripSize: { + QStyleHelper::WidgetSizePolicy aSize; +// if (widget && widget->window()->windowType() == Qt::Tool) +// aSize = QStyleHelper::SizeSmall; +// else + aSize = QStyleHelper::SizeLarge; + const QSize size = qt_aqua_get_known_size(CT_SizeGrip, opt, QSize(), aSize); + ret = size.width(); + break; } + case PM_MdiSubWindowFrameWidth: + ret = 1; + break; + case PM_DockWidgetFrameWidth: + ret = 0; + break; + case PM_DockWidgetTitleMargin: + ret = 0; + break; + case PM_DockWidgetSeparatorExtent: + ret = 1; + break; + case PM_ToolBarHandleExtent: + ret = 11; + break; + case PM_ToolBarItemMargin: + ret = 0; + break; + case PM_ToolBarItemSpacing: + ret = 4; + break; + case PM_SplitterWidth: + ret = 7; + break; + case PM_LayoutLeftMargin: + case PM_LayoutTopMargin: + case PM_LayoutRightMargin: + case PM_LayoutBottomMargin: + { + if (opt->state & State_Window) { + /* + AHIG would have (20, 8, 10) here but that makes + no sense. It would also have 14 for the top margin + but this contradicts both Builder and most + applications. + */ + return_SIZE(20, 10, 10); // AHIG + } else { + // hack to detect QTabWidget +// if (widget && widget->parentWidget() +// && widget->parentWidget()->sizePolicy().controlType() == QSizePolicy::TabWidget) { +// if (metric == PM_LayoutTopMargin) { +// /* +// Builder would have 14 (= 20 - 6) instead of 12, +// but that makes the tab look disproportionate. +// */ +// return_SIZE(12, 6, 6); // guess +// } else { +// return_SIZE(20 /* Builder */, 8 /* guess */, 8 /* guess */); +// } +// } else { + /* + Child margins are highly inconsistent in AHIG and Builder. + */ + return_SIZE(12, 8, 6); // guess +// } + } + } + case PM_LayoutHorizontalSpacing: + case PM_LayoutVerticalSpacing: + return -1; + case PM_MenuHMargin: + ret = 0; + break; + case PM_ToolBarExtensionExtent: + ret = 21; + break; + case PM_ToolBarFrameWidth: + ret = 1; + break; + case PM_ScrollView_ScrollBarOverlap: + ret = [NSScroller preferredScrollerStyle] == NSScrollerStyleOverlay ? + pixelMetric(PM_ScrollBarExtent, opt) : 0; + break; + case PM_PushButtonFocusFrameRadius: + ret = LargeSmallMini(opt, 8, 7, 5); + break; + case PM_CheckBoxFocusFrameRadius: + ret = LargeSmallMini(opt, 6, 5, 4); + break; + case PM_ComboBoxFocusFrameRadius: + ret = LargeSmallMini(opt, 8, 7, 4); + break; + case PM_RadioButtonFocusFrameRadius: + ret = 10; + break; + case PM_SliderFocusFrameRadius: + // QTBUG-93423: We currently need to skip drawing a focus ring around the handle, since + // the handle drawn by the UIKit is not centered inside the rect we get from calling + // [cell knobRectFlipped:slider.isFlipped]. So we choose to draw the focus as + // a rect instead until we have a better solution available. + ret = 0; + break; + case PM_DialFocusFrameRadius: + case PM_SpinBoxFocusFrameRadius: + case PM_TextAreaFocusFrameRadius: + case PM_TextFieldFocusFrameRadius: + ret = 3; + break; + default: + ret = QCommonStyle::pixelMetric(metric, opt); + break; + } + return ret; +} + +//QPalette QMacStyle::standardPalette() const +//{ +// auto platformTheme = QGuiApplicationPrivate::platformTheme(); +// auto styleNames = platformTheme->themeHint(QPlatformTheme::StyleNames); +// if (styleNames.toStringList().contains("macintosh")) +// return QPalette(); // Inherit everything from theme +// else +// return QStyle::standardPalette(); +//} + +int QMacStyle::styleHint(StyleHint sh, const QStyleOption *opt, QStyleHintReturn *hret) const +{ + QMacAutoReleasePool pool; + + int ret = 0; + switch (sh) { + case SH_Slider_SnapToValue: + case SH_PrintDialog_RightAlignButtons: + case SH_FontDialog_SelectAssociatedText: + case SH_MenuBar_MouseTracking: + case SH_Menu_MouseTracking: + case SH_ComboBox_ListMouseTracking: + case SH_MainWindow_SpaceBelowMenuBar: + case SH_ItemView_ChangeHighlightOnFocus: + ret = 1; + break; + case SH_ToolBox_SelectedPageTitleBold: + ret = 0; + break; + case SH_DialogButtonBox_ButtonsHaveIcons: + ret = 0; + break; + case SH_Menu_SelectionWrap: + ret = false; + break; + case SH_Menu_KeyboardSearch: + ret = true; + break; + case SH_Menu_SpaceActivatesItem: + ret = true; + break; + case SH_Slider_AbsoluteSetButtons: + ret = Qt::LeftButton|Qt::MiddleButton; + break; + case SH_Slider_PageSetButtons: + ret = 0; + break; + case SH_ScrollBar_ContextMenu: + ret = false; + break; + case SH_TitleBar_AutoRaise: + ret = true; + break; + case SH_Menu_AllowActiveAndDisabled: + ret = false; + break; + case SH_Menu_SubMenuPopupDelay: + ret = 100; + break; + case SH_Menu_SubMenuUniDirection: + ret = true; + break; + case SH_Menu_SubMenuSloppySelectOtherActions: + ret = false; + break; + case SH_Menu_SubMenuResetWhenReenteringParent: + ret = true; + break; + case SH_Menu_SubMenuDontStartSloppyOnLeave: + ret = true; + break; + + case SH_ScrollBar_LeftClickAbsolutePosition: { + NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; + bool result = [defaults boolForKey:@"AppleScrollerPagingBehavior"]; +// if(QApplication::keyboardModifiers() & Qt::AltModifier) +// ret = !result; +// else + ret = result; + break; } + case SH_TabBar_PreferNoArrows: + ret = true; + break; + /* + case SH_DialogButtons_DefaultButton: + ret = QDialogButtons::Reject; + break; + */ + case SH_GroupBox_TextLabelVerticalAlignment: + ret = Qt::AlignTop; + break; + case SH_ScrollView_FrameOnlyAroundContents: + ret = QCommonStyle::styleHint(sh, opt, hret); + break; + case SH_Menu_FillScreenWithScroll: + ret = false; + break; + case SH_Menu_Scrollable: + ret = true; + break; + case SH_RichText_FullWidthSelection: + ret = true; + break; + case SH_BlinkCursorWhenTextSelected: + ret = false; + break; + case SH_Slider_StopMouseOverSlider: + ret = true; + break; + case SH_ListViewExpand_SelectMouseType: + ret = QEvent::MouseButtonRelease; + break; + case SH_TabBar_SelectMouseType: + if (const QStyleOptionTabBarBase *opt2 = qstyleoption_cast(opt)) { + ret = opt2->documentMode ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; + } else { + ret = QEvent::MouseButtonRelease; + } + break; + case SH_ComboBox_Popup: + if (const QStyleOptionComboBox *cmb = qstyleoption_cast(opt)) + ret = !cmb->editable; + else + ret = 0; + break; + case SH_Workspace_FillSpaceOnMaximize: + ret = true; + break; + case SH_Widget_ShareActivation: + ret = true; + break; + case SH_Header_ArrowAlignment: + ret = Qt::AlignRight; + break; + case SH_TabBar_Alignment: { +//#if QT_CONFIG(tabwidget) +// if (const QTabWidget *tab = qobject_cast(w)) { +// if (tab->documentMode()) { +// ret = Qt::AlignLeft; +// break; +// } +// } +//#endif +//#if QT_CONFIG(tabbar) +// if (const QTabBar *tab = qobject_cast(w)) { +// if (tab->documentMode()) { +// ret = Qt::AlignLeft; +// break; +// } +// } +//#endif + ret = Qt::AlignCenter; + } break; + case SH_UnderlineShortcut: + ret = false; + break; + case SH_ToolTipLabel_Opacity: + ret = 242; // About 95% + break; + case SH_Button_FocusPolicy: + ret = Qt::TabFocus; + break; + case SH_EtchDisabledText: + ret = false; + break; + case SH_FocusFrame_Mask: { + ret = true; + if(QStyleHintReturnMask *mask = qstyleoption_cast(hret)) { + const uchar fillR = 192, fillG = 191, fillB = 190; + QImage img; + + QSize pixmapSize = opt->rect.size(); + if (!pixmapSize.isEmpty()) { + QPixmap pix(pixmapSize); + pix.fill(QColor(fillR, fillG, fillB)); + QPainter pix_paint(&pix); + proxy()->drawControl(CE_FocusFrame, opt, &pix_paint); + pix_paint.end(); + img = pix.toImage(); + } + + const QRgb *sptr = (QRgb*)img.bits(), *srow; + const qsizetype sbpl = img.bytesPerLine(); + const int w = sbpl/4, h = img.height(); + + QImage img_mask(img.width(), img.height(), QImage::Format_ARGB32); + QRgb *dptr = (QRgb*)img_mask.bits(), *drow; + const qsizetype dbpl = img_mask.bytesPerLine(); + + for (int y = 0; y < h; ++y) { + srow = sptr+((y*sbpl)/4); + drow = dptr+((y*dbpl)/4); + for (int x = 0; x < w; ++x) { + const int redDiff = qRed(*srow) - fillR; + const int greenDiff = qGreen(*srow) - fillG; + const int blueDiff = qBlue(*srow) - fillB; + const int diff = (redDiff * redDiff) + (greenDiff * greenDiff) + (blueDiff * blueDiff); + (*drow++) = (diff < 10) ? 0xffffffff : 0xff000000; + ++srow; + } + } + QBitmap qmask = QBitmap::fromImage(img_mask); + mask->region = QRegion(qmask); + } + break; } + case SH_TitleBar_NoBorder: + ret = 1; + break; + case SH_RubberBand_Mask: + ret = 0; + break; + case SH_ComboBox_LayoutDirection: + ret = Qt::LeftToRight; + break; + case SH_ItemView_EllipsisLocation: + ret = Qt::AlignHCenter; + break; + case SH_ItemView_ShowDecorationSelected: + ret = true; + break; + case SH_TitleBar_ModifyNotification: + ret = false; + break; + case SH_ScrollBar_RollBetweenButtons: + ret = true; + break; + case SH_WindowFrame_Mask: + ret = false; + break; + case SH_TabBar_ElideMode: + ret = Qt::ElideRight; + break; +// case SH_DialogButtonLayout: +// ret = QDialogButtonBox::MacLayout; +// break; +// case SH_FormLayoutWrapPolicy: +// ret = QFormLayout::DontWrapRows; +// break; +// case SH_FormLayoutFieldGrowthPolicy: +// ret = QFormLayout::FieldsStayAtSizeHint; +// break; + case SH_FormLayoutFormAlignment: + ret = Qt::AlignHCenter | Qt::AlignTop; + break; + case SH_FormLayoutLabelAlignment: + ret = Qt::AlignRight; + break; +// case SH_ComboBox_PopupFrameStyle: +// ret = QFrame::NoFrame; +// break; + case SH_MessageBox_TextInteractionFlags: + ret = Qt::TextSelectableByMouse | Qt::LinksAccessibleByMouse | Qt::TextSelectableByKeyboard; + break; + case SH_SpellCheckUnderlineStyle: + ret = QTextCharFormat::DashUnderline; + break; + case SH_MessageBox_CenterButtons: + ret = false; + break; + case SH_MenuBar_AltKeyNavigation: + ret = false; + break; + case SH_ItemView_MovementWithoutUpdatingSelection: + ret = false; + break; + case SH_FocusFrame_AboveWidget: + ret = true; + break; +// case SH_WizardStyle: +// ret = QWizard::MacStyle; +// break; + case SH_ItemView_ArrowKeysNavigateIntoChildren: + ret = false; + break; + case SH_Menu_FlashTriggeredItem: + ret = true; + break; + case SH_Menu_FadeOutOnHide: + ret = true; + break; + case SH_ItemView_PaintAlternatingRowColorsForEmptyArea: + ret = true; + break; + case SH_TabBar_CloseButtonPosition: + ret = QStyleOptionTabBarBase::LeftSide; + break; + case SH_DockWidget_ButtonsHaveFrame: + ret = false; + break; + case SH_ScrollBar_Transient: + // For the initial version in QQC2, we don't support transient scrollbars. When the + // time comes, consider doing all such animations from QML. + // ret = [NSScroller preferredScrollerStyle] == NSScrollerStyleOverlay; + ret = false; + break; + case SH_TitleBar_ShowToolTipsOnButtons: + // min/max/close buttons on windows don't show tool tips + ret = false; + break; + case SH_ComboBox_AllowWheelScrolling: + ret = false; + break; + case SH_SpinBox_ButtonsInsideFrame: + ret = false; + break; + case SH_Table_GridLineColor: + ret = int(qt_mac_toQColor(NSColor.gridColor).rgba()); + break; + default: + ret = QCommonStyle::styleHint(sh, opt, hret); + break; + } + return ret; +} + +QPixmap QMacStyle::generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, + const QStyleOption *opt) const +{ + switch (iconMode) { + case QIcon::Disabled: { + QImage img = pixmap.toImage().convertToFormat(QImage::Format_ARGB32); + int imgh = img.height(); + int imgw = img.width(); + QRgb pixel; + for (int y = 0; y < imgh; ++y) { + for (int x = 0; x < imgw; ++x) { + pixel = img.pixel(x, y); + img.setPixel(x, y, qRgba(qRed(pixel), qGreen(pixel), qBlue(pixel), + qAlpha(pixel) / 2)); + } + } + return QPixmap::fromImage(img); + } + default: + ; + } + return QCommonStyle::generatedIconPixmap(iconMode, pixmap, opt); +} + + +QPixmap QMacStyle::standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt) const +{ + // The default implementation of QStyle::standardIconImplementation() is to call standardPixmap() + // I don't want infinite recursion so if we do get in that situation, just return the Window's + // standard pixmap instead (since there is no mac-specific icon then). This should be fine until + // someone changes how Windows standard + // pixmap works. + static bool recursionGuard = false; + + if (recursionGuard) + return QCommonStyle::standardPixmap(standardPixmap, opt); + + recursionGuard = true; + QIcon icon = proxy()->standardIcon(standardPixmap, opt); + recursionGuard = false; + int size; + switch (standardPixmap) { + default: + size = 32; + break; + case SP_MessageBoxCritical: + case SP_MessageBoxQuestion: + case SP_MessageBoxInformation: + case SP_MessageBoxWarning: + size = 64; + break; + } + return icon.pixmap(opt->window, QSize(size, size)); +} + +void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p) const +{ + Q_D(const QMacStyle); + + const AppearanceSync appSync; + QMacCGContext cg(p); + d->resolveCurrentNSView(opt->window); + + switch (pe) { + case PE_IndicatorArrowUp: + case PE_IndicatorArrowDown: + case PE_IndicatorArrowRight: + case PE_IndicatorArrowLeft: { + p->save(); + p->setRenderHint(QPainter::Antialiasing); + const int xOffset = 1; // FIXME: opt->direction == Qt::LeftToRight ? 2 : -1; + qreal halfSize = 0.5 * qMin(opt->rect.width(), opt->rect.height()); + const qreal penWidth = qMax(halfSize / 3.0, 1.25); +//#if QT_CONFIG(toolbutton) +// if (const QToolButton *tb = qobject_cast(w)) { +// // When stroking the arrow, make sure it fits in the tool button +// if (tb->arrowType() != Qt::NoArrow +// || tb->popupMode() == QToolButton::MenuButtonPopup) +// halfSize -= penWidth; +// } +//#endif + + QTransform transform; + transform.translate(opt->rect.center().x() + xOffset, opt->rect.center().y() + 2); + QPainterPath path; + switch(pe) { + default: + case PE_IndicatorArrowDown: + break; + case PE_IndicatorArrowUp: + transform.rotate(180); + break; + case PE_IndicatorArrowLeft: + transform.rotate(90); + break; + case PE_IndicatorArrowRight: + transform.rotate(-90); + break; + } + p->setTransform(transform); + + path.moveTo(-halfSize, -halfSize * 0.5); + path.lineTo(0.0, halfSize * 0.5); + path.lineTo(halfSize, -halfSize * 0.5); + + const QPen arrowPen(opt->palette.text(), penWidth, + Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin); + p->strokePath(path, arrowPen); + p->restore(); + break; } + case PE_FrameTabBarBase: + if (const QStyleOptionTabBarBase *tbb + = qstyleoption_cast(opt)) { + if (tbb->documentMode) { + p->save(); + drawTabBase(p, tbb); + p->restore(); + return; + } + QRegion region(tbb->rect); + region -= tbb->tabBarRect; + p->save(); + p->setClipRegion(region); + QStyleOptionTabWidgetFrame twf; + twf.QStyleOption::operator=(*tbb); + twf.shape = tbb->shape; + switch (QMacStylePrivate::tabDirection(twf.shape)) { + case QMacStylePrivate::North: + twf.rect = twf.rect.adjusted(0, 0, 0, 10); + break; + case QMacStylePrivate::South: + twf.rect = twf.rect.adjusted(0, -10, 0, 0); + break; + case QMacStylePrivate::West: + twf.rect = twf.rect.adjusted(0, 0, 10, 0); + break; + case QMacStylePrivate::East: + twf.rect = twf.rect.adjusted(0, -10, 0, 0); + break; + } + proxy()->drawPrimitive(PE_FrameTabWidget, &twf, p); + p->restore(); + } + break; + case PE_PanelTipLabel: + p->fillRect(opt->rect, opt->palette.brush(QPalette::ToolTipBase)); + break; + case PE_FrameGroupBox: + if (const auto *groupBox = qstyleoption_cast(opt)) + if (groupBox->features & QStyleOptionFrame::Flat) { + QCommonStyle::drawPrimitive(pe, groupBox, p); + break; + } + Q_FALLTHROUGH(); + case PE_FrameTabWidget: + { + const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::Box, QStyleHelper::SizeLarge); + auto *box = static_cast(d->cocoaControl(cw)); + // FIXME Since macOS 10.14, simply calling drawRect: won't display anything anymore. + // The AppKit team is aware of this and has proposed a couple of solutions. + // The first solution was to call displayRectIgnoringOpacity:inContext: instead. + // However, it doesn't seem to work on 10.13. More importantly, dark mode on 10.14 + // is extremely slow. Light mode works fine. + // The second solution is to subclass NSBox and reimplement a trivial drawRect: which + // would only call super. This works without any issue on 10.13, but a double border + // shows on 10.14 in both light and dark modes. + // The code below picks what works on each version and mode. On 10.13 and earlier, we + // simply call drawRect: on a regular NSBox. On 10.14, we call displayRectIgnoringOpacity: + // inContext:, but only in light mode. In dark mode, we use a custom NSBox subclass, + // QDarkNSBox, of type NSBoxCustom. Its appearance is close enough to the real thing so + // we can use this for now. + auto adjustedRect = opt->rect; + bool needTranslation = false; + if (QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSMojave + && !qt_mac_applicationIsInDarkMode()) { + // In Aqua theme we have to use the 'default' NSBox (as opposite + // to the 'custom' QDarkNSBox we use in dark theme). Since -drawRect: + // does nothing in default NSBox, we call -displayRectIgnoringOpaticty:. + // Unfortunately, the resulting box is smaller then the actual rect we + // wanted. This can be seen, e.g. because tabs (buttons) are misaligned + // vertically and even worse, if QTabWidget has autoFillBackground + // set, this background overpaints NSBox making it to disappear. + // We trick our NSBox to render in a larger rectangle, so that + // the actuall result (which is again smaller than requested), + // more or less is what we really want. We'll have to adjust CTM + // and translate accordingly. + adjustedRect.adjust(0, 0, 6, 6); + needTranslation = true; + } + d->drawNSViewInRect(box, adjustedRect, p, ^(CGContextRef ctx, const CGRect &rect) { +//#if QT_CONFIG(tabwidget) +// if (QTabWidget *tabWidget = qobject_cast(opt->styleObject)) +// clipTabBarFrame(opt, this, ctx); +//#endif + QMacAutoReleasePool pool; + CGContextTranslateCTM(ctx, 0, rect.origin.y + rect.size.height); + CGContextScaleCTM(ctx, 1, -1); + if (QOperatingSystemVersion::current() < QOperatingSystemVersion::MacOSMojave + || [box isMemberOfClass:QDarkNSBox.class]) { + [box drawRect:rect]; + } else { + if (needTranslation) + CGContextTranslateCTM(ctx, -3.0, 5.0); + [box displayRectIgnoringOpacity:box.bounds inContext:NSGraphicsContext.currentContext]; + } + }); + break; + } + case PE_IndicatorToolBarSeparator: { + QPainterPath path; + if (opt->state & State_Horizontal) { + int xpoint = opt->rect.center().x(); + path.moveTo(xpoint + 0.5, opt->rect.top() + 1); + path.lineTo(xpoint + 0.5, opt->rect.bottom()); + } else { + int ypoint = opt->rect.center().y(); + path.moveTo(opt->rect.left() + 2 , ypoint + 0.5); + path.lineTo(opt->rect.right() + 1, ypoint + 0.5); + } + QPainterPathStroker theStroker; + theStroker.setCapStyle(Qt::FlatCap); + theStroker.setDashPattern(QVector() << 1 << 2); + path = theStroker.createStroke(path); + const auto dark = qt_mac_applicationIsInDarkMode() ? opt->palette.dark().color().darker() + : QColor(0, 0, 0, 119); + p->fillPath(path, dark); + } + break; + case PE_FrameWindow: + if (const QStyleOptionFrame *frame = qstyleoption_cast(opt)) { +// if (w && w->inherits("QMdiSubWindow")) { +// p->save(); +// p->setPen(QPen(frame->palette.dark().color(), frame->lineWidth)); +// p->setBrush(frame->palette.window()); +// p->drawRect(frame->rect); +// p->restore(); +// } + } + break; + case PE_IndicatorDockWidgetResizeHandle: { + // The docwidget resize handle is drawn as a one-pixel wide line. + p->save(); + if (opt->state & State_Horizontal) { + p->setPen(QColor(160, 160, 160)); + p->drawLine(opt->rect.topLeft(), opt->rect.topRight()); + } else { + p->setPen(QColor(145, 145, 145)); + p->drawLine(opt->rect.topRight(), opt->rect.bottomRight()); + } + p->restore(); + } break; + case PE_IndicatorToolBarHandle: { + p->save(); + QPainterPath path; + int x = opt->rect.x() + 6; + int y = opt->rect.y() + 7; + static const int RectHeight = 2; + if (opt->state & State_Horizontal) { + while (y < opt->rect.height() - RectHeight - 5) { + path.moveTo(x, y); + path.addEllipse(x, y, RectHeight, RectHeight); + y += 6; + } + } else { + while (x < opt->rect.width() - RectHeight - 5) { + path.moveTo(x, y); + path.addEllipse(x, y, RectHeight, RectHeight); + x += 6; + } + } + p->setPen(Qt::NoPen); + QColor dark = opt->palette.dark().color().darker(); + dark.setAlphaF(0.50); + p->fillPath(path, dark); + p->restore(); + + break; + } + case PE_IndicatorHeaderArrow: + if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { + // In HITheme, up is down, down is up and hamburgers eat people. + if (header->sortIndicator != QStyleOptionHeader::None) + proxy()->drawPrimitive( + (header->sortIndicator == QStyleOptionHeader::SortDown) ? + PE_IndicatorArrowUp : PE_IndicatorArrowDown, header, p); + } + break; + case PE_IndicatorMenuCheckMark: { + QColor pc; + if (opt->state & State_On) + pc = opt->palette.highlightedText().color(); + else + pc = opt->palette.text().color(); + + QCFType checkmarkColor = CGColorCreateGenericRGB(static_cast(pc.redF()), + static_cast(pc.greenF()), + static_cast(pc.blueF()), + static_cast(pc.alphaF())); + // kCTFontUIFontSystem and others give the same result + // as kCTFontUIFontMenuItemMark. However, the latter is + // more reminiscent to HITheme's kThemeMenuItemMarkFont. + // See also the font for small- and mini-sized widgets, + // where we end up using the generic system font type. + const CTFontUIFontType fontType = (opt->state & State_Mini) ? kCTFontUIFontMiniSystem : + (opt->state & State_Small) ? kCTFontUIFontSmallSystem : + kCTFontUIFontMenuItemMark; + // Similarly for the font size, where there is a small difference + // between regular combobox and item view items, and and menu items. + // However, we ignore any difference for small- and mini-sized widgets. + const CGFloat fontSize = fontType == kCTFontUIFontMenuItemMark ? opt->fontMetrics.height() : 0.0; + QCFType checkmarkFont = CTFontCreateUIFontForLanguage(fontType, fontSize, NULL); + + CGContextSaveGState(cg); + CGContextSetShouldSmoothFonts(cg, NO); // Same as HITheme and Cocoa menu checkmarks + + // Baseline alignment tweaks for QComboBox and QMenu + const CGFloat vOffset = (opt->state & State_Mini) ? 0.0 : + (opt->state & State_Small) ? 1.0 : + 0.75; + + CGContextTranslateCTM(cg, 0, opt->rect.bottom()); + CGContextScaleCTM(cg, 1, -1); + // Translate back to the original position and add rect origin and offset + CGContextTranslateCTM(cg, opt->rect.x(), vOffset); + + // CTFont has severe difficulties finding the checkmark character among its + // glyphs. Fortunately, CTLine knows its ways inside the Cocoa labyrinth. + static const CFStringRef keys[] = { kCTFontAttributeName, kCTForegroundColorAttributeName }; + static const int numValues = sizeof(keys) / sizeof(keys[0]); + const CFTypeRef values[] = { (CFTypeRef)checkmarkFont, (CFTypeRef)checkmarkColor }; + Q_STATIC_ASSERT((sizeof(values) / sizeof(values[0])) == numValues); + QCFType attributes = CFDictionaryCreate(kCFAllocatorDefault, (const void **)keys, (const void **)values, + numValues, NULL, NULL); + // U+2713: CHECK MARK + QCFType checkmarkString = CFAttributedStringCreate(kCFAllocatorDefault, (CFStringRef)@"\u2713", attributes); + QCFType line = CTLineCreateWithAttributedString(checkmarkString); + + CTLineDraw((CTLineRef)line, cg); + CGContextFlush(cg); // CTLineDraw's documentation says it doesn't flush + + CGContextRestoreGState(cg); + break; } + case PE_IndicatorItemViewItemCheck: + case PE_IndicatorRadioButton: + case PE_IndicatorCheckBox: { + const bool isEnabled = opt->state & State_Enabled; + const bool isPressed = opt->state & State_Sunken; + const bool isRadioButton = (pe == PE_IndicatorRadioButton); + const auto ct = isRadioButton ? QMacStylePrivate::Button_RadioButton : QMacStylePrivate::Button_CheckBox; + const auto cs = d->effectiveAquaSizeConstrain(opt); + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + auto *tb = static_cast(d->cocoaControl(cw)); + tb.enabled = isEnabled; + tb.state = (opt->state & State_NoChange) ? NSMixedState : + (opt->state & State_On) ? NSOnState : NSOffState; + [tb highlight:isPressed]; + const auto vOffset = [=] { + // As measured + if (cs == QStyleHelper::SizeMini) + return ct == QMacStylePrivate::Button_CheckBox ? -0.5 : 0.5; + + return cs == QStyleHelper::SizeSmall ? 0.5 : 0.0; + } (); + d->drawNSViewInRect(tb, opt->rect, p, ^(CGContextRef ctx, const CGRect &rect) { + QMacAutoReleasePool pool; + CGContextTranslateCTM(ctx, 0, vOffset); + [tb.cell drawInteriorWithFrame:rect inView:tb]; + }); + break; } + case PE_FrameFocusRect: + // Use the our own focus widget stuff. + break; + case PE_IndicatorBranch: { + if (!(opt->state & State_Children)) + break; + const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::Button_Disclosure, QStyleHelper::SizeLarge); + NSButtonCell *triangleCell = static_cast(d->cocoaCell(cw)); + [triangleCell setState:(opt->state & State_Open) ? NSOnState : NSOffState]; +// bool viewHasFocus = (w && w->hasFocus()) || (opt->state & State_HasFocus); + bool viewHasFocus = false; + [triangleCell setBackgroundStyle:((opt->state & State_Selected) && viewHasFocus) ? NSBackgroundStyleDark : NSBackgroundStyleLight]; + + d->setupNSGraphicsContext(cg, NO); + + QRect qtRect = opt->rect.adjusted(DisclosureOffset, 0, -DisclosureOffset, 0); + CGRect rect = CGRectMake(qtRect.x() + 1, qtRect.y(), qtRect.width(), qtRect.height()); + CGContextTranslateCTM(cg, rect.origin.x, rect.origin.y + rect.size.height); + CGContextScaleCTM(cg, 1, -1); + CGContextTranslateCTM(cg, -rect.origin.x, -rect.origin.y); + + [triangleCell drawBezelWithFrame:NSRectFromCGRect(rect) inView:[triangleCell controlView]]; + + d->restoreNSGraphicsContext(cg); + break; } + + case PE_Frame: { + const QPen oldPen = p->pen(); + QPen penCpy = p->pen(); + penCpy.setWidth(2); + penCpy.setColor(opt->palette.dark().color()); + p->setPen(penCpy); + p->drawRect(opt->rect); + p->setPen(oldPen); + break; } + case PE_PanelLineEdit: + case PE_FrameLineEdit: + if (const QStyleOptionFrame *frame = qstyleoption_cast(opt)) { + if (frame->state & State_Sunken) { + const bool isEnabled = opt->state & State_Enabled; + const bool isReadOnly = opt->state & State_ReadOnly; + const bool isRounded = frame->features & QStyleOptionFrame::Rounded; + const auto cs = d->effectiveAquaSizeConstrain(opt, CT_LineEdit); + const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::TextField, cs); + auto *tf = static_cast(d->cocoaControl(cw)); + tf.enabled = isEnabled; + tf.editable = !isReadOnly; + tf.bezeled = YES; + static_cast(tf.cell).bezelStyle = isRounded ? NSTextFieldRoundedBezel : NSTextFieldSquareBezel; + tf.frame = opt->rect.toCGRect(); + d->drawNSViewInRect(tf, opt->rect, p, ^(CGContextRef, const CGRect &rect) { + QMacAutoReleasePool pool; + if (!qt_mac_applicationIsInDarkMode()) { + // In 'Dark' mode controls are transparent, so we do not + // over-paint the (potentially custom) color in the background. + // In 'Light' mode we have to care about the correct + // background color. See the comments below for PE_PanelLineEdit. + CGContextRef cgContext = NSGraphicsContext.currentContext.CGContext; + // See QMacCGContext, here we expect bitmap context created with + // color space 'kCGColorSpaceSRGB', if it's something else - we + // give up. + if (cgContext ? bool(CGBitmapContextGetColorSpace(cgContext)) : false) { + tf.drawsBackground = YES; + const QColor bgColor = frame->palette.brush(QPalette::Base).color(); + tf.backgroundColor = [NSColor colorWithSRGBRed:bgColor.redF() + green:bgColor.greenF() + blue:bgColor.blueF() + alpha:bgColor.alphaF()]; + if (bgColor.alpha() != 255) { + // No way we can have it bezeled and transparent ... + tf.bordered = YES; + } + } + } + + [tf.cell drawWithFrame:rect inView:tf]; + }); + } else { + QCommonStyle::drawPrimitive(pe, opt, p); + } + } + break; + case PE_PanelScrollAreaCorner: { + const QBrush brush(opt->palette.brush(QPalette::Base)); + p->fillRect(opt->rect, brush); + p->setPen(QPen(QColor(217, 217, 217))); + p->drawLine(opt->rect.topLeft(), opt->rect.topRight()); + p->drawLine(opt->rect.topLeft(), opt->rect.bottomLeft()); + } break; + case PE_FrameStatusBarItem: + break; +//#if QT_CONFIG(tabbar) +// case PE_IndicatorTabClose: { +// // Make close button visible only on the hovered tab. +// QTabBar *tabBar = qobject_cast(w->parentWidget()); +// const QWidget *closeBtn = w; +// if (!tabBar) { +// // QStyleSheetStyle instead of CloseButton (which has +// // a QTabBar as a parent widget) uses the QTabBar itself: +// tabBar = qobject_cast(const_cast(w)); +// closeBtn = decltype(closeBtn)(property("_q_styleSheetRealCloseButton").value()); +// } +// if (tabBar) { +// const bool documentMode = tabBar->documentMode(); +// const QTabBarPrivate *tabBarPrivate = static_cast(QObjectPrivate::get(tabBar)); +// const int hoveredTabIndex = tabBarPrivate->hoveredTabIndex(); +// if (!documentMode || +// (hoveredTabIndex != -1 && ((closeBtn == tabBar->tabButton(hoveredTabIndex, QTabBar::LeftSide)) || +// (closeBtn == tabBar->tabButton(hoveredTabIndex, QTabBar::RightSide))))) { +// const bool hover = (opt->state & State_MouseOver); +// const bool selected = (opt->state & State_Selected); +// const bool pressed = (opt->state & State_Sunken); +// drawTabCloseButton(p, hover, selected, pressed, documentMode); +// } +// } +// } break; +//#endif // QT_CONFIG(tabbar) + case PE_PanelStatusBar: { + // Fill the status bar with the titlebar gradient. + QLinearGradient linearGrad; + const bool isMainWindow = qt_macWindowMainWindow(opt->window); + if (isMainWindow) + linearGrad = titlebarGradientActive(); + else + linearGrad = titlebarGradientInactive(); + + linearGrad.setStart(0, opt->rect.top()); + linearGrad.setFinalStop(0, opt->rect.bottom()); + p->fillRect(opt->rect, linearGrad); + + // Draw the black separator line at the top of the status bar. + if (isMainWindow) + p->setPen(titlebarSeparatorLineActive); + else + p->setPen(titlebarSeparatorLineInactive); + p->drawLine(opt->rect.left(), opt->rect.top(), opt->rect.right(), opt->rect.top()); + + break; + } + case PE_PanelMenu: { + p->save(); + p->fillRect(opt->rect, Qt::transparent); + p->setPen(Qt::transparent); + p->setBrush(opt->palette.window()); + p->setRenderHint(QPainter::Antialiasing, true); + const QPainterPath path = d->windowPanelPath(opt->rect); + p->drawPath(path); + p->restore(); + } break; + + default: + QCommonStyle::drawPrimitive(pe, opt, p); + break; + } +} + +static QPixmap darkenPixmap(const QPixmap &pixmap) +{ + QImage img = pixmap.toImage().convertToFormat(QImage::Format_ARGB32); + int imgh = img.height(); + int imgw = img.width(); + int h, s, v, a; + QRgb pixel; + for (int y = 0; y < imgh; ++y) { + for (int x = 0; x < imgw; ++x) { + pixel = img.pixel(x, y); + a = qAlpha(pixel); + QColor hsvColor(pixel); + hsvColor.getHsv(&h, &s, &v); + s = qMin(100, s * 2); + v = v / 2; + hsvColor.setHsv(h, s, v); + pixel = hsvColor.rgb(); + img.setPixel(x, y, qRgba(qRed(pixel), qGreen(pixel), qBlue(pixel), a)); + } + } + return QPixmap::fromImage(img); +} + +void QMacStylePrivate::setupVerticalInvertedXform(CGContextRef cg, bool reverse, bool vertical, const CGRect &rect) const +{ + if (vertical) { + CGContextTranslateCTM(cg, rect.size.height, 0); + CGContextRotateCTM(cg, M_PI_2); + } + if (vertical != reverse) { + CGContextTranslateCTM(cg, rect.size.width, 0); + CGContextScaleCTM(cg, -1, 1); + } +} + +void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter *p) const +{ + Q_D(const QMacStyle); + + const AppearanceSync sync; + const QMacAutoReleasePool pool; + + QMacCGContext cg(p); + d->resolveCurrentNSView(opt->window); + + switch (ce) { + case CE_HeaderSection: + if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { + State flags = header->state; + QRect ir = header->rect; + const bool pressed = (flags & State_Sunken) && !(flags & State_On); + p->fillRect(ir, pressed ? header->palette.dark() : header->palette.button()); + p->setPen(QPen(header->palette.dark(), 1.0)); + if (header->orientation == Qt::Horizontal) + p->drawLine(QLineF(ir.right() + 0.5, ir.top() + headerSectionSeparatorInset, + ir.right() + 0.5, ir.bottom() - headerSectionSeparatorInset)); + else + p->drawLine(QLineF(ir.left() + headerSectionSeparatorInset, ir.bottom(), + ir.right() - headerSectionSeparatorInset, ir.bottom())); + } + + break; + case CE_HeaderLabel: + if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { + p->save(); + QRect textr = header->rect; + if (!header->icon.isNull()) { + QIcon::Mode mode = QIcon::Disabled; + if (opt->state & State_Enabled) + mode = QIcon::Normal; + int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); + QPixmap pixmap = header->icon.pixmap(opt->window, QSize(iconExtent, iconExtent), mode); + + QRect pixr = header->rect; + pixr.setY(header->rect.center().y() - (pixmap.height() / pixmap.devicePixelRatio() - 1) / 2); + proxy()->drawItemPixmap(p, pixr, Qt::AlignVCenter, pixmap); + textr.translate(pixmap.width() / pixmap.devicePixelRatio() + 2, 0); + } + + proxy()->drawItemText(p, textr, header->textAlignment | Qt::AlignVCenter, header->palette, + header->state & State_Enabled, header->text, QPalette::ButtonText); + p->restore(); + } + break; + case CE_ToolButtonLabel: + if (const QStyleOptionToolButton *tb = qstyleoption_cast(opt)) { + QStyleOptionToolButton myTb = *tb; + myTb.state &= ~State_AutoRaise; +#ifndef QT_NO_ACCESSIBILITY + if (QStyleHelper::hasAncestor(opt->styleObject, QAccessible::ToolBar)) { + QRect cr = tb->rect; + int shiftX = 0; + int shiftY = 0; + bool needText = false; + int alignment = 0; + bool down = tb->state & (State_Sunken | State_On); + if (down) { + shiftX = proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb); + shiftY = proxy()->pixelMetric(PM_ButtonShiftVertical, tb); + } + // The down state is special for QToolButtons in a toolbar on the Mac + // The text is a bit bolder and gets a drop shadow and the icons are also darkened. + // This doesn't really fit into any particular case in QIcon, so we + // do the majority of the work ourselves. + if (!(tb->features & QStyleOptionToolButton::Arrow)) { + Qt::ToolButtonStyle tbstyle = tb->toolButtonStyle; + if (tb->icon.isNull() && !tb->text.isEmpty()) + tbstyle = Qt::ToolButtonTextOnly; + + switch (tbstyle) { + case Qt::ToolButtonTextOnly: { + needText = true; + alignment = Qt::AlignCenter; + break; } + case Qt::ToolButtonIconOnly: + case Qt::ToolButtonTextBesideIcon: + case Qt::ToolButtonTextUnderIcon: { + QRect pr = cr; + QIcon::Mode iconMode = (tb->state & State_Enabled) ? QIcon::Normal + : QIcon::Disabled; + QIcon::State iconState = (tb->state & State_On) ? QIcon::On + : QIcon::Off; + QPixmap pixmap = tb->icon.pixmap(opt->window, + tb->rect.size().boundedTo(tb->iconSize), + iconMode, iconState); + + // Draw the text if it's needed. + if (tb->toolButtonStyle != Qt::ToolButtonIconOnly) { + needText = true; + if (tb->toolButtonStyle == Qt::ToolButtonTextUnderIcon) { + pr.setHeight(pixmap.size().height() / pixmap.devicePixelRatio() + 6); + cr.adjust(0, pr.bottom(), 0, -3); + alignment |= Qt::AlignCenter; + } else { + pr.setWidth(pixmap.width() / pixmap.devicePixelRatio() + 8); + cr.adjust(pr.right(), 0, 0, 0); + alignment |= Qt::AlignLeft | Qt::AlignVCenter; + } + } + if (opt->state & State_Sunken) { + pr.translate(shiftX, shiftY); + pixmap = darkenPixmap(pixmap); + } + proxy()->drawItemPixmap(p, pr, Qt::AlignCenter, pixmap); + break; } + default: + Q_ASSERT(false); + break; + } + + if (needText) { + QPalette pal = tb->palette; + QPalette::ColorRole role = QPalette::NoRole; + if (!proxy()->styleHint(SH_UnderlineShortcut, tb)) + alignment |= Qt::TextHideMnemonic; + if (down) + cr.translate(shiftX, shiftY); + if (tbstyle == Qt::ToolButtonTextOnly + || (tbstyle != Qt::ToolButtonTextOnly && !down)) { + QPen pen = p->pen(); + QColor light = down || isDarkMode() ? Qt::black : Qt::white; + light.setAlphaF(0.375f); + p->setPen(light); + p->drawText(cr.adjusted(0, 1, 0, 1), alignment, tb->text); + p->setPen(pen); + if (down && tbstyle == Qt::ToolButtonTextOnly) { +// pal = QApplication::palette("QMenu"); + pal.setCurrentColorGroup(tb->palette.currentColorGroup()); + role = QPalette::HighlightedText; + } + } + proxy()->drawItemText(p, cr, alignment, pal, + tb->state & State_Enabled, tb->text, role); + } + } else { + QCommonStyle::drawControl(ce, &myTb, p); + } + } else +#endif // QT_NO_ACCESSIBILITY + { + QCommonStyle::drawControl(ce, &myTb, p); + } + } + break; + case CE_ToolBoxTabShape: + QCommonStyle::drawControl(ce, opt, p); + break; + case CE_PushButtonBevel: + if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { + if (!(btn->state & (State_Raised | State_Sunken | State_On))) + break; + + if (btn->features & QStyleOptionButton::CommandLinkButton) { + QCommonStyle::drawControl(ce, opt, p); + break; + } + + const bool hasFocus = btn->state & State_HasFocus; + const bool isActive = btn->state & State_Active; + + // a focused auto-default button within an active window + // takes precedence over a normal default button + if ((btn->features & QStyleOptionButton::AutoDefaultButton) + && isActive && hasFocus) + d->autoDefaultButton = btn->styleObject; + else if (d->autoDefaultButton == btn->styleObject) + d->autoDefaultButton = nullptr; + + const bool isEnabled = btn->state & State_Enabled; + const bool isPressed = btn->state & State_Sunken; + const bool isHighlighted = isActive && + ((btn->state & State_On) + || (btn->features & QStyleOptionButton::DefaultButton) + || (btn->features & QStyleOptionButton::AutoDefaultButton + && d->autoDefaultButton == btn->styleObject)); + const bool hasMenu = btn->features & QStyleOptionButton::HasMenu; + const auto ct = cocoaControlType(btn); + const auto cs = d->effectiveAquaSizeConstrain(btn); + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + auto *pb = static_cast(d->cocoaControl(cw)); + // Ensure same size and location as we used to have with HITheme. + // This is more convoluted than we initialy thought. See for example + // differences between plain and menu button frames. + const QRectF frameRect = cw.adjustedControlFrame(btn->rect); + pb.frame = frameRect.toCGRect(); + + pb.enabled = isEnabled; + [pb highlight:isPressed]; + pb.state = isHighlighted && !isPressed ? NSOnState : NSOffState; + d->drawNSViewInRect(pb, frameRect, p, ^(CGContextRef, const CGRect &r) { + QMacAutoReleasePool pool; + [pb.cell drawBezelWithFrame:r inView:pb.superview]; + }); + [pb highlight:NO]; + + if (hasMenu && cw.type == QMacStylePrivate::Button_SquareButton) { + // Using -[NSPopuButtonCell drawWithFrame:inView:] above won't do + // it right because we don't set the text in the native button. + const int mbi = proxy()->pixelMetric(QStyle::PM_MenuButtonIndicator, btn); + const auto ir = frameRect.toRect(); + int arrowYOffset = 0; + const auto ar = visualRect(btn->direction, ir, QRect(ir.right() - mbi - 6, ir.height() / 2 - arrowYOffset, mbi, mbi)); + + QStyleOption arrowOpt = *opt; + arrowOpt.rect = ar; + proxy()->drawPrimitive(PE_IndicatorArrowDown, &arrowOpt, p); + } + } + break; + case CE_PushButtonLabel: + if (const QStyleOptionButton *b = qstyleoption_cast(opt)) { + QStyleOptionButton btn(*b); + // We really don't want the label to be drawn the same as on + // windows style if it has an icon and text, then it should be more like a + // tab. So, cheat a little here. However, if it *is* only an icon + // the windows style works great, so just use that implementation. + const bool isEnabled = btn.state & State_Enabled; + const bool hasMenu = btn.features & QStyleOptionButton::HasMenu; + const bool hasIcon = !btn.icon.isNull(); + const bool hasText = !btn.text.isEmpty(); + const bool isActive = btn.state & State_Active; + const bool isPressed = btn.state & State_Sunken; + + const auto ct = cocoaControlType(&btn); + + if (!hasMenu && ct != QMacStylePrivate::Button_SquareButton) { + if (isPressed + || (isActive && isEnabled + && ((btn.state & State_On) + || ((btn.features & QStyleOptionButton::DefaultButton) && !d->autoDefaultButton) + || d->autoDefaultButton == btn.styleObject))) + btn.palette.setColor(QPalette::ButtonText, Qt::white); + } + + if ((!hasIcon && !hasMenu) || (hasIcon && !hasText)) { + QCommonStyle::drawControl(ce, &btn, p); + } else { + QRect freeContentRect = btn.rect; + QRect textRect = itemTextRect( + btn.fontMetrics, freeContentRect, Qt::AlignCenter, isEnabled, btn.text); + if (hasMenu) { + textRect.moveTo(11, textRect.top()); + } + // Draw the icon: + if (hasIcon) { + int contentW = textRect.width(); + if (hasMenu) + contentW += proxy()->pixelMetric(PM_MenuButtonIndicator) + 4; + QIcon::Mode mode = isEnabled ? QIcon::Normal : QIcon::Disabled; + if (mode == QIcon::Normal && btn.state & State_HasFocus) + mode = QIcon::Active; + // Decide if the icon is should be on or off: + QIcon::State state = QIcon::Off; + if (btn.state & State_On) + state = QIcon::On; + QPixmap pixmap = btn.icon.pixmap(opt->window, btn.iconSize, mode, state); + int pixmapWidth = pixmap.width() / pixmap.devicePixelRatio(); + int pixmapHeight = pixmap.height() / pixmap.devicePixelRatio(); + contentW += pixmapWidth + QMacStylePrivate::PushButtonContentPadding; + int iconLeftOffset = freeContentRect.x() + (freeContentRect.width() - contentW) / 2; + int iconTopOffset = freeContentRect.y() + (freeContentRect.height() - pixmapHeight) / 2; + QRect iconDestRect(iconLeftOffset, iconTopOffset, pixmapWidth, pixmapHeight); + QRect visualIconDestRect = visualRect(btn.direction, freeContentRect, iconDestRect); + proxy()->drawItemPixmap(p, visualIconDestRect, Qt::AlignLeft | Qt::AlignVCenter, pixmap); + int newOffset = iconDestRect.x() + iconDestRect.width() + + QMacStylePrivate::PushButtonContentPadding - textRect.x(); + textRect.adjust(newOffset, 0, newOffset, 0); + } + // Draw the text: + if (hasText) { + textRect = visualRect(btn.direction, freeContentRect, textRect); + proxy()->drawItemText(p, textRect, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic, btn.palette, + isEnabled, btn.text, QPalette::ButtonText); + } + } + } + break; + case CE_ComboBoxLabel: + if (const auto *cb = qstyleoption_cast(opt)) { + auto comboCopy = *cb; + comboCopy.direction = Qt::LeftToRight; + // The rectangle will be adjusted to SC_ComboBoxEditField with comboboxEditBounds() + QCommonStyle::drawControl(CE_ComboBoxLabel, &comboCopy, p); + } + break; + case CE_TabBarTabShape: + if (const auto *tabOpt = qstyleoption_cast(opt)) { + if (tabOpt->documentMode) { + p->save(); + bool isUnified = false; +// if (w) { +// QRect tabRect = tabOpt->rect; +// QPoint windowTabStart = w->mapTo(w->window(), tabRect.topLeft()); +// isUnified = isInMacUnifiedToolbarArea(w->window()->windowHandle(), windowTabStart.y()); +// } + + const int tabOverlap = proxy()->pixelMetric(PM_TabBarTabOverlap, opt); + drawTabShape(p, tabOpt, isUnified, tabOverlap); + + p->restore(); + return; + } + + const bool isActive = tabOpt->state & State_Active; + const bool isEnabled = tabOpt->state & State_Enabled; + const bool isPressed = tabOpt->state & State_Sunken; + const bool isSelected = tabOpt->state & State_Selected; + const auto tabDirection = QMacStylePrivate::tabDirection(tabOpt->shape); + const bool verticalTabs = tabDirection == QMacStylePrivate::East + || tabDirection == QMacStylePrivate::West; + + QStyleOptionTab::TabPosition tp = tabOpt->position; + QStyleOptionTab::SelectedPosition sp = tabOpt->selectedPosition; + if (tabOpt->direction == Qt::RightToLeft && !verticalTabs) { + if (tp == QStyleOptionTab::Beginning) + tp = QStyleOptionTab::End; + else if (tp == QStyleOptionTab::End) + tp = QStyleOptionTab::Beginning; + + if (sp == QStyleOptionTab::NextIsSelected) + sp = QStyleOptionTab::PreviousIsSelected; + else if (sp == QStyleOptionTab::PreviousIsSelected) + sp = QStyleOptionTab::NextIsSelected; + } + + // Alas, NSSegmentedControl and NSSegmentedCell are letting us down. + // We're not able to draw it at will, either calling -[drawSegment: + // inFrame:withView:], -[drawRect:] or anything in between. Besides, + // there's no public API do draw the pressed state, AFAICS. We'll use + // a push NSButton instead and clip the CGContext. + // NOTE/TODO: this is not true. On 10.13 NSSegmentedControl works with + // some (black?) magic/magic dances, on 10.14 it simply works (was + // it fixed in AppKit?). But, indeed, we cannot make a tab 'pressed' + // with NSSegmentedControl (only selected), so we stay with buttons + // (mixing buttons and NSSegmentedControl for such a simple thing + // is too much work). + + const auto cs = d->effectiveAquaSizeConstrain(opt); + // Extra hacks to get the proper pressed appreance when not selected or selected and inactive + const bool needsInactiveHack = (!isActive && isSelected); + const auto ct = !needsInactiveHack && (isSelected || tp == QStyleOptionTab::OnlyOneTab) ? + QMacStylePrivate::Button_PushButton : + QMacStylePrivate::Button_PopupButton; + const bool isPopupButton = ct == QMacStylePrivate::Button_PopupButton; + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + auto *pb = static_cast(d->cocoaControl(cw)); + + auto vOffset = isPopupButton ? 1 : 2; + if (tabDirection == QMacStylePrivate::East) + vOffset -= 1; + const auto outerAdjust = isPopupButton ? 1 : 4; + const auto innerAdjust = isPopupButton ? 20 : 10; + QRectF frameRect = tabOpt->rect; + if (verticalTabs) + frameRect = QRectF(frameRect.y(), frameRect.x(), frameRect.height(), frameRect.width()); + // Adjust before clipping + frameRect = frameRect.translated(0, vOffset); + switch (tp) { + case QStyleOptionTab::Beginning: + // Pressed state hack: tweak adjustments in preparation for flip below + if (!isSelected && tabDirection == QMacStylePrivate::West) + frameRect = frameRect.adjusted(-innerAdjust, 0, outerAdjust, 0); + else + frameRect = frameRect.adjusted(-outerAdjust, 0, innerAdjust, 0); + break; + case QStyleOptionTab::Middle: + frameRect = frameRect.adjusted(-innerAdjust, 0, innerAdjust, 0); + break; + case QStyleOptionTab::End: + // Pressed state hack: tweak adjustments in preparation for flip below + if (isSelected || tabDirection == QMacStylePrivate::West) + frameRect = frameRect.adjusted(-innerAdjust, 0, outerAdjust, 0); + else + frameRect = frameRect.adjusted(-outerAdjust, 0, innerAdjust, 0); + break; + case QStyleOptionTab::OnlyOneTab: + frameRect = frameRect.adjusted(-outerAdjust, 0, outerAdjust, 0); + break; + } + pb.frame = frameRect.toCGRect(); + + pb.enabled = isEnabled; + [pb highlight:isPressed]; + // Set off state when inactive. See needsInactiveHack for when it's selected + pb.state = (isActive && isSelected && !isPressed) ? NSOnState : NSOffState; + + const auto drawBezelBlock = ^(CGContextRef ctx, const CGRect &r) { + QMacAutoReleasePool pool; + CGContextClipToRect(ctx, opt->rect.toCGRect()); + if (!isSelected || needsInactiveHack) { + // Final stage of the pressed state hack: flip NSPopupButton rendering + if (!verticalTabs && tp == QStyleOptionTab::End) { + CGContextTranslateCTM(ctx, opt->rect.right(), 0); + CGContextScaleCTM(ctx, -1, 1); + CGContextTranslateCTM(ctx, -frameRect.left(), 0); + } else if (tabDirection == QMacStylePrivate::West && tp == QStyleOptionTab::Beginning) { + CGContextTranslateCTM(ctx, 0, opt->rect.top()); + CGContextScaleCTM(ctx, 1, -1); + CGContextTranslateCTM(ctx, 0, -frameRect.right()); + } else if (tabDirection == QMacStylePrivate::East && tp == QStyleOptionTab::End) { + CGContextTranslateCTM(ctx, 0, opt->rect.bottom()); + CGContextScaleCTM(ctx, 1, -1); + CGContextTranslateCTM(ctx, 0, -frameRect.left()); + } + } + + // Rotate and translate CTM when vertical + // On macOS: positive angle is CW, negative is CCW + if (tabDirection == QMacStylePrivate::West) { + CGContextTranslateCTM(ctx, 0, frameRect.right()); + CGContextRotateCTM(ctx, -M_PI_2); + CGContextTranslateCTM(ctx, -frameRect.left(), 0); + } else if (tabDirection == QMacStylePrivate::East) { + CGContextTranslateCTM(ctx, opt->rect.right(), 0); + CGContextRotateCTM(ctx, M_PI_2); + } + + // Now, if it's a trick with a popup button, it has an arrow + // which makes no sense on tabs. + NSPopUpArrowPosition oldPosition = NSPopUpArrowAtCenter; + NSPopUpButtonCell *pbCell = nil; + if (isPopupButton) { + pbCell = static_cast(pb.cell); + oldPosition = pbCell.arrowPosition; + pbCell.arrowPosition = NSPopUpNoArrow; + } + + [pb.cell drawBezelWithFrame:r inView:pb.superview]; + + if (pbCell) // Restore, we may reuse it for a ComboBox. + pbCell.arrowPosition = oldPosition; + }; + + if (needsInactiveHack) { + // First, render tab as non-selected tab on a pixamp + const qreal pixelRatio = p->device()->devicePixelRatioF(); + QImage tabPixmap(opt->rect.size() * pixelRatio, QImage::Format_ARGB32_Premultiplied); + tabPixmap.setDevicePixelRatio(pixelRatio); + tabPixmap.fill(Qt::transparent); + QPainter tabPainter(&tabPixmap); + d->drawNSViewInRect(pb, frameRect, &tabPainter, ^(CGContextRef ctx, const CGRect &r) { + QMacAutoReleasePool pool; + CGContextTranslateCTM(ctx, -opt->rect.left(), -opt->rect.top()); + drawBezelBlock(ctx, r); + }); + tabPainter.end(); + + // Then, darken it with the proper shade of gray + const qreal inactiveGray = 0.898; // As measured + const int inactiveGray8 = qRound(inactiveGray * 255.0); + const QRgb inactiveGrayRGB = qRgb(inactiveGray8, inactiveGray8, inactiveGray8); + for (int l = 0; l < tabPixmap.height(); ++l) { + auto *line = reinterpret_cast(tabPixmap.scanLine(l)); + for (int i = 0; i < tabPixmap.width(); ++i) { + if (qAlpha(line[i]) == 255) { + line[i] = inactiveGrayRGB; + } else if (qAlpha(line[i]) > 128) { + const int g = qRound(inactiveGray * qRed(line[i])); + line[i] = qRgba(g, g, g, qAlpha(line[i])); + } + } + } + + // Finally, draw the tab pixmap on the current painter + p->drawImage(opt->rect, tabPixmap); + } else { + d->drawNSViewInRect(pb, frameRect, p, drawBezelBlock); + } + + if (!isSelected && sp != QStyleOptionTab::NextIsSelected + && tp != QStyleOptionTab::End + && tp != QStyleOptionTab::OnlyOneTab) { + static const QPen separatorPen(Qt::black, 1.0); + p->save(); + p->setOpacity(isEnabled ? 0.105 : 0.06); // As measured + p->setPen(separatorPen); + if (tabDirection == QMacStylePrivate::West) { + p->drawLine(QLineF(opt->rect.left() + 1.5, opt->rect.bottom(), + opt->rect.right() - 0.5, opt->rect.bottom())); + } else if (tabDirection == QMacStylePrivate::East) { + p->drawLine(QLineF(opt->rect.left(), opt->rect.bottom(), + opt->rect.right() - 0.5, opt->rect.bottom())); + } else { + p->drawLine(QLineF(opt->rect.right(), opt->rect.top() + 1.0, + opt->rect.right(), opt->rect.bottom() - 0.5)); + } + p->restore(); + } + + // TODO Needs size adjustment to fit the focus ring + if (tabOpt->state & State_HasFocus) { + QMacStylePrivate::CocoaControlType focusRingType; + switch (tp) { + case QStyleOptionTab::Beginning: + focusRingType = verticalTabs ? QMacStylePrivate::SegmentedControl_Last + : QMacStylePrivate::SegmentedControl_First; + break; + case QStyleOptionTab::Middle: + focusRingType = QMacStylePrivate::SegmentedControl_Middle; + break; + case QStyleOptionTab::End: + focusRingType = verticalTabs ? QMacStylePrivate::SegmentedControl_First + : QMacStylePrivate::SegmentedControl_Last; + break; + case QStyleOptionTab::OnlyOneTab: + focusRingType = QMacStylePrivate::SegmentedControl_Single; + break; + } + } + } + break; + case CE_TabBarTabLabel: + if (const auto *tab = qstyleoption_cast(opt)) { + QStyleOptionTab myTab = *tab; + const auto tabDirection = QMacStylePrivate::tabDirection(tab->shape); + const bool verticalTabs = tabDirection == QMacStylePrivate::East + || tabDirection == QMacStylePrivate::West; + + // Check to see if we use have the same as the system font + // (QComboMenuItem is internal and should never be seen by the + // outside world, unless they read the source, in which case, it's + // their own fault). +// const bool nonDefaultFont = p->font() != qt_app_fonts_hash()->value("QComboMenuItem"); + const bool nonDefaultFont = false; + +// if (!myTab.documentMode && (myTab.state & State_Selected) && (myTab.state & State_Active)) +// if (const auto *tabBar = qobject_cast(w)) +// if (!tabBar->tabTextColor(tabBar->currentIndex()).isValid()) +// myTab.palette.setColor(QPalette::WindowText, Qt::white); + + if (myTab.documentMode && isDarkMode()) { + bool active = (myTab.state & State_Selected) && (myTab.state & State_Active); + myTab.palette.setColor(QPalette::WindowText, active ? Qt::white : Qt::gray); + } + + int heightOffset = 0; + if (verticalTabs) { + heightOffset = -1; + } else if (nonDefaultFont) { + if (p->fontMetrics().height() == myTab.rect.height()) + heightOffset = 2; + } + myTab.rect.setHeight(myTab.rect.height() + heightOffset); + + QCommonStyle::drawControl(ce, &myTab, p); + } + break; + case CE_DockWidgetTitle: + if (const auto *dwOpt = qstyleoption_cast(opt)) { + const bool isVertical = dwOpt->verticalTitleBar; + const auto effectiveRect = isVertical ? opt->rect.transposed() : opt->rect; + p->save(); + if (isVertical) { + p->translate(effectiveRect.left(), effectiveRect.top() + effectiveRect.width()); + p->rotate(-90); + p->translate(-effectiveRect.left(), -effectiveRect.top()); + } + + // fill title bar background + QLinearGradient linearGrad; + linearGrad.setStart(QPointF(0, 0)); + linearGrad.setFinalStop(QPointF(0, 2 * effectiveRect.height())); + linearGrad.setColorAt(0, opt->palette.button().color()); + linearGrad.setColorAt(1, opt->palette.dark().color()); + p->fillRect(effectiveRect, linearGrad); + + // draw horizontal line at bottom + p->setPen(opt->palette.dark().color()); + p->drawLine(effectiveRect.bottomLeft(), effectiveRect.bottomRight()); + + if (!dwOpt->title.isEmpty()) { + auto titleRect = proxy()->subElementRect(SE_DockWidgetTitleBarText, opt); + if (isVertical) + titleRect = QRect(effectiveRect.left() + opt->rect.bottom() - titleRect.bottom(), + effectiveRect.top() + titleRect.left() - opt->rect.left(), + titleRect.height(), + titleRect.width()); + + const auto text = p->fontMetrics().elidedText(dwOpt->title, Qt::ElideRight, titleRect.width()); + proxy()->drawItemText(p, titleRect, Qt::AlignCenter, dwOpt->palette, + dwOpt->state & State_Enabled, text, QPalette::WindowText); + } + p->restore(); + } + break; + case CE_FocusFrame: { +// const auto *ff = qobject_cast(w); +// const auto *ffw = ff ? ff->widget() : nullptr; +// const auto ct = [=] { +// if (ffw) { +// if (ffw->inherits("QCheckBox")) +// return QMacStylePrivate::Button_CheckBox; +// if (ffw->inherits("QRadioButton")) +// return QMacStylePrivate::Button_RadioButton; +// if (ffw->inherits("QLineEdit") || ffw->inherits("QTextEdit")) +// return QMacStylePrivate::TextField; +// } +// +// return QMacStylePrivate::Box; // Not really, just make it the default +// } (); +// const auto cs = ffw ? (ffw->testAttribute(Qt::WA_MacMiniSize) ? QStyleHelper::SizeMini : +// ffw->testAttribute(Qt::WA_MacSmallSize) ? QStyleHelper::SizeSmall : +// QStyleHelper::SizeLarge) : +// QStyleHelper::SizeLarge; +// const int hMargin = proxy()->pixelMetric(QStyle::PM_FocusFrameHMargin, opt); +// const int vMargin = proxy()->pixelMetric(QStyle::PM_FocusFrameVMargin, opt); +// d->drawFocusRing(p, opt->rect, hMargin, vMargin, QMacStylePrivate::CocoaControl(ct, cs)); + break; } + case CE_MenuEmptyArea: + // Skip: PE_PanelMenu fills in everything + break; + case CE_MenuItem: + case CE_MenuHMargin: + case CE_MenuVMargin: + case CE_MenuTearoff: + case CE_MenuScroller: + if (const QStyleOptionMenuItem *mi = qstyleoption_cast(opt)) { + const bool active = mi->state & State_Selected; + if (active) + p->fillRect(mi->rect, mi->palette.highlight()); + + const QStyleHelper::WidgetSizePolicy widgetSize = d->aquaSizeConstrain(opt); + + if (ce == CE_MenuTearoff) { + p->setPen(QPen(mi->palette.dark().color(), 1, Qt::DashLine)); + p->drawLine(mi->rect.x() + 2, mi->rect.y() + mi->rect.height() / 2 - 1, + mi->rect.x() + mi->rect.width() - 4, + mi->rect.y() + mi->rect.height() / 2 - 1); + p->setPen(QPen(mi->palette.light().color(), 1, Qt::DashLine)); + p->drawLine(mi->rect.x() + 2, mi->rect.y() + mi->rect.height() / 2, + mi->rect.x() + mi->rect.width() - 4, + mi->rect.y() + mi->rect.height() / 2); + } else if (ce == CE_MenuScroller) { + const QSize scrollerSize = QSize(10, 8); + const int scrollerVOffset = 5; + const int left = mi->rect.x() + (mi->rect.width() - scrollerSize.width()) / 2; + const int right = left + scrollerSize.width(); + int top; + int bottom; + if (opt->state & State_DownArrow) { + bottom = mi->rect.y() + scrollerVOffset; + top = bottom + scrollerSize.height(); + } else { + bottom = mi->rect.bottom() - scrollerVOffset; + top = bottom - scrollerSize.height(); + } + p->save(); + p->setRenderHint(QPainter::Antialiasing); + QPainterPath path; + path.moveTo(left, bottom); + path.lineTo(right, bottom); + path.lineTo((left + right) / 2, top); + p->fillPath(path, opt->palette.buttonText()); + p->restore(); + } else if (ce != CE_MenuItem) { + break; + } + + if (mi->menuItemType == QStyleOptionMenuItem::Separator) { + CGColorRef separatorColor = [NSColor quaternaryLabelColor].CGColor; + const QRect separatorRect = QRect(mi->rect.left(), mi->rect.center().y(), mi->rect.width(), 2); + p->fillRect(separatorRect, qt_mac_toQColor(separatorColor)); + break; + } + + const int maxpmw = mi->maxIconWidth; + const bool enabled = mi->state & State_Enabled; + + int xpos = mi->rect.x() + 18; + int checkcol = maxpmw; + if (!enabled) + p->setPen(mi->palette.text().color()); + else if (active) + p->setPen(mi->palette.highlightedText().color()); + else + p->setPen(mi->palette.buttonText().color()); + + if (mi->checked) { + QStyleOption checkmarkOpt; +// checkmarkOpt.initFrom(w); + + const int mw = checkcol + macItemFrame; + const int mh = mi->rect.height() + macItemFrame; + const int xp = mi->rect.x() + macItemFrame; + checkmarkOpt.rect = QRect(xp, mi->rect.y() - checkmarkOpt.fontMetrics.descent(), mw, mh); + + checkmarkOpt.state.setFlag(State_On, active); + checkmarkOpt.state.setFlag(State_Enabled, enabled); + if (widgetSize == QStyleHelper::SizeMini) + checkmarkOpt.state |= State_Mini; + else if (widgetSize == QStyleHelper::SizeSmall) + checkmarkOpt.state |= State_Small; + + // We let drawPrimitive(PE_IndicatorMenuCheckMark) pick the right color + checkmarkOpt.palette.setColor(QPalette::HighlightedText, p->pen().color()); + checkmarkOpt.palette.setColor(QPalette::Text, p->pen().color()); + + proxy()->drawPrimitive(PE_IndicatorMenuCheckMark, &checkmarkOpt, p); + } + if (!mi->icon.isNull()) { + QIcon::Mode mode = (mi->state & State_Enabled) ? QIcon::Normal + : QIcon::Disabled; + // Always be normal or disabled to follow the Mac style. + int smallIconSize = proxy()->pixelMetric(PM_SmallIconSize); + QSize iconSize(smallIconSize, smallIconSize); +//#if QT_CONFIG(combobox) +// if (const QComboBox *comboBox = qobject_cast(w)) { +// iconSize = comboBox->iconSize(); +// } +//#endif + QPixmap pixmap = mi->icon.pixmap(opt->window, iconSize, mode); + int pixw = pixmap.width() / pixmap.devicePixelRatio(); + int pixh = pixmap.height() / pixmap.devicePixelRatio(); + QRect cr(xpos, mi->rect.y(), checkcol, mi->rect.height()); + QRect pmr(0, 0, pixw, pixh); + pmr.moveCenter(cr.center()); + p->drawPixmap(pmr.topLeft(), pixmap); + xpos += pixw + 6; + } + + QString s = mi->text; + const auto text_flags = Qt::AlignVCenter | Qt::TextHideMnemonic + | Qt::TextSingleLine | Qt::AlignAbsolute; + int yPos = mi->rect.y(); + if (widgetSize == QStyleHelper::SizeMini) + yPos += 1; + + const bool isSubMenu = mi->menuItemType == QStyleOptionMenuItem::SubMenu; + const int tabwidth = isSubMenu ? 9 : mi->tabWidth; + + QString rightMarginText; + if (isSubMenu) + rightMarginText = QStringLiteral("\u25b6\ufe0e"); // U+25B6 U+FE0E: BLACK RIGHT-POINTING TRIANGLE + + // If present, save and remove embedded shorcut from text + const int tabIndex = s.indexOf(QLatin1Char('\t')); + if (tabIndex >= 0) { + if (!isSubMenu) // ... but ignore it if it's a submenu. + rightMarginText = s.mid(tabIndex + 1); + s = s.left(tabIndex); + } + + p->save(); + if (!rightMarginText.isEmpty()) { +// p->setFont(qt_app_fonts_hash()->value("QMenuItem", p->font())); + int xp = mi->rect.right() - tabwidth - macRightBorder + 2; + if (!isSubMenu) + xp -= macItemHMargin + macItemFrame + 3; // Adjust for shortcut + p->drawText(xp, yPos, tabwidth, mi->rect.height(), text_flags | Qt::AlignRight, rightMarginText); + } + + if (!s.isEmpty()) { + const int xm = macItemFrame + maxpmw + macItemHMargin; + QFont myFont = mi->font; + // myFont may not have any "hard" flags set. We override + // the point size so that when it is resolved against the device, this font will win. + // This is mainly to handle cases where someone sets the font on the window + // and then the combo inherits it and passes it onward. At that point the resolve mask + // is very, very weak. This makes it stonger. + myFont.setPointSizeF(QFontInfo(mi->font).pointSizeF()); + + // QTBUG-65653: Our own text rendering doesn't look good enough, especially on non-retina + // displays. Worked around here while waiting for a proper fix in QCoreTextFontEngine. + // Only if we're not using QCoreTextFontEngine we do fallback to our own text rendering. + const auto *fontEngine = QFontPrivate::get(myFont)->engineForScript(QChar::Script_Common); + Q_ASSERT(fontEngine); + if (fontEngine->type() == QFontEngine::Multi) { + fontEngine = static_cast(fontEngine)->engine(0); + Q_ASSERT(fontEngine); + } + if (fontEngine->type() == QFontEngine::Mac) { + NSFont *f = (NSFont *)(CTFontRef)fontEngine->handle(); + + // Respect the menu item palette as set in the style option. + const auto pc = p->pen().color(); + NSColor *c = [NSColor colorWithSRGBRed:pc.redF() + green:pc.greenF() + blue:pc.blueF() + alpha:pc.alphaF()]; + + s = qt_mac_removeMnemonics(s); + + QMacCGContext cgCtx(p); + d->setupNSGraphicsContext(cgCtx, YES); + + // Draw at point instead of in rect, as the rect we've computed for the menu item + // is based on the font metrics we got from HarfBuzz, so we may risk having CoreText + // line-break the string if it doesn't fit the given rect. It's better to draw outside + // the rect and possibly overlap something than to have part of the text disappear. + [s.toNSString() drawAtPoint:CGPointMake(xpos, yPos) + withAttributes:@{ NSFontAttributeName:f, NSForegroundColorAttributeName:c, + NSObliquenessAttributeName: [NSNumber numberWithDouble: myFont.italic() ? 0.3 : 0.0]}]; + + d->restoreNSGraphicsContext(cgCtx); + } else { + p->setFont(myFont); + p->drawText(xpos, yPos, mi->rect.width() - xm - tabwidth + 1, + mi->rect.height(), text_flags, s); + } + } + p->restore(); + } + break; + case CE_MenuBarItem: + case CE_MenuBarEmptyArea: + if (const QStyleOptionMenuItem *mi = qstyleoption_cast(opt)) { + const bool selected = (opt->state & State_Selected) && (opt->state & State_Enabled) && (opt->state & State_Sunken); + const QBrush bg = selected ? mi->palette.highlight() : mi->palette.window(); + p->fillRect(mi->rect, bg); + + if (ce != CE_MenuBarItem) + break; + + if (!mi->icon.isNull()) { + int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); + drawItemPixmap(p, mi->rect, + Qt::AlignCenter | Qt::TextHideMnemonic | Qt::TextDontClip + | Qt::TextSingleLine, + mi->icon.pixmap(opt->window, QSize(iconExtent, iconExtent), + (mi->state & State_Enabled) ? QIcon::Normal : QIcon::Disabled)); + } else { + drawItemText(p, mi->rect, + Qt::AlignCenter | Qt::TextHideMnemonic | Qt::TextDontClip + | Qt::TextSingleLine, + mi->palette, mi->state & State_Enabled, + mi->text, selected ? QPalette::HighlightedText : QPalette::ButtonText); + } + } + break; + case CE_ProgressBarLabel: + case CE_ProgressBarContents: + break; + case CE_ProgressBarGroove: + if (const QStyleOptionProgressBar *pb = qstyleoption_cast(opt)) { + const bool isIndeterminate = (pb->minimum == 0 && pb->maximum == 0); + const bool inverted = pb->invertedAppearance; + bool reverse = pb->direction == Qt::RightToLeft; + if (inverted) + reverse = !reverse; + + QRect rect = pb->rect; + const CGRect cgRect = rect.toCGRect(); + + const auto aquaSize = d->aquaSizeConstrain(opt); + +// const QProgressStyleAnimation *animation = qobject_cast(d->animation(opt->styleObject)); + QIndeterminateProgressIndicator *ipi = nil; +// if (isIndeterminate || animation) + ipi = static_cast(d->cocoaControl({ QMacStylePrivate::ProgressIndicator_Indeterminate, aquaSize })); + if (isIndeterminate) { + // QIndeterminateProgressIndicator derives from NSProgressIndicator. We use a single + // instance that we start animating as soon as one of the progress bars is indeterminate. + // Since they will be in sync (as it's the case in Cocoa), we just need to draw it with + // the right geometry when the animation triggers an update. However, we can't hide it + // entirely between frames since that would stop the animation, so we just set its alpha + // value to 0. Same if we remove it from its superview. See QIndeterminateProgressIndicator + // implementation for details. + // + // Quick: consider implementing this animation by using Quick/QML instead. + // +// if (!animation && opt->styleObject) { +// auto *animation = new QProgressStyleAnimation(d->animateSpeed(QMacStylePrivate::AquaProgressBar), opt->styleObject); +// // NSProgressIndicator is heavier to draw than the HITheme API, so we reduce the frame rate a couple notches. +// animation->setFrameRate(QStyleAnimation::FifteenFps); +// d->startAnimation(animation); +// [ipi startAnimation]; +// } + + d->setupNSGraphicsContext(cg, NO); + d->setupVerticalInvertedXform(cg, reverse, false, cgRect); + [ipi drawWithFrame:cgRect inView:d->backingStoreNSView]; + d->restoreNSGraphicsContext(cg); + } else { +// if (animation) { +// d->stopAnimation(opt->styleObject); +// [ipi stopAnimation]; +// } + + const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::ProgressIndicator_Determinate, aquaSize); + auto *pi = static_cast(d->cocoaControl(cw)); + d->drawNSViewInRect(pi, rect, p, ^(CGContextRef ctx, const CGRect &rect) { + QMacAutoReleasePool pool; + d->setupVerticalInvertedXform(ctx, reverse, false, rect); + pi.minValue = pb->minimum; + pi.maxValue = pb->maximum; + pi.doubleValue = pb->progress; + [pi drawRect:rect]; + }); + } + } + break; + case CE_SizeGrip: { + // This is not HIG kosher: Fall back to the old stuff until we decide what to do. +//#ifndef QT_NO_MDIAREA +// if (!w || !qobject_cast(w->parentWidget())) +//#endif +// break; + +// if (w->testAttribute(Qt::WA_MacOpaqueSizeGrip)) +// p->fillRect(opt->rect, opt->palette.window()); + +// QPen lineColor = QColor(82, 82, 82, 192); +// lineColor.setWidth(1); +// p->save(); +// p->setRenderHint(QPainter::Antialiasing); +// p->setPen(lineColor); +// const Qt::LayoutDirection layoutDirection = w ? w->layoutDirection() : qApp->layoutDirection(); +// const int NumLines = 3; +// for (int l = 0; l < NumLines; ++l) { +// const int offset = (l * 4 + 3); +// QPoint start, end; +// if (layoutDirection == Qt::LeftToRight) { +// start = QPoint(opt->rect.width() - offset, opt->rect.height() - 1); +// end = QPoint(opt->rect.width() - 1, opt->rect.height() - offset); +// } else { +// start = QPoint(offset, opt->rect.height() - 1); +// end = QPoint(1, opt->rect.height() - offset); +// } +// p->drawLine(start, end); +// } +// p->restore(); + break; + } + case CE_Splitter: + if (opt->rect.width() > 1 && opt->rect.height() > 1) { + const bool isVertical = !(opt->state & QStyle::State_Horizontal); + // Qt refers to the layout orientation, while Cocoa refers to the divider's. + const auto ct = isVertical ? QMacStylePrivate::SplitView_Horizontal : QMacStylePrivate::SplitView_Vertical; + const auto cw = QMacStylePrivate::CocoaControl(ct, QStyleHelper::SizeLarge); + auto *sv = static_cast(d->cocoaControl(cw)); + sv.frame = opt->rect.toCGRect(); + d->drawNSViewInRect(sv, opt->rect, p, ^(CGContextRef, const CGRect &rect) { + QMacAutoReleasePool pool; + [sv drawDividerInRect:rect]; + }); + } else { + QPen oldPen = p->pen(); + p->setPen(opt->palette.dark().color()); + if (opt->state & QStyle::State_Horizontal) + p->drawLine(opt->rect.topLeft(), opt->rect.bottomLeft()); + else + p->drawLine(opt->rect.topLeft(), opt->rect.topRight()); + p->setPen(oldPen); + } + break; + case CE_RubberBand: + if (const QStyleOptionRubberBand *rubber = qstyleoption_cast(opt)) { + QColor fillColor(opt->palette.color(QPalette::Disabled, QPalette::Highlight)); + if (!rubber->opaque) { + QColor strokeColor; + // I retrieved these colors from the Carbon-Dev mailing list + strokeColor.setHsvF(0, 0, 0.86, 1.0); + fillColor.setHsvF(0, 0, 0.53, 0.25); + if (opt->rect.width() * opt->rect.height() <= 3) { + p->fillRect(opt->rect, strokeColor); + } else { + QPen oldPen = p->pen(); + QBrush oldBrush = p->brush(); + QPen pen(strokeColor); + p->setPen(pen); + p->setBrush(fillColor); + QRect adjusted = opt->rect.adjusted(1, 1, -1, -1); + if (adjusted.isValid()) + p->drawRect(adjusted); + p->setPen(oldPen); + p->setBrush(oldBrush); + } + } else { + p->fillRect(opt->rect, fillColor); + } + } + break; + case CE_ToolBar: { + const QStyleOptionToolBar *toolBar = qstyleoption_cast(opt); + const bool isDarkMode = qt_mac_applicationIsInDarkMode(); + + // Unified title and toolbar drawing. In this mode the cocoa platform plugin will + // fill the top toolbar area part with a background gradient that "unifies" with + // the title bar. The following code fills the toolBar area with transparent pixels + // to make that gradient visible. +// if (w) { +//#if QT_CONFIG(mainwindow) +// if (QMainWindow * mainWindow = qobject_cast(w->window())) { +// if (toolBar && toolBar->toolBarArea == Qt::TopToolBarArea && mainWindow->unifiedTitleAndToolBarOnMac()) { +// // fill with transparent pixels. +// p->save(); +// p->setCompositionMode(QPainter::CompositionMode_Source); +// p->fillRect(opt->rect, Qt::transparent); +// p->restore(); + +// // Draw a horizontal separator line at the toolBar bottom if the "unified" area ends here. +// // There might be additional toolbars or other widgets such as tab bars in document +// // mode below. Determine this by making a unified toolbar area test for the row below +// // this toolbar. +// const QPoint windowToolbarEnd = w->mapTo(w->window(), opt->rect.bottomLeft()); +// const bool isEndOfUnifiedArea = !isInMacUnifiedToolbarArea(w->window()->windowHandle(), windowToolbarEnd.y() + 1); +// if (isEndOfUnifiedArea) { +// const int margin = qt_mac_aqua_get_metric(SeparatorSize); +// const auto separatorRect = QRect(opt->rect.left(), opt->rect.bottom(), opt->rect.width(), margin); +// p->fillRect(separatorRect, isDarkMode ? darkModeSeparatorLine : opt->palette.dark().color()); +// } +// break; +// } +// } +//#endif +// } + + // draw background gradient + QLinearGradient linearGrad; + if (opt->state & State_Horizontal) + linearGrad = QLinearGradient(0, opt->rect.top(), 0, opt->rect.bottom()); + else + linearGrad = QLinearGradient(opt->rect.left(), 0, opt->rect.right(), 0); + + QColor mainWindowGradientBegin = isDarkMode ? darkMainWindowGradientBegin : lightMainWindowGradientBegin; + QColor mainWindowGradientEnd = isDarkMode ? darkMainWindowGradientEnd : lightMainWindowGradientEnd; + + linearGrad.setColorAt(0, mainWindowGradientBegin); + linearGrad.setColorAt(1, mainWindowGradientEnd); + p->fillRect(opt->rect, linearGrad); + + p->save(); + QRect toolbarRect = isDarkMode ? opt->rect.adjusted(0, 0, 0, 1) : opt->rect; + if (opt->state & State_Horizontal) { + p->setPen(isDarkMode ? darkModeSeparatorLine : mainWindowGradientBegin.lighter(114)); + p->drawLine(toolbarRect.topLeft(), toolbarRect.topRight()); + p->setPen(isDarkMode ? darkModeSeparatorLine :mainWindowGradientEnd.darker(114)); + p->drawLine(toolbarRect.bottomLeft(), toolbarRect.bottomRight()); + } else { + p->setPen(isDarkMode ? darkModeSeparatorLine : mainWindowGradientBegin.lighter(114)); + p->drawLine(toolbarRect.topLeft(), toolbarRect.bottomLeft()); + p->setPen(isDarkMode ? darkModeSeparatorLine : mainWindowGradientEnd.darker(114)); + p->drawLine(toolbarRect.topRight(), toolbarRect.bottomRight()); + } + p->restore(); + + break; } + default: + QCommonStyle::drawControl(ce, opt, p); + break; + } +} + +static void setLayoutItemMargins(int left, int top, int right, int bottom, QRect *rect, Qt::LayoutDirection dir) +{ + if (dir == Qt::RightToLeft) { + rect->adjust(-right, top, -left, bottom); + } else { + rect->adjust(left, top, right, bottom); + } +} + +QRect QMacStyle::subElementRect(SubElement sr, const QStyleOption *opt) const +{ + Q_D(const QMacStyle); + QRect rect; + const int controlSize = getControlSize(opt); + + switch (sr) { + case SE_ItemViewItemText: + if (const QStyleOptionViewItem *vopt = qstyleoption_cast(opt)) { + int fw = proxy()->pixelMetric(PM_FocusFrameHMargin, opt); + // We add the focusframeargin between icon and text in commonstyle + rect = QCommonStyle::subElementRect(sr, opt); + if (vopt->features & QStyleOptionViewItem::HasDecoration) + rect.adjust(-fw, 0, 0, 0); + } + break; + case SE_ToolBoxTabContents: + rect = QCommonStyle::subElementRect(sr, opt); + break; + case SE_PushButtonContents: + if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { + // Comment from the old HITheme days: + // "Unlike Carbon, we want the button to always be drawn inside its bounds. + // Therefore, the button is a bit smaller, so that even if it got focus, + // the focus 'shadow' will be inside. Adjust the content rect likewise." + // In the future, we should consider using -[NSCell titleRectForBounds:]. + // Since it requires configuring the NSButton fully, i.e. frame, image, + // title and font, we keep things more manual until we are more familiar + // with side effects when changing NSButton state. + const auto ct = cocoaControlType(btn); + const auto cs = d->effectiveAquaSizeConstrain(btn); + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + auto frameRect = cw.adjustedControlFrame(btn->rect); + frameRect -= cw.titleMargins(); + rect = frameRect.toRect(); + } + break; + case SE_HeaderLabel: { + int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, opt); + rect.setRect(opt->rect.x() + margin, opt->rect.y(), + opt->rect.width() - margin * 2, opt->rect.height() - 2); + if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { + // Subtract width needed for arrow, if there is one + if (header->sortIndicator != QStyleOptionHeader::None) { + if (opt->state & State_Horizontal) + rect.setWidth(rect.width() - (headerSectionArrowHeight) - (margin * 2)); + else + rect.setHeight(rect.height() - (headerSectionArrowHeight) - (margin * 2)); + } + } + rect = visualRect(opt->direction, opt->rect, rect); + break; + } + case SE_HeaderArrow: { + int h = opt->rect.height(); + int w = opt->rect.width(); + int x = opt->rect.x(); + int y = opt->rect.y(); + int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, opt); + + if (opt->state & State_Horizontal) { + rect.setRect(x + w - margin * 2 - headerSectionArrowHeight, y + 5, + headerSectionArrowHeight, h - margin * 2 - 5); + } else { + rect.setRect(x + 5, y + h - margin * 2 - headerSectionArrowHeight, + w - margin * 2 - 5, headerSectionArrowHeight); + } + rect = visualRect(opt->direction, opt->rect, rect); + break; + } + case SE_ProgressBarGroove: + // Wrong in the secondary dimension, but accurate enough in the main dimension. + rect = opt->rect; + break; + case SE_ProgressBarLabel: + break; + case SE_ProgressBarContents: + rect = opt->rect; + break; + case SE_TreeViewDisclosureItem: { + rect = opt->rect; + // As previously returned by HIThemeGetButtonContentBounds + rect.setLeft(rect.left() + 2 + DisclosureOffset); + break; + } + case SE_TabWidgetLeftCorner: + if (const QStyleOptionTabWidgetFrame *twf + = qstyleoption_cast(opt)) { + switch (twf->shape) { + case QStyleOptionTab::RoundedNorth: + case QStyleOptionTab::TriangularNorth: + rect = QRect(QPoint(0, 0), twf->leftCornerWidgetSize); + break; + case QStyleOptionTab::RoundedSouth: + case QStyleOptionTab::TriangularSouth: + rect = QRect(QPoint(0, twf->rect.height() - twf->leftCornerWidgetSize.height()), + twf->leftCornerWidgetSize); + break; + default: + break; + } + rect = visualRect(twf->direction, twf->rect, rect); + } + break; + case SE_TabWidgetRightCorner: + if (const QStyleOptionTabWidgetFrame *twf + = qstyleoption_cast(opt)) { + switch (twf->shape) { + case QStyleOptionTab::RoundedNorth: + case QStyleOptionTab::TriangularNorth: + rect = QRect(QPoint(twf->rect.width() - twf->rightCornerWidgetSize.width(), 0), + twf->rightCornerWidgetSize); + break; + case QStyleOptionTab::RoundedSouth: + case QStyleOptionTab::TriangularSouth: + rect = QRect(QPoint(twf->rect.width() - twf->rightCornerWidgetSize.width(), + twf->rect.height() - twf->rightCornerWidgetSize.height()), + twf->rightCornerWidgetSize); + break; + default: + break; + } + rect = visualRect(twf->direction, twf->rect, rect); + } + break; + case SE_TabWidgetTabContents: + rect = QCommonStyle::subElementRect(sr, opt); + if (const auto *twf = qstyleoption_cast(opt)) { + if (twf->lineWidth != 0) { + switch (QMacStylePrivate::tabDirection(twf->shape)) { + case QMacStylePrivate::North: + rect.adjust(+1, +14, -1, -1); + break; + case QMacStylePrivate::South: + rect.adjust(+1, +1, -1, -14); + break; + case QMacStylePrivate::West: + rect.adjust(+14, +1, -1, -1); + break; + case QMacStylePrivate::East: + rect.adjust(+1, +1, -14, -1); + } + } + } + break; + case SE_TabBarTabText: + if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { + QRect dummyIconRect; + d->tabLayout(tab, &rect, &dummyIconRect); + } + break; + case SE_TabBarTabLeftButton: + case SE_TabBarTabRightButton: + if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { + bool selected = tab->state & State_Selected; + int verticalShift = proxy()->pixelMetric(QStyle::PM_TabBarTabShiftVertical, tab); + int horizontalShift = proxy()->pixelMetric(QStyle::PM_TabBarTabShiftHorizontal, tab); + int hpadding = 5; + + bool verticalTabs = tab->shape == QStyleOptionTab::RoundedEast + || tab->shape == QStyleOptionTab::RoundedWest + || tab->shape == QStyleOptionTab::TriangularEast + || tab->shape == QStyleOptionTab::TriangularWest; + + QRect tr = tab->rect; + if (tab->shape == QStyleOptionTab::RoundedSouth || tab->shape == QStyleOptionTab::TriangularSouth) + verticalShift = -verticalShift; + if (verticalTabs) { + qSwap(horizontalShift, verticalShift); + horizontalShift *= -1; + verticalShift *= -1; + } + if (tab->shape == QStyleOptionTab::RoundedWest || tab->shape == QStyleOptionTab::TriangularWest) + horizontalShift = -horizontalShift; + + tr.adjust(0, 0, horizontalShift, verticalShift); + if (selected) + { + tr.setBottom(tr.bottom() - verticalShift); + tr.setRight(tr.right() - horizontalShift); + } + + QSize size = (sr == SE_TabBarTabLeftButton) ? tab->leftButtonSize : tab->rightButtonSize; + int w = size.width(); + int h = size.height(); + int midHeight = static_cast(qCeil(float(tr.height() - h) / 2)); + int midWidth = ((tr.width() - w) / 2); + + bool atTheTop = true; + switch (tab->shape) { + case QStyleOptionTab::RoundedWest: + case QStyleOptionTab::TriangularWest: + atTheTop = (sr == SE_TabBarTabLeftButton); + break; + case QStyleOptionTab::RoundedEast: + case QStyleOptionTab::TriangularEast: + atTheTop = (sr == SE_TabBarTabRightButton); + break; + default: + if (sr == SE_TabBarTabLeftButton) + rect = QRect(tab->rect.x() + hpadding, midHeight, w, h); + else + rect = QRect(tab->rect.right() - w - hpadding, midHeight, w, h); + rect = visualRect(tab->direction, tab->rect, rect); + } + if (verticalTabs) { + if (atTheTop) + rect = QRect(midWidth, tr.y() + tab->rect.height() - hpadding - h, w, h); + else + rect = QRect(midWidth, tr.y() + hpadding, w, h); + } + } + break; + case SE_LineEditContents: { + // From using pixelTool with XCode/NSTextTextField + int leftPadding = 4; + int rightPadding = 4; + int topPadding = 4; + int bottomPadding = 0; + + if (opt->state & QStyle::State_Small) { + topPadding = 3; + } else if (opt->state & QStyle::State_Mini) { + topPadding = 2; + } + + rect = QRect(leftPadding, topPadding, opt->rect.width() - leftPadding - rightPadding, + opt->rect.height() - topPadding - bottomPadding); + break; } + case SE_CheckBoxLayoutItem: + rect = opt->rect; + if (controlSize == QStyleHelper::SizeLarge) { + setLayoutItemMargins(+2, +2, -3, -2, &rect, opt->direction); + } else if (controlSize == QStyleHelper::SizeSmall) { + setLayoutItemMargins(+1, +2, -2, -1, &rect, opt->direction); + } else { + setLayoutItemMargins(-0, +0, -1, -0, &rect, opt->direction); + } + break; + case SE_ComboBoxLayoutItem: + if (const auto *combo = qstyleoption_cast(opt)) { + //#ifndef QT_NO_TOOLBAR + // if (widget && qobject_cast(widget->parentWidget())) { + // // Do nothing, because QToolbar needs the entire widget rect. + // // Otherwise it will be clipped. Equivalent to + // // widget->setAttribute(Qt::WA_LayoutUsesWidgetRect), but without + // // all the hassle. + // } else + //#endif + if (combo->editable) + rect = LargeSmallMini(opt, + opt->rect.adjusted(5, 6, -6, -7), + opt->rect.adjusted(4, 4, -5, -7), + opt->rect.adjusted(5, 4, -4, -6)); + else + rect = LargeSmallMini(opt, + opt->rect.adjusted(6, 4, -7, -7), + opt->rect.adjusted(6, 7, -6, -5), + opt->rect.adjusted(9, 5, -5, -7)); + } + break; + case SE_LabelLayoutItem: + rect = opt->rect; + setLayoutItemMargins(+1, 0 /* SHOULD be -1, done for alignment */, 0, 0 /* SHOULD be -1, done for alignment */, &rect, opt->direction); + break; + case SE_ProgressBarLayoutItem: + if (const QStyleOptionProgressBar *pb = qstyleoption_cast(opt)) { + const bool isIndeterminate = (pb->minimum == 0 && pb->maximum == 0); + rect = opt->rect; + + if (isIndeterminate) { + rect.adjust(1, 2, -1, -2); + } else { + rect.adjust(1, 1, -1, -2); + } + } + break; + case SE_PushButtonLayoutItem: + rect = opt->rect; + if (const QStyleOptionButton *buttonOpt = qstyleoption_cast(opt)) { + if ((buttonOpt->features & QStyleOptionButton::Flat)) + break; + } + rect = LargeSmallMini(opt, + opt->rect.adjusted(7, 5, -7, -7), + opt->rect.adjusted(6, 6, -6, -6), + opt->rect.adjusted(6, 5, -6, -6)); + break; + case SE_SpinBoxLayoutItem: + rect = LargeSmallMini(opt, + opt->rect.adjusted(2, 3, -2, -2), + opt->rect.adjusted(2, 3, -2, -2), + opt->rect.adjusted(2, 3, -2, -2)); + break; + case SE_RadioButtonLayoutItem: + rect = LargeSmallMini(opt, + opt->rect.adjusted(2, 2, -3, -2), + opt->rect.adjusted(2, 2, -3, -2), + opt->rect.adjusted(1, 2, -3, -2)); + break; + case SE_SliderLayoutItem: + if (const QStyleOptionSlider *sliderOpt + = qstyleoption_cast(opt)) { + rect = opt->rect; + if (sliderOpt->subControls & QStyle::SC_SliderHandle) { + if (sliderOpt->tickPosition == QStyleOptionSlider::NoTicks) + rect.adjust(3, 3, -3, -3); + } else { + rect.adjust(3, 0, -3, 0); + } + } + break; + case SE_ScrollBarLayoutItem: + if (const QStyleOptionSlider *sliderOpt = qstyleoption_cast(opt)) { + rect = opt->rect; + } + case SE_FrameLayoutItem: + // hack because QStyleOptionFrame doesn't have a frameStyle member +// if (const QFrame *frame = qobject_cast(widget)) { +// rect = opt->rect; +// switch (frame->frameStyle() & QFrame::Shape_Mask) { +// case QFrame::HLine: +// rect.adjust(0, +1, 0, -1); +// break; +// case QFrame::VLine: +// rect.adjust(+1, 0, -1, 0); +// break; +// default: +// ; +// } +// } + break; + case SE_GroupBoxLayoutItem: + rect = opt->rect; + if (const QStyleOptionGroupBox *groupBoxOpt = + qstyleoption_cast(opt)) { + /* + AHIG is very inconsistent when it comes to group boxes. + Basically, we make sure that (non-checkable) group boxes + and tab widgets look good when laid out side by side. + */ + if (groupBoxOpt->subControls & (QStyle::SC_GroupBoxCheckBox + | QStyle::SC_GroupBoxLabel)) { + int delta; + if (groupBoxOpt->subControls & QStyle::SC_GroupBoxCheckBox) { + delta = SIZE(8, 4, 4); // guess + } else { + delta = SIZE(15, 12, 12); // guess + } + rect.setTop(rect.top() + delta); + } + } + rect.setBottom(rect.bottom() - 1); + break; + case SE_TabWidgetLayoutItem: + if (const QStyleOptionTabWidgetFrame *tabWidgetOpt = + qstyleoption_cast(opt)) { + /* + AHIG specifies "12 or 14" as the distance from the window + edge. We choose 14 and since the default top margin is 20, + the overlap is 6. + */ + rect = tabWidgetOpt->rect; + if (tabWidgetOpt->shape == QStyleOptionTab::RoundedNorth) + rect.setTop(rect.top() + SIZE(6 /* AHIG */, 3 /* guess */, 2 /* AHIG */)); + } + break; + case SE_DockWidgetCloseButton: + case SE_DockWidgetFloatButton: + case SE_DockWidgetTitleBarText: + case SE_DockWidgetIcon: { + int iconSize = proxy()->pixelMetric(PM_SmallIconSize, opt); + int buttonMargin = proxy()->pixelMetric(PM_DockWidgetTitleBarButtonMargin, opt); + QRect srect = opt->rect; + + const QStyleOptionDockWidget *dwOpt + = qstyleoption_cast(opt); + bool canClose = dwOpt == 0 ? true : dwOpt->closable; + bool canFloat = dwOpt == 0 ? false : dwOpt->floatable; + + const bool verticalTitleBar = dwOpt->verticalTitleBar; + + // If this is a vertical titlebar, we transpose and work as if it was + // horizontal, then transpose again. + if (verticalTitleBar) + srect = srect.transposed(); + + do { + int right = srect.right(); + int left = srect.left(); + + QRect closeRect; + if (canClose) { + QSize sz = proxy()->standardIcon(QStyle::SP_TitleBarCloseButton, + opt).actualSize(QSize(iconSize, iconSize)); + sz += QSize(buttonMargin, buttonMargin); + if (verticalTitleBar) + sz = sz.transposed(); + closeRect = QRect(left, + srect.center().y() - sz.height()/2, + sz.width(), sz.height()); + left = closeRect.right() + 1; + } + if (sr == SE_DockWidgetCloseButton) { + rect = closeRect; + break; + } + + QRect floatRect; + if (canFloat) { + QSize sz = proxy()->standardIcon(QStyle::SP_TitleBarNormalButton, + opt).actualSize(QSize(iconSize, iconSize)); + sz += QSize(buttonMargin, buttonMargin); + if (verticalTitleBar) + sz = sz.transposed(); + floatRect = QRect(left, + srect.center().y() - sz.height()/2, + sz.width(), sz.height()); + left = floatRect.right() + 1; + } + if (sr == SE_DockWidgetFloatButton) { + rect = floatRect; + break; + } + + QRect iconRect; +// if (const QDockWidget *dw = qobject_cast(widget)) { +// QIcon icon; +// if (dw->isFloating()) +// icon = dw->windowIcon(); +// if (!icon.isNull() +// && icon.cacheKey() != QApplication::windowIcon().cacheKey()) { +// QSize sz = icon.actualSize(QSize(rect.height(), rect.height())); +// if (verticalTitleBar) +// sz = sz.transposed(); +// iconRect = QRect(right - sz.width(), srect.center().y() - sz.height()/2, +// sz.width(), sz.height()); +// right = iconRect.left() - 1; +// } +// } + if (sr == SE_DockWidgetIcon) { + rect = iconRect; + break; + } + + QRect textRect = QRect(left, srect.top(), + right - left, srect.height()); + if (sr == SE_DockWidgetTitleBarText) { + rect = textRect; + break; + } + } while (false); + + if (verticalTitleBar) { + rect = QRect(srect.left() + rect.top() - srect.top(), + srect.top() + srect.right() - rect.right(), + rect.height(), rect.width()); + } else { + rect = visualRect(opt->direction, srect, rect); + } + break; + } + default: + rect = QCommonStyle::subElementRect(sr, opt); + break; + } + return rect; +} + +void QMacStylePrivate::drawToolbarButtonArrow(const QStyleOption *opt, QPainter *p) const +{ + Q_Q(const QMacStyle); + QStyleOption arrowOpt = *opt; + arrowOpt.rect = QRect(opt->rect.right() - (toolButtonArrowSize + toolButtonArrowMargin), + opt->rect.bottom() - (toolButtonArrowSize + toolButtonArrowMargin), + toolButtonArrowSize, + toolButtonArrowSize); + q->proxy()->drawPrimitive(QStyle::PE_IndicatorArrowDown, &arrowOpt, p); +} + +void QMacStylePrivate::setupNSGraphicsContext(CGContextRef cg, bool flipped) const +{ + CGContextSaveGState(cg); + [NSGraphicsContext saveGraphicsState]; + + [NSGraphicsContext setCurrentContext: + [NSGraphicsContext graphicsContextWithCGContext:cg flipped:flipped]]; +} + +void QMacStylePrivate::restoreNSGraphicsContext(CGContextRef cg) const +{ + [NSGraphicsContext restoreGraphicsState]; + CGContextRestoreGState(cg); +} + +void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p) const +{ + Q_D(const QMacStyle); + const AppearanceSync sync; + + QMacCGContext cg(p); + d->resolveCurrentNSView(opt->window); + + switch (cc) { + case CC_ScrollBar: + if (const QStyleOptionSlider *sb = qstyleoption_cast(opt)) { + + const bool drawTrack = sb->subControls & SC_ScrollBarGroove; + const bool drawKnob = sb->subControls & SC_ScrollBarSlider; + if (!drawTrack && !drawKnob) + break; + + const bool isHorizontal = sb->orientation == Qt::Horizontal; + + if (opt && opt->styleObject && !QMacStylePrivate::scrollBars.contains(opt->styleObject)) + QMacStylePrivate::scrollBars.append(QPointer(opt->styleObject)); + + static const CGFloat knobWidths[] = { 7.0, 5.0, 5.0 }; + static const CGFloat expandedKnobWidths[] = { 11.0, 9.0, 9.0 }; + const auto cocoaSize = d->effectiveAquaSizeConstrain(opt); + const CGFloat maxExpandScale = expandedKnobWidths[cocoaSize] / knobWidths[cocoaSize]; + + const bool isTransient = proxy()->styleHint(SH_ScrollBar_Transient, opt); +// if (!isTransient) +// d->stopAnimation(opt->styleObject); + bool wasActive = false; + CGFloat opacity = 0.0; + CGFloat expandScale = 1.0; + CGFloat expandOffset = 0.0; + bool shouldExpand = false; + + if (QObject *styleObject = opt->styleObject) { + const int oldPos = styleObject->property("_q_stylepos").toInt(); + const int oldMin = styleObject->property("_q_stylemin").toInt(); + const int oldMax = styleObject->property("_q_stylemax").toInt(); + const QRect oldRect = styleObject->property("_q_stylerect").toRect(); + const QStyle::State oldState = static_cast(styleObject->property("_q_stylestate").value()); + const uint oldActiveControls = styleObject->property("_q_stylecontrols").toUInt(); + + // a scrollbar is transient when the scrollbar itself and + // its sibling are both inactive (ie. not pressed/hovered/moved) + const bool transient = isTransient && !opt->activeSubControls && !(sb->state & State_On); + + if (!transient || + oldPos != sb->sliderPosition || + oldMin != sb->minimum || + oldMax != sb->maximum || + oldRect != sb->rect || + oldState != sb->state || + oldActiveControls != sb->activeSubControls) { + + // if the scrollbar is transient or its attributes, geometry or + // state has changed, the opacity is reset back to 100% opaque + opacity = 1.0; + + styleObject->setProperty("_q_stylepos", sb->sliderPosition); + styleObject->setProperty("_q_stylemin", sb->minimum); + styleObject->setProperty("_q_stylemax", sb->maximum); + styleObject->setProperty("_q_stylerect", sb->rect); + styleObject->setProperty("_q_stylestate", static_cast(sb->state)); + styleObject->setProperty("_q_stylecontrols", static_cast(sb->activeSubControls)); + +// QScrollbarStyleAnimation *anim = qobject_cast(d->animation(styleObject)); +// if (transient) { +// if (!anim) { +// anim = new QScrollbarStyleAnimation(QScrollbarStyleAnimation::Deactivating, styleObject); +// d->startAnimation(anim); +// } else if (anim->mode() == QScrollbarStyleAnimation::Deactivating) { +// // the scrollbar was already fading out while the +// // state changed -> restart the fade out animation +// anim->setCurrentTime(0); +// } +// } else if (anim && anim->mode() == QScrollbarStyleAnimation::Deactivating) { +// d->stopAnimation(styleObject); +// } + } + +// QScrollbarStyleAnimation *anim = qobject_cast(d->animation(styleObject)); +// if (anim && anim->mode() == QScrollbarStyleAnimation::Deactivating) { +// // once a scrollbar was active (hovered/pressed), it retains +// // the active look even if it's no longer active while fading out +// if (oldActiveControls) +// anim->setActive(true); + +// wasActive = anim->wasActive(); +// opacity = anim->currentValue(); +// } + + shouldExpand = isTransient && (opt->activeSubControls || wasActive); + if (shouldExpand) { +// if (!anim && !oldActiveControls) { +// // Start expand animation only once and when entering +// anim = new QScrollbarStyleAnimation(QScrollbarStyleAnimation::Activating, styleObject); +// d->startAnimation(anim); +// } +// if (anim && anim->mode() == QScrollbarStyleAnimation::Activating) { +// expandScale = 1.0 + (maxExpandScale - 1.0) * anim->currentValue(); +// expandOffset = 5.5 * (1.0 - anim->currentValue()); +// } else { +// // Keep expanded state after the animation ends, and when fading out +// expandScale = maxExpandScale; +// expandOffset = 0.0; +// } + } + } + + d->setupNSGraphicsContext(cg, NO /* flipped */); + + const auto controlType = isHorizontal ? QMacStylePrivate::Scroller_Horizontal : QMacStylePrivate::Scroller_Vertical; + const auto cw = QMacStylePrivate::CocoaControl(controlType, cocoaSize); + NSScroller *scroller = static_cast(d->cocoaControl(cw)); + + const QColor bgColor = QStyleHelper::backgroundColor(opt->palette); + const bool hasDarkBg = bgColor.red() < 128 && bgColor.green() < 128 && bgColor.blue() < 128; + if (isTransient) { + // macOS behavior: as soon as one color channel is >= 128, + // the background is considered bright, scroller is dark. + scroller.knobStyle = hasDarkBg? NSScrollerKnobStyleLight : NSScrollerKnobStyleDark; + } else { + scroller.knobStyle = NSScrollerKnobStyleDefault; + } + + scroller.scrollerStyle = isTransient ? NSScrollerStyleOverlay : NSScrollerStyleLegacy; + + if (!setupScroller(scroller, sb)) + break; + + if (isTransient) { + CGContextBeginTransparencyLayerWithRect(cg, scroller.frame, nullptr); + CGContextSetAlpha(cg, opacity); + } + + if (drawTrack) { + // Draw the track when hovering. Expand by shifting the track rect. + if (!isTransient || opt->activeSubControls || wasActive) { + CGRect trackRect = scroller.bounds; + if (isHorizontal) + trackRect.origin.y += expandOffset; + else + trackRect.origin.x += expandOffset; + [scroller drawKnobSlotInRect:trackRect highlight:NO]; + } + } + + if (drawKnob) { + if (shouldExpand) { + // -[NSScroller drawKnob] is not useful here because any scaling applied + // will only be used to draw the hi-DPI artwork. And even if did scale, + // the stretched knob would look wrong, actually. So we need to draw the + // scroller manually when it's being hovered. + const CGFloat scrollerWidth = [NSScroller scrollerWidthForControlSize:scroller.controlSize scrollerStyle:scroller.scrollerStyle]; + const CGFloat knobWidth = knobWidths[cocoaSize] * expandScale; + // Cocoa can help get the exact knob length in the current orientation + const CGRect scrollerKnobRect = CGRectInset([scroller rectForPart:NSScrollerKnob], 1, 1); + const CGFloat knobLength = isHorizontal ? scrollerKnobRect.size.width : scrollerKnobRect.size.height; + const CGFloat knobPos = isHorizontal ? scrollerKnobRect.origin.x : scrollerKnobRect.origin.y; + const CGFloat knobOffset = qRound((scrollerWidth + expandOffset - knobWidth) / 2.0); + const CGFloat knobRadius = knobWidth / 2.0; + CGRect knobRect; + if (isHorizontal) + knobRect = CGRectMake(knobPos, knobOffset, knobLength, knobWidth); + else + knobRect = CGRectMake(knobOffset, knobPos, knobWidth, knobLength); + QCFType knobPath = CGPathCreateWithRoundedRect(knobRect, knobRadius, knobRadius, nullptr); + CGContextAddPath(cg, knobPath); + CGContextSetAlpha(cg, 0.5); + CGColorRef knobColor = hasDarkBg ? NSColor.whiteColor.CGColor : NSColor.blackColor.CGColor; + CGContextSetFillColorWithColor(cg, knobColor); + CGContextFillPath(cg); + } else { + [scroller drawKnob]; + + if (!isTransient && opt->state & State_Sunken) { + // The knob should appear darker (going from 0.76 down to 0.49). + // But no blending mode can help darken enough in a single pass, + // so we resort to drawing the knob twice with a small help from + // blending. This brings the gray level to a close enough 0.53. + CGContextSetBlendMode(cg, kCGBlendModePlusDarker); + [scroller drawKnob]; + } + } + } + + if (isTransient) + CGContextEndTransparencyLayer(cg); + + d->restoreNSGraphicsContext(cg); + } + break; + case CC_Slider: + if (const QStyleOptionSlider *sl = qstyleoption_cast(opt)) { + const bool isHorizontal = sl->orientation == Qt::Horizontal; + const auto ct = isHorizontal ? QMacStylePrivate::Slider_Horizontal : QMacStylePrivate::Slider_Vertical; + const auto cs = d->effectiveAquaSizeConstrain(opt); + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + auto *slider = static_cast(d->cocoaControl(cw)); + if (!setupSlider(slider, sl)) + break; + + const bool hasTicks = sl->tickPosition != QStyleOptionSlider::NoTicks; + const bool hasDoubleTicks = sl->tickPosition == QStyleOptionSlider::TicksBothSides; + const bool drawKnob = sl->subControls & SC_SliderHandle; + const bool drawBar = sl->subControls & SC_SliderGroove; + const bool drawTicks = sl->subControls & SC_SliderTickmarks; + const bool isPressed = sl->state & State_Sunken; + + CGPoint pressPoint; + if (isPressed && drawKnob) { + const CGRect knobRect = [slider.cell knobRectFlipped:slider.isFlipped]; + pressPoint.x = CGRectGetMidX(knobRect); + pressPoint.y = CGRectGetMidY(knobRect); + [slider.cell startTrackingAt:pressPoint inView:slider]; + } + + d->drawNSViewInRect(slider, opt->rect, p, ^(CGContextRef, const CGRect &) { + // Note that we don't support drawing the slider upside down. When this + // is needed, simply set scale = -1 on the QML control / style item instead. + NSSliderCell *cell = slider.cell; + + if (drawBar) { + const CGRect barRect = [cell barRectFlipped:slider.isFlipped]; + // "flipped" will only make a difference when NSSliderCell is vertical. And then + // flipped means fill the groove from bottom-to-top instead of top-to-bottom. + // Bottom-to-top is QSlider's normal mode, which means that we always need to flip + // in vertical mode. (In case NSSlider can also be flipped horizontally in the future, + // we stay on the safe side, and only flip when in vertical mode). + [cell drawBarInside:barRect flipped:!isHorizontal]; + } + + if (drawBar && hasTicks && drawTicks) { + if (!hasDoubleTicks) { + [cell drawTickMarks]; + } else { + if (sl->orientation == Qt::Horizontal) { + slider.tickMarkPosition = NSTickMarkPositionAbove; + [slider layoutSubtreeIfNeeded]; + [cell drawTickMarks]; + slider.tickMarkPosition = NSTickMarkPositionBelow; + [slider layoutSubtreeIfNeeded]; + [cell drawTickMarks]; + } else { + slider.tickMarkPosition = NSTickMarkPositionLeading; + [slider layoutSubtreeIfNeeded]; + [cell drawTickMarks]; + slider.tickMarkPosition = NSTickMarkPositionTrailing; + [slider layoutSubtreeIfNeeded]; + [cell drawTickMarks]; + } + } + } + + if (drawKnob) + [cell drawKnob]; + }); + + if (isPressed && drawKnob) + [slider.cell stopTracking:pressPoint at:pressPoint inView:slider mouseIsUp:NO]; + } + break; + case CC_SpinBox: + if (const QStyleOptionSpinBox *sb = qstyleoption_cast(opt)) { + if (sb->frame && (sb->subControls & SC_SpinBoxFrame)) { + const auto lineEditRect = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxEditField); + QStyleOptionFrame frame; + static_cast(frame) = *opt; + frame.rect = lineEditRect; + frame.state |= State_Sunken; + frame.lineWidth = 1; + frame.midLineWidth = 0; + frame.features = QStyleOptionFrame::None; + frame.frameShape = QStyleOptionFrame::Box; + drawPrimitive(PE_FrameLineEdit, &frame, p); + } + if (sb->subControls & (SC_SpinBoxUp | SC_SpinBoxDown)) { + const QRect updown = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxUp) + | proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxDown); + + d->setupNSGraphicsContext(cg, NO); + + const auto aquaSize = d->effectiveAquaSizeConstrain(opt); + const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::Stepper, aquaSize); + NSStepperCell *cell = static_cast(d->cocoaCell(cw)); + cell.enabled = (sb->state & State_Enabled); + + const CGRect newRect = [cell drawingRectForBounds:updown.toCGRect()]; + + const bool upPressed = sb->activeSubControls == SC_SpinBoxUp && (sb->state & State_Sunken); + const bool downPressed = sb->activeSubControls == SC_SpinBoxDown && (sb->state & State_Sunken); + const CGFloat x = CGRectGetMidX(newRect); + const CGFloat y = upPressed ? -3 : 3; // Weird coordinate shift going on. Verified with Hopper + const CGPoint pressPoint = CGPointMake(x, y); + // Pretend we're pressing the mouse on the right button. Unfortunately, NSStepperCell has no + // API to highlight a specific button. The highlighted property works only on the down button. + if (upPressed || downPressed) + [cell startTrackingAt:pressPoint inView:d->backingStoreNSView]; + + [cell drawWithFrame:newRect inView:d->backingStoreNSView]; + + if (upPressed || downPressed) + [cell stopTracking:pressPoint at:pressPoint inView:d->backingStoreNSView mouseIsUp:NO]; + + d->restoreNSGraphicsContext(cg); + } + } + break; + case CC_ComboBox: + if (const auto *combo = qstyleoption_cast(opt)) { + const bool isEnabled = combo->state & State_Enabled; + const bool isPressed = combo->state & State_Sunken; + + const auto ct = cocoaControlType(combo); + const auto cs = d->effectiveAquaSizeConstrain(combo); + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + auto *cc = static_cast(d->cocoaControl(cw)); + cc.enabled = isEnabled; + QRectF frameRect = cw.adjustedControlFrame(combo->rect);; + if (cw.type == QMacStylePrivate::Button_PopupButton) { + // Non-editable QComboBox + auto *pb = static_cast(cc); + // FIXME Old offsets. Try to move to adjustedControlFrame() + if (cw.size == QStyleHelper::SizeSmall) { + frameRect = frameRect.translated(0, 1); + } else if (cw.size == QStyleHelper::SizeMini) { + // Same 0.5 pt misalignment as AppKit and fit the focus ring + frameRect = frameRect.translated(2, -0.5); + } + pb.frame = frameRect.toCGRect(); + [pb highlight:isPressed]; + d->drawNSViewInRect(pb, frameRect, p, ^(CGContextRef, const CGRect &r) { + QMacAutoReleasePool pool; + [pb.cell drawBezelWithFrame:r inView:pb.superview]; + }); + } else if (cw.type == QMacStylePrivate::ComboBox) { + // Editable QComboBox + auto *cb = static_cast(cc); + const auto frameRect = cw.adjustedControlFrame(combo->rect); + cb.frame = frameRect.toCGRect(); + + // This API was requested to Apple in rdar #36197888. We know it's safe to use up to macOS 10.13.3 + if (NSButtonCell *cell = static_cast([cc.cell qt_valueForPrivateKey:@"_buttonCell"])) { + cell.highlighted = isPressed; + } else { + // TODO Render to pixmap and darken the button manually + } + + d->drawNSViewInRect(cb, frameRect, p, ^(CGContextRef, const CGRect &r) { + // FIXME This is usually drawn in the control's superview, but we wouldn't get inactive look in this case + QMacAutoReleasePool pool; + [cb.cell drawWithFrame:r inView:cb]; + }); + } + } + break; + case CC_TitleBar: + if (const auto *titlebar = qstyleoption_cast(opt)) { + const bool isActive = (titlebar->state & State_Active) + && (titlebar->titleBarState & State_Active); + + p->fillRect(opt->rect, Qt::transparent); + p->setRenderHint(QPainter::Antialiasing); + p->setClipRect(opt->rect, Qt::IntersectClip); + + // FIXME A single drawPath() with 0-sized pen + // doesn't look as good as this double fillPath(). + const auto outerFrameRect = QRectF(opt->rect.adjusted(0, 0, 0, opt->rect.height())); + QPainterPath outerFramePath = d->windowPanelPath(outerFrameRect); + p->fillPath(outerFramePath, opt->palette.dark()); + + const auto frameAdjust = 1.0 / p->device()->devicePixelRatioF(); + const auto innerFrameRect = outerFrameRect.adjusted(frameAdjust, frameAdjust, -frameAdjust, 0); + QPainterPath innerFramePath = d->windowPanelPath(innerFrameRect); + if (isActive) { + QLinearGradient g; + g.setStart(QPointF(0, 0)); + g.setFinalStop(QPointF(0, 2 * opt->rect.height())); + g.setColorAt(0, opt->palette.button().color()); + g.setColorAt(1, opt->palette.dark().color()); + p->fillPath(innerFramePath, g); + } else { + p->fillPath(innerFramePath, opt->palette.button()); + } + + if (titlebar->subControls & (SC_TitleBarCloseButton + | SC_TitleBarMaxButton + | SC_TitleBarMinButton + | SC_TitleBarNormalButton)) { + const bool isHovered = (titlebar->state & State_MouseOver); + static const SubControl buttons[] = { + SC_TitleBarCloseButton, SC_TitleBarMinButton, SC_TitleBarMaxButton + }; + for (const auto sc : buttons) { + const auto ct = d->windowButtonCocoaControl(sc); + const auto cw = QMacStylePrivate::CocoaControl(ct, QStyleHelper::SizeLarge); + auto *wb = static_cast(d->cocoaControl(cw)); + wb.enabled = (sc & titlebar->subControls) && isActive; + [wb highlight:(titlebar->state & State_Sunken) && (sc & titlebar->activeSubControls)]; + Q_UNUSED(isHovered); // FIXME No public API for this + + const auto buttonRect = proxy()->subControlRect(CC_TitleBar, titlebar, sc); + d->drawNSViewInRect(wb, buttonRect, p, ^(CGContextRef, const CGRect &rect) { + QMacAutoReleasePool pool; + auto *wbCell = static_cast(wb.cell); + [wbCell drawWithFrame:rect inView:wb]; + }); + } + } + + if (titlebar->subControls & SC_TitleBarLabel) { + const auto tr = proxy()->subControlRect(CC_TitleBar, titlebar, SC_TitleBarLabel); + if (!titlebar->icon.isNull()) { + const auto iconExtent = proxy()->pixelMetric(PM_SmallIconSize); + const auto iconSize = QSize(iconExtent, iconExtent); + const auto iconPos = tr.x() - titlebar->icon.actualSize(iconSize).width() - qRound(titleBarIconTitleSpacing); + // Only render the icon if it'll be fully visible + if (iconPos < tr.right() - titleBarIconTitleSpacing) + p->drawPixmap(iconPos, tr.y(), titlebar->icon.pixmap(opt->window, iconSize, QIcon::Normal)); + } + + if (!titlebar->text.isEmpty()) + drawItemText(p, tr, Qt::AlignCenter, opt->palette, isActive, titlebar->text, QPalette::Text); + } + } + break; + case CC_GroupBox: + if (const QStyleOptionGroupBox *gb + = qstyleoption_cast(opt)) { + + QStyleOptionGroupBox groupBox(*gb); + const bool flat = groupBox.features & QStyleOptionFrame::Flat; + if (!flat) + groupBox.state |= QStyle::State_Mini; // Force mini-sized checkbox to go with small-sized label + else + groupBox.subControls = groupBox.subControls & ~SC_GroupBoxFrame; // We don't like frames and ugly lines + +// const bool didSetFont = widget && widget->testAttribute(Qt::WA_SetFont); +// const bool didModifySubControls = !didSetFont && QApplication::desktopSettingsAware(); +// if (didModifySubControls) +// groupBox.subControls = groupBox.subControls & ~SC_GroupBoxLabel; + QCommonStyle::drawComplexControl(cc, &groupBox, p); +// if (didModifySubControls) { +// const QRect rect = proxy()->subControlRect(CC_GroupBox, &groupBox, SC_GroupBoxLabel); +// const bool rtl = groupBox.direction == Qt::RightToLeft; +// const int alignment = Qt::TextHideMnemonic | (rtl ? Qt::AlignRight : Qt::AlignLeft); +// const QFont savedFont = p->font(); +// if (!flat) +// p->setFont(d->smallSystemFont); +// proxy()->drawItemText(p, rect, alignment, groupBox.palette, groupBox.state & State_Enabled, groupBox.text, QPalette::WindowText); +// if (!flat) +// p->setFont(savedFont); +// } + } + break; + case CC_ToolButton: + if (const QStyleOptionToolButton *tb + = qstyleoption_cast(opt)) { +#ifndef QT_NO_ACCESSIBILITY + if (QStyleHelper::hasAncestor(opt->styleObject, QAccessible::ToolBar)) { + if (tb->subControls & SC_ToolButtonMenu) { + QStyleOption arrowOpt = *tb; + arrowOpt.rect = proxy()->subControlRect(cc, tb, SC_ToolButtonMenu); + arrowOpt.rect.setY(arrowOpt.rect.y() + arrowOpt.rect.height() / 2); + arrowOpt.rect.setHeight(arrowOpt.rect.height() / 2); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &arrowOpt, p); + } else if ((tb->features & QStyleOptionToolButton::HasMenu) + && (tb->toolButtonStyle != Qt::ToolButtonTextOnly && !tb->icon.isNull())) { + d->drawToolbarButtonArrow(tb, p); + } + if (tb->state & State_On) { + NSView *view = reinterpret_cast(opt->window->winId()); + bool isKey = false; + if (view) + isKey = [view.window isKeyWindow]; + + QBrush brush(brushForToolButton(isKey)); + QPainterPath path; + path.addRoundedRect(QRectF(tb->rect.x(), tb->rect.y(), tb->rect.width(), tb->rect.height() + 4), 4, 4); + p->setRenderHint(QPainter::Antialiasing); + p->fillPath(path, brush); + } + proxy()->drawControl(CE_ToolButtonLabel, opt, p); + } else +#endif // QT_NO_ACCESSIBILITY + { + auto bflags = tb->state; + if (tb->subControls & SC_ToolButton) + bflags |= State_Sunken; + auto mflags = tb->state; + if (tb->subControls & SC_ToolButtonMenu) + mflags |= State_Sunken; + + if (tb->subControls & SC_ToolButton) { + if (bflags & (State_Sunken | State_On | State_Raised)) { + const bool isEnabled = tb->state & State_Enabled; + const bool isPressed = tb->state & State_Sunken; + const bool isHighlighted = (tb->state & State_Active) && (tb->state & State_On); + const auto ct = QMacStylePrivate::Button_PushButton; + const auto cs = d->effectiveAquaSizeConstrain(opt); + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + auto *pb = static_cast(d->cocoaControl(cw)); + pb.bezelStyle = NSShadowlessSquareBezelStyle; // TODO Use NSTexturedRoundedBezelStyle in the future. + pb.frame = opt->rect.toCGRect(); + pb.buttonType = NSPushOnPushOffButton; + pb.enabled = isEnabled; + [pb highlight:isPressed]; + pb.state = isHighlighted && !isPressed ? NSOnState : NSOffState; + const auto buttonRect = proxy()->subControlRect(cc, tb, SC_ToolButton); + d->drawNSViewInRect(pb, buttonRect, p, ^(CGContextRef, const CGRect &rect) { + QMacAutoReleasePool pool; + [pb.cell drawBezelWithFrame:rect inView:pb]; + }); + } + } + + if (tb->subControls & SC_ToolButtonMenu) { + const auto menuRect = proxy()->subControlRect(cc, tb, SC_ToolButtonMenu); + QStyleOption arrowOpt = *tb; + arrowOpt.rect = QRect(menuRect.x() + ((menuRect.width() - toolButtonArrowSize) / 2), + menuRect.height() - (toolButtonArrowSize + toolButtonArrowMargin), + toolButtonArrowSize, + toolButtonArrowSize); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &arrowOpt, p); + } else if (tb->features & QStyleOptionToolButton::HasMenu) { + d->drawToolbarButtonArrow(tb, p); + } + QRect buttonRect = proxy()->subControlRect(CC_ToolButton, tb, SC_ToolButton); + int fw = proxy()->pixelMetric(PM_DefaultFrameWidth, opt); + QStyleOptionToolButton label = *tb; + label.rect = buttonRect.adjusted(fw, fw, -fw, -fw); + proxy()->drawControl(CE_ToolButtonLabel, &label, p); + } + } + break; + case CC_Dial: + if (const QStyleOptionSlider *dial = qstyleoption_cast(opt)) + QStyleHelper::drawDial(dial, p); + break; + default: + QCommonStyle::drawComplexControl(cc, opt, p); + break; + } +} + +QStyle::SubControl QMacStyle::hitTestComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, const QPoint &pt) const +{ + Q_D(const QMacStyle); + + SubControl sc = QStyle::SC_None; + + switch (cc) { + case CC_ComboBox: + if (const QStyleOptionComboBox *cmb = qstyleoption_cast(opt)) { + sc = QCommonStyle::hitTestComplexControl(cc, cmb, pt); + if (!cmb->editable && sc != QStyle::SC_None) + sc = SC_ComboBoxArrow; // A bit of a lie, but what we want + } + break; + case CC_Slider: + if (const QStyleOptionSlider *sl = qstyleoption_cast(opt)) { + if (!sl->rect.contains(pt)) + break; + + const bool hasTicks = sl->tickPosition != QStyleOptionSlider::NoTicks; + const bool isHorizontal = sl->orientation == Qt::Horizontal; + const auto ct = isHorizontal ? QMacStylePrivate::Slider_Horizontal : QMacStylePrivate::Slider_Vertical; + const auto cs = d->effectiveAquaSizeConstrain(opt); + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + auto *slider = static_cast(d->cocoaControl(cw)); + if (!setupSlider(slider, sl)) + break; + + NSSliderCell *cell = slider.cell; + const auto barRect = QRectF::fromCGRect([cell barRectFlipped:slider.isFlipped]); + const auto knobRect = QRectF::fromCGRect([cell knobRectFlipped:slider.isFlipped]); + if (knobRect.contains(pt)) { + sc = SC_SliderHandle; + } else if (barRect.contains(pt)) { + sc = SC_SliderGroove; + } else if (hasTicks) { + sc = SC_SliderTickmarks; + } + } + break; + case CC_ScrollBar: + if (const QStyleOptionSlider *sb = qstyleoption_cast(opt)) { + if (!sb->rect.contains(pt)) { + sc = SC_None; + break; + } + + const bool isHorizontal = sb->orientation == Qt::Horizontal; + const auto ct = isHorizontal ? QMacStylePrivate::Scroller_Horizontal : QMacStylePrivate::Scroller_Vertical; + const auto cs = d->effectiveAquaSizeConstrain(opt); + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + auto *scroller = static_cast(d->cocoaControl(cw)); + if (!setupScroller(scroller, sb)) { + sc = SC_None; + break; + } + + // Since -[NSScroller testPart:] doesn't want to cooperate, we do it the + // straightforward way. In any case, macOS doesn't return line-sized changes + // with NSScroller since 10.7, according to the aforementioned method's doc. + const auto knobRect = QRectF::fromCGRect([scroller rectForPart:NSScrollerKnob]); + if (isHorizontal) { + const bool isReverse = sb->direction == Qt::RightToLeft; + if (pt.x() < knobRect.left()) + sc = isReverse ? SC_ScrollBarAddPage : SC_ScrollBarSubPage; + else if (pt.x() > knobRect.right()) + sc = isReverse ? SC_ScrollBarSubPage : SC_ScrollBarAddPage; + else + sc = SC_ScrollBarSlider; + } else { + if (pt.y() < knobRect.top()) + sc = SC_ScrollBarSubPage; + else if (pt.y() > knobRect.bottom()) + sc = SC_ScrollBarAddPage; + else + sc = SC_ScrollBarSlider; + } + } + break; + default: + sc = QCommonStyle::hitTestComplexControl(cc, opt, pt); + break; + } + return sc; +} + +QRect QMacStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc) const +{ + Q_D(const QMacStyle); + + QRect ret; + + switch (cc) { + case CC_ScrollBar: + if (const QStyleOptionSlider *sb = qstyleoption_cast(opt)) { + const bool isHorizontal = sb->orientation == Qt::Horizontal; + const bool isReverseHorizontal = isHorizontal && (sb->direction == Qt::RightToLeft); + + NSScrollerPart part = NSScrollerNoPart; + if (sc == SC_ScrollBarSlider) { + part = NSScrollerKnob; + } else if (sc == SC_ScrollBarGroove) { + part = NSScrollerKnobSlot; + } else if (sc == SC_ScrollBarSubPage || sc == SC_ScrollBarAddPage) { + if ((!isReverseHorizontal && sc == SC_ScrollBarSubPage) + || (isReverseHorizontal && sc == SC_ScrollBarAddPage)) + part = NSScrollerDecrementPage; + else + part = NSScrollerIncrementPage; + } + // And nothing else since 10.7 + + if (part != NSScrollerNoPart) { + const auto ct = isHorizontal ? QMacStylePrivate::Scroller_Horizontal : QMacStylePrivate::Scroller_Vertical; + const auto cs = d->effectiveAquaSizeConstrain(opt); + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + auto *scroller = static_cast(d->cocoaControl(cw)); + if (setupScroller(scroller, sb)) + ret = QRectF::fromCGRect([scroller rectForPart:part]).toRect(); + } + } + break; + case CC_Slider: + if (const QStyleOptionSlider *sl = qstyleoption_cast(opt)) { + const bool hasTicks = sl->tickPosition != QStyleOptionSlider::NoTicks; + const bool isHorizontal = sl->orientation == Qt::Horizontal; + const auto ct = isHorizontal ? QMacStylePrivate::Slider_Horizontal : QMacStylePrivate::Slider_Vertical; + const auto cs = d->effectiveAquaSizeConstrain(opt); + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + auto *slider = static_cast(d->cocoaControl(cw)); + if (!setupSlider(slider, sl)) + break; + + NSSliderCell *cell = slider.cell; + if (sc == SC_SliderHandle) { + ret = QRectF::fromCGRect([cell knobRectFlipped:slider.isFlipped]).toRect(); + } else if (sc == SC_SliderGroove) { + ret = QRectF::fromCGRect([cell barRectFlipped:slider.isFlipped]).toRect(); + } else if (hasTicks && sc == SC_SliderTickmarks) { + const auto tickMarkRect = QRectF::fromCGRect([cell rectOfTickMarkAtIndex:0]); + if (isHorizontal) + ret = QRect(sl->rect.left(), tickMarkRect.top(), sl->rect.width(), tickMarkRect.height()); + else + ret = QRect(tickMarkRect.left(), sl->rect.top(), tickMarkRect.width(), sl->rect.height()); + } + +// if (sl->upsideDown) { +// if isHorizontal) { +// } else { +// } +// } + } + break; + case CC_TitleBar: + if (const auto *titlebar = qstyleoption_cast(opt)) { + // The title bar layout is as follows: close, min, zoom, icon, title + // [ x _ + @ Window Title ] + // Center the icon and title until it starts to overlap with the buttons. + // The icon doesn't count towards SC_TitleBarLabel, but it's still rendered + // next to the title text. See drawComplexControl(). + if (sc == SC_TitleBarLabel) { + qreal labelWidth = titlebar->fontMetrics.horizontalAdvance(titlebar->text) + 1; // FIXME Rounding error? + qreal labelHeight = titlebar->fontMetrics.height(); + + const auto lastButtonRect = proxy()->subControlRect(CC_TitleBar, titlebar, SC_TitleBarMaxButton); + qreal controlsSpacing = lastButtonRect.right() + titleBarButtonSpacing; + if (!titlebar->icon.isNull()) { + const auto iconSize = proxy()->pixelMetric(PM_SmallIconSize); + const auto actualIconSize = titlebar->icon.actualSize(QSize(iconSize, iconSize)).width();; + controlsSpacing += actualIconSize + titleBarIconTitleSpacing; + } + + const qreal labelPos = qMax(controlsSpacing, (opt->rect.width() - labelWidth) / 2.0); + labelWidth = qMin(labelWidth, opt->rect.width() - (labelPos + titleBarTitleRightMargin)); + ret = QRect(labelPos, (opt->rect.height() - labelHeight) / 2, + labelWidth, labelHeight); + } else { + const auto currentButton = d->windowButtonCocoaControl(sc); + if (currentButton == QMacStylePrivate::NoControl) + break; + + QPointF buttonPos = titlebar->rect.topLeft() + QPointF(titleBarButtonSpacing, 0); + QSizeF buttonSize; + for (int ct = QMacStylePrivate::Button_WindowClose; ct <= currentButton; ct++) { + const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::CocoaControlType(ct), + QStyleHelper::SizeLarge); + auto *wb = static_cast(d->cocoaControl(cw)); + if (ct == currentButton) + buttonSize = QSizeF::fromCGSize(wb.frame.size); + else + buttonPos.rx() += wb.frame.size.width + titleBarButtonSpacing; + } + + const auto vOffset = (opt->rect.height() - buttonSize.height()) / 2.0; + ret = QRectF(buttonPos, buttonSize).translated(0, vOffset).toRect(); + } + } + break; + case CC_ComboBox: + if (const QStyleOptionComboBox *combo = qstyleoption_cast(opt)) { + const auto ct = cocoaControlType(combo); + const auto cs = d->effectiveAquaSizeConstrain(combo); + const auto cw = QMacStylePrivate::CocoaControl(ct, cs); + + // Old widget path. Current not understood why it's needed: + //const auto editRect = QMacStylePrivate::comboboxEditBounds(cw.adjustedControlFrame(combo->rect), cw); + + // New path: + QRectF editRect; + switch (cs) { + case QStyleHelper::SizeLarge: + editRect = combo->rect.adjusted(15, 7, -25, -9); + break; + case QStyleHelper::SizeSmall: + if (combo->editable) + editRect = combo->rect.adjusted(15, 6, -22, -9); + else + editRect = combo->rect.adjusted(15, 8, -22, -6); + break; + default: + if (combo->editable) + editRect = combo->rect.adjusted(15, 6, -20, -7); + else + editRect = combo->rect.adjusted(15, 5, -22, -6); + break; + } + + switch (sc) { + case SC_ComboBoxEditField:{ + ret = editRect.toAlignedRect(); + break; } + case SC_ComboBoxArrow:{ + ret = editRect.toAlignedRect(); + ret.setX(ret.x() + ret.width()); + ret.setWidth(combo->rect.right() - ret.right()); + break; } + case SC_ComboBoxListBoxPopup:{ + if (combo->editable) { + const CGRect inner = QMacStylePrivate::comboboxInnerBounds(combo->rect.toCGRect(), cw); + const int comboTop = combo->rect.top(); + ret = QRect(qRound(inner.origin.x), + comboTop, + qRound(inner.origin.x - combo->rect.left() + inner.size.width), + editRect.bottom() - comboTop + 2); + } else { + ret = QRect(combo->rect.x() + 4 - 11, + combo->rect.y() + 1, + editRect.width() + 10 + 11, + 1); + } + break; } + default: + break; + } + } + break; + case CC_GroupBox: + if (const QStyleOptionGroupBox *groupBox = qstyleoption_cast(opt)) { + bool checkable = groupBox->subControls & SC_GroupBoxCheckBox; + const bool flat = groupBox->features & QStyleOptionFrame::Flat; + bool hasNoText = !checkable && groupBox->text.isEmpty(); + switch (sc) { + case SC_GroupBoxLabel: + case SC_GroupBoxCheckBox: { + // Cheat and use the smaller font if we need to + const bool checkable = groupBox->subControls & SC_GroupBoxCheckBox; + const bool fontIsSet = false; +// const bool fontIsSet = (widget && widget->testAttribute(Qt::WA_SetFont)) +// || !QApplication::desktopSettingsAware(); + const int margin = flat || hasNoText ? 0 : 9; + ret = groupBox->rect.adjusted(margin, 0, -margin, 0); + + const QFontMetricsF fm = flat || fontIsSet ? QFontMetricsF(groupBox->fontMetrics) : QFontMetricsF(d->smallSystemFont); + const QSizeF s = fm.size(Qt::AlignHCenter | Qt::AlignVCenter, qt_mac_removeMnemonics(groupBox->text), 0, nullptr); + const int tw = qCeil(s.width()); + const int h = qCeil(fm.height()); + ret.setHeight(h); + + QRect labelRect = alignedRect(groupBox->direction, groupBox->textAlignment, + QSize(tw, h), ret); + if (flat && checkable) + labelRect.moveLeft(labelRect.left() + 4); + int indicatorWidth = proxy()->pixelMetric(PM_IndicatorWidth, opt); + bool rtl = groupBox->direction == Qt::RightToLeft; + if (sc == SC_GroupBoxLabel) { + if (checkable) { + int newSum = indicatorWidth + 1; + int newLeft = labelRect.left() + (rtl ? -newSum : newSum); + labelRect.moveLeft(newLeft); + if (flat) + labelRect.moveTop(labelRect.top() + 3); + else + labelRect.moveTop(labelRect.top() + 4); + } else if (flat) { + int newLeft = labelRect.left() - (rtl ? 3 : -3); + labelRect.moveLeft(newLeft); + labelRect.moveTop(labelRect.top() + 3); + } else { + int newLeft = labelRect.left() - (rtl ? 3 : 2); + labelRect.moveLeft(newLeft); + labelRect.moveTop(labelRect.top() + 4); + } + ret = labelRect; + } + + if (sc == SC_GroupBoxCheckBox) { + int left = rtl ? labelRect.right() - indicatorWidth : labelRect.left() - 1; + int top = flat ? ret.top() + 1 : ret.top() + 5; + ret.setRect(left, top, + indicatorWidth, proxy()->pixelMetric(PM_IndicatorHeight, opt)); + } + break; + } + case SC_GroupBoxContents: + case SC_GroupBoxFrame: { + QFontMetrics fm = groupBox->fontMetrics; + int yOffset = 3; + if (!flat) + yOffset = 5; + + if (hasNoText) + yOffset = -qCeil(QFontMetricsF(fm).height()); + ret = opt->rect.adjusted(0, qCeil(QFontMetricsF(fm).height()) + yOffset, 0, 0); + if (sc == SC_GroupBoxContents) { + if (flat) + ret.adjust(3, -5, -3, -4); // guess too + else + ret.adjust(3, 3, -3, -4); // guess + } + } + break; + default: + ret = QCommonStyle::subControlRect(cc, groupBox, sc); + break; + } + } + break; + case CC_SpinBox: + if (const QStyleOptionSpinBox *spin = qstyleoption_cast(opt)) { + QStyleHelper::WidgetSizePolicy aquaSize = d->effectiveAquaSizeConstrain(spin); + const auto fw = proxy()->pixelMetric(PM_SpinBoxFrameWidth, spin); + int spinner_w; + int spinner_h; + int adjust_y; + int spinBoxSep; + switch (aquaSize) { + case QStyleHelper::SizeLarge: + spinner_w = 14; + spinner_h = 24; + adjust_y = -1; + spinBoxSep = 2; + break; + case QStyleHelper::SizeSmall: + spinner_w = 12; + spinner_h = 20; + adjust_y = -1; + spinBoxSep = 2; + break; + case QStyleHelper::SizeMini: + spinner_w = 10; + spinner_h = 16; + adjust_y = -1; + spinBoxSep = 1; + break; + default: + Q_UNREACHABLE(); + } + + switch (sc) { + case SC_SpinBoxUp: + case SC_SpinBoxDown: { + if (spin->buttonSymbols == QStyleOptionSpinBox::NoButtons) + break; + + const int y = fw; + const int x = spin->rect.width() - spinner_w; + ret.setRect(x + spin->rect.x(), y + spin->rect.y(), spinner_w, spinner_h); + + const auto cw = QMacStylePrivate::CocoaControl(QMacStylePrivate::Stepper, aquaSize); + NSStepperCell *cell = static_cast(d->cocoaCell(cw)); + const CGRect outRect = [cell drawingRectForBounds:ret.toCGRect()]; + ret = QRectF::fromCGRect(outRect).toRect(); + + switch (sc) { + case SC_SpinBoxUp: + ret.setHeight(ret.height() / 2); + break; + case SC_SpinBoxDown: + ret.setY(ret.y() + ret.height() / 2); + break; + default: + Q_ASSERT(0); + break; + } + // The buttons are drawn with a top-margin (for some reason) into + // the rect. So undo that margin here: + ret.translate(0, adjust_y); + ret = visualRect(spin->direction, spin->rect, ret); + break; + } + case SC_SpinBoxEditField: + ret = spin->rect.adjusted(fw, fw, -fw, -fw); + if (spin->subControls & SC_SpinBoxUp || spin->subControls & SC_SpinBoxDown) { + ret.setWidth(spin->rect.width() - spinBoxSep - spinner_w); + ret = visualRect(spin->direction, spin->rect, ret); + } + break; + default: + ret = QCommonStyle::subControlRect(cc, spin, sc); + break; + } + } + break; + case CC_ToolButton: + ret = QCommonStyle::subControlRect(cc, opt, sc); + if (sc == SC_ToolButtonMenu) { +#ifndef QT_NO_ACCESSIBILITY + if (QStyleHelper::hasAncestor(opt->styleObject, QAccessible::ToolBar)) + ret.adjust(-toolButtonArrowMargin, 0, 0, 0); +#endif + ret.adjust(-1, 0, 0, 0); + } + break; + default: + ret = QCommonStyle::subControlRect(cc, opt, sc); + break; + } + return ret; +} + +QSize QMacStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, const QSize &csz) const +{ + Q_D(const QMacStyle); + + QSize sz(csz); + bool useAquaGuideline = true; + + switch (ct) { + case CT_SpinBox: + if (const QStyleOptionSpinBox *vopt = qstyleoption_cast(opt)) { + if (vopt->subControls == SC_SpinBoxFrame) { + const QSize minimumSize(20, 24); + if (sz.width() < minimumSize.width()) + sz.setWidth(minimumSize.width()); + if (sz.height() < minimumSize.height()) + sz.setHeight(minimumSize.height()); + } else { + const QSize buttonSize = proxy()->subControlRect(CC_SpinBox, vopt, SC_SpinBoxUp).size(); + const int upAndDownTogetherHeight = buttonSize.height() * 2; + sz += QSize(buttonSize.width(), upAndDownTogetherHeight); + } + } + break; + case QStyle::CT_TabWidget: + // the size between the pane and the "contentsRect" (+4,+4) + // (the "contentsRect" is on the inside of the pane) + sz = QCommonStyle::sizeFromContents(ct, opt, csz); + /** + This is supposed to show the relationship between the tabBar and + the stack widget of a QTabWidget. + Unfortunately ascii is not a good way of representing graphics..... + PS: The '=' line is the painted frame. + + top ---+ + | + | + | + | vvv just outside the painted frame is the "pane" + - -|- - - - - - - - - - <-+ + TAB BAR +=====^============ | +2 pixels + - - -|- - -|- - - - - - - <-+ + | | ^ ^^^ just inside the painted frame is the "contentsRect" + | | | + | overlap | + | | | + bottom ------+ <-+ +14 pixels + | + v + ------------------------------ <- top of stack widget + + + To summarize: + * 2 is the distance between the pane and the contentsRect + * The 14 and the 1's are the distance from the contentsRect to the stack widget. + (same value as used in SE_TabWidgetTabContents) + * overlap is how much the pane should overlap the tab bar + */ + // then add the size between the stackwidget and the "contentsRect" + if (const QStyleOptionTabWidgetFrame *twf + = qstyleoption_cast(opt)) { + QSize extra(0,0); + const int overlap = pixelMetric(PM_TabBarBaseOverlap, opt); + const int gapBetweenTabbarAndStackWidget = 2 + 14 - overlap; + + const auto tabDirection = QMacStylePrivate::tabDirection(twf->shape); + if (tabDirection == QMacStylePrivate::North + || tabDirection == QMacStylePrivate::South) { + extra = QSize(2, gapBetweenTabbarAndStackWidget + 1); + } else { + extra = QSize(gapBetweenTabbarAndStackWidget + 1, 2); + } + sz+= extra; + } + break; + case QStyle::CT_TabBarTab: + if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { +// const bool differentFont = (widget && widget->testAttribute(Qt::WA_SetFont)) +// || !QApplication::desktopSettingsAware(); + const bool differentFont = false; + const auto tabDirection = QMacStylePrivate::tabDirection(tab->shape); + const bool verticalTabs = tabDirection == QMacStylePrivate::East + || tabDirection == QMacStylePrivate::West; + if (verticalTabs) + sz = sz.transposed(); + + int defaultTabHeight; + const auto cs = d->effectiveAquaSizeConstrain(opt); + switch (cs) { + case QStyleHelper::SizeLarge: + if (tab->documentMode) + defaultTabHeight = 24; + else + defaultTabHeight = 21; + break; + case QStyleHelper::SizeSmall: + defaultTabHeight = 18; + break; + case QStyleHelper::SizeMini: + defaultTabHeight = 16; + break; + default: + break; + } + + const bool widthSet = !differentFont && tab->icon.isNull(); + if (widthSet) { + const auto textSize = opt->fontMetrics.size(Qt::TextShowMnemonic, tab->text); + sz.rwidth() = textSize.width(); + sz.rheight() = qMax(defaultTabHeight, textSize.height()); + } else { + sz.rheight() = qMax(defaultTabHeight, sz.height()); + } + sz.rwidth() += proxy()->pixelMetric(PM_TabBarTabHSpace, tab); + + if (verticalTabs) + sz = sz.transposed(); + + int maxWidgetHeight = qMax(tab->leftButtonSize.height(), tab->rightButtonSize.height()); + int maxWidgetWidth = qMax(tab->leftButtonSize.width(), tab->rightButtonSize.width()); + + int widgetWidth = 0; + int widgetHeight = 0; + int padding = 0; + if (tab->leftButtonSize.isValid()) { + padding += 8; + widgetWidth += tab->leftButtonSize.width(); + widgetHeight += tab->leftButtonSize.height(); + } + if (tab->rightButtonSize.isValid()) { + padding += 8; + widgetWidth += tab->rightButtonSize.width(); + widgetHeight += tab->rightButtonSize.height(); + } + + if (verticalTabs) { + sz.setWidth(qMax(sz.width(), maxWidgetWidth)); + sz.setHeight(sz.height() + widgetHeight + padding); + } else { + if (widthSet) + sz.setWidth(sz.width() + widgetWidth + padding); + sz.setHeight(qMax(sz.height(), maxWidgetHeight)); + } + } + break; + case CT_LineEdit: + if (const QStyleOptionFrame *f = qstyleoption_cast(opt)) { + if (sz.isEmpty()) { + // Minimum size (with padding: 18x24) + sz.rwidth() = 10; + sz.rheight() = 20; + } + // From using pixelTool with XCode/NSTextTextField + int leftPadding = 4; + int rightPadding = 4; + int topPadding = 4; + int bottomPadding = 0; + + if (opt->state & QStyle::State_Small) { + topPadding = 3; + } else if (opt->state & QStyle::State_Mini) { + topPadding = 2; + } + + sz.rwidth() += leftPadding + rightPadding; + sz.rheight() += topPadding + bottomPadding; + } + break; + case QStyle::CT_PushButton: { + if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) + if (btn->features & QStyleOptionButton::CommandLinkButton) + return QCommonStyle::sizeFromContents(ct, opt, sz); + + // By default, we fit the contents inside a normal rounded push button. + // Do this by add enough space around the contents so that rounded + // borders (including highlighting when active) will show. + // TODO Use QFocusFrame and get rid of these horrors. + QSize macsz; + const auto controlSize = d->effectiveAquaSizeConstrain(opt, CT_PushButton, sz, &macsz); + // FIXME See comment in CT_PushButton case in qt_aqua_get_known_size(). + if (macsz.width() != -1) + sz.setWidth(macsz.width()); + else + sz.rwidth() += QMacStylePrivate::PushButtonLeftOffset + QMacStylePrivate::PushButtonRightOffset + 12; + // All values as measured from HIThemeGetButtonBackgroundBounds() + if (controlSize != QStyleHelper::SizeMini) + sz.rwidth() += 12; // We like 12 over here. + if (controlSize == QStyleHelper::SizeLarge && sz.height() > 16) + sz.rheight() += pushButtonDefaultHeight[QStyleHelper::SizeLarge] - 16; + else if (controlSize == QStyleHelper::SizeMini) + sz.setHeight(24); // FIXME Our previous HITheme-based logic returned this. + else + sz.setHeight(pushButtonDefaultHeight[controlSize]); + break; + } + case QStyle::CT_MenuItem: + if (const QStyleOptionMenuItem *mi = qstyleoption_cast(opt)) { + int maxpmw = mi->maxIconWidth; + int w = sz.width(); + int h = sz.height(); + +//#if QT_CONFIG(combobox) +// const QComboBox *comboBox = qobject_cast(widget); +//#endif + + if (mi->menuItemType == QStyleOptionMenuItem::Separator) { + w = 10; + h = qt_mac_aqua_get_metric(MenuSeparatorHeight); + } else { + h = mi->fontMetrics.height() + 2; + if (!mi->icon.isNull()) { +//#if QT_CONFIG(combobox) +// if (comboBox) { +// const QSize &iconSize = comboBox->iconSize(); +// h = qMax(h, iconSize.height() + 4); +// maxpmw = qMax(maxpmw, iconSize.width()); +// } else +//#endif + { + int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); + h = qMax(h, mi->icon.actualSize(QSize(iconExtent, iconExtent)).height() + 4); + } + } + } + if (mi->text.contains(QLatin1Char('\t'))) + w += 12; + else if (mi->menuItemType == QStyleOptionMenuItem::SubMenu) + w += 35; // Not quite exactly as it seems to depend on other factors + if (maxpmw) + w += maxpmw + 6; + // add space for a check. All items have place for a check too. + w += 20; +// if (comboBox && comboBox->isVisible()) { +// QStyleOptionComboBox cmb; +// cmb.initFrom(comboBox); +// cmb.editable = false; +// cmb.subControls = QStyle::SC_ComboBoxEditField; +// cmb.activeSubControls = QStyle::SC_None; +// w = qMax(w, subControlRect(QStyle::CC_ComboBox, &cmb, +// QStyle::SC_ComboBoxEditField, +// comboBox).width()); +// } else { +// w += 12; + sz = QSize(w, h); + } break; + case CT_MenuBarItem: + if (!sz.isEmpty()) + sz += QSize(12, 4); // Constants from QWindowsStyle + break; + case CT_ToolButton: + sz.rwidth() += 10; + sz.rheight() += 10; + if (const auto *tb = qstyleoption_cast(opt)) + if (tb->features & QStyleOptionToolButton::Menu) + sz.rwidth() += toolButtonArrowMargin; + return sz; + case CT_ComboBox: + if (const auto *cb = qstyleoption_cast(opt)) { + const int controlSize = getControlSize(opt); + + if (!cb->editable) { + if (sz.width() < 10) { + // minimumSize (to ensure a nice nine patch image) + sz.rwidth() += 10; + } + // Same as CT_PushButton, because we have to fit the focus + // ring and a non-editable combo box is a NSPopUpButton. + sz.rwidth() += QMacStylePrivate::PushButtonLeftOffset + QMacStylePrivate::PushButtonRightOffset; + + if (controlSize == QStyleHelper::SizeLarge) { + sz.rwidth() += 30; + } else if (controlSize == QStyleHelper::SizeSmall) { + sz.rwidth() += 26; + } else { + sz.rwidth() += 21; + } + } else { + sz.rwidth() += 50; // FIXME Double check this + } + + // This should be enough to fit the focus ring + if (controlSize == QStyleHelper::SizeMini) + sz.setHeight(24); // FIXME Our previous HITheme-based logic returned this for CT_PushButton. + else + sz.setHeight(pushButtonDefaultHeight[controlSize]); + + return sz; + } + break; + case CT_Menu: { + if (proxy() == this) { + sz = csz; + } else { + QStyleHintReturnMask menuMask; + QStyleOption myOption = *opt; + myOption.rect.setSize(sz); + if (proxy()->styleHint(SH_Menu_Mask, &myOption, &menuMask)) + sz = menuMask.region.boundingRect().size(); + } + break; } + case CT_HeaderSection:{ + const QStyleOptionHeader *header = qstyleoption_cast(opt); + sz = QCommonStyle::sizeFromContents(ct, opt, csz); + if (header->text.contains(QLatin1Char('\n'))) + useAquaGuideline = false; + break; } + case CT_ScrollBar : + // Make sure that the scroll bar is large enough to display the thumb indicator. + if (const QStyleOptionSlider *slider = qstyleoption_cast(opt)) { + const int minimumWidth = 24; + const int absoluteHeight = 14; + if (slider->orientation == Qt::Horizontal) { + sz = sz.expandedTo(QSize(minimumWidth, sz.height())); + sz.setHeight(absoluteHeight); + } else { + sz = sz.expandedTo(QSize(sz.width(), minimumWidth)); + sz.setWidth(absoluteHeight); + } + } + break; + case CT_ItemViewItem: + if (const QStyleOptionViewItem *vopt = qstyleoption_cast(opt)) { + sz = QCommonStyle::sizeFromContents(ct, vopt, csz); + sz.setHeight(sz.height() + 2); + } + break; + default: + sz = QCommonStyle::sizeFromContents(ct, opt, csz); + } + + if (useAquaGuideline && ct != CT_PushButton) { + // TODO Probably going away at some point + QSize macsz; + if (d->aquaSizeConstrain(opt, ct, sz, &macsz) != QStyleHelper::SizeDefault) { + if (macsz.width() != -1) + sz.setWidth(macsz.width()); + if (macsz.height() != -1) + sz.setHeight(macsz.height()); + } + } + + // The sizes that Carbon and the guidelines gives us excludes the focus frame. + // We compensate for this by adding some extra space here to make room for the frame when drawing: + if (const QStyleOptionComboBox *combo = qstyleoption_cast(opt)){ + if (combo->editable) { + const auto widgetSize = d->aquaSizeConstrain(opt); + QMacStylePrivate::CocoaControl cw; + cw.type = combo->editable ? QMacStylePrivate::ComboBox : QMacStylePrivate::Button_PopupButton; + cw.size = widgetSize; + const CGRect diffRect = QMacStylePrivate::comboboxInnerBounds(CGRectZero, cw); + sz.rwidth() -= qRound(diffRect.size.width); + sz.rheight() -= qRound(diffRect.size.height); + } + } + return sz; +} + +QFont QMacStyle::font(QStyle::ControlElement element, const QStyle::State state) const +{ + QFont font = QCommonStyle::font(element, state); + + if (state & QStyle::State_Small) { + font.setPixelSize(11); + } else if (state & QStyle::State_Mini) { + font.setPixelSize(9); + } + + return font; +} + +QMargins QMacStyle::ninePatchMargins(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, const QSize &imageSize) const +{ + QMargins margins; + + switch (cc) { + case CC_ComboBox: { + const QRect arrow = subControlRect(CC_ComboBox, opt, SC_ComboBoxArrow); + margins = QMargins(10, 0, arrow.width() + 1, -1); + break; } + default: + margins = QCommonStyle::ninePatchMargins(cc, opt, imageSize); + break; + } + + return margins; +} + +void QMacStyle::drawItemText(QPainter *p, const QRect &r, int flags, const QPalette &pal, + bool enabled, const QString &text, QPalette::ColorRole textRole) const +{ + if(flags & Qt::TextShowMnemonic) + flags |= Qt::TextHideMnemonic; + QCommonStyle::drawItemText(p, r, flags, pal, enabled, text, textRole); +} + +QIcon QMacStyle::standardIcon(StandardPixmap standardIcon, const QStyleOption *opt) const +{ + switch (standardIcon) { + default: + return QCommonStyle::standardIcon(standardIcon, opt); + case SP_ToolBarHorizontalExtensionButton: + case SP_ToolBarVerticalExtensionButton: { + QPixmap pixmap(QLatin1String(":/qt-project.org/styles/macstyle/images/toolbar-ext.png")); + if (standardIcon == SP_ToolBarVerticalExtensionButton) { + QPixmap pix2(pixmap.height(), pixmap.width()); + pix2.setDevicePixelRatio(pixmap.devicePixelRatio()); + pix2.fill(Qt::transparent); + QPainter p(&pix2); + p.translate(pix2.width(), 0); + p.rotate(90); + p.drawPixmap(0, 0, pixmap); + return pix2; + } + return pixmap; + } + } +} + +} // QQC2_NAMESPACE + +QT_END_NAMESPACE diff --git a/src/quicknativestyle/qstyle/mac/qquickmacstyle_mac_p.h b/src/quicknativestyle/qstyle/mac/qquickmacstyle_mac_p.h new file mode 100644 index 00000000..b9e1c5f3 --- /dev/null +++ b/src/quicknativestyle/qstyle/mac/qquickmacstyle_mac_p.h @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QMACSTYLE_MAC_P_H +#define QMACSTYLE_MAC_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 "qquickcommonstyle.h" + +#define QQC2_NAMESPACE QQC2 + +QT_BEGIN_NAMESPACE + +class QPalette; + +namespace QQC2_NAMESPACE { + +class QStyleOptionButton; +class QMacStylePrivate; + +class QMacStyle : public QCommonStyle +{ + Q_OBJECT +public: + QMacStyle(); + ~QMacStyle(); + + void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p) const override; + void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p) const override; + void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p) const override; + + QRect subElementRect(SubElement r, const QStyleOption *opt) const override; + QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc) const override; + SubControl hitTestComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, const QPoint &pt) const override; + + QSize sizeFromContents(ContentsType ct, const QStyleOption *opt, const QSize &contentsSize) const override; + QFont font(ControlElement element, const QStyle::State state) const override; + QMargins ninePatchMargins(ComplexControl cc, const QStyleOptionComplex *opt, const QSize &imageSize) const override; + + int pixelMetric(PixelMetric pm, const QStyleOption *opt = 0) const override; + int styleHint(StyleHint sh, const QStyleOption *opt = 0, QStyleHintReturn *shret = 0) const override; + + QPixmap standardPixmap(StandardPixmap sp, const QStyleOption *opt) const override; + QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const override; + + void drawItemText(QPainter *p, const QRect &r, int flags, const QPalette &pal, + bool enabled, const QString &text, + QPalette::ColorRole textRole = QPalette::NoRole) const override; + + QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *opt = 0) const override; + +private: + Q_DISABLE_COPY_MOVE(QMacStyle) + Q_DECLARE_PRIVATE(QMacStyle) +}; + +} // QQC2_NAMESPACE + +QT_END_NAMESPACE + +#endif // QMACSTYLE_MAC_P_H diff --git a/src/quicknativestyle/qstyle/mac/qquickmacstyle_mac_p_p.h b/src/quicknativestyle/qstyle/mac/qquickmacstyle_mac_p_p.h new file mode 100644 index 00000000..a0c67bfb --- /dev/null +++ b/src/quicknativestyle/qstyle/mac/qquickmacstyle_mac_p_p.h @@ -0,0 +1,230 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#ifndef QMACSTYLE_MAC_P_P_H +#define QMACSTYLE_MAC_P_P_H + +#include "qquickmacstyle_mac_p.h" +#include "qquickcommonstyle_p.h" +#include "qquickstylehelper_p.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +#include +#include + +// +// 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. +// + +Q_FORWARD_DECLARE_MUTABLE_CG_TYPE(CGContext); + +Q_FORWARD_DECLARE_OBJC_CLASS(NSView); +Q_FORWARD_DECLARE_OBJC_CLASS(NSCell); + +QT_BEGIN_NAMESPACE + +namespace QQC2 { + +/* + AHIG: + macOS Human Interface Guidelines + https://developer.apple.com/macos/human-interface-guidelines/overview/themes/ + + Builder: + Interface Builder in Xcode 8 or later +*/ + +// this works as long as we have at most 16 different control types +#define CT1(c) CT2(c, c) +#define CT2(c1, c2) ((uint(c1) << 16) | uint(c2)) + +#define SIZE(large, small, mini) \ + (controlSize == QStyleHelper::SizeLarge ? (large) : controlSize == QStyleHelper::SizeSmall ? (small) : (mini)) + +// same as return SIZE(...) but optimized +#define return_SIZE(large, small, mini) \ + do { \ + static const int sizes[] = { (large), (small), (mini) }; \ + return sizes[controlSize]; \ + } while (false) + +class QMacStylePrivate : public QCommonStylePrivate +{ + Q_DECLARE_PUBLIC(QMacStyle) + +public: + enum Direction { + North, South, East, West + }; + + enum CocoaControlType { + NoControl, // For when there's no such a control in Cocoa + Box, // QGroupBox + Box_Dark, // FIXME See render code in drawPrimitive(PE_FrameTabWidget) + Button_CheckBox, + Button_Disclosure, // Disclosure triangle, like in QTreeView + Button_PopupButton, // Non-editable QComboBox + Button_PullDown, // QPushButton with menu + Button_PushButton, // Plain QPushButton and QTabBar buttons + Button_RadioButton, + Button_SquareButton, // Oversized QPushButton + Button_WindowClose, + Button_WindowMiniaturize, + Button_WindowZoom, + ComboBox, // Editable QComboBox + ProgressIndicator_Determinate, + ProgressIndicator_Indeterminate, + Scroller_Horizontal, + Scroller_Vertical, + SegmentedControl_First, // QTabBar buttons focus ring + SegmentedControl_Middle, + SegmentedControl_Last, + SegmentedControl_Single, + Slider_Horizontal, + Slider_Vertical, + SplitView_Horizontal, + SplitView_Vertical, + Stepper, // QSpinBox buttons + TextField + }; + + struct CocoaControl { + CocoaControl(); + CocoaControl(CocoaControlType t, QStyleHelper::WidgetSizePolicy s); + + CocoaControlType type; + QStyleHelper::WidgetSizePolicy size; + + bool operator==(const CocoaControl &other) const; + + QSizeF defaultFrameSize() const; + QRectF adjustedControlFrame(const QRectF &rect) const; + QMarginsF titleMargins() const; + + bool getCocoaButtonTypeAndBezelStyle(NSButtonType *buttonType, NSBezelStyle *bezelStyle) const; + }; + + typedef void (^DrawRectBlock)(CGContextRef, const CGRect &); + + QMacStylePrivate(); + ~QMacStylePrivate(); + + // Ideally these wouldn't exist, but since they already exist we need some accessors. + static const int PushButtonLeftOffset; + static const int PushButtonRightOffset; + static const int PushButtonContentPadding; + + enum Animates { AquaPushButton, AquaProgressBar, AquaListViewItemOpen, AquaScrollBar }; + QStyleHelper::WidgetSizePolicy aquaSizeConstrain(const QStyleOption *option, + QStyle::ContentsType ct = QStyle::CT_CustomBase, + QSize szHint=QSize(-1, -1), QSize *insz = 0) const; + QStyleHelper::WidgetSizePolicy effectiveAquaSizeConstrain(const QStyleOption *option, + QStyle::ContentsType ct = QStyle::CT_CustomBase, + QSize szHint=QSize(-1, -1), QSize *insz = 0) const; + inline int animateSpeed(Animates) const { return 33; } + + // Utility functions + static CGRect comboboxInnerBounds(const CGRect &outterBounds, const CocoaControl &cocoaWidget); + + static QRectF comboboxEditBounds(const QRectF &outterBounds, const CocoaControl &cw); + + void setAutoDefaultButton(QObject *button) const; + + NSView *cocoaControl(CocoaControl cocoaControl) const; + NSCell *cocoaCell(CocoaControl cocoaControl) const; + + void setupNSGraphicsContext(CGContextRef cg, bool flipped) const; + void restoreNSGraphicsContext(CGContextRef cg) const; + + void setupVerticalInvertedXform(CGContextRef cg, bool reverse, bool vertical, const CGRect &rect) const; + + void drawNSViewInRect(NSView *view, const QRectF &rect, QPainter *p, DrawRectBlock drawRectBlock = nil) const; + void resolveCurrentNSView(QWindow *window) const; + + void drawToolbarButtonArrow(const QStyleOption *opt, QPainter *p) const; + + QPainterPath windowPanelPath(const QRectF &r) const; + + CocoaControlType windowButtonCocoaControl(QStyle::SubControl sc) const; + + void tabLayout(const QStyleOptionTab *opt, QRect *textRect, QRect *iconRect) const override; + static Direction tabDirection(QStyleOptionTab::Shape shape); + static bool verticalTabs(QMacStylePrivate::Direction tabDirection); + +public: + mutable QPointer autoDefaultButton; + static QVector > scrollBars; + + mutable QPointer focusWidget; // TODO: rename to focusItem + mutable NSView *backingStoreNSView; + mutable QHash cocoaControls; + mutable QHash cocoaCells; + + QFont smallSystemFont; + QFont miniSystemFont; + + QMacKeyValueObserver appearanceObserver; +}; + +} // namespace QQC2 + +QT_END_NAMESPACE + +#endif // QMACSTYLE_MAC_P_P_H diff --git a/src/quicknativestyle/qstyle/qquickcommonstyle.cpp b/src/quicknativestyle/qstyle/qquickcommonstyle.cpp new file mode 100644 index 00000000..4a23039a --- /dev/null +++ b/src/quicknativestyle/qstyle/qquickcommonstyle.cpp @@ -0,0 +1,6082 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickcommonstyle.h" +#include "qquickcommonstyle_p.h" +#include "qquickcommonstylepixmaps_p.h" + +#include "qquickstyleoption.h" +#include "qquickdrawutil.h" +#include "qquickstylehelper_p.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include + +QT_BEGIN_NAMESPACE + +static inline qreal dpr(const QWindow *w) +{ + return w != nullptr ? w->devicePixelRatio() : qApp->devicePixelRatio(); +} + +/*! + \class QCommonStyle + \brief The QCommonStyle class encapsulates the common Look and Feel of a GUI. + + \ingroup appearance + \inmodule QtWidgets + + This abstract class implements some of the widget's look and feel + that is common to all GUI styles provided and shipped as part of + Qt. + + Since QCommonStyle inherits QStyle, all of its functions are fully documented + in the QStyle documentation. + \omit + , although the + extra functions that QCommonStyle provides, e.g. + drawComplexControl(), drawControl(), drawPrimitive(), + hitTestComplexControl(), subControlRect(), sizeFromContents(), and + subElementRect() are documented here. + \endomit + + \sa QStyle, QProxyStyle +*/ + +namespace QQC2 { + +QCommonStyle::QCommonStyle() + : QStyle(*new QCommonStylePrivate) +{ } + +QCommonStyle::QCommonStyle(QCommonStylePrivate &dd) + : QStyle(dd) +{ } + +QCommonStyle::~QCommonStyle() +{ } + +void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p) const +{ + Q_D(const QCommonStyle); + switch (pe) { + case PE_FrameButtonBevel: + case PE_FrameButtonTool: + qDrawShadeRect(p, opt->rect, opt->palette, + opt->state & (State_Sunken | State_On), 1, 0); + break; + case PE_PanelButtonCommand: + case PE_PanelButtonBevel: + case PE_PanelButtonTool: + case PE_IndicatorButtonDropDown: + qDrawShadePanel(p, opt->rect, opt->palette, + opt->state & (State_Sunken | State_On), 1, + &opt->palette.brush(QPalette::Button)); + break; + case PE_IndicatorItemViewItemCheck: + proxy()->drawPrimitive(PE_IndicatorCheckBox, opt, p); + break; + case PE_IndicatorCheckBox: + if (opt->state & State_NoChange) { + p->setPen(opt->palette.windowText().color()); + p->fillRect(opt->rect, opt->palette.brush(QPalette::Button)); + p->drawRect(opt->rect); + p->drawLine(opt->rect.topLeft(), opt->rect.bottomRight()); + } else { + qDrawShadePanel(p, opt->rect.x(), opt->rect.y(), opt->rect.width(), opt->rect.height(), + opt->palette, opt->state & (State_Sunken | State_On), 1, + &opt->palette.brush(QPalette::Button)); + } + break; + case PE_IndicatorRadioButton: { + QRect ir = opt->rect; + p->setPen(opt->palette.dark().color()); + p->drawArc(opt->rect, 0, 5760); + if (opt->state & (State_Sunken | State_On)) { + ir.adjust(2, 2, -2, -2); + p->setBrush(opt->palette.windowText()); + p->drawEllipse(ir); + } + break; } + case PE_FrameFocusRect: + if (const QStyleOptionFocusRect *fropt = qstyleoption_cast(opt)) { + QColor bg = fropt->backgroundColor; + QPen oldPen = p->pen(); + if (bg.isValid()) { + int h, s, v; + bg.getHsv(&h, &s, &v); + if (v >= 128) + p->setPen(Qt::black); + else + p->setPen(Qt::white); + } else { + p->setPen(opt->palette.windowText().color()); + } + QRect focusRect = opt->rect.adjusted(1, 1, -1, -1); + p->drawRect(focusRect.adjusted(0, 0, -1, -1)); //draw pen inclusive + p->setPen(oldPen); + } + break; + case PE_IndicatorMenuCheckMark: { + const int markW = opt->rect.width() > 7 ? 7 : opt->rect.width(); + const int markH = markW; + int posX = opt->rect.x() + (opt->rect.width() - markW)/2 + 1; + int posY = opt->rect.y() + (opt->rect.height() - markH)/2; + + QVector a; + a.reserve(markH); + + int i, xx, yy; + xx = posX; + yy = 3 + posY; + for (i = 0; i < markW/2; ++i) { + a << QLineF(xx, yy, xx, yy + 2); + ++xx; + ++yy; + } + yy -= 2; + for (; i < markH; ++i) { + a << QLineF(xx, yy, xx, yy + 2); + ++xx; + --yy; + } + if (!(opt->state & State_Enabled) && !(opt->state & State_On)) { + p->save(); + p->translate(1, 1); + p->setPen(opt->palette.light().color()); + p->drawLines(a); + p->restore(); + } + p->setPen((opt->state & State_On) ? opt->palette.highlightedText().color() : opt->palette.text().color()); + p->drawLines(a); + break; } + case PE_Frame: + case PE_FrameMenu: + if (const QStyleOptionFrame *frame = qstyleoption_cast(opt)) { + if (pe == PE_FrameMenu || (frame->state & State_Sunken) || (frame->state & State_Raised)) { + qDrawShadePanel(p, frame->rect, frame->palette, frame->state & State_Sunken, + frame->lineWidth); + } else { + qDrawPlainRect(p, frame->rect, frame->palette.windowText().color(), frame->lineWidth); + } + } + break; + case PE_PanelMenuBar: + if (const QStyleOptionFrame *frame = qstyleoption_cast(opt)){ + qDrawShadePanel(p, frame->rect, frame->palette, false, frame->lineWidth, + &frame->palette.brush(QPalette::Button)); + + } + else if (const QStyleOptionToolBar *frame = qstyleoption_cast(opt)){ + qDrawShadePanel(p, frame->rect, frame->palette, false, frame->lineWidth, + &frame->palette.brush(QPalette::Button)); + } + + break; + case PE_PanelMenu: + break; + case PE_PanelToolBar: + break; + case PE_IndicatorProgressChunk: + { + p->fillRect(opt->rect.x(), opt->rect.y() + 3, opt->rect.width() -2, opt->rect.height() - 6, + opt->palette.brush(QPalette::Highlight)); + } + break; + case PE_IndicatorBranch: { + static const int decoration_size = 9; + int mid_h = opt->rect.x() + opt->rect.width() / 2; + int mid_v = opt->rect.y() + opt->rect.height() / 2; + int bef_h = mid_h; + int bef_v = mid_v; + int aft_h = mid_h; + int aft_v = mid_v; + if (opt->state & State_Children) { + int delta = decoration_size / 2; + bef_h -= delta; + bef_v -= delta; + aft_h += delta; + aft_v += delta; + p->drawLine(bef_h + 2, bef_v + 4, bef_h + 6, bef_v + 4); + if (!(opt->state & State_Open)) + p->drawLine(bef_h + 4, bef_v + 2, bef_h + 4, bef_v + 6); + QPen oldPen = p->pen(); + p->setPen(opt->palette.dark().color()); + p->drawRect(bef_h, bef_v, decoration_size - 1, decoration_size - 1); + p->setPen(oldPen); + } + QBrush brush(opt->palette.dark().color(), Qt::Dense4Pattern); + if (opt->state & State_Item) { + if (opt->direction == Qt::RightToLeft) + p->fillRect(opt->rect.left(), mid_v, bef_h - opt->rect.left(), 1, brush); + else + p->fillRect(aft_h, mid_v, opt->rect.right() - aft_h + 1, 1, brush); + } + if (opt->state & State_Sibling) + p->fillRect(mid_h, aft_v, 1, opt->rect.bottom() - aft_v + 1, brush); + if (opt->state & (State_Open | State_Children | State_Item | State_Sibling)) + p->fillRect(mid_h, opt->rect.y(), 1, bef_v - opt->rect.y(), brush); + break; } + case PE_FrameStatusBarItem: + qDrawShadeRect(p, opt->rect, opt->palette, true, 1, 0, nullptr); + break; + case PE_IndicatorHeaderArrow: + if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { + QPen oldPen = p->pen(); + if (header->sortIndicator & QStyleOptionHeader::SortUp) { + p->setPen(QPen(opt->palette.light(), 0)); + p->drawLine(opt->rect.x() + opt->rect.width(), opt->rect.y(), + opt->rect.x() + opt->rect.width() / 2, opt->rect.y() + opt->rect.height()); + p->setPen(QPen(opt->palette.dark(), 0)); + const QPoint points[] = { + QPoint(opt->rect.x() + opt->rect.width() / 2, opt->rect.y() + opt->rect.height()), + QPoint(opt->rect.x(), opt->rect.y()), + QPoint(opt->rect.x() + opt->rect.width(), opt->rect.y()), + }; + p->drawPolyline(points, sizeof points / sizeof *points); + } else if (header->sortIndicator & QStyleOptionHeader::SortDown) { + p->setPen(QPen(opt->palette.light(), 0)); + const QPoint points[] = { + QPoint(opt->rect.x(), opt->rect.y() + opt->rect.height()), + QPoint(opt->rect.x() + opt->rect.width(), opt->rect.y() + opt->rect.height()), + QPoint(opt->rect.x() + opt->rect.width() / 2, opt->rect.y()), + }; + p->drawPolyline(points, sizeof points / sizeof *points); + p->setPen(QPen(opt->palette.dark(), 0)); + p->drawLine(opt->rect.x(), opt->rect.y() + opt->rect.height(), + opt->rect.x() + opt->rect.width() / 2, opt->rect.y()); + } + p->setPen(oldPen); + } + break; + case PE_FrameTabBarBase: + if (const QStyleOptionTabBarBase *tbb + = qstyleoption_cast(opt)) { + p->save(); + switch (tbb->shape) { + case QStyleOptionTab::RoundedNorth: + case QStyleOptionTab::TriangularNorth: + p->setPen(QPen(tbb->palette.light(), 0)); + p->drawLine(tbb->rect.topLeft(), tbb->rect.topRight()); + break; + case QStyleOptionTab::RoundedWest: + case QStyleOptionTab::TriangularWest: + p->setPen(QPen(tbb->palette.light(), 0)); + p->drawLine(tbb->rect.topLeft(), tbb->rect.bottomLeft()); + break; + case QStyleOptionTab::RoundedSouth: + case QStyleOptionTab::TriangularSouth: + p->setPen(QPen(tbb->palette.shadow(), 0)); + p->drawLine(tbb->rect.left(), tbb->rect.bottom(), + tbb->rect.right(), tbb->rect.bottom()); + p->setPen(QPen(tbb->palette.dark(), 0)); + p->drawLine(tbb->rect.left(), tbb->rect.bottom() - 1, + tbb->rect.right() - 1, tbb->rect.bottom() - 1); + break; + case QStyleOptionTab::RoundedEast: + case QStyleOptionTab::TriangularEast: + p->setPen(QPen(tbb->palette.dark(), 0)); + p->drawLine(tbb->rect.topRight(), tbb->rect.bottomRight()); + break; + } + p->restore(); + } + break; + case PE_IndicatorTabClose: { + if (d->tabBarcloseButtonIcon.isNull()) { + d->tabBarcloseButtonIcon.addPixmap(QPixmap( + QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-closetab-16.png")), + QIcon::Normal, QIcon::Off); + d->tabBarcloseButtonIcon.addPixmap(QPixmap( + QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-closetab-down-16.png")), + QIcon::Normal, QIcon::On); + d->tabBarcloseButtonIcon.addPixmap(QPixmap( + QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-closetab-hover-16.png")), + QIcon::Active, QIcon::Off); + } + + int size = proxy()->pixelMetric(QStyle::PM_SmallIconSize); + QIcon::Mode mode = opt->state & State_Enabled ? + (opt->state & State_Raised ? QIcon::Active : QIcon::Normal) + : QIcon::Disabled; + if (!(opt->state & State_Raised) + && !(opt->state & State_Sunken) + && !(opt->state & QStyle::State_Selected)) + mode = QIcon::Disabled; + + QIcon::State state = opt->state & State_Sunken ? QIcon::On : QIcon::Off; + QPixmap pixmap = d->tabBarcloseButtonIcon.pixmap(QSize(size, size), dpr(opt->window), mode, state); + proxy()->drawItemPixmap(p, opt->rect, Qt::AlignCenter, pixmap); + break; + } + case PE_FrameTabWidget: + case PE_FrameWindow: + qDrawWinPanel(p, opt->rect, opt->palette, false, nullptr); + break; + case PE_FrameLineEdit: + proxy()->drawPrimitive(PE_Frame, opt, p); + break; + case PE_FrameGroupBox: + if (const QStyleOptionFrame *frame = qstyleoption_cast(opt)) { + if (frame->features & QStyleOptionFrame::Flat) { + QRect fr = frame->rect; + QPoint p1(fr.x(), fr.y() + 1); + QPoint p2(fr.x() + fr.width(), p1.y()); + qDrawShadeLine(p, p1, p2, frame->palette, true, + frame->lineWidth, frame->midLineWidth); + } else { + qDrawShadeRect(p, frame->rect.x(), frame->rect.y(), frame->rect.width(), + frame->rect.height(), frame->palette, true, + frame->lineWidth, frame->midLineWidth); + } + } + break; + case PE_FrameDockWidget: + if (const QStyleOptionFrame *frame = qstyleoption_cast(opt)) { + int lw = frame->lineWidth; + if (lw <= 0) + lw = proxy()->pixelMetric(PM_DockWidgetFrameWidth); + + qDrawShadePanel(p, frame->rect, frame->palette, false, lw); + } + break; + case PE_IndicatorToolBarHandle: + p->save(); + p->translate(opt->rect.x(), opt->rect.y()); + if (opt->state & State_Horizontal) { + int x = opt->rect.width() / 3; + if (opt->direction == Qt::RightToLeft) + x -= 2; + if (opt->rect.height() > 4) { + qDrawShadePanel(p, x, 2, 3, opt->rect.height() - 4, + opt->palette, false, 1, nullptr); + qDrawShadePanel(p, x+3, 2, 3, opt->rect.height() - 4, + opt->palette, false, 1, nullptr); + } + } else { + if (opt->rect.width() > 4) { + int y = opt->rect.height() / 3; + qDrawShadePanel(p, 2, y, opt->rect.width() - 4, 3, + opt->palette, false, 1, nullptr); + qDrawShadePanel(p, 2, y+3, opt->rect.width() - 4, 3, + opt->palette, false, 1, nullptr); + } + } + p->restore(); + break; + case PE_IndicatorToolBarSeparator: + { + QPoint p1, p2; + if (opt->state & State_Horizontal) { + p1 = QPoint(opt->rect.width()/2, 0); + p2 = QPoint(p1.x(), opt->rect.height()); + } else { + p1 = QPoint(0, opt->rect.height()/2); + p2 = QPoint(opt->rect.width(), p1.y()); + } + qDrawShadeLine(p, p1, p2, opt->palette, 1, 1, 0); + break; + } + case PE_IndicatorSpinPlus: + case PE_IndicatorSpinMinus: { + QRect r = opt->rect; + int fw = proxy()->pixelMetric(PM_DefaultFrameWidth, opt); + QRect br = r.adjusted(fw, fw, -fw, -fw); + + int offset = (opt->state & State_Sunken) ? 1 : 0; + int step = (br.width() + 4) / 5; + p->fillRect(br.x() + offset, br.y() + offset +br.height() / 2 - step / 2, + br.width(), step, + opt->palette.buttonText()); + if (pe == PE_IndicatorSpinPlus) + p->fillRect(br.x() + br.width() / 2 - step / 2 + offset, br.y() + offset, + step, br.height(), + opt->palette.buttonText()); + + break; } + case PE_IndicatorSpinUp: + case PE_IndicatorSpinDown: { + QRect r = opt->rect; + int fw = proxy()->pixelMetric(PM_DefaultFrameWidth, opt); + // QRect br = r.adjusted(fw, fw, -fw, -fw); + int x = r.x(), y = r.y(), w = r.width(), h = r.height(); + int sw = w-4; + if (sw < 3) + break; + else if (!(sw & 1)) + sw--; + sw -= (sw / 7) * 2; // Empty border + int sh = sw/2 + 2; // Must have empty row at foot of arrow + + int sx = x + w / 2 - sw / 2; + int sy = y + h / 2 - sh / 2; + + if (pe == PE_IndicatorSpinUp && fw) + --sy; + + int bsx = 0; + int bsy = 0; + if (opt->state & State_Sunken) { + bsx = proxy()->pixelMetric(PM_ButtonShiftHorizontal); + bsy = proxy()->pixelMetric(PM_ButtonShiftVertical); + } + p->save(); + p->translate(sx + bsx, sy + bsy); + p->setPen(opt->palette.buttonText().color()); + p->setBrush(opt->palette.buttonText()); + if (pe == PE_IndicatorSpinDown) { + const QPoint points[] = { QPoint(0, 1), QPoint(sw-1, 1), QPoint(sh-2, sh-1) }; + p->drawPolygon(points, sizeof points / sizeof *points); + } else { + const QPoint points[] = { QPoint(0, sh-1), QPoint(sw-1, sh-1), QPoint(sh-2, 1) }; + p->drawPolygon(points, sizeof points / sizeof *points); + } + p->restore(); + break; } + case PE_PanelTipLabel: { + const QBrush brush(opt->palette.toolTipBase()); + qDrawPlainRect(p, opt->rect, opt->palette.toolTipText().color(), 1, &brush); + break; + } + case PE_IndicatorTabTear: + if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { + bool rtl = tab->direction == Qt::RightToLeft; + const bool horizontal = tab->rect.height() > tab->rect.width(); + const int margin = 4; + QPainterPath path; + + if (horizontal) { + QRect rect = tab->rect.adjusted(rtl ? margin : 0, 0, rtl ? 1 : -margin, 0); + rect.setTop(rect.top() + ((tab->state & State_Selected) ? 1 : 3)); + rect.setBottom(rect.bottom() - ((tab->state & State_Selected) ? 0 : 2)); + + path.moveTo(QPoint(rtl ? rect.right() : rect.left(), rect.top())); + int count = 4; + for (int jags = 1; jags <= count; ++jags, rtl = !rtl) + path.lineTo(QPoint(rtl ? rect.left() : rect.right(), rect.top() + jags * rect.height()/count)); + } else { + QRect rect = tab->rect.adjusted(0, 0, 0, -margin); + rect.setLeft(rect.left() + ((tab->state & State_Selected) ? 1 : 3)); + rect.setRight(rect.right() - ((tab->state & State_Selected) ? 0 : 2)); + + path.moveTo(QPoint(rect.left(), rect.top())); + int count = 4; + for (int jags = 1; jags <= count; ++jags, rtl = !rtl) + path.lineTo(QPoint(rect.left() + jags * rect.width()/count, rtl ? rect.top() : rect.bottom())); + } + + p->setPen(QPen(tab->palette.dark(), qreal(.8))); + p->setBrush(tab->palette.window()); + p->setRenderHint(QPainter::Antialiasing); + p->drawPath(path); + } + break; + case PE_PanelLineEdit: + if (const QStyleOptionFrame *panel = qstyleoption_cast(opt)) { + p->fillRect(panel->rect.adjusted(panel->lineWidth, panel->lineWidth, -panel->lineWidth, -panel->lineWidth), + panel->palette.brush(QPalette::Base)); + + if (panel->lineWidth > 0) + proxy()->drawPrimitive(PE_FrameLineEdit, panel, p); + } + break; + case PE_IndicatorColumnViewArrow: { + if (const QStyleOptionViewItem *viewOpt = qstyleoption_cast(opt)) { + bool reverse = (viewOpt->direction == Qt::RightToLeft); + p->save(); + QPainterPath path; + int x = viewOpt->rect.x() + 1; + int offset = (viewOpt->rect.height() / 3); + int height = (viewOpt->rect.height()) - offset * 2; + if (height % 2 == 1) + --height; + int x2 = x + height - 1; + if (reverse) { + x = viewOpt->rect.x() + viewOpt->rect.width() - 1; + x2 = x - height + 1; + } + path.moveTo(x, viewOpt->rect.y() + offset); + path.lineTo(x, viewOpt->rect.y() + offset + height); + path.lineTo(x2, viewOpt->rect.y() + offset+height/2); + path.closeSubpath(); + if (viewOpt->state & QStyle::State_Selected ) { + if (viewOpt->showDecorationSelected) { + QColor color = viewOpt->palette.color(QPalette::Active, QPalette::HighlightedText); + p->setPen(color); + p->setBrush(color); + } else { + QColor color = viewOpt->palette.color(QPalette::Active, QPalette::WindowText); + p->setPen(color); + p->setBrush(color); + } + + } else { + QColor color = viewOpt->palette.color(QPalette::Active, QPalette::Mid); + p->setPen(color); + p->setBrush(color); + } + p->drawPath(path); + + // draw the vertical and top triangle line + if (!(viewOpt->state & QStyle::State_Selected)) { + QPainterPath lines; + lines.moveTo(x, viewOpt->rect.y() + offset); + lines.lineTo(x, viewOpt->rect.y() + offset + height); + lines.moveTo(x, viewOpt->rect.y() + offset); + lines.lineTo(x2, viewOpt->rect.y() + offset+height/2); + QColor color = viewOpt->palette.color(QPalette::Active, QPalette::Dark); + p->setPen(color); + p->drawPath(lines); + } + p->restore(); + } + break; } + case PE_IndicatorItemViewItemDrop: { + QRect rect = opt->rect; + if (opt->rect.height() == 0) + p->drawLine(rect.topLeft(), rect.topRight()); + else + p->drawRect(rect); + break; } + case PE_PanelItemViewRow: + if (const QStyleOptionViewItem *vopt = qstyleoption_cast(opt)) { + QPalette::ColorGroup cg = vopt->state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled; + if (cg == QPalette::Normal && !(vopt->state & QStyle::State_Active)) + cg = QPalette::Inactive; + + if ((vopt->state & QStyle::State_Selected) && proxy()->styleHint(QStyle::SH_ItemView_ShowDecorationSelected, opt)) + p->fillRect(vopt->rect, vopt->palette.brush(cg, QPalette::Highlight)); + else if (vopt->features & QStyleOptionViewItem::Alternate) + p->fillRect(vopt->rect, vopt->palette.brush(cg, QPalette::AlternateBase)); + } + break; + case PE_PanelItemViewItem: + if (const QStyleOptionViewItem *vopt = qstyleoption_cast(opt)) { + QPalette::ColorGroup cg = vopt->state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled; + if (cg == QPalette::Normal && !(vopt->state & QStyle::State_Active)) + cg = QPalette::Inactive; + + if (vopt->showDecorationSelected && (vopt->state & QStyle::State_Selected)) { + p->fillRect(vopt->rect, vopt->palette.brush(cg, QPalette::Highlight)); + } else { + if (vopt->backgroundBrush.style() != Qt::NoBrush) { + QPointF oldBO = p->brushOrigin(); + p->setBrushOrigin(vopt->rect.topLeft()); + p->fillRect(vopt->rect, vopt->backgroundBrush); + p->setBrushOrigin(oldBO); + } + + if (vopt->state & QStyle::State_Selected) { + QRect textRect = subElementRect(QStyle::SE_ItemViewItemText, opt); + p->fillRect(textRect, vopt->palette.brush(cg, QPalette::Highlight)); + } + } + } + break; + case PE_PanelScrollAreaCorner: { + const QBrush brush(opt->palette.brush(QPalette::Window)); + p->fillRect(opt->rect, brush); + } break; + case PE_IndicatorArrowUp: + case PE_IndicatorArrowDown: + case PE_IndicatorArrowRight: + case PE_IndicatorArrowLeft: + { + if (opt->rect.width() <= 1 || opt->rect.height() <= 1) + break; + QRect r = opt->rect; + int size = qMin(r.height(), r.width()); + QPixmap pixmap; + QString pixmapName = QStyleHelper::uniqueName(QLatin1String("$qt_ia-") + % QLatin1String(metaObject()->className()), opt, QSize(size, size)) + % HexString(pe); + if (!QPixmapCache::find(pixmapName, &pixmap)) { + qreal pixelRatio = p->device()->devicePixelRatioF(); + int border = qRound(pixelRatio*(size/5)); + int sqsize = qRound(pixelRatio*(2*(size/2))); + QImage image(sqsize, sqsize, QImage::Format_ARGB32_Premultiplied); + image.fill(0); + QPainter imagePainter(&image); + + QPolygon a; + switch (pe) { + case PE_IndicatorArrowUp: + a.setPoints(3, border, sqsize/2, sqsize/2, border, sqsize - border, sqsize/2); + break; + case PE_IndicatorArrowDown: + a.setPoints(3, border, sqsize/2, sqsize/2, sqsize - border, sqsize - border, sqsize/2); + break; + case PE_IndicatorArrowRight: + a.setPoints(3, sqsize - border, sqsize/2, sqsize/2, border, sqsize/2, sqsize - border); + break; + case PE_IndicatorArrowLeft: + a.setPoints(3, border, sqsize/2, sqsize/2, border, sqsize/2, sqsize - border); + break; + default: + break; + } + + int bsx = 0; + int bsy = 0; + + if (opt->state & State_Sunken) { + bsx = proxy()->pixelMetric(PM_ButtonShiftHorizontal, opt); + bsy = proxy()->pixelMetric(PM_ButtonShiftVertical, opt); + } + + QRect bounds = a.boundingRect(); + int sx = sqsize / 2 - bounds.center().x() - 1; + int sy = sqsize / 2 - bounds.center().y() - 1; + imagePainter.translate(sx + bsx, sy + bsy); + imagePainter.setPen(opt->palette.buttonText().color()); + imagePainter.setBrush(opt->palette.buttonText()); + + if (!(opt->state & State_Enabled)) { + imagePainter.translate(1, 1); + imagePainter.setBrush(opt->palette.light().color()); + imagePainter.setPen(opt->palette.light().color()); + imagePainter.drawPolygon(a); + imagePainter.translate(-1, -1); + imagePainter.setBrush(opt->palette.mid().color()); + imagePainter.setPen(opt->palette.mid().color()); + } + + imagePainter.drawPolygon(a); + imagePainter.end(); + pixmap = QPixmap::fromImage(image); + pixmap.setDevicePixelRatio(pixelRatio); + QPixmapCache::insert(pixmapName, pixmap); + } + int xOffset = r.x() + (r.width() - size)/2; + int yOffset = r.y() + (r.height() - size)/2; + p->drawPixmap(xOffset, yOffset, pixmap); + } + break; + default: + break; + } +} + +static void drawArrow(const QStyle *style, const QStyleOptionToolButton *toolbutton, + const QRect &rect, QPainter *painter) +{ + QStyle::PrimitiveElement pe; + switch (toolbutton->arrowType) { + case Qt::LeftArrow: + pe = QStyle::PE_IndicatorArrowLeft; + break; + case Qt::RightArrow: + pe = QStyle::PE_IndicatorArrowRight; + break; + case Qt::UpArrow: + pe = QStyle::PE_IndicatorArrowUp; + break; + case Qt::DownArrow: + pe = QStyle::PE_IndicatorArrowDown; + break; + default: + return; + } + QStyleOption arrowOpt = *toolbutton; + arrowOpt.rect = rect; + style->drawPrimitive(pe, &arrowOpt, painter); +} + +static QSizeF viewItemTextLayout(QTextLayout &textLayout, int lineWidth, int maxHeight = -1, int *lastVisibleLine = nullptr) +{ + if (lastVisibleLine) + *lastVisibleLine = -1; + qreal height = 0; + qreal widthUsed = 0; + textLayout.beginLayout(); + int i = 0; + while (true) { + QTextLine line = textLayout.createLine(); + if (!line.isValid()) + break; + line.setLineWidth(lineWidth); + line.setPosition(QPointF(0, height)); + height += line.height(); + widthUsed = qMax(widthUsed, line.naturalTextWidth()); + // we assume that the height of the next line is the same as the current one + if (maxHeight > 0 && lastVisibleLine && height + line.height() > maxHeight) { + const QTextLine nextLine = textLayout.createLine(); + *lastVisibleLine = nextLine.isValid() ? i : -1; + break; + } + ++i; + } + textLayout.endLayout(); + return QSizeF(widthUsed, height); +} + +QString QCommonStylePrivate::calculateElidedText(const QString &text, const QTextOption &textOption, + const QFont &font, const QRect &textRect, const Qt::Alignment valign, + Qt::TextElideMode textElideMode, int flags, + bool lastVisibleLineShouldBeElided, QPointF *paintStartPosition) const +{ + QTextLayout textLayout(text, font); + textLayout.setTextOption(textOption); + + // In AlignVCenter mode when more than one line is displayed and the height only allows + // some of the lines it makes no sense to display those. From a users perspective it makes + // more sense to see the start of the text instead something inbetween. + const bool vAlignmentOptimization = paintStartPosition && valign.testFlag(Qt::AlignVCenter); + + int lastVisibleLine = -1; + viewItemTextLayout(textLayout, textRect.width(), vAlignmentOptimization ? textRect.height() : -1, &lastVisibleLine); + + const QRectF boundingRect = textLayout.boundingRect(); + // don't care about LTR/RTL here, only need the height + const QRect layoutRect = QStyle::alignedRect(Qt::LayoutDirectionAuto, valign, + boundingRect.size().toSize(), textRect); + + if (paintStartPosition) + *paintStartPosition = QPointF(textRect.x(), layoutRect.top()); + + QString ret; + qreal height = 0; + const int lineCount = textLayout.lineCount(); + for (int i = 0; i < lineCount; ++i) { + const QTextLine line = textLayout.lineAt(i); + height += line.height(); + + // above visible rect + if (height + layoutRect.top() <= textRect.top()) { + if (paintStartPosition) + paintStartPosition->ry() += line.height(); + continue; + } + + const int start = line.textStart(); + const int length = line.textLength(); + const bool drawElided = line.naturalTextWidth() > textRect.width(); + bool elideLastVisibleLine = lastVisibleLine == i; + if (!drawElided && i + 1 < lineCount && lastVisibleLineShouldBeElided) { + const QTextLine nextLine = textLayout.lineAt(i + 1); + const int nextHeight = height + nextLine.height() / 2; + // elide when less than the next half line is visible + if (nextHeight + layoutRect.top() > textRect.height() + textRect.top()) + elideLastVisibleLine = true; + } + + QString text = textLayout.text().mid(start, length); + if (drawElided || elideLastVisibleLine) { + if (elideLastVisibleLine) { + if (text.endsWith(QChar::LineSeparator)) + text.chop(1); + text += QChar(0x2026); + } + const QStackTextEngine engine(text, font); + ret += engine.elidedText(textElideMode, textRect.width(), flags); + + // no newline for the last line (last visible or real) + // sometimes drawElided is true but no eliding is done so the text ends + // with QChar::LineSeparator - don't add another one. This happened with + // arabic text in the testcase for QTBUG-72805 + if (i < lineCount - 1 && + !ret.endsWith(QChar::LineSeparator)) + ret += QChar::LineSeparator; + } else { + ret += text; + } + + // below visible text, can stop + if ((height + layoutRect.top() >= textRect.bottom()) || + (lastVisibleLine >= 0 && lastVisibleLine == i)) + break; + } + return ret; +} + +QSize QCommonStylePrivate::viewItemSize(const QStyleOptionViewItem *option, int role) const +{ + switch (role) { + case Qt::CheckStateRole: + if (option->features & QStyleOptionViewItem::HasCheckIndicator) + return QSize(proxyStyle->pixelMetric(QStyle::PM_IndicatorWidth, option), + proxyStyle->pixelMetric(QStyle::PM_IndicatorHeight, option)); + break; + case Qt::DisplayRole: + if (option->features & QStyleOptionViewItem::HasDisplay) { + QTextOption textOption; + textOption.setWrapMode(QTextOption::WordWrap); + QTextLayout textLayout(option->text, option->font); + textLayout.setTextOption(textOption); + const bool wrapText = option->features & QStyleOptionViewItem::WrapText; + const int textMargin = proxyStyle->pixelMetric(QStyle::PM_FocusFrameHMargin, option) + 1; + QRect bounds = option->rect; + switch (option->decorationPosition) { + case QStyleOptionViewItem::Left: + case QStyleOptionViewItem::Right: { + if (wrapText && bounds.isValid()) { + int width = bounds.width() - 2 * textMargin; + if (option->features & QStyleOptionViewItem::HasDecoration) + width -= option->decorationSize.width() + 2 * textMargin; + bounds.setWidth(width); + } else + bounds.setWidth(QFIXED_MAX); + break; + } + case QStyleOptionViewItem::Top: + case QStyleOptionViewItem::Bottom: + if (wrapText) + bounds.setWidth(bounds.isValid() ? bounds.width() - 2 * textMargin : option->decorationSize.width()); + else + bounds.setWidth(QFIXED_MAX); + break; + default: + break; + } + + if (wrapText && option->features & QStyleOptionViewItem::HasCheckIndicator) + bounds.setWidth(bounds.width() - proxyStyle->pixelMetric(QStyle::PM_IndicatorWidth) - 2 * textMargin); + + const int lineWidth = bounds.width(); + const QSizeF size = viewItemTextLayout(textLayout, lineWidth); + return QSize(qCeil(size.width()) + 2 * textMargin, qCeil(size.height())); + } + break; + case Qt::DecorationRole: + if (option->features & QStyleOptionViewItem::HasDecoration) { + return option->decorationSize; + } + break; + default: + break; + } + + return QSize(0, 0); +} + +void QCommonStylePrivate::viewItemDrawText(QPainter *p, const QStyleOptionViewItem *option, const QRect &rect) const +{ + const int textMargin = proxyStyle->pixelMetric(QStyle::PM_FocusFrameHMargin, nullptr) + 1; + + QRect textRect = rect.adjusted(textMargin, 0, -textMargin, 0); // remove width padding + const bool wrapText = option->features & QStyleOptionViewItem::WrapText; + QTextOption textOption; + textOption.setWrapMode(wrapText ? QTextOption::WordWrap : QTextOption::ManualWrap); + textOption.setTextDirection(option->direction); + textOption.setAlignment(QStyle::visualAlignment(option->direction, option->displayAlignment)); + + QPointF paintPosition; + const QString newText = calculateElidedText(option->text, textOption, + option->font, textRect, option->displayAlignment, + option->textElideMode, 0, + true, &paintPosition); + + QTextLayout textLayout(newText, option->font); + textLayout.setTextOption(textOption); + viewItemTextLayout(textLayout, textRect.width()); + textLayout.draw(p, paintPosition); +} + +/*! \internal + compute the position for the different component of an item (pixmap, text, checkbox) + + Set sizehint to false to layout the elements inside opt->rect. Set sizehint to true to ignore + opt->rect and return rectangles in infinite space + + Code duplicated in QItemDelegate::doLayout +*/ +void QCommonStylePrivate::viewItemLayout(const QStyleOptionViewItem *opt, QRect *checkRect, + QRect *pixmapRect, QRect *textRect, bool sizehint) const +{ + Q_ASSERT(checkRect && pixmapRect && textRect); + *pixmapRect = QRect(QPoint(0, 0), viewItemSize(opt, Qt::DecorationRole)); + *textRect = QRect(QPoint(0, 0), viewItemSize(opt, Qt::DisplayRole)); + *checkRect = QRect(QPoint(0, 0), viewItemSize(opt, Qt::CheckStateRole)); + + const bool hasCheck = checkRect->isValid(); + const bool hasPixmap = pixmapRect->isValid(); + const bool hasText = textRect->isValid(); + const bool hasMargin = (hasText | hasPixmap | hasCheck); + const int frameHMargin = hasMargin ? + proxyStyle->pixelMetric(QStyle::PM_FocusFrameHMargin, opt) + 1 : 0; + const int textMargin = hasText ? frameHMargin : 0; + const int pixmapMargin = hasPixmap ? frameHMargin : 0; + const int checkMargin = hasCheck ? frameHMargin : 0; + const int x = opt->rect.left(); + const int y = opt->rect.top(); + int w, h; + + if (textRect->height() == 0 && (!hasPixmap || !sizehint)) { + //if there is no text, we still want to have a decent height for the item sizeHint and the editor size + textRect->setHeight(opt->fontMetrics.height()); + } + + QSize pm(0, 0); + if (hasPixmap) { + pm = pixmapRect->size(); + pm.rwidth() += 2 * pixmapMargin; + } + if (sizehint) { + h = qMax(checkRect->height(), qMax(textRect->height(), pm.height())); + if (opt->decorationPosition == QStyleOptionViewItem::Left + || opt->decorationPosition == QStyleOptionViewItem::Right) { + w = textRect->width() + pm.width(); + } else { + w = qMax(textRect->width(), pm.width()); + } + } else { + w = opt->rect.width(); + h = opt->rect.height(); + } + + int cw = 0; + QRect check; + if (hasCheck) { + cw = checkRect->width() + 2 * checkMargin; + if (sizehint) w += cw; + if (opt->direction == Qt::RightToLeft) { + check.setRect(x + w - cw, y, cw, h); + } else { + check.setRect(x, y, cw, h); + } + } + + QRect display; + QRect decoration; + switch (opt->decorationPosition) { + case QStyleOptionViewItem::Top: { + if (hasPixmap) + pm.setHeight(pm.height() + pixmapMargin); // add space + h = sizehint ? textRect->height() : h - pm.height(); + + if (opt->direction == Qt::RightToLeft) { + decoration.setRect(x, y, w - cw, pm.height()); + display.setRect(x, y + pm.height(), w - cw, h); + } else { + decoration.setRect(x + cw, y, w - cw, pm.height()); + display.setRect(x + cw, y + pm.height(), w - cw, h); + } + break; } + case QStyleOptionViewItem::Bottom: { + if (hasText) + textRect->setHeight(textRect->height() + textMargin); // add space + h = sizehint ? textRect->height() + pm.height() : h; + + if (opt->direction == Qt::RightToLeft) { + display.setRect(x, y, w - cw, textRect->height()); + decoration.setRect(x, y + textRect->height(), w - cw, h - textRect->height()); + } else { + display.setRect(x + cw, y, w - cw, textRect->height()); + decoration.setRect(x + cw, y + textRect->height(), w - cw, h - textRect->height()); + } + break; } + case QStyleOptionViewItem::Left: { + if (opt->direction == Qt::LeftToRight) { + decoration.setRect(x + cw, y, pm.width(), h); + display.setRect(decoration.right() + 1, y, w - pm.width() - cw, h); + } else { + display.setRect(x, y, w - pm.width() - cw, h); + decoration.setRect(display.right() + 1, y, pm.width(), h); + } + break; } + case QStyleOptionViewItem::Right: { + if (opt->direction == Qt::LeftToRight) { + display.setRect(x + cw, y, w - pm.width() - cw, h); + decoration.setRect(display.right() + 1, y, pm.width(), h); + } else { + decoration.setRect(x, y, pm.width(), h); + display.setRect(decoration.right() + 1, y, w - pm.width() - cw, h); + } + break; } + default: + qWarning("doLayout: decoration position is invalid"); + decoration = *pixmapRect; + break; + } + + if (!sizehint) { // we only need to do the internal layout if we are going to paint + *checkRect = QStyle::alignedRect(opt->direction, Qt::AlignCenter, + checkRect->size(), check); + *pixmapRect = QStyle::alignedRect(opt->direction, opt->decorationAlignment, + pixmapRect->size(), decoration); + // the text takes up all available space, unless the decoration is not shown as selected + if (opt->showDecorationSelected) + *textRect = display; + else + *textRect = QStyle::alignedRect(opt->direction, opt->displayAlignment, + textRect->size().boundedTo(display.size()), display); + } else { + *checkRect = check; + *pixmapRect = decoration; + *textRect = display; + } +} + +QString QCommonStylePrivate::toolButtonElideText(const QStyleOptionToolButton *option, + const QRect &textRect, int flags) const +{ + if (option->fontMetrics.horizontalAdvance(option->text) <= textRect.width()) + return option->text; + + QString text = option->text; + text.replace(QLatin1Char('\n'), QChar::LineSeparator); + QTextOption textOption; + textOption.setWrapMode(QTextOption::ManualWrap); + textOption.setTextDirection(option->direction); + + return calculateElidedText(text, textOption, + option->font, textRect, Qt::AlignTop, + Qt::ElideMiddle, flags, + false, nullptr); +} + +/*! \internal + Compute the textRect and the pixmapRect from the opt rect + + Uses the same computation than in QTabBar::tabSizeHint + */ +void QCommonStylePrivate::tabLayout(const QStyleOptionTab *opt, QRect *textRect, QRect *iconRect) const +{ + Q_ASSERT(textRect); + Q_ASSERT(iconRect); + QRect tr = opt->rect; + bool verticalTabs = opt->shape == QStyleOptionTab::RoundedEast + || opt->shape == QStyleOptionTab::RoundedWest + || opt->shape == QStyleOptionTab::TriangularEast + || opt->shape == QStyleOptionTab::TriangularWest; + if (verticalTabs) + tr.setRect(0, 0, tr.height(), tr.width()); // 0, 0 as we will have a translate transform + + int verticalShift = proxyStyle->pixelMetric(QStyle::PM_TabBarTabShiftVertical, opt); + int horizontalShift = proxyStyle->pixelMetric(QStyle::PM_TabBarTabShiftHorizontal, opt); + int hpadding = proxyStyle->pixelMetric(QStyle::PM_TabBarTabHSpace, opt) / 2; + int vpadding = proxyStyle->pixelMetric(QStyle::PM_TabBarTabVSpace, opt) / 2; + if (opt->shape == QStyleOptionTab::RoundedSouth || opt->shape == QStyleOptionTab::TriangularSouth) + verticalShift = -verticalShift; + tr.adjust(hpadding, verticalShift - vpadding, horizontalShift - hpadding, vpadding); + bool selected = opt->state & QStyle::State_Selected; + if (selected) { + tr.setTop(tr.top() - verticalShift); + tr.setRight(tr.right() - horizontalShift); + } + + // left widget + if (!opt->leftButtonSize.isEmpty()) { + tr.setLeft(tr.left() + 4 + + (verticalTabs ? opt->leftButtonSize.height() : opt->leftButtonSize.width())); + } + // right widget + if (!opt->rightButtonSize.isEmpty()) { + tr.setRight(tr.right() - 4 - + (verticalTabs ? opt->rightButtonSize.height() : opt->rightButtonSize.width())); + } + + // icon + if (!opt->icon.isNull()) { + QSize iconSize = opt->iconSize; + if (!iconSize.isValid()) { + int iconExtent = proxyStyle->pixelMetric(QStyle::PM_SmallIconSize); + iconSize = QSize(iconExtent, iconExtent); + } + QSize tabIconSize = opt->icon.actualSize(iconSize, + (opt->state & QStyle::State_Enabled) ? QIcon::Normal : QIcon::Disabled, + (opt->state & QStyle::State_Selected) ? QIcon::On : QIcon::Off); + // High-dpi icons do not need adjustment; make sure tabIconSize is not larger than iconSize + tabIconSize = QSize(qMin(tabIconSize.width(), iconSize.width()), qMin(tabIconSize.height(), iconSize.height())); + + const int offsetX = (iconSize.width() - tabIconSize.width()) / 2; + *iconRect = QRect(tr.left() + offsetX, tr.center().y() - tabIconSize.height() / 2, + tabIconSize.width(), tabIconSize.height()); + if (!verticalTabs) + *iconRect = QStyle::visualRect(opt->direction, opt->rect, *iconRect); + tr.setLeft(tr.left() + tabIconSize.width() + 4); + } + + if (!verticalTabs) + tr = QStyle::visualRect(opt->direction, opt->rect, tr); + + *textRect = tr; +} + +/*! + \reimp +*/ +void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, QPainter *p) const +{ + Q_D(const QCommonStyle); + + // TODO: Set opt->window manually for now before calling any of the drawing functions. opt->window is + // pulled of the widget is QStyle. But now that we have no widget, we need some other + // solution. + Q_ASSERT(opt->window); + + switch (element) { + + case CE_PushButton: + if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { + proxy()->drawControl(CE_PushButtonBevel, btn, p); + QStyleOptionButton subopt = *btn; + subopt.rect = subElementRect(SE_PushButtonContents, btn); + proxy()->drawControl(CE_PushButtonLabel, &subopt, p); + } + break; + case CE_PushButtonBevel: + if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { + QRect br = btn->rect; + int dbi = proxy()->pixelMetric(PM_ButtonDefaultIndicator, btn); + if (btn->features & QStyleOptionButton::DefaultButton) + proxy()->drawPrimitive(PE_FrameDefaultButton, opt, p); + if (btn->features & QStyleOptionButton::AutoDefaultButton) + br.setCoords(br.left() + dbi, br.top() + dbi, br.right() - dbi, br.bottom() - dbi); + if (!(btn->features & (QStyleOptionButton::Flat | QStyleOptionButton::CommandLinkButton)) + || btn->state & (State_Sunken | State_On) + || (btn->features & QStyleOptionButton::CommandLinkButton && btn->state & State_MouseOver)) { + QStyleOptionButton tmpBtn = *btn; + tmpBtn.rect = br; + proxy()->drawPrimitive(PE_PanelButtonCommand, &tmpBtn, p); + } + if (btn->features & QStyleOptionButton::HasMenu) { + int mbi = proxy()->pixelMetric(PM_MenuButtonIndicator, btn); + QRect ir = btn->rect; + QStyleOptionButton newBtn = *btn; + newBtn.rect = QRect(ir.right() - mbi + 2, ir.height()/2 - mbi/2 + 3, mbi - 6, mbi - 6); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &newBtn, p); + } + if (btn->state & State_HasFocus) { + QStyleOptionFocusRect fropt; + fropt.QStyleOption::operator=(*btn); + fropt.rect = subElementRect(SE_PushButtonFocusRect, btn); + proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, p); + } + } + break; + case CE_PushButtonLabel: + if (const QStyleOptionButton *button = qstyleoption_cast(opt)) { + QRect textRect = button->rect; + uint tf = Qt::AlignVCenter | Qt::TextShowMnemonic; + if (!proxy()->styleHint(SH_UnderlineShortcut, button)) + tf |= Qt::TextHideMnemonic; + + if (!button->icon.isNull()) { + //Center both icon and text + QIcon::Mode mode = button->state & State_Enabled ? QIcon::Normal : QIcon::Disabled; + if (mode == QIcon::Normal && button->state & State_HasFocus) + mode = QIcon::Active; + QIcon::State state = QIcon::Off; + if (button->state & State_On) + state = QIcon::On; + + QPixmap pixmap = button->icon.pixmap(button->iconSize, dpr(opt->window), mode, state); + int pixmapWidth = pixmap.width() / pixmap.devicePixelRatio(); + int pixmapHeight = pixmap.height() / pixmap.devicePixelRatio(); + int labelWidth = pixmapWidth; + int labelHeight = pixmapHeight; + int iconSpacing = 4;//### 4 is currently hardcoded in QPushButton::sizeHint() + if (!button->text.isEmpty()) { + int textWidth = button->fontMetrics.boundingRect(opt->rect, tf, button->text).width(); + labelWidth += (textWidth + iconSpacing); + } + + QRect iconRect = QRect(textRect.x() + (textRect.width() - labelWidth) / 2, + textRect.y() + (textRect.height() - labelHeight) / 2, + pixmapWidth, pixmapHeight); + + iconRect = visualRect(button->direction, textRect, iconRect); + + if (button->direction == Qt::RightToLeft) { + tf |= Qt::AlignRight; + textRect.setRight(iconRect.left() - iconSpacing); + } else { + tf |= Qt::AlignLeft; //left align, we adjust the text-rect instead + textRect.setLeft(iconRect.left() + iconRect.width() + iconSpacing); + } + + if (button->state & (State_On | State_Sunken)) + iconRect.translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, opt), + proxy()->pixelMetric(PM_ButtonShiftVertical, opt)); + p->drawPixmap(iconRect, pixmap); + } else { + tf |= Qt::AlignHCenter; + } + if (button->state & (State_On | State_Sunken)) + textRect.translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, opt), + proxy()->pixelMetric(PM_ButtonShiftVertical, opt)); + + if (button->features & QStyleOptionButton::HasMenu) { + int indicatorSize = proxy()->pixelMetric(PM_MenuButtonIndicator, button); + if (button->direction == Qt::LeftToRight) + textRect = textRect.adjusted(0, 0, -indicatorSize, 0); + else + textRect = textRect.adjusted(indicatorSize, 0, 0, 0); + } + proxy()->drawItemText(p, textRect, tf, button->palette, (button->state & State_Enabled), + button->text, QPalette::ButtonText); + } + break; + case CE_RadioButton: + case CE_CheckBox: + if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { + bool isRadio = (element == CE_RadioButton); + QStyleOptionButton subopt = *btn; + subopt.rect = subElementRect(isRadio ? SE_RadioButtonIndicator + : SE_CheckBoxIndicator, btn); + proxy()->drawPrimitive(isRadio ? PE_IndicatorRadioButton : PE_IndicatorCheckBox, + &subopt, p); + subopt.rect = subElementRect(isRadio ? SE_RadioButtonContents + : SE_CheckBoxContents, btn); + proxy()->drawControl(isRadio ? CE_RadioButtonLabel : CE_CheckBoxLabel, &subopt, p); + if (btn->state & State_HasFocus) { + QStyleOptionFocusRect fropt; + fropt.QStyleOption::operator=(*btn); + fropt.rect = subElementRect(isRadio ? SE_RadioButtonFocusRect + : SE_CheckBoxFocusRect, btn); + proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, p); + } + } + break; + case CE_RadioButtonLabel: + case CE_CheckBoxLabel: + if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { + uint alignment = visualAlignment(btn->direction, Qt::AlignLeft | Qt::AlignVCenter); + + if (!proxy()->styleHint(SH_UnderlineShortcut, btn)) + alignment |= Qt::TextHideMnemonic; + QPixmap pix; + QRect textRect = btn->rect; + if (!btn->icon.isNull()) { + pix = btn->icon.pixmap(btn->iconSize, dpr(opt->window), btn->state & State_Enabled ? QIcon::Normal : QIcon::Disabled); + proxy()->drawItemPixmap(p, btn->rect, alignment, pix); + if (btn->direction == Qt::RightToLeft) + textRect.setRight(textRect.right() - btn->iconSize.width() - 4); + else + textRect.setLeft(textRect.left() + btn->iconSize.width() + 4); + } + if (!btn->text.isEmpty()){ + proxy()->drawItemText(p, textRect, alignment | Qt::TextShowMnemonic, + btn->palette, btn->state & State_Enabled, btn->text, QPalette::WindowText); + } + } + break; + case CE_MenuScroller: { + QStyleOption arrowOpt = *opt; + arrowOpt.state |= State_Enabled; + proxy()->drawPrimitive(((opt->state & State_DownArrow) ? PE_IndicatorArrowDown : PE_IndicatorArrowUp), &arrowOpt, p); + break; } + case CE_MenuTearoff: + if (opt->state & State_Selected) + p->fillRect(opt->rect, opt->palette.brush(QPalette::Highlight)); + else + p->fillRect(opt->rect, opt->palette.brush(QPalette::Button)); + p->setPen(QPen(opt->palette.dark().color(), 1, Qt::DashLine)); + p->drawLine(opt->rect.x() + 2, opt->rect.y() + opt->rect.height() / 2 - 1, + opt->rect.x() + opt->rect.width() - 4, + opt->rect.y() + opt->rect.height() / 2 - 1); + p->setPen(QPen(opt->palette.light().color(), 1, Qt::DashLine)); + p->drawLine(opt->rect.x() + 2, opt->rect.y() + opt->rect.height() / 2, + opt->rect.x() + opt->rect.width() - 4, opt->rect.y() + opt->rect.height() / 2); + break; + case CE_MenuBarItem: + if (const QStyleOptionMenuItem *mbi = qstyleoption_cast(opt)) { + uint alignment = Qt::AlignCenter | Qt::TextShowMnemonic | Qt::TextDontClip + | Qt::TextSingleLine; + if (!proxy()->styleHint(SH_UnderlineShortcut, mbi)) + alignment |= Qt::TextHideMnemonic; + int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); + QPixmap pix = mbi->icon.pixmap(QSize(iconExtent, iconExtent), dpr(opt->window), + mbi->state.testFlag(State_Enabled) ? QIcon::Normal : QIcon::Disabled); + if (!pix.isNull()) + proxy()->drawItemPixmap(p,mbi->rect, alignment, pix); + else + proxy()->drawItemText(p, mbi->rect, alignment, mbi->palette, mbi->state & State_Enabled, + mbi->text, QPalette::ButtonText); + } + break; + case CE_MenuBarEmptyArea: + break; + case CE_ProgressBar: + if (const QStyleOptionProgressBar *pb + = qstyleoption_cast(opt)) { + QStyleOptionProgressBar subopt = *pb; + subopt.rect = subElementRect(SE_ProgressBarGroove, pb); + proxy()->drawControl(CE_ProgressBarGroove, &subopt, p); + subopt.rect = subElementRect(SE_ProgressBarContents, pb); + proxy()->drawControl(CE_ProgressBarContents, &subopt, p); + if (pb->textVisible) { + subopt.rect = subElementRect(SE_ProgressBarLabel, pb); + proxy()->drawControl(CE_ProgressBarLabel, &subopt, p); + } + } + break; + case CE_ProgressBarGroove: + if (opt->rect.isValid()) + qDrawShadePanel(p, opt->rect, opt->palette, true, 1, + &opt->palette.brush(QPalette::Window)); + break; + case CE_ProgressBarLabel: + if (const QStyleOptionProgressBar *pb = qstyleoption_cast(opt)) { + QPalette::ColorRole textRole = QPalette::NoRole; + if ((pb->textAlignment & Qt::AlignCenter) && pb->textVisible + && ((qint64(pb->progress) - qint64(pb->minimum)) * 2 >= (qint64(pb->maximum) - qint64(pb->minimum)))) { + textRole = QPalette::HighlightedText; + //Draw text shadow, This will increase readability when the background of same color + QRect shadowRect(pb->rect); + shadowRect.translate(1,1); + QColor shadowColor = (pb->palette.color(textRole).value() <= 128) + ? QColor(255,255,255,160) : QColor(0,0,0,160); + QPalette shadowPalette = pb->palette; + shadowPalette.setColor(textRole, shadowColor); + proxy()->drawItemText(p, shadowRect, Qt::AlignCenter | Qt::TextSingleLine, shadowPalette, + pb->state & State_Enabled, pb->text, textRole); + } + proxy()->drawItemText(p, pb->rect, Qt::AlignCenter | Qt::TextSingleLine, pb->palette, + pb->state & State_Enabled, pb->text, textRole); + } + break; + case CE_ProgressBarContents: + if (const QStyleOptionProgressBar *pb = qstyleoption_cast(opt)) { + + QRect rect = pb->rect; + const bool inverted = pb->invertedAppearance; + qint64 minimum = qint64(pb->minimum); + qint64 maximum = qint64(pb->maximum); + qint64 progress = qint64(pb->progress); + + QPalette pal2 = pb->palette; + // Correct the highlight color if it is the same as the background + if (pal2.highlight() == pal2.window()) + pal2.setColor(QPalette::Highlight, pb->palette.color(QPalette::Active, + QPalette::Highlight)); + bool reverse = pb->direction == Qt::RightToLeft; + if (inverted) + reverse = !reverse; + int w = rect.width(); + if (pb->minimum == 0 && pb->maximum == 0) { + // draw busy indicator + int x = (progress - minimum) % (w * 2); + if (x > w) + x = 2 * w - x; + x = reverse ? rect.right() - x : x + rect.x(); + p->setPen(QPen(pal2.highlight().color(), 4)); + p->drawLine(x, rect.y(), x, rect.height()); + } else { + const int unit_width = proxy()->pixelMetric(PM_ProgressBarChunkWidth, pb); + if (!unit_width) + return; + + int u; + if (unit_width > 1) + u = ((rect.width() + unit_width) / unit_width); + else + u = w / unit_width; + qint64 p_v = progress - minimum; + qint64 t_s = (maximum - minimum) ? (maximum - minimum) : qint64(1); + + if (u > 0 && p_v >= INT_MAX / u && t_s >= u) { + // scale down to something usable. + p_v /= u; + t_s /= u; + } + + // nu < tnu, if last chunk is only a partial chunk + int tnu, nu; + tnu = nu = p_v * u / t_s; + + if (nu * unit_width > w) + --nu; + + // Draw nu units out of a possible u of unit_width + // width, each a rectangle bordered by background + // color, all in a sunken panel with a percentage text + // display at the end. + int x = 0; + int x0 = reverse ? rect.right() - ((unit_width > 1) ? unit_width : 0) + : rect.x(); + + QStyleOptionProgressBar pbBits = *pb; + pbBits.rect = rect; + pbBits.palette = pal2; + int myY = pbBits.rect.y(); + int myHeight = pbBits.rect.height(); + pbBits.state = State_Horizontal; + for (int i = 0; i < nu; ++i) { + pbBits.rect.setRect(x0 + x, myY, unit_width, myHeight); + proxy()->drawPrimitive(PE_IndicatorProgressChunk, &pbBits, p); + x += reverse ? -unit_width : unit_width; + } + + // Draw the last partial chunk to fill up the + // progress bar entirely + if (nu < tnu) { + int pixels_left = w - (nu * unit_width); + int offset = reverse ? x0 + x + unit_width-pixels_left : x0 + x; + pbBits.rect.setRect(offset, myY, pixels_left, myHeight); + proxy()->drawPrimitive(PE_IndicatorProgressChunk, &pbBits, p); + } + } + } + break; + case CE_HeaderLabel: + if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { + QRect rect = header->rect; + if (!header->icon.isNull()) { + int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); + QPixmap pixmap + = header->icon.pixmap(QSize(iconExtent, iconExtent), dpr(opt->window), + header->state.testFlag(State_Enabled) ? QIcon::Normal : QIcon::Disabled); + int pixw = pixmap.width() / pixmap.devicePixelRatio(); + + QRect aligned = alignedRect(header->direction, QFlag(header->iconAlignment), pixmap.size() / pixmap.devicePixelRatio(), rect); + QRect inter = aligned.intersected(rect); + p->drawPixmap(inter.x(), inter.y(), pixmap, + inter.x() - aligned.x(), inter.y() - aligned.y(), + aligned.width() * pixmap.devicePixelRatio(), + pixmap.height() * pixmap.devicePixelRatio()); + + const int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, opt); + if (header->direction == Qt::LeftToRight) + rect.setLeft(rect.left() + pixw + margin); + else + rect.setRight(rect.right() - pixw - margin); + } + if (header->state & QStyle::State_On) { + QFont fnt = p->font(); + fnt.setBold(true); + p->setFont(fnt); + } + proxy()->drawItemText(p, rect, header->textAlignment, header->palette, + (header->state & State_Enabled), header->text, QPalette::ButtonText); + } + break; + case CE_ToolButtonLabel: + if (const QStyleOptionToolButton *toolbutton + = qstyleoption_cast(opt)) { + QRect rect = toolbutton->rect; + int shiftX = 0; + int shiftY = 0; + if (toolbutton->state & (State_Sunken | State_On)) { + shiftX = proxy()->pixelMetric(PM_ButtonShiftHorizontal, toolbutton); + shiftY = proxy()->pixelMetric(PM_ButtonShiftVertical, toolbutton); + } + // Arrow type always overrules and is always shown + bool hasArrow = toolbutton->features & QStyleOptionToolButton::Arrow; + if (((!hasArrow && toolbutton->icon.isNull()) && !toolbutton->text.isEmpty()) + || toolbutton->toolButtonStyle == Qt::ToolButtonTextOnly) { + int alignment = Qt::AlignCenter | Qt::TextShowMnemonic; + if (!proxy()->styleHint(SH_UnderlineShortcut, opt)) + alignment |= Qt::TextHideMnemonic; + rect.translate(shiftX, shiftY); + p->setFont(toolbutton->font); + proxy()->drawItemText(p, rect, alignment, toolbutton->palette, + opt->state & State_Enabled, toolbutton->text, + QPalette::ButtonText); + } else { + QPixmap pm; + QSize pmSize = toolbutton->iconSize; + if (!toolbutton->icon.isNull()) { + QIcon::State state = toolbutton->state & State_On ? QIcon::On : QIcon::Off; + QIcon::Mode mode; + if (!(toolbutton->state & State_Enabled)) + mode = QIcon::Disabled; + else if ((opt->state & State_MouseOver) && (opt->state & State_AutoRaise)) + mode = QIcon::Active; + else + mode = QIcon::Normal; + pm = toolbutton->icon.pixmap(toolbutton->rect.size().boundedTo(toolbutton->iconSize), + dpr(opt->window), mode, state); + pmSize = pm.size() / pm.devicePixelRatio(); + } + + if (toolbutton->toolButtonStyle != Qt::ToolButtonIconOnly) { + p->setFont(toolbutton->font); + QRect pr = rect, + tr = rect; + int alignment = Qt::TextShowMnemonic; + if (!proxy()->styleHint(SH_UnderlineShortcut, opt)) + alignment |= Qt::TextHideMnemonic; + + if (toolbutton->toolButtonStyle == Qt::ToolButtonTextUnderIcon) { + pr.setHeight(pmSize.height() + 4); //### 4 is currently hardcoded in QToolButton::sizeHint() + tr.adjust(0, pr.height() - 1, 0, -1); + pr.translate(shiftX, shiftY); + if (!hasArrow) { + proxy()->drawItemPixmap(p, pr, Qt::AlignCenter, pm); + } else { + drawArrow(proxy(), toolbutton, pr, p); + } + alignment |= Qt::AlignCenter; + } else { + pr.setWidth(pmSize.width() + 4); //### 4 is currently hardcoded in QToolButton::sizeHint() + tr.adjust(pr.width(), 0, 0, 0); + pr.translate(shiftX, shiftY); + if (!hasArrow) { + proxy()->drawItemPixmap(p, QStyle::visualRect(opt->direction, rect, pr), Qt::AlignCenter, pm); + } else { + drawArrow(proxy(), toolbutton, pr, p); + } + alignment |= Qt::AlignLeft | Qt::AlignVCenter; + } + tr.translate(shiftX, shiftY); + const QString text = d->toolButtonElideText(toolbutton, tr, alignment); + proxy()->drawItemText(p, QStyle::visualRect(opt->direction, rect, tr), alignment, toolbutton->palette, + toolbutton->state & State_Enabled, text, + QPalette::ButtonText); + } else { + rect.translate(shiftX, shiftY); + if (hasArrow) { + drawArrow(proxy(), toolbutton, rect, p); + } else { + proxy()->drawItemPixmap(p, rect, Qt::AlignCenter, pm); + } + } + } + } + break; + case CE_ToolBoxTab: + if (const QStyleOptionToolBox *tb = qstyleoption_cast(opt)) { + proxy()->drawControl(CE_ToolBoxTabShape, tb, p); + proxy()->drawControl(CE_ToolBoxTabLabel, tb, p); + } + break; + case CE_ToolBoxTabShape: + if (const QStyleOptionToolBox *tb = qstyleoption_cast(opt)) { + p->setPen(tb->palette.mid().color().darker(150)); + int d = 20 + tb->rect.height() - 3; + if (tb->direction != Qt::RightToLeft) { + const QPoint points[] = { + QPoint(-1, tb->rect.height() + 1), + QPoint(-1, 1), + QPoint(tb->rect.width() - d, 1), + QPoint(tb->rect.width() - 20, tb->rect.height() - 2), + QPoint(tb->rect.width() - 1, tb->rect.height() - 2), + QPoint(tb->rect.width() - 1, tb->rect.height() + 1), + QPoint(-1, tb->rect.height() + 1), + }; + p->drawPolygon(points, sizeof points / sizeof *points); + } else { + const QPoint points[] = { + QPoint(tb->rect.width(), tb->rect.height() + 1), + QPoint(tb->rect.width(), 1), + QPoint(d - 1, 1), + QPoint(20 - 1, tb->rect.height() - 2), + QPoint(0, tb->rect.height() - 2), + QPoint(0, tb->rect.height() + 1), + QPoint(tb->rect.width(), tb->rect.height() + 1), + }; + p->drawPolygon(points, sizeof points / sizeof *points); + } + p->setPen(tb->palette.light().color()); + if (tb->direction != Qt::RightToLeft) { + p->drawLine(0, 2, tb->rect.width() - d, 2); + p->drawLine(tb->rect.width() - d - 1, 2, tb->rect.width() - 21, tb->rect.height() - 1); + p->drawLine(tb->rect.width() - 20, tb->rect.height() - 1, + tb->rect.width(), tb->rect.height() - 1); + } else { + p->drawLine(tb->rect.width() - 1, 2, d - 1, 2); + p->drawLine(d, 2, 20, tb->rect.height() - 1); + p->drawLine(19, tb->rect.height() - 1, + -1, tb->rect.height() - 1); + } + p->setBrush(Qt::NoBrush); + } + break; + case CE_TabBarTab: + if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { + proxy()->drawControl(CE_TabBarTabShape, tab, p); + proxy()->drawControl(CE_TabBarTabLabel, tab, p); + } + break; + case CE_TabBarTabShape: + if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { + p->save(); + + QRect rect(tab->rect); + bool selected = tab->state & State_Selected; + bool onlyOne = tab->position == QStyleOptionTab::OnlyOneTab; + int tabOverlap = onlyOne ? 0 : proxy()->pixelMetric(PM_TabBarTabOverlap, opt); + + if (!selected) { + switch (tab->shape) { + case QStyleOptionTab::TriangularNorth: + rect.adjust(0, 0, 0, -tabOverlap); + if(!selected) + rect.adjust(1, 1, -1, 0); + break; + case QStyleOptionTab::TriangularSouth: + rect.adjust(0, tabOverlap, 0, 0); + if(!selected) + rect.adjust(1, 0, -1, -1); + break; + case QStyleOptionTab::TriangularEast: + rect.adjust(tabOverlap, 0, 0, 0); + if(!selected) + rect.adjust(0, 1, -1, -1); + break; + case QStyleOptionTab::TriangularWest: + rect.adjust(0, 0, -tabOverlap, 0); + if(!selected) + rect.adjust(1, 1, 0, -1); + break; + default: + break; + } + } + + p->setPen(QPen(tab->palette.windowText(), 0)); + if (selected) { + p->setBrush(tab->palette.base()); + } else { + p->setBrush(tab->palette.window()); + } + + int y; + int x; + QPolygon a(10); + switch (tab->shape) { + case QStyleOptionTab::TriangularNorth: + case QStyleOptionTab::TriangularSouth: { + a.setPoint(0, 0, -1); + a.setPoint(1, 0, 0); + y = rect.height() - 2; + x = y / 3; + a.setPoint(2, x++, y - 1); + ++x; + a.setPoint(3, x++, y++); + a.setPoint(4, x, y); + + int i; + int right = rect.width() - 1; + for (i = 0; i < 5; ++i) + a.setPoint(9 - i, right - a.point(i).x(), a.point(i).y()); + if (tab->shape == QStyleOptionTab::TriangularNorth) + for (i = 0; i < 10; ++i) + a.setPoint(i, a.point(i).x(), rect.height() - 1 - a.point(i).y()); + + a.translate(rect.left(), rect.top()); + p->setRenderHint(QPainter::Antialiasing); + p->translate(0, 0.5); + + QPainterPath path; + path.addPolygon(a); + p->drawPath(path); + break; } + case QStyleOptionTab::TriangularEast: + case QStyleOptionTab::TriangularWest: { + a.setPoint(0, -1, 0); + a.setPoint(1, 0, 0); + x = rect.width() - 2; + y = x / 3; + a.setPoint(2, x - 1, y++); + ++y; + a.setPoint(3, x++, y++); + a.setPoint(4, x, y); + int i; + int bottom = rect.height() - 1; + for (i = 0; i < 5; ++i) + a.setPoint(9 - i, a.point(i).x(), bottom - a.point(i).y()); + if (tab->shape == QStyleOptionTab::TriangularWest) + for (i = 0; i < 10; ++i) + a.setPoint(i, rect.width() - 1 - a.point(i).x(), a.point(i).y()); + a.translate(rect.left(), rect.top()); + p->setRenderHint(QPainter::Antialiasing); + p->translate(0.5, 0); + QPainterPath path; + path.addPolygon(a); + p->drawPath(path); + break; } + default: + break; + } + p->restore(); + } + break; + case CE_ToolBoxTabLabel: + if (const QStyleOptionToolBox *tb = qstyleoption_cast(opt)) { + bool enabled = tb->state & State_Enabled; + bool selected = tb->state & State_Selected; + int iconExtent = proxy()->pixelMetric(QStyle::PM_SmallIconSize, tb); + QPixmap pm = tb->icon.pixmap(QSize(iconExtent, iconExtent), dpr(opt->window), + enabled ? QIcon::Normal : QIcon::Disabled); + + QRect cr = subElementRect(QStyle::SE_ToolBoxTabContents, tb); + QRect tr, ir; + int ih = 0; + if (pm.isNull()) { + tr = cr; + tr.adjust(4, 0, -8, 0); + } else { + int iw = pm.width() / pm.devicePixelRatio() + 4; + ih = pm.height()/ pm.devicePixelRatio(); + ir = QRect(cr.left() + 4, cr.top(), iw + 2, ih); + tr = QRect(ir.right(), cr.top(), cr.width() - ir.right() - 4, cr.height()); + } + + if (selected && proxy()->styleHint(QStyle::SH_ToolBox_SelectedPageTitleBold, tb)) { + QFont f(p->font()); + f.setBold(true); + p->setFont(f); + } + + QString txt = tb->fontMetrics.elidedText(tb->text, Qt::ElideRight, tr.width()); + + if (ih) + p->drawPixmap(ir.left(), (tb->rect.height() - ih) / 2, pm); + + int alignment = Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic; + if (!proxy()->styleHint(QStyle::SH_UnderlineShortcut, tb)) + alignment |= Qt::TextHideMnemonic; + proxy()->drawItemText(p, tr, alignment, tb->palette, enabled, txt, QPalette::ButtonText); + + if (!txt.isEmpty() && opt->state & State_HasFocus) { + QStyleOptionFocusRect opt; + opt.rect = tr; + opt.palette = tb->palette; + opt.state = QStyle::State_None; + proxy()->drawPrimitive(QStyle::PE_FrameFocusRect, &opt, p); + } + } + break; + case CE_TabBarTabLabel: + if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { + QRect tr = tab->rect; + bool verticalTabs = tab->shape == QStyleOptionTab::RoundedEast + || tab->shape == QStyleOptionTab::RoundedWest + || tab->shape == QStyleOptionTab::TriangularEast + || tab->shape == QStyleOptionTab::TriangularWest; + + int alignment = Qt::AlignCenter | Qt::TextShowMnemonic; + if (!proxy()->styleHint(SH_UnderlineShortcut, opt)) + alignment |= Qt::TextHideMnemonic; + + if (verticalTabs) { + p->save(); + int newX, newY, newRot; + if (tab->shape == QStyleOptionTab::RoundedEast || tab->shape == QStyleOptionTab::TriangularEast) { + newX = tr.width() + tr.x(); + newY = tr.y(); + newRot = 90; + } else { + newX = tr.x(); + newY = tr.y() + tr.height(); + newRot = -90; + } + QTransform m = QTransform::fromTranslate(newX, newY); + m.rotate(newRot); + p->setTransform(m, true); + } + QRect iconRect; + d->tabLayout(tab, &tr, &iconRect); + tr = proxy()->subElementRect(SE_TabBarTabText, opt); //we compute tr twice because the style may override subElementRect + + if (!tab->icon.isNull()) { + QPixmap tabIcon = tab->icon.pixmap(tab->iconSize, dpr(opt->window), + (tab->state & State_Enabled) ? QIcon::Normal + : QIcon::Disabled, + (tab->state & State_Selected) ? QIcon::On + : QIcon::Off); + p->drawPixmap(iconRect.x(), iconRect.y(), tabIcon); + } + + proxy()->drawItemText(p, tr, alignment, tab->palette, tab->state & State_Enabled, tab->text, QPalette::WindowText); + if (verticalTabs) + p->restore(); + + if (tab->state & State_HasFocus) { + const int OFFSET = 1 + pixelMetric(PM_DefaultFrameWidth); + + int x1, x2; + x1 = tab->rect.left(); + x2 = tab->rect.right() - 1; + + QStyleOptionFocusRect fropt; + fropt.QStyleOption::operator=(*tab); + fropt.rect.setRect(x1 + 1 + OFFSET, tab->rect.y() + OFFSET, + x2 - x1 - 2*OFFSET, tab->rect.height() - 2*OFFSET); + drawPrimitive(PE_FrameFocusRect, &fropt, p); + } + } + break; + case CE_SizeGrip: { + p->save(); + int x, y, w, h; + opt->rect.getRect(&x, &y, &w, &h); + + int sw = qMin(h, w); + if (h > w) + p->translate(0, h - w); + else + p->translate(w - h, 0); + + int sx = x; + int sy = y; + int s = sw / 3; + + Qt::Corner corner; + if (const QStyleOptionSizeGrip *sgOpt = qstyleoption_cast(opt)) + corner = sgOpt->corner; + else if (opt->direction == Qt::RightToLeft) + corner = Qt::BottomLeftCorner; + else + corner = Qt::BottomRightCorner; + + if (corner == Qt::BottomLeftCorner) { + sx = x + sw; + for (int i = 0; i < 4; ++i) { + p->setPen(QPen(opt->palette.light().color(), 1)); + p->drawLine(x, sy - 1 , sx + 1, sw); + p->setPen(QPen(opt->palette.dark().color(), 1)); + p->drawLine(x, sy, sx, sw); + p->setPen(QPen(opt->palette.dark().color(), 1)); + p->drawLine(x, sy + 1, sx - 1, sw); + sx -= s; + sy += s; + } + } else if (corner == Qt::BottomRightCorner) { + for (int i = 0; i < 4; ++i) { + p->setPen(QPen(opt->palette.light().color(), 1)); + p->drawLine(sx - 1, sw, sw, sy - 1); + p->setPen(QPen(opt->palette.dark().color(), 1)); + p->drawLine(sx, sw, sw, sy); + p->setPen(QPen(opt->palette.dark().color(), 1)); + p->drawLine(sx + 1, sw, sw, sy + 1); + sx += s; + sy += s; + } + } else if (corner == Qt::TopRightCorner) { + sy = y + sw; + for (int i = 0; i < 4; ++i) { + p->setPen(QPen(opt->palette.light().color(), 1)); + p->drawLine(sx - 1, y, sw, sy + 1); + p->setPen(QPen(opt->palette.dark().color(), 1)); + p->drawLine(sx, y, sw, sy); + p->setPen(QPen(opt->palette.dark().color(), 1)); + p->drawLine(sx + 1, y, sw, sy - 1); + sx += s; + sy -= s; + } + } else if (corner == Qt::TopLeftCorner) { + for (int i = 0; i < 4; ++i) { + p->setPen(QPen(opt->palette.light().color(), 1)); + p->drawLine(x, sy - 1, sx - 1, y); + p->setPen(QPen(opt->palette.dark().color(), 1)); + p->drawLine(x, sy, sx, y); + p->setPen(QPen(opt->palette.dark().color(), 1)); + p->drawLine(x, sy + 1, sx + 1, y); + sx += s; + sy += s; + } + } + p->restore(); + break; } + case CE_RubberBand: { + if (const QStyleOptionRubberBand *rbOpt = qstyleoption_cast(opt)) { + QPixmap tiledPixmap(16, 16); + QPainter pixmapPainter(&tiledPixmap); + pixmapPainter.setPen(Qt::NoPen); + pixmapPainter.setBrush(Qt::Dense4Pattern); + pixmapPainter.setBackground(QBrush(opt->palette.base())); + pixmapPainter.setBackgroundMode(Qt::OpaqueMode); + pixmapPainter.drawRect(0, 0, tiledPixmap.width(), tiledPixmap.height()); + pixmapPainter.end(); + // ### workaround for borked XRENDER + tiledPixmap = QPixmap::fromImage(tiledPixmap.toImage()); + + p->save(); + QRect r = opt->rect; + QStyleHintReturnMask mask; + if (proxy()->styleHint(QStyle::SH_RubberBand_Mask, opt, &mask)) + p->setClipRegion(mask.region); + p->drawTiledPixmap(r.x(), r.y(), r.width(), r.height(), tiledPixmap); + p->setPen(opt->palette.color(QPalette::Active, QPalette::WindowText)); + p->setBrush(Qt::NoBrush); + p->drawRect(r.adjusted(0, 0, -1, -1)); + if (rbOpt->shape == QStyleOptionRubberBand::Rectangle) + p->drawRect(r.adjusted(3, 3, -4, -4)); + p->restore(); + } + break; } + case CE_DockWidgetTitle: + if (const QStyleOptionDockWidget *dwOpt = qstyleoption_cast(opt)) { + QRect r = dwOpt->rect.adjusted(0, 0, -1, -1); + if (dwOpt->movable) { + p->setPen(dwOpt->palette.color(QPalette::Dark)); + p->drawRect(r); + } + + if (!dwOpt->title.isEmpty()) { + const bool verticalTitleBar = dwOpt->verticalTitleBar; + + if (verticalTitleBar) { + r = r.transposed(); + + p->save(); + p->translate(r.left(), r.top() + r.width()); + p->rotate(-90); + p->translate(-r.left(), -r.top()); + } + + const int indent = p->fontMetrics().descent(); + proxy()->drawItemText(p, r.adjusted(indent + 1, 1, -indent - 1, -1), + Qt::AlignLeft | Qt::AlignVCenter, dwOpt->palette, + dwOpt->state & State_Enabled, dwOpt->title, + QPalette::WindowText); + + if (verticalTitleBar) + p->restore(); + } + } + break; + case CE_Header: + if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { + QRegion clipRegion = p->clipRegion(); + p->setClipRect(opt->rect); + proxy()->drawControl(CE_HeaderSection, header, p); + QStyleOptionHeader subopt = *header; + subopt.rect = subElementRect(SE_HeaderLabel, header); + if (subopt.rect.isValid()) + proxy()->drawControl(CE_HeaderLabel, &subopt, p); + if (header->sortIndicator != QStyleOptionHeader::None) { + subopt.rect = subElementRect(SE_HeaderArrow, opt); + proxy()->drawPrimitive(PE_IndicatorHeaderArrow, &subopt, p); + } + p->setClipRegion(clipRegion); + } + break; + case CE_FocusFrame: + p->fillRect(opt->rect, opt->palette.windowText()); + break; + case CE_HeaderSection: + qDrawShadePanel(p, opt->rect, opt->palette, + opt->state & State_Sunken, 1, + &opt->palette.brush(QPalette::Button)); + break; + case CE_HeaderEmptyArea: + p->fillRect(opt->rect, opt->palette.window()); + break; + case CE_ComboBoxLabel: + if (const QStyleOptionComboBox *cb = qstyleoption_cast(opt)) { + QRect editRect = proxy()->subControlRect(CC_ComboBox, cb, SC_ComboBoxEditField); + p->save(); + p->setClipRect(editRect); + if (!cb->currentIcon.isNull()) { + QIcon::Mode mode = cb->state & State_Enabled ? QIcon::Normal + : QIcon::Disabled; + QPixmap pixmap = cb->currentIcon.pixmap(cb->iconSize, dpr(opt->window), mode); + QRect iconRect(editRect); + iconRect.setWidth(cb->iconSize.width() + 4); + iconRect = alignedRect(cb->direction, + Qt::AlignLeft | Qt::AlignVCenter, + iconRect.size(), editRect); + if (cb->editable) + p->fillRect(iconRect, opt->palette.brush(QPalette::Base)); + proxy()->drawItemPixmap(p, iconRect, Qt::AlignCenter, pixmap); + + if (cb->direction == Qt::RightToLeft) + editRect.translate(-4 - cb->iconSize.width(), 0); + else + editRect.translate(cb->iconSize.width() + 4, 0); + } + if (!cb->currentText.isEmpty() && !cb->editable) { + proxy()->drawItemText(p, editRect.adjusted(1, 0, -1, 0), + visualAlignment(cb->direction, Qt::AlignLeft | Qt::AlignVCenter), + cb->palette, cb->state & State_Enabled, cb->currentText); + } + p->restore(); + } + break; + case CE_ToolBar: + if (const QStyleOptionToolBar *toolBar = qstyleoption_cast(opt)) { + // Compatibility with styles that use PE_PanelToolBar + QStyleOptionFrame frame; + frame.QStyleOption::operator=(*toolBar); + frame.lineWidth = toolBar->lineWidth; + frame.midLineWidth = toolBar->midLineWidth; + proxy()->drawPrimitive(PE_PanelToolBar, opt, p); + + qDrawShadePanel(p, toolBar->rect, toolBar->palette, false, toolBar->lineWidth, + &toolBar->palette.brush(QPalette::Button)); + } + break; + case CE_ColumnViewGrip: { + // draw background gradients + QLinearGradient g(0, 0, opt->rect.width(), 0); + g.setColorAt(0, opt->palette.color(QPalette::Active, QPalette::Mid)); + g.setColorAt(0.5, Qt::white); + p->fillRect(QRect(0, 0, opt->rect.width(), opt->rect.height()), g); + + // draw the two lines + QPen pen(p->pen()); + pen.setWidth(opt->rect.width()/20); + pen.setColor(opt->palette.color(QPalette::Active, QPalette::Dark)); + p->setPen(pen); + + int line1starting = opt->rect.width()*8 / 20; + int line2starting = opt->rect.width()*13 / 20; + int top = opt->rect.height()*20/75; + int bottom = opt->rect.height() - 1 - top; + p->drawLine(line1starting, top, line1starting, bottom); + p->drawLine(line2starting, top, line2starting, bottom); + } + break; + case CE_ItemViewItem: + if (const QStyleOptionViewItem *vopt = qstyleoption_cast(opt)) { + p->save(); + p->setClipRect(opt->rect); + + QRect checkRect = proxy()->subElementRect(SE_ItemViewItemCheckIndicator, vopt); + QRect iconRect = proxy()->subElementRect(SE_ItemViewItemDecoration, vopt); + QRect textRect = proxy()->subElementRect(SE_ItemViewItemText, vopt); + + // draw the background + proxy()->drawPrimitive(PE_PanelItemViewItem, opt, p); + + // draw the check mark + if (vopt->features & QStyleOptionViewItem::HasCheckIndicator) { + QStyleOptionViewItem option(*vopt); + option.rect = checkRect; + option.state = option.state & ~QStyle::State_HasFocus; + + switch (vopt->checkState) { + case Qt::Unchecked: + option.state |= QStyle::State_Off; + break; + case Qt::PartiallyChecked: + option.state |= QStyle::State_NoChange; + break; + case Qt::Checked: + option.state |= QStyle::State_On; + break; + } + proxy()->drawPrimitive(QStyle::PE_IndicatorItemViewItemCheck, &option, p); + } + + // draw the icon + QIcon::Mode mode = QIcon::Normal; + if (!(vopt->state & QStyle::State_Enabled)) + mode = QIcon::Disabled; + else if (vopt->state & QStyle::State_Selected) + mode = QIcon::Selected; + QIcon::State state = vopt->state & QStyle::State_Open ? QIcon::On : QIcon::Off; + vopt->icon.paint(p, iconRect, vopt->decorationAlignment, mode, state); + + // draw the text + if (!vopt->text.isEmpty()) { + QPalette::ColorGroup cg = vopt->state & QStyle::State_Enabled + ? QPalette::Normal : QPalette::Disabled; + if (cg == QPalette::Normal && !(vopt->state & QStyle::State_Active)) + cg = QPalette::Inactive; + + if (vopt->state & QStyle::State_Selected) { + p->setPen(vopt->palette.color(cg, QPalette::HighlightedText)); + } else { + p->setPen(vopt->palette.color(cg, QPalette::Text)); + } + if (vopt->state & QStyle::State_Editing) { + p->setPen(vopt->palette.color(cg, QPalette::Text)); + p->drawRect(textRect.adjusted(0, 0, -1, -1)); + } + + d->viewItemDrawText(p, vopt, textRect); + } + + // draw the focus rect + if (vopt->state & QStyle::State_HasFocus) { + QStyleOptionFocusRect o; + o.QStyleOption::operator=(*vopt); + o.rect = proxy()->subElementRect(SE_ItemViewItemFocusRect, vopt); + o.state |= QStyle::State_KeyboardFocusChange; + o.state |= QStyle::State_Item; + QPalette::ColorGroup cg = (vopt->state & QStyle::State_Enabled) + ? QPalette::Normal : QPalette::Disabled; + o.backgroundColor = vopt->palette.color(cg, (vopt->state & QStyle::State_Selected) + ? QPalette::Highlight : QPalette::Window); + proxy()->drawPrimitive(QStyle::PE_FrameFocusRect, &o, p); + } + + p->restore(); + } + break; + case CE_ShapedFrame: + if (const QStyleOptionFrame *f = qstyleoption_cast(opt)) { + int frameShape = f->frameShape; + int frameShadow = QStyleOptionFrame::Plain; + if (f->state & QStyle::State_Sunken) { + frameShadow = QStyleOptionFrame::Sunken; + } else if (f->state & QStyle::State_Raised) { + frameShadow = QStyleOptionFrame::Raised; + } + + int lw = f->lineWidth; + int mlw = f->midLineWidth; + QPalette::ColorRole foregroundRole = QPalette::WindowText; + + switch (frameShape) { + case QStyleOptionFrame::Box: + if (frameShadow == QStyleOptionFrame::Plain) { + qDrawPlainRect(p, f->rect, f->palette.color(foregroundRole), lw); + } else { + qDrawShadeRect(p, f->rect, f->palette, frameShadow == QStyleOptionFrame::Sunken, lw, mlw); + } + break; + case QStyleOptionFrame::StyledPanel: + proxy()->drawPrimitive(QStyle::PE_Frame, opt, p); + break; + case QStyleOptionFrame::Panel: + if (frameShadow == QStyleOptionFrame::Plain) { + qDrawPlainRect(p, f->rect, f->palette.color(foregroundRole), lw); + } else { + qDrawShadePanel(p, f->rect, f->palette, frameShadow == QStyleOptionFrame::Sunken, lw); + } + break; + case QStyleOptionFrame::WinPanel: + if (frameShadow == QStyleOptionFrame::Plain) { + qDrawPlainRect(p, f->rect, f->palette.color(foregroundRole), lw); + } else { + qDrawWinPanel(p, f->rect, f->palette, frameShadow == QStyleOptionFrame::Sunken); + } + break; + case QStyleOptionFrame::HLine: + case QStyleOptionFrame::VLine: { + QPoint p1, p2; + if (frameShape == QStyleOptionFrame::HLine) { + p1 = QPoint(opt->rect.x(), opt->rect.y() + opt->rect.height() / 2); + p2 = QPoint(opt->rect.x() + opt->rect.width(), p1.y()); + } else { + p1 = QPoint(opt->rect.x() + opt->rect.width() / 2, opt->rect.y()); + p2 = QPoint(p1.x(), p1.y() + opt->rect.height()); + } + if (frameShadow == QStyleOptionFrame::Plain) { + QPen oldPen = p->pen(); + p->setPen(QPen(opt->palette.brush(foregroundRole), lw)); + p->drawLine(p1, p2); + p->setPen(oldPen); + } else { + qDrawShadeLine(p, p1, p2, f->palette, frameShadow == QStyleOptionFrame::Sunken, lw, mlw); + } + break; + } + } + } + break; + default: + break; + } +} + +QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt) const +{ + Q_D(const QCommonStyle); + QRect r; + switch (sr) { + case SE_PushButtonContents: + if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { + int dx1, dx2; + dx1 = proxy()->pixelMetric(PM_DefaultFrameWidth, btn); + if (btn->features & QStyleOptionButton::AutoDefaultButton) + dx1 += proxy()->pixelMetric(PM_ButtonDefaultIndicator, btn); + dx2 = dx1 * 2; + r.setRect(opt->rect.x() + dx1, opt->rect.y() + dx1, opt->rect.width() - dx2, + opt->rect.height() - dx2); + r = visualRect(opt->direction, opt->rect, r); + } + break; + case SE_PushButtonFocusRect: + if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { + int dbw1 = 0, dbw2 = 0; + if (btn->features & QStyleOptionButton::AutoDefaultButton){ + dbw1 = proxy()->pixelMetric(PM_ButtonDefaultIndicator, btn); + dbw2 = dbw1 * 2; + } + + int dfw1 = proxy()->pixelMetric(PM_DefaultFrameWidth, btn) + 1, + dfw2 = dfw1 * 2; + + r.setRect(btn->rect.x() + dfw1 + dbw1, btn->rect.y() + dfw1 + dbw1, + btn->rect.width() - dfw2 - dbw2, btn->rect.height()- dfw2 - dbw2); + r = visualRect(opt->direction, opt->rect, r); + } + break; + case SE_CheckBoxIndicator: + { + int h = proxy()->pixelMetric(PM_IndicatorHeight, opt); + r.setRect(opt->rect.x(), opt->rect.y() + ((opt->rect.height() - h) / 2), + proxy()->pixelMetric(PM_IndicatorWidth, opt), h); + r = visualRect(opt->direction, opt->rect, r); + } + break; + + case SE_CheckBoxContents: + { + // Deal with the logical first, then convert it back to screen coords. + QRect ir = visualRect(opt->direction, opt->rect, + subElementRect(SE_CheckBoxIndicator, opt)); + int spacing = proxy()->pixelMetric(PM_CheckBoxLabelSpacing, opt); + r.setRect(ir.right() + spacing, opt->rect.y(), opt->rect.width() - ir.width() - spacing, + opt->rect.height()); + r = visualRect(opt->direction, opt->rect, r); + } + break; + + case SE_CheckBoxFocusRect: + if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { + if (btn->icon.isNull() && btn->text.isEmpty()) { + r = subElementRect(SE_CheckBoxIndicator, opt); + r.adjust(1, 1, -1, -1); + break; + } + // As above, deal with the logical first, then convert it back to screen coords. + QRect cr = visualRect(btn->direction, btn->rect, subElementRect(SE_CheckBoxContents, btn)); + + QRect iconRect, textRect; + if (!btn->text.isEmpty()) { + textRect = itemTextRect(opt->fontMetrics, cr, Qt::AlignAbsolute | Qt::AlignLeft + | Qt::AlignVCenter | Qt::TextShowMnemonic, + btn->state & State_Enabled, btn->text); + } + if (!btn->icon.isNull()) { + iconRect = itemPixmapRect(cr, Qt::AlignAbsolute | Qt::AlignLeft | Qt::AlignVCenter + | Qt::TextShowMnemonic, + btn->icon.pixmap(btn->iconSize, dpr(opt->window), QIcon::Normal)); + if (!textRect.isEmpty()) + textRect.translate(iconRect.right() + 4, 0); + } + r = iconRect | textRect; + r.adjust(-3, -2, 3, 2); + r = r.intersected(btn->rect); + r = visualRect(btn->direction, btn->rect, r); + } + break; + + case SE_RadioButtonIndicator: + { + int h = proxy()->pixelMetric(PM_ExclusiveIndicatorHeight, opt); + r.setRect(opt->rect.x(), opt->rect.y() + ((opt->rect.height() - h) / 2), + proxy()->pixelMetric(PM_ExclusiveIndicatorWidth, opt), h); + r = visualRect(opt->direction, opt->rect, r); + } + break; + + case SE_RadioButtonContents: + { + QRect ir = visualRect(opt->direction, opt->rect, + subElementRect(SE_RadioButtonIndicator, opt)); + int spacing = proxy()->pixelMetric(PM_RadioButtonLabelSpacing, opt); + r.setRect(ir.left() + ir.width() + spacing, opt->rect.y(), opt->rect.width() - ir.width() - spacing, + opt->rect.height()); + r = visualRect(opt->direction, opt->rect, r); + break; + } + + case SE_RadioButtonFocusRect: + if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { + if (btn->icon.isNull() && btn->text.isEmpty()) { + r = subElementRect(SE_RadioButtonIndicator, opt); + r.adjust(1, 1, -1, -1); + break; + } + QRect cr = visualRect(btn->direction, btn->rect, subElementRect(SE_RadioButtonContents, opt)); + + QRect iconRect, textRect; + if (!btn->text.isEmpty()){ + textRect = itemTextRect(opt->fontMetrics, cr, Qt::AlignAbsolute | Qt::AlignLeft | Qt::AlignVCenter + | Qt::TextShowMnemonic, btn->state & State_Enabled, btn->text); + } + if (!btn->icon.isNull()) { + iconRect = itemPixmapRect(cr, Qt::AlignAbsolute | Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic, + btn->icon.pixmap(btn->iconSize, dpr(opt->window), QIcon::Normal)); + if (!textRect.isEmpty()) + textRect.translate(iconRect.right() + 4, 0); + } + r = iconRect | textRect; + r.adjust(-3, -2, 3, 2); + r = r.intersected(btn->rect); + r = visualRect(btn->direction, btn->rect, r); + } + break; + case SE_SliderFocusRect: + if (const QStyleOptionSlider *slider = qstyleoption_cast(opt)) { + int tickOffset = proxy()->pixelMetric(PM_SliderTickmarkOffset, slider); + int thickness = proxy()->pixelMetric(PM_SliderControlThickness, slider); + if (slider->orientation == Qt::Horizontal) + r.setRect(0, tickOffset - 1, slider->rect.width(), thickness + 2); + else + r.setRect(tickOffset - 1, 0, thickness + 2, slider->rect.height()); + r = r.intersected(slider->rect); + r = visualRect(opt->direction, opt->rect, r); + } + break; + case SE_ProgressBarGroove: + case SE_ProgressBarContents: + case SE_ProgressBarLabel: + if (const QStyleOptionProgressBar *pb = qstyleoption_cast(opt)) { + int textw = 0; + if (pb->textVisible) + textw = qMax(pb->fontMetrics.horizontalAdvance(pb->text), pb->fontMetrics.horizontalAdvance(QLatin1String("100%"))) + 6; + + if ((pb->textAlignment & Qt::AlignCenter) == 0) { + if (sr != SE_ProgressBarLabel) + r.setCoords(pb->rect.left(), pb->rect.top(), + pb->rect.right() - textw, pb->rect.bottom()); + else + r.setCoords(pb->rect.right() - textw, pb->rect.top(), + pb->rect.right(), pb->rect.bottom()); + } else { + r = pb->rect; + } + r = visualRect(pb->direction, pb->rect, r); + } + break; + case SE_ComboBoxFocusRect: + if (const QStyleOptionComboBox *cb = qstyleoption_cast(opt)) { + int margin = cb->frame ? 3 : 0; + r.setRect(opt->rect.left() + margin, opt->rect.top() + margin, + opt->rect.width() - 2*margin - 16, opt->rect.height() - 2*margin); + r = visualRect(opt->direction, opt->rect, r); + } + break; + case SE_ToolBoxTabContents: + r = opt->rect; + r.adjust(0, 0, -30, 0); + break; + case SE_HeaderLabel: { + int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, opt); + r.setRect(opt->rect.x() + margin, opt->rect.y() + margin, + opt->rect.width() - margin * 2, opt->rect.height() - margin * 2); + + if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { + // Subtract width needed for arrow, if there is one + if (header->sortIndicator != QStyleOptionHeader::None) { + if (opt->state & State_Horizontal) + r.setWidth(r.width() - (opt->rect.height() / 2) - (margin * 2)); + else + r.setHeight(r.height() - (opt->rect.width() / 2) - (margin * 2)); + } + } + r = visualRect(opt->direction, opt->rect, r); + break; } + case SE_HeaderArrow: { + int h = opt->rect.height(); + int w = opt->rect.width(); + int x = opt->rect.x(); + int y = opt->rect.y(); + int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, opt); + + if (opt->state & State_Horizontal) { + int horiz_size = h / 2; + r.setRect(x + w - margin * 2 - horiz_size, y + 5, + horiz_size, h - margin * 2 - 5); + } else { + int vert_size = w / 2; + r.setRect(x + 5, y + h - margin * 2 - vert_size, + w - margin * 2 - 5, vert_size); + } + r = visualRect(opt->direction, opt->rect, r); + break; } + + case SE_RadioButtonClickRect: + r = subElementRect(SE_RadioButtonFocusRect, opt); + r |= subElementRect(SE_RadioButtonIndicator, opt); + break; + case SE_CheckBoxClickRect: + r = subElementRect(SE_CheckBoxFocusRect, opt); + r |= subElementRect(SE_CheckBoxIndicator, opt); + break; + case SE_TabWidgetTabBar: + if (const QStyleOptionTabWidgetFrame *twf + = qstyleoption_cast(opt)) { + r.setSize(twf->tabBarSize); + const uint alingMask = Qt::AlignLeft | Qt::AlignRight | Qt::AlignHCenter; + switch (twf->shape) { + case QStyleOptionTab::RoundedNorth: + case QStyleOptionTab::TriangularNorth: + // Constrain the size now, otherwise, center could get off the page + // This of course repeated for all the other directions + r.setWidth(qMin(r.width(), twf->rect.width() + - twf->leftCornerWidgetSize.width() + - twf->rightCornerWidgetSize.width())); + switch (proxy()->styleHint(SH_TabBar_Alignment, twf) & alingMask) { + default: + case Qt::AlignLeft: + r.moveTopLeft(QPoint(twf->leftCornerWidgetSize.width(), 0)); + break; + case Qt::AlignHCenter: + r.moveTopLeft(QPoint(twf->rect.center().x() - qRound(r.width() / 2.0f) + + (twf->leftCornerWidgetSize.width() / 2) + - (twf->rightCornerWidgetSize.width() / 2), 0)); + break; + case Qt::AlignRight: + r.moveTopLeft(QPoint(twf->rect.width() - twf->tabBarSize.width() + - twf->rightCornerWidgetSize.width(), 0)); + break; + } + r = visualRect(twf->direction, twf->rect, r); + break; + case QStyleOptionTab::RoundedSouth: + case QStyleOptionTab::TriangularSouth: + r.setWidth(qMin(r.width(), twf->rect.width() + - twf->leftCornerWidgetSize.width() + - twf->rightCornerWidgetSize.width())); + switch (proxy()->styleHint(SH_TabBar_Alignment, twf) & alingMask) { + default: + case Qt::AlignLeft: + r.moveTopLeft(QPoint(twf->leftCornerWidgetSize.width(), + twf->rect.height() - twf->tabBarSize.height())); + break; + case Qt::AlignHCenter: + r.moveTopLeft(QPoint(twf->rect.center().x() - qRound(r.width() / 2.0f) + + (twf->leftCornerWidgetSize.width() / 2) + - (twf->rightCornerWidgetSize.width() / 2), + twf->rect.height() - twf->tabBarSize.height())); + break; + case Qt::AlignRight: + r.moveTopLeft(QPoint(twf->rect.width() - twf->tabBarSize.width() + - twf->rightCornerWidgetSize.width(), + twf->rect.height() - twf->tabBarSize.height())); + break; + } + r = visualRect(twf->direction, twf->rect, r); + break; + case QStyleOptionTab::RoundedEast: + case QStyleOptionTab::TriangularEast: + r.setHeight(qMin(r.height(), twf->rect.height() + - twf->leftCornerWidgetSize.height() + - twf->rightCornerWidgetSize.height())); + switch (proxy()->styleHint(SH_TabBar_Alignment, twf) & alingMask) { + default: + case Qt::AlignLeft: + r.moveTopLeft(QPoint(twf->rect.width() - twf->tabBarSize.width(), + twf->leftCornerWidgetSize.height())); + break; + case Qt::AlignHCenter: + r.moveTopLeft(QPoint(twf->rect.width() - twf->tabBarSize.width(), + twf->rect.center().y() - r.height() / 2)); + break; + case Qt::AlignRight: + r.moveTopLeft(QPoint(twf->rect.width() - twf->tabBarSize.width(), + twf->rect.height() - twf->tabBarSize.height() + - twf->rightCornerWidgetSize.height())); + break; + } + break; + case QStyleOptionTab::RoundedWest: + case QStyleOptionTab::TriangularWest: + r.setHeight(qMin(r.height(), twf->rect.height() + - twf->leftCornerWidgetSize.height() + - twf->rightCornerWidgetSize.height())); + switch (proxy()->styleHint(SH_TabBar_Alignment, twf) & alingMask) { + default: + case Qt::AlignLeft: + r.moveTopLeft(QPoint(0, twf->leftCornerWidgetSize.height())); + break; + case Qt::AlignHCenter: + r.moveTopLeft(QPoint(0, twf->rect.center().y() - r.height() / 2)); + break; + case Qt::AlignRight: + r.moveTopLeft(QPoint(0, twf->rect.height() - twf->tabBarSize.height() + - twf->rightCornerWidgetSize.height())); + break; + } + break; + } + } + break; + case SE_TabWidgetTabPane: + case SE_TabWidgetTabContents: + if (const QStyleOptionTabWidgetFrame *twf = qstyleoption_cast(opt)) { + QStyleOptionTab tabopt; + tabopt.shape = twf->shape; + int overlap = proxy()->pixelMetric(PM_TabBarBaseOverlap, &tabopt); + if (twf->lineWidth == 0) + overlap = 0; + switch (twf->shape) { + case QStyleOptionTab::RoundedNorth: + case QStyleOptionTab::TriangularNorth: + r = QRect(QPoint(0,qMax(twf->tabBarSize.height() - overlap, 0)), + QSize(twf->rect.width(), qMin(twf->rect.height() - twf->tabBarSize.height() + overlap, twf->rect.height()))); + break; + case QStyleOptionTab::RoundedSouth: + case QStyleOptionTab::TriangularSouth: + r = QRect(QPoint(0,0), QSize(twf->rect.width(), qMin(twf->rect.height() - twf->tabBarSize.height() + overlap, twf->rect.height()))); + break; + case QStyleOptionTab::RoundedEast: + case QStyleOptionTab::TriangularEast: + r = QRect(QPoint(0, 0), QSize(qMin(twf->rect.width() - twf->tabBarSize.width() + overlap, twf->rect.width()), twf->rect.height())); + break; + case QStyleOptionTab::RoundedWest: + case QStyleOptionTab::TriangularWest: + r = QRect(QPoint(qMax(twf->tabBarSize.width() - overlap, 0), 0), + QSize(qMin(twf->rect.width() - twf->tabBarSize.width() + overlap, twf->rect.width()), twf->rect.height())); + break; + } + if (sr == SE_TabWidgetTabContents && twf->lineWidth > 0) + r.adjust(2, 2, -2, -2); + } + break; + case SE_TabWidgetLeftCorner: + if (const QStyleOptionTabWidgetFrame *twf = qstyleoption_cast(opt)) { + QRect paneRect = subElementRect(SE_TabWidgetTabPane, twf); + switch (twf->shape) { + case QStyleOptionTab::RoundedNorth: + case QStyleOptionTab::TriangularNorth: + r = QRect(QPoint(paneRect.x(), paneRect.y() - twf->leftCornerWidgetSize.height()), + twf->leftCornerWidgetSize); + break; + case QStyleOptionTab::RoundedSouth: + case QStyleOptionTab::TriangularSouth: + r = QRect(QPoint(paneRect.x(), paneRect.height()), twf->leftCornerWidgetSize); + break; + default: + break; + } + r = visualRect(twf->direction, twf->rect, r); + } + break; + case SE_TabWidgetRightCorner: + if (const QStyleOptionTabWidgetFrame *twf = qstyleoption_cast(opt)) { + QRect paneRect = subElementRect(SE_TabWidgetTabPane, twf); + switch (twf->shape) { + case QStyleOptionTab::RoundedNorth: + case QStyleOptionTab::TriangularNorth: + r = QRect(QPoint(paneRect.width() - twf->rightCornerWidgetSize.width(), + paneRect.y() - twf->rightCornerWidgetSize.height()), + twf->rightCornerWidgetSize); + break; + case QStyleOptionTab::RoundedSouth: + case QStyleOptionTab::TriangularSouth: + r = QRect(QPoint(paneRect.width() - twf->rightCornerWidgetSize.width(), + paneRect.height()), twf->rightCornerWidgetSize); + break; + default: + break; + } + r = visualRect(twf->direction, twf->rect, r); + } + break; + case SE_TabBarTabText: + if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { + QRect dummyIconRect; + d->tabLayout(tab, &r, &dummyIconRect); + } + break; + case SE_TabBarTabLeftButton: + case SE_TabBarTabRightButton: + if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { + bool selected = tab->state & State_Selected; + int verticalShift = proxy()->pixelMetric(QStyle::PM_TabBarTabShiftVertical, tab); + int horizontalShift = proxy()->pixelMetric(QStyle::PM_TabBarTabShiftHorizontal, tab); + int hpadding = proxy()->pixelMetric(QStyle::PM_TabBarTabHSpace, opt) / 2; + hpadding = qMax(hpadding, 4); //workaround KStyle returning 0 because they workaround an old bug in Qt + + bool verticalTabs = tab->shape == QStyleOptionTab::RoundedEast + || tab->shape == QStyleOptionTab::RoundedWest + || tab->shape == QStyleOptionTab::TriangularEast + || tab->shape == QStyleOptionTab::TriangularWest; + + QRect tr = tab->rect; + if (tab->shape == QStyleOptionTab::RoundedSouth || tab->shape == QStyleOptionTab::TriangularSouth) + verticalShift = -verticalShift; + if (verticalTabs) { + qSwap(horizontalShift, verticalShift); + horizontalShift *= -1; + verticalShift *= -1; + } + if (tab->shape == QStyleOptionTab::RoundedWest || tab->shape == QStyleOptionTab::TriangularWest) + horizontalShift = -horizontalShift; + + tr.adjust(0, 0, horizontalShift, verticalShift); + if (selected) + { + tr.setBottom(tr.bottom() - verticalShift); + tr.setRight(tr.right() - horizontalShift); + } + + QSize size = (sr == SE_TabBarTabLeftButton) ? tab->leftButtonSize : tab->rightButtonSize; + int w = size.width(); + int h = size.height(); + int midHeight = static_cast(qCeil(float(tr.height() - h) / 2)); + int midWidth = ((tr.width() - w) / 2); + + bool atTheTop = true; + switch (tab->shape) { + case QStyleOptionTab::RoundedWest: + case QStyleOptionTab::TriangularWest: + atTheTop = (sr == SE_TabBarTabLeftButton); + break; + case QStyleOptionTab::RoundedEast: + case QStyleOptionTab::TriangularEast: + atTheTop = (sr == SE_TabBarTabRightButton); + break; + default: + if (sr == SE_TabBarTabLeftButton) + r = QRect(tab->rect.x() + hpadding, midHeight, w, h); + else + r = QRect(tab->rect.right() - w - hpadding, midHeight, w, h); + r = visualRect(tab->direction, tab->rect, r); + } + if (verticalTabs) { + if (atTheTop) + r = QRect(midWidth, tr.y() + tab->rect.height() - hpadding - h, w, h); + else + r = QRect(midWidth, tr.y() + hpadding, w, h); + } + } + + break; + case SE_TabBarTearIndicator: + if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { + switch (tab->shape) { + case QStyleOptionTab::RoundedNorth: + case QStyleOptionTab::TriangularNorth: + case QStyleOptionTab::RoundedSouth: + case QStyleOptionTab::TriangularSouth: + r.setRect(tab->rect.left(), tab->rect.top(), 8, opt->rect.height()); + break; + case QStyleOptionTab::RoundedWest: + case QStyleOptionTab::TriangularWest: + case QStyleOptionTab::RoundedEast: + case QStyleOptionTab::TriangularEast: + r.setRect(tab->rect.left(), tab->rect.top(), opt->rect.width(), 8); + break; + default: + break; + } + r = visualRect(opt->direction, opt->rect, r); + } + break; + case SE_TabBarScrollLeftButton: { + const bool vertical = opt->rect.width() < opt->rect.height(); + const Qt::LayoutDirection ld = opt->direction; + const int buttonWidth = proxy()->pixelMetric(QStyle::PM_TabBarScrollButtonWidth, nullptr); + const int buttonOverlap = proxy()->pixelMetric(QStyle::PM_TabBar_ScrollButtonOverlap, nullptr); + + r = vertical ? QRect(0, opt->rect.height() - (buttonWidth * 2) + buttonOverlap, opt->rect.width(), buttonWidth) + : QStyle::visualRect(ld, opt->rect, QRect(opt->rect.width() - (buttonWidth * 2) + buttonOverlap, 0, buttonWidth, opt->rect.height())); + break; } + case SE_TabBarScrollRightButton: { + const bool vertical = opt->rect.width() < opt->rect.height(); + const Qt::LayoutDirection ld = opt->direction; + const int buttonWidth = proxy()->pixelMetric(QStyle::PM_TabBarScrollButtonWidth, nullptr); + + r = vertical ? QRect(0, opt->rect.height() - buttonWidth, opt->rect.width(), buttonWidth) + : QStyle::visualRect(ld, opt->rect, QRect(opt->rect.width() - buttonWidth, 0, buttonWidth, opt->rect.height())); + break; } + case SE_TreeViewDisclosureItem: + r = opt->rect; + break; + case SE_LineEditContents: + if (const QStyleOptionFrame *f = qstyleoption_cast(opt)) { + r = f->rect.adjusted(f->lineWidth, f->lineWidth, -f->lineWidth, -f->lineWidth); + r = visualRect(opt->direction, opt->rect, r); + } + break; + case SE_FrameContents: + if (const QStyleOptionFrame *f = qstyleoption_cast(opt)) { + int fw = proxy()->pixelMetric(PM_DefaultFrameWidth, f); + r = opt->rect.adjusted(fw, fw, -fw, -fw); + r = visualRect(opt->direction, opt->rect, r); + } + break; + case SE_ShapedFrameContents: + if (const QStyleOptionFrame *f = qstyleoption_cast(opt)) { + int frameShape = f->frameShape; + int frameShadow = QStyleOptionFrame::Plain; + if (f->state & QStyle::State_Sunken) { + frameShadow = QStyleOptionFrame::Sunken; + } else if (f->state & QStyle::State_Raised) { + frameShadow = QStyleOptionFrame::Raised; + } + + int frameWidth = 0; + + switch (frameShape) { + case QStyleOptionFrame::NoFrame: + frameWidth = 0; + break; + + case QStyleOptionFrame::Box: + case QStyleOptionFrame::HLine: + case QStyleOptionFrame::VLine: + switch (frameShadow) { + case QStyleOptionFrame::Plain: + frameWidth = f->lineWidth; + break; + case QStyleOptionFrame::Raised: + case QStyleOptionFrame::Sunken: + frameWidth = (short)(f->lineWidth*2 + f->midLineWidth); + break; + } + break; + + case QStyleOptionFrame::StyledPanel: + //keep the compatibility with Qt 4.4 if there is a proxy style. + //be sure to call drawPrimitive(QStyle::SE_FrameContents) on the proxy style + return subElementRect(QStyle::SE_FrameContents, opt); + + case QStyleOptionFrame::WinPanel: + frameWidth = 2; + break; + + case QStyleOptionFrame::Panel: + switch (frameShadow) { + case QStyleOptionFrame::Plain: + case QStyleOptionFrame::Raised: + case QStyleOptionFrame::Sunken: + frameWidth = f->lineWidth; + break; + } + break; + } + r = f->rect.adjusted(frameWidth, frameWidth, -frameWidth, -frameWidth); + } + break; + case SE_DockWidgetCloseButton: + case SE_DockWidgetFloatButton: + case SE_DockWidgetTitleBarText: + case SE_DockWidgetIcon: { + int iconSize = proxy()->pixelMetric(PM_SmallIconSize, opt); + int buttonMargin = proxy()->pixelMetric(PM_DockWidgetTitleBarButtonMargin, opt); + QRect rect = opt->rect; + + const QStyleOptionDockWidget *dwOpt + = qstyleoption_cast(opt); + bool canClose = dwOpt == nullptr ? true : dwOpt->closable; + bool canFloat = dwOpt == nullptr ? false : dwOpt->floatable; + + const bool verticalTitleBar = dwOpt && dwOpt->verticalTitleBar; + + // If this is a vertical titlebar, we transpose and work as if it was + // horizontal, then transpose again. + + if (verticalTitleBar) + rect = rect.transposed(); + + do { + int right = rect.right(); + int left = rect.left(); + + QRect closeRect; + if (canClose) { + QSize sz = proxy()->standardIcon(QStyle::SP_TitleBarCloseButton, + opt).actualSize(QSize(iconSize, iconSize)); + sz += QSize(buttonMargin, buttonMargin); + if (verticalTitleBar) + sz = sz.transposed(); + closeRect = QRect(right - sz.width(), + rect.center().y() - sz.height()/2, + sz.width(), sz.height()); + right = closeRect.left() - 1; + } + if (sr == SE_DockWidgetCloseButton) { + r = closeRect; + break; + } + + QRect floatRect; + if (canFloat) { + QSize sz = proxy()->standardIcon(QStyle::SP_TitleBarNormalButton, + opt).actualSize(QSize(iconSize, iconSize)); + sz += QSize(buttonMargin, buttonMargin); + if (verticalTitleBar) + sz = sz.transposed(); + floatRect = QRect(right - sz.width(), + rect.center().y() - sz.height()/2, + sz.width(), sz.height()); + right = floatRect.left() - 1; + } + if (sr == SE_DockWidgetFloatButton) { + r = floatRect; + break; + } + + QRect iconRect; + if (sr == SE_DockWidgetIcon) { + r = iconRect; + break; + } + + QRect textRect = QRect(left, rect.top(), + right - left, rect.height()); + if (sr == SE_DockWidgetTitleBarText) { + r = textRect; + break; + } + + } while (false); + + if (verticalTitleBar) { + r = QRect(rect.left() + r.top() - rect.top(), + rect.top() + rect.right() - r.right(), + r.height(), r.width()); + } else { + r = visualRect(opt->direction, rect, r); + } + break; + } + case SE_ItemViewItemCheckIndicator: + if (!qstyleoption_cast(opt)) { + r = subElementRect(SE_CheckBoxIndicator, opt); + break; + } + Q_FALLTHROUGH(); + case SE_ItemViewItemDecoration: + case SE_ItemViewItemText: + case SE_ItemViewItemFocusRect: + if (const QStyleOptionViewItem *vopt = qstyleoption_cast(opt)) { + if (!d->isViewItemCached(*vopt)) { + d->viewItemLayout(vopt, &d->checkRect, &d->decorationRect, &d->displayRect, false); + if (d->cachedOption) { + delete d->cachedOption; + d->cachedOption = nullptr; + } + d->cachedOption = new QStyleOptionViewItem(*vopt); + } + if (sr == SE_ItemViewItemCheckIndicator) + r = d->checkRect; + else if (sr == SE_ItemViewItemDecoration) + r = d->decorationRect; + else if (sr == SE_ItemViewItemText || sr == SE_ItemViewItemFocusRect) + r = d->displayRect; + } + break; + case SE_ToolBarHandle: + if (const QStyleOptionToolBar *tbopt = qstyleoption_cast(opt)) { + if (tbopt->features & QStyleOptionToolBar::Movable) { + ///we need to access the widget here because the style option doesn't + //have all the information we need (ie. the layout's margin) + const QMargins margins(2, 2, 2, 2); + const int handleExtent = proxy()->pixelMetric(QStyle::PM_ToolBarHandleExtent, opt); + if (tbopt->state & QStyle::State_Horizontal) { + r = QRect(margins.left(), margins.top(), + handleExtent, + tbopt->rect.height() - (margins.top() + margins.bottom())); + r = QStyle::visualRect(tbopt->direction, tbopt->rect, r); + } else { + r = QRect(margins.left(), margins.top(), + tbopt->rect.width() - (margins.left() + margins.right()), + handleExtent); + } + } + } + break; + default: + break; + } + return r; +} + +// in lieu of std::array, minimal API +template +struct StaticPolygonF +{ + QPointF data[N]; + + Q_DECL_CONSTEXPR int size() const { return N; } + Q_DECL_CONSTEXPR const QPointF *cbegin() const { return data; } + Q_DECL_CONSTEXPR const QPointF &operator[](int idx) const { return data[idx]; } +}; + +static StaticPolygonF<3> calcArrow(const QStyleOptionSlider *dial, qreal &a) +{ + int width = dial->rect.width(); + int height = dial->rect.height(); + int r = qMin(width, height) / 2; + int currentSliderPosition = dial->upsideDown ? dial->sliderPosition : (dial->maximum - dial->sliderPosition); + + if (dial->maximum == dial->minimum) + a = Q_PI / 2; + else if (dial->dialWrapping) + a = Q_PI * 3 / 2 - (currentSliderPosition - dial->minimum) * 2 * Q_PI + / (dial->maximum - dial->minimum); + else + a = (Q_PI * 8 - (currentSliderPosition - dial->minimum) * 10 * Q_PI + / (dial->maximum - dial->minimum)) / 6; + + int xc = width / 2; + int yc = height / 2; + + int len = r - QStyleHelper::calcBigLineSize(r) - 5; + if (len < 5) + len = 5; + int back = len / 2; + + StaticPolygonF<3> arrow = {{ + QPointF(0.5 + xc + len * qCos(a), + 0.5 + yc - len * qSin(a)), + QPointF(0.5 + xc + back * qCos(a + Q_PI * 5 / 6), + 0.5 + yc - back * qSin(a + Q_PI * 5 / 6)), + QPointF(0.5 + xc + back * qCos(a - Q_PI * 5 / 6), + 0.5 + yc - back * qSin(a - Q_PI * 5 / 6)), + }}; + return arrow; +} + +void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p) const +{ + switch (cc) { + case CC_Slider: + if (const QStyleOptionSlider *slider = qstyleoption_cast(opt)) { + if (slider->subControls == SC_SliderTickmarks) { + int tickOffset = proxy()->pixelMetric(PM_SliderTickmarkOffset, slider); + int ticks = slider->tickPosition; + int thickness = proxy()->pixelMetric(PM_SliderControlThickness, slider); + int len = proxy()->pixelMetric(PM_SliderLength, slider); + int available = proxy()->pixelMetric(PM_SliderSpaceAvailable, slider); + int interval = slider->tickInterval; + if (interval <= 0) { + interval = slider->singleStep; + if (QStyle::sliderPositionFromValue(slider->minimum, slider->maximum, interval, + available) + - QStyle::sliderPositionFromValue(slider->minimum, slider->maximum, + 0, available) < 3) + interval = slider->pageStep; + } + if (!interval) + interval = 1; + int fudge = len / 2; + int pos; + // Since there is no subrect for tickmarks do a translation here. + p->save(); + p->translate(slider->rect.x(), slider->rect.y()); + p->setPen(slider->palette.windowText().color()); + int v = slider->minimum; + while (v <= slider->maximum + 1) { + if (v == slider->maximum + 1 && interval == 1) + break; + const int v_ = qMin(v, slider->maximum); + pos = QStyle::sliderPositionFromValue(slider->minimum, slider->maximum, + v_, available) + fudge; + if (slider->orientation == Qt::Horizontal) { + if (ticks & QStyleOptionSlider::TicksAbove) + p->drawLine(pos, 0, pos, tickOffset - 2); + if (ticks & QStyleOptionSlider::TicksBelow) + p->drawLine(pos, tickOffset + thickness + 1, pos, + slider->rect.height()-1); + } else { + if (ticks & QStyleOptionSlider::TicksAbove) + p->drawLine(0, pos, tickOffset - 2, pos); + if (ticks & QStyleOptionSlider::TicksBelow) + p->drawLine(tickOffset + thickness + 1, pos, + slider->rect.width()-1, pos); + } + // in the case where maximum is max int + int nextInterval = v + interval; + if (nextInterval < v) + break; + v = nextInterval; + } + p->restore(); + } + } + break; + case CC_ScrollBar: + if (const QStyleOptionSlider *scrollbar = qstyleoption_cast(opt)) { + // Make a copy here and reset it for each primitive. + QStyleOptionSlider newScrollbar = *scrollbar; + State saveFlags = scrollbar->state; + + if (scrollbar->subControls & SC_ScrollBarSubLine) { + newScrollbar.state = saveFlags; + newScrollbar.rect = proxy()->subControlRect(cc, &newScrollbar, SC_ScrollBarSubLine); + if (newScrollbar.rect.isValid()) { + if (!(scrollbar->activeSubControls & SC_ScrollBarSubLine)) + newScrollbar.state &= ~(State_Sunken | State_MouseOver); + proxy()->drawControl(CE_ScrollBarSubLine, &newScrollbar, p); + } + } + if (scrollbar->subControls & SC_ScrollBarAddLine) { + newScrollbar.rect = scrollbar->rect; + newScrollbar.state = saveFlags; + newScrollbar.rect = proxy()->subControlRect(cc, &newScrollbar, SC_ScrollBarAddLine); + if (newScrollbar.rect.isValid()) { + if (!(scrollbar->activeSubControls & SC_ScrollBarAddLine)) + newScrollbar.state &= ~(State_Sunken | State_MouseOver); + proxy()->drawControl(CE_ScrollBarAddLine, &newScrollbar, p); + } + } + if (scrollbar->subControls & SC_ScrollBarSubPage) { + newScrollbar.rect = scrollbar->rect; + newScrollbar.state = saveFlags; + newScrollbar.rect = proxy()->subControlRect(cc, &newScrollbar, SC_ScrollBarSubPage); + if (newScrollbar.rect.isValid()) { + if (!(scrollbar->activeSubControls & SC_ScrollBarSubPage)) + newScrollbar.state &= ~(State_Sunken | State_MouseOver); + proxy()->drawControl(CE_ScrollBarSubPage, &newScrollbar, p); + } + } + if (scrollbar->subControls & SC_ScrollBarAddPage) { + newScrollbar.rect = scrollbar->rect; + newScrollbar.state = saveFlags; + newScrollbar.rect = proxy()->subControlRect(cc, &newScrollbar, SC_ScrollBarAddPage); + if (newScrollbar.rect.isValid()) { + if (!(scrollbar->activeSubControls & SC_ScrollBarAddPage)) + newScrollbar.state &= ~(State_Sunken | State_MouseOver); + proxy()->drawControl(CE_ScrollBarAddPage, &newScrollbar, p); + } + } + if (scrollbar->subControls & SC_ScrollBarFirst) { + newScrollbar.rect = scrollbar->rect; + newScrollbar.state = saveFlags; + newScrollbar.rect = proxy()->subControlRect(cc, &newScrollbar, SC_ScrollBarFirst); + if (newScrollbar.rect.isValid()) { + if (!(scrollbar->activeSubControls & SC_ScrollBarFirst)) + newScrollbar.state &= ~(State_Sunken | State_MouseOver); + proxy()->drawControl(CE_ScrollBarFirst, &newScrollbar, p); + } + } + if (scrollbar->subControls & SC_ScrollBarLast) { + newScrollbar.rect = scrollbar->rect; + newScrollbar.state = saveFlags; + newScrollbar.rect = proxy()->subControlRect(cc, &newScrollbar, SC_ScrollBarLast); + if (newScrollbar.rect.isValid()) { + if (!(scrollbar->activeSubControls & SC_ScrollBarLast)) + newScrollbar.state &= ~(State_Sunken | State_MouseOver); + proxy()->drawControl(CE_ScrollBarLast, &newScrollbar, p); + } + } + if (scrollbar->subControls & SC_ScrollBarSlider) { + newScrollbar.rect = scrollbar->rect; + newScrollbar.state = saveFlags; + newScrollbar.rect = proxy()->subControlRect(cc, &newScrollbar, SC_ScrollBarSlider); + if (newScrollbar.rect.isValid()) { + if (!(scrollbar->activeSubControls & SC_ScrollBarSlider)) + newScrollbar.state &= ~(State_Sunken | State_MouseOver); + proxy()->drawControl(CE_ScrollBarSlider, &newScrollbar, p); + + if (scrollbar->state & State_HasFocus) { + QStyleOptionFocusRect fropt; + fropt.QStyleOption::operator=(newScrollbar); + fropt.rect.setRect(newScrollbar.rect.x() + 2, newScrollbar.rect.y() + 2, + newScrollbar.rect.width() - 5, + newScrollbar.rect.height() - 5); + proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, p); + } + } + } + } + break; + case CC_SpinBox: + if (const QStyleOptionSpinBox *sb = qstyleoption_cast(opt)) { + QStyleOptionSpinBox copy = *sb; + PrimitiveElement pe; + + if (sb->frame && (sb->subControls & SC_SpinBoxFrame)) { + QRect r = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxFrame); + qDrawWinPanel(p, r, sb->palette, true); + } + + if (sb->subControls & SC_SpinBoxUp) { + copy.subControls = SC_SpinBoxUp; + QPalette pal2 = sb->palette; + if (!(sb->stepEnabled & QStyleOptionSpinBox::StepUpEnabled)) { + pal2.setCurrentColorGroup(QPalette::Disabled); + copy.state &= ~State_Enabled; + } + + copy.palette = pal2; + + if (sb->activeSubControls == SC_SpinBoxUp && (sb->state & State_Sunken)) { + copy.state |= State_On; + copy.state |= State_Sunken; + } else { + copy.state |= State_Raised; + copy.state &= ~State_Sunken; + } + pe = (sb->buttonSymbols == QStyleOptionSpinBox::PlusMinus ? PE_IndicatorSpinPlus + : PE_IndicatorSpinUp); + + copy.rect = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxUp); + proxy()->drawPrimitive(PE_PanelButtonBevel, ©, p); + copy.rect.adjust(3, 0, -4, 0); + proxy()->drawPrimitive(pe, ©, p); + } + + if (sb->subControls & SC_SpinBoxDown) { + copy.subControls = SC_SpinBoxDown; + copy.state = sb->state; + QPalette pal2 = sb->palette; + if (!(sb->stepEnabled & QStyleOptionSpinBox::StepDownEnabled)) { + pal2.setCurrentColorGroup(QPalette::Disabled); + copy.state &= ~State_Enabled; + } + copy.palette = pal2; + + if (sb->activeSubControls == SC_SpinBoxDown && (sb->state & State_Sunken)) { + copy.state |= State_On; + copy.state |= State_Sunken; + } else { + copy.state |= State_Raised; + copy.state &= ~State_Sunken; + } + pe = (sb->buttonSymbols == QStyleOptionSpinBox::PlusMinus ? PE_IndicatorSpinMinus + : PE_IndicatorSpinDown); + + copy.rect = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxDown); + proxy()->drawPrimitive(PE_PanelButtonBevel, ©, p); + copy.rect.adjust(3, 0, -4, 0); + proxy()->drawPrimitive(pe, ©, p); + } + } + break; + case CC_ToolButton: + if (const QStyleOptionToolButton *toolbutton + = qstyleoption_cast(opt)) { + QRect button, menuarea; + button = proxy()->subControlRect(cc, toolbutton, SC_ToolButton); + menuarea = proxy()->subControlRect(cc, toolbutton, SC_ToolButtonMenu); + + State bflags = toolbutton->state & ~State_Sunken; + + if (bflags & State_AutoRaise) { + if (!(bflags & State_MouseOver) || !(bflags & State_Enabled)) { + bflags &= ~State_Raised; + } + } + State mflags = bflags; + if (toolbutton->state & State_Sunken) { + if (toolbutton->activeSubControls & SC_ToolButton) + bflags |= State_Sunken; + mflags |= State_Sunken; + } + + QStyleOption tool = *toolbutton; + if (toolbutton->subControls & SC_ToolButton) { + if (bflags & (State_Sunken | State_On | State_Raised)) { + tool.rect = button; + tool.state = bflags; + proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p); + } + } + + if (toolbutton->state & State_HasFocus) { + QStyleOptionFocusRect fr; + fr.QStyleOption::operator=(*toolbutton); + fr.rect.adjust(3, 3, -3, -3); + if (toolbutton->features & QStyleOptionToolButton::MenuButtonPopup) + fr.rect.adjust(0, 0, -proxy()->pixelMetric(QStyle::PM_MenuButtonIndicator, + toolbutton), 0); + proxy()->drawPrimitive(PE_FrameFocusRect, &fr, p); + } + QStyleOptionToolButton label = *toolbutton; + label.state = bflags; + int fw = proxy()->pixelMetric(PM_DefaultFrameWidth, opt); + label.rect = button.adjusted(fw, fw, -fw, -fw); + proxy()->drawControl(CE_ToolButtonLabel, &label, p); + + if (toolbutton->subControls & SC_ToolButtonMenu) { + tool.rect = menuarea; + tool.state = mflags; + if (mflags & (State_Sunken | State_On | State_Raised)) + proxy()->drawPrimitive(PE_IndicatorButtonDropDown, &tool, p); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &tool, p); + } else if (toolbutton->features & QStyleOptionToolButton::HasMenu) { + int mbi = proxy()->pixelMetric(PM_MenuButtonIndicator, toolbutton); + QRect ir = toolbutton->rect; + QStyleOptionToolButton newBtn = *toolbutton; + newBtn.rect = QRect(ir.right() + 5 - mbi, ir.y() + ir.height() - mbi + 4, mbi - 6, mbi - 6); + newBtn.rect = visualRect(toolbutton->direction, button, newBtn.rect); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &newBtn, p); + } + } + break; + case CC_TitleBar: + if (const QStyleOptionTitleBar *tb = qstyleoption_cast(opt)) { + QRect ir; + if (opt->subControls & SC_TitleBarLabel) { + QColor left = tb->palette.highlight().color(); + QColor right = tb->palette.base().color(); + + QBrush fillBrush(left); + if (left != right) { + QPoint p1(tb->rect.x(), tb->rect.top() + tb->rect.height()/2); + QPoint p2(tb->rect.right(), tb->rect.top() + tb->rect.height()/2); + QLinearGradient lg(p1, p2); + lg.setColorAt(0, left); + lg.setColorAt(1, right); + fillBrush = lg; + } + + p->fillRect(opt->rect, fillBrush); + + ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarLabel); + + p->setPen(tb->palette.highlightedText().color()); + p->drawText(ir.x() + 2, ir.y(), ir.width() - 2, ir.height(), + Qt::AlignLeft | Qt::AlignVCenter | Qt::TextSingleLine, tb->text); + } + + bool down = false; + QPixmap pm; + + QStyleOption tool = *tb; + if (tb->subControls & SC_TitleBarCloseButton && tb->titleBarFlags & Qt::WindowSystemMenuHint) { + ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarCloseButton); + down = tb->activeSubControls & SC_TitleBarCloseButton && (opt->state & State_Sunken); + if ((tb->titleBarFlags & Qt::WindowType_Mask) == Qt::Tool) + pm = proxy()->standardIcon(SP_DockWidgetCloseButton, &tool).pixmap(QSize(10, 10), dpr(opt->window)); + else + pm = proxy()->standardIcon(SP_TitleBarCloseButton, &tool).pixmap(QSize(10, 10), dpr(opt->window)); + tool.rect = ir; + tool.state = down ? State_Sunken : State_Raised; + proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p); + + p->save(); + if (down) + p->translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb), + proxy()->pixelMetric(PM_ButtonShiftVertical, tb)); + proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); + p->restore(); + } + + if (tb->subControls & SC_TitleBarMaxButton + && tb->titleBarFlags & Qt::WindowMaximizeButtonHint + && !(tb->titleBarState & Qt::WindowMaximized)) { + ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarMaxButton); + + down = tb->activeSubControls & SC_TitleBarMaxButton && (opt->state & State_Sunken); + pm = proxy()->standardIcon(SP_TitleBarMaxButton, &tool).pixmap(QSize(10, 10), dpr(opt->window)); + tool.rect = ir; + tool.state = down ? State_Sunken : State_Raised; + proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p); + + p->save(); + if (down) + p->translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb), + proxy()->pixelMetric(PM_ButtonShiftVertical, tb)); + proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); + p->restore(); + } + + if (tb->subControls & SC_TitleBarMinButton + && tb->titleBarFlags & Qt::WindowMinimizeButtonHint + && !(tb->titleBarState & Qt::WindowMinimized)) { + ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarMinButton); + down = tb->activeSubControls & SC_TitleBarMinButton && (opt->state & State_Sunken); + pm = proxy()->standardIcon(SP_TitleBarMinButton, &tool).pixmap(QSize(10, 10), dpr(opt->window)); + tool.rect = ir; + tool.state = down ? State_Sunken : State_Raised; + proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p); + + p->save(); + if (down) + p->translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb), + proxy()->pixelMetric(PM_ButtonShiftVertical, tb)); + proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); + p->restore(); + } + + bool drawNormalButton = (tb->subControls & SC_TitleBarNormalButton) + && (((tb->titleBarFlags & Qt::WindowMinimizeButtonHint) + && (tb->titleBarState & Qt::WindowMinimized)) + || ((tb->titleBarFlags & Qt::WindowMaximizeButtonHint) + && (tb->titleBarState & Qt::WindowMaximized))); + + if (drawNormalButton) { + ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarNormalButton); + down = tb->activeSubControls & SC_TitleBarNormalButton && (opt->state & State_Sunken); + pm = proxy()->standardIcon(SP_TitleBarNormalButton, &tool).pixmap(QSize(10, 10), dpr(opt->window)); + tool.rect = ir; + tool.state = down ? State_Sunken : State_Raised; + proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p); + + p->save(); + if (down) + p->translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb), + proxy()->pixelMetric(PM_ButtonShiftVertical, tb)); + proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); + p->restore(); + } + + if (tb->subControls & SC_TitleBarShadeButton + && tb->titleBarFlags & Qt::WindowShadeButtonHint + && !(tb->titleBarState & Qt::WindowMinimized)) { + ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarShadeButton); + down = (tb->activeSubControls & SC_TitleBarShadeButton && (opt->state & State_Sunken)); + pm = proxy()->standardIcon(SP_TitleBarShadeButton, &tool).pixmap(QSize(10, 10), dpr(opt->window)); + tool.rect = ir; + tool.state = down ? State_Sunken : State_Raised; + proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p); + p->save(); + if (down) + p->translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb), + proxy()->pixelMetric(PM_ButtonShiftVertical, tb)); + proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); + p->restore(); + } + + if (tb->subControls & SC_TitleBarUnshadeButton + && tb->titleBarFlags & Qt::WindowShadeButtonHint + && tb->titleBarState & Qt::WindowMinimized) { + ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarUnshadeButton); + + down = tb->activeSubControls & SC_TitleBarUnshadeButton && (opt->state & State_Sunken); + pm = proxy()->standardIcon(SP_TitleBarUnshadeButton, &tool).pixmap(QSize(10, 10), dpr(opt->window)); + tool.rect = ir; + tool.state = down ? State_Sunken : State_Raised; + proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p); + p->save(); + if (down) + p->translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb), + proxy()->pixelMetric(PM_ButtonShiftVertical, tb)); + proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); + p->restore(); + } + if (tb->subControls & SC_TitleBarContextHelpButton + && tb->titleBarFlags & Qt::WindowContextHelpButtonHint) { + ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarContextHelpButton); + + down = tb->activeSubControls & SC_TitleBarContextHelpButton && (opt->state & State_Sunken); + pm = proxy()->standardIcon(SP_TitleBarContextHelpButton, &tool).pixmap(QSize(10, 10), dpr(opt->window)); + tool.rect = ir; + tool.state = down ? State_Sunken : State_Raised; + proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p); + p->save(); + if (down) + p->translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb), + proxy()->pixelMetric(PM_ButtonShiftVertical, tb)); + proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); + p->restore(); + } + if (tb->subControls & SC_TitleBarSysMenu && tb->titleBarFlags & Qt::WindowSystemMenuHint) { + ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarSysMenu); + if (!tb->icon.isNull()) { + tb->icon.paint(p, ir); + } else { + int iconSize = proxy()->pixelMetric(PM_SmallIconSize, tb); + pm = proxy()->standardIcon(SP_TitleBarMenuButton, &tool).pixmap(QSize(iconSize, iconSize), dpr(opt->window)); + tool.rect = ir; + p->save(); + proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); + p->restore(); + } + } + } + break; + case CC_Dial: + if (const QStyleOptionSlider *dial = qstyleoption_cast(opt)) { + // OK, this is more a port of things over + p->save(); + + // avoid dithering + if (p->paintEngine()->hasFeature(QPaintEngine::Antialiasing)) + p->setRenderHint(QPainter::Antialiasing); + + int width = dial->rect.width(); + int height = dial->rect.height(); + qreal r = qMin(width, height) / 2; + qreal d_ = r / 6; + qreal dx = dial->rect.x() + d_ + (width - 2 * r) / 2 + 1; + qreal dy = dial->rect.y() + d_ + (height - 2 * r) / 2 + 1; + QRect br = QRect(int(dx), int(dy), int(r * 2 - 2 * d_ - 2), int(r * 2 - 2 * d_ - 2)); + + QPalette pal = opt->palette; + // draw notches + if (dial->subControls & QStyle::SC_DialTickmarks) { + p->setPen(pal.windowText().color()); + p->drawLines(QStyleHelper::calcLines(dial)); + } + + if (dial->state & State_Enabled) { + p->setBrush(pal.brush(QPalette::ColorRole(proxy()->styleHint(SH_Dial_BackgroundRole, dial)))); + p->setPen(Qt::NoPen); + p->drawEllipse(br); + p->setBrush(Qt::NoBrush); + } + p->setPen(QPen(pal.dark().color())); + p->drawArc(br, 60 * 16, 180 * 16); + p->setPen(QPen(pal.light().color())); + p->drawArc(br, 240 * 16, 180 * 16); + + qreal a; + const StaticPolygonF<3> arrow = calcArrow(dial, a); + + p->setPen(Qt::NoPen); + p->setBrush(pal.button()); + p->drawPolygon(arrow.cbegin(), arrow.size()); + + a = QStyleHelper::angle(QPointF(width / 2, height / 2), arrow[0]); + p->setBrush(Qt::NoBrush); + + if (a <= 0 || a > 200) { + p->setPen(pal.light().color()); + p->drawLine(arrow[2], arrow[0]); + p->drawLine(arrow[1], arrow[2]); + p->setPen(pal.dark().color()); + p->drawLine(arrow[0], arrow[1]); + } else if (a > 0 && a < 45) { + p->setPen(pal.light().color()); + p->drawLine(arrow[2], arrow[0]); + p->setPen(pal.dark().color()); + p->drawLine(arrow[1], arrow[2]); + p->drawLine(arrow[0], arrow[1]); + } else if (a >= 45 && a < 135) { + p->setPen(pal.dark().color()); + p->drawLine(arrow[2], arrow[0]); + p->drawLine(arrow[1], arrow[2]); + p->setPen(pal.light().color()); + p->drawLine(arrow[0], arrow[1]); + } else if (a >= 135 && a < 200) { + p->setPen(pal.dark().color()); + p->drawLine(arrow[2], arrow[0]); + p->setPen(pal.light().color()); + p->drawLine(arrow[0], arrow[1]); + p->drawLine(arrow[1], arrow[2]); + } + + // draw focus rect around the dial + QStyleOptionFocusRect fropt; + fropt.rect = dial->rect; + fropt.state = dial->state; + fropt.palette = dial->palette; + if (fropt.state & QStyle::State_HasFocus) { + br.adjust(0, 0, 2, 2); + if (dial->subControls & SC_DialTickmarks) { + int r = qMin(width, height) / 2; + br.translate(-r / 6, - r / 6); + br.setWidth(br.width() + r / 3); + br.setHeight(br.height() + r / 3); + } + fropt.rect = br.adjusted(-2, -2, 2, 2); + proxy()->drawPrimitive(QStyle::PE_FrameFocusRect, &fropt, p); + } + p->restore(); + } + break; + case CC_GroupBox: + if (const QStyleOptionGroupBox *groupBox = qstyleoption_cast(opt)) { + // Draw frame + QRect textRect = proxy()->subControlRect(CC_GroupBox, opt, SC_GroupBoxLabel); + QRect checkBoxRect = proxy()->subControlRect(CC_GroupBox, opt, SC_GroupBoxCheckBox); + if (groupBox->subControls & QStyle::SC_GroupBoxFrame) { + QStyleOptionFrame frame; + frame.QStyleOption::operator=(*groupBox); + frame.features = groupBox->features; + frame.lineWidth = groupBox->lineWidth; + frame.midLineWidth = groupBox->midLineWidth; + frame.rect = proxy()->subControlRect(CC_GroupBox, opt, SC_GroupBoxFrame); + p->save(); + QRegion region(groupBox->rect); + if (!groupBox->text.isEmpty()) { + bool ltr = groupBox->direction == Qt::LeftToRight; + QRect finalRect; + if (groupBox->subControls & QStyle::SC_GroupBoxCheckBox) { + finalRect = checkBoxRect.united(textRect); + finalRect.adjust(ltr ? -4 : 0, 0, ltr ? 0 : 4, 0); + } else { + finalRect = textRect; + } + region -= finalRect; + } + p->setClipRegion(region); + proxy()->drawPrimitive(PE_FrameGroupBox, &frame, p); + p->restore(); + } + + // Draw title + if ((groupBox->subControls & QStyle::SC_GroupBoxLabel) && !groupBox->text.isEmpty()) { + QColor textColor = groupBox->textColor; + if (textColor.isValid()) + p->setPen(textColor); + int alignment = int(groupBox->textAlignment); + if (!proxy()->styleHint(QStyle::SH_UnderlineShortcut, opt)) + alignment |= Qt::TextHideMnemonic; + + proxy()->drawItemText(p, textRect, Qt::TextShowMnemonic | Qt::AlignHCenter | alignment, + groupBox->palette, groupBox->state & State_Enabled, groupBox->text, + textColor.isValid() ? QPalette::NoRole : QPalette::WindowText); + + if (groupBox->state & State_HasFocus) { + QStyleOptionFocusRect fropt; + fropt.QStyleOption::operator=(*groupBox); + fropt.rect = textRect; + proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, p); + } + } + + // Draw checkbox + if (groupBox->subControls & SC_GroupBoxCheckBox) { + QStyleOptionButton box; + box.QStyleOption::operator=(*groupBox); + box.rect = checkBoxRect; + proxy()->drawPrimitive(PE_IndicatorCheckBox, &box, p); + } + } + break; + case CC_MdiControls: + { + QStyleOptionButton btnOpt; + btnOpt.QStyleOption::operator=(*opt); + btnOpt.state &= ~State_MouseOver; + int bsx = 0; + int bsy = 0; + const int buttonIconMetric = proxy()->pixelMetric(PM_TitleBarButtonIconSize, &btnOpt); + const QSize buttonIconSize(buttonIconMetric, buttonIconMetric); + if (opt->subControls & QStyle::SC_MdiCloseButton) { + if (opt->activeSubControls & QStyle::SC_MdiCloseButton && (opt->state & State_Sunken)) { + btnOpt.state |= State_Sunken; + btnOpt.state &= ~State_Raised; + bsx = proxy()->pixelMetric(PM_ButtonShiftHorizontal); + bsy = proxy()->pixelMetric(PM_ButtonShiftVertical); + } else { + btnOpt.state |= State_Raised; + btnOpt.state &= ~State_Sunken; + bsx = 0; + bsy = 0; + } + btnOpt.rect = proxy()->subControlRect(CC_MdiControls, opt, SC_MdiCloseButton); + proxy()->drawPrimitive(PE_PanelButtonCommand, &btnOpt, p); + QPixmap pm = proxy()->standardIcon(SP_TitleBarCloseButton).pixmap(buttonIconSize, dpr(opt->window)); + proxy()->drawItemPixmap(p, btnOpt.rect.translated(bsx, bsy), Qt::AlignCenter, pm); + } + if (opt->subControls & QStyle::SC_MdiNormalButton) { + if (opt->activeSubControls & QStyle::SC_MdiNormalButton && (opt->state & State_Sunken)) { + btnOpt.state |= State_Sunken; + btnOpt.state &= ~State_Raised; + bsx = proxy()->pixelMetric(PM_ButtonShiftHorizontal); + bsy = proxy()->pixelMetric(PM_ButtonShiftVertical); + } else { + btnOpt.state |= State_Raised; + btnOpt.state &= ~State_Sunken; + bsx = 0; + bsy = 0; + } + btnOpt.rect = proxy()->subControlRect(CC_MdiControls, opt, SC_MdiNormalButton); + proxy()->drawPrimitive(PE_PanelButtonCommand, &btnOpt, p); + QPixmap pm = proxy()->standardIcon(SP_TitleBarNormalButton).pixmap(buttonIconSize, dpr(opt->window)); + proxy()->drawItemPixmap(p, btnOpt.rect.translated(bsx, bsy), Qt::AlignCenter, pm); + } + if (opt->subControls & QStyle::SC_MdiMinButton) { + if (opt->activeSubControls & QStyle::SC_MdiMinButton && (opt->state & State_Sunken)) { + btnOpt.state |= State_Sunken; + btnOpt.state &= ~State_Raised; + bsx = proxy()->pixelMetric(PM_ButtonShiftHorizontal); + bsy = proxy()->pixelMetric(PM_ButtonShiftVertical); + } else { + btnOpt.state |= State_Raised; + btnOpt.state &= ~State_Sunken; + bsx = 0; + bsy = 0; + } + btnOpt.rect = proxy()->subControlRect(CC_MdiControls, opt, SC_MdiMinButton); + proxy()->drawPrimitive(PE_PanelButtonCommand, &btnOpt, p); + QPixmap pm = proxy()->standardIcon(SP_TitleBarMinButton).pixmap(buttonIconSize, dpr(opt->window)); + proxy()->drawItemPixmap(p, btnOpt.rect.translated(bsx, bsy), Qt::AlignCenter, pm); + } + } + break; + default: + qWarning("QCommonStyle::drawComplexControl: Control %d not handled", cc); + } +} + +/*! + \reimp +*/ +QStyle::SubControl QCommonStyle::hitTestComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, const QPoint &pt) const +{ + SubControl sc = SC_None; + switch (cc) { + case CC_Slider: + if (const QStyleOptionSlider *slider = qstyleoption_cast(opt)) { + QRect r = proxy()->subControlRect(cc, slider, SC_SliderHandle); + if (r.isValid() && r.contains(pt)) { + sc = SC_SliderHandle; + } else { + r = proxy()->subControlRect(cc, slider, SC_SliderGroove); + if (r.isValid() && r.contains(pt)) + sc = SC_SliderGroove; + } + } + break; + case CC_ScrollBar: + if (const QStyleOptionSlider *scrollbar = qstyleoption_cast(opt)) { + QRect r; + uint ctrl = SC_ScrollBarAddLine; + while (ctrl <= SC_ScrollBarGroove) { + r = proxy()->subControlRect(cc, scrollbar, QStyle::SubControl(ctrl)); + if (r.isValid() && r.contains(pt)) { + sc = QStyle::SubControl(ctrl); + break; + } + ctrl <<= 1; + } + } + break; + case CC_ToolButton: + if (const QStyleOptionToolButton *toolbutton = qstyleoption_cast(opt)) { + QRect r; + uint ctrl = SC_ToolButton; + while (ctrl <= SC_ToolButtonMenu) { + r = proxy()->subControlRect(cc, toolbutton, QStyle::SubControl(ctrl)); + if (r.isValid() && r.contains(pt)) { + sc = QStyle::SubControl(ctrl); + break; + } + ctrl <<= 1; + } + } + break; + case CC_SpinBox: + if (const QStyleOptionSpinBox *spinbox = qstyleoption_cast(opt)) { + QRect r; + uint ctrl = SC_SpinBoxUp; + while (ctrl <= SC_SpinBoxEditField) { + r = proxy()->subControlRect(cc, spinbox, QStyle::SubControl(ctrl)); + if (r.isValid() && r.contains(pt)) { + sc = QStyle::SubControl(ctrl); + break; + } + ctrl <<= 1; + } + } + break; + case CC_TitleBar: + if (const QStyleOptionTitleBar *tb = qstyleoption_cast(opt)) { + QRect r; + uint ctrl = SC_TitleBarSysMenu; + + while (ctrl <= SC_TitleBarLabel) { + r = proxy()->subControlRect(cc, tb, QStyle::SubControl(ctrl)); + if (r.isValid() && r.contains(pt)) { + sc = QStyle::SubControl(ctrl); + break; + } + ctrl <<= 1; + } + } + break; + case CC_ComboBox: + if (const QStyleOptionComboBox *cb = qstyleoption_cast(opt)) { + QRect r; + uint ctrl = SC_ComboBoxArrow; // Start here and go down. + while (ctrl > 0) { + r = proxy()->subControlRect(cc, cb, QStyle::SubControl(ctrl)); + if (r.isValid() && r.contains(pt)) { + sc = QStyle::SubControl(ctrl); + break; + } + ctrl >>= 1; + } + } + break; + case CC_GroupBox: + if (const QStyleOptionGroupBox *groupBox = qstyleoption_cast(opt)) { + QRect r; + uint ctrl = SC_GroupBoxCheckBox; + while (ctrl <= SC_GroupBoxFrame) { + r = proxy()->subControlRect(cc, groupBox, QStyle::SubControl(ctrl)); + if (r.isValid() && r.contains(pt)) { + sc = QStyle::SubControl(ctrl); + break; + } + ctrl <<= 1; + } + } + break; + case CC_MdiControls: + { + QRect r; + uint ctrl = SC_MdiMinButton; + while (ctrl <= SC_MdiCloseButton) { + r = proxy()->subControlRect(CC_MdiControls, opt, QStyle::SubControl(ctrl)); + if (r.isValid() && r.contains(pt) && (opt->subControls & ctrl)) { + sc = QStyle::SubControl(ctrl); + return sc; + } + ctrl <<= 1; + } + } + break; + default: + qWarning("QCommonStyle::hitTestComplexControl: Case %d not handled", cc); + } + return sc; +} + +/*! + \reimp +*/ +QRect QCommonStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc) const +{ + QRect ret; + switch (cc) { + case CC_Slider: + if (const QStyleOptionSlider *slider = qstyleoption_cast(opt)) { + int tickOffset = proxy()->pixelMetric(PM_SliderTickmarkOffset, slider); + int thickness = proxy()->pixelMetric(PM_SliderControlThickness, slider); + + switch (sc) { + case SC_SliderHandle: { + int sliderPos = 0; + int len = proxy()->pixelMetric(PM_SliderLength, slider); + bool horizontal = slider->orientation == Qt::Horizontal; + sliderPos = sliderPositionFromValue(slider->minimum, slider->maximum, + slider->sliderPosition, + (horizontal ? slider->rect.width() + : slider->rect.height()) - len, + slider->upsideDown); + if (horizontal) + ret.setRect(slider->rect.x() + sliderPos, slider->rect.y() + tickOffset, len, thickness); + else + ret.setRect(slider->rect.x() + tickOffset, slider->rect.y() + sliderPos, thickness, len); + break; } + case SC_SliderGroove: + if (slider->orientation == Qt::Horizontal) + ret.setRect(slider->rect.x(), slider->rect.y() + tickOffset, + slider->rect.width(), thickness); + else + ret.setRect(slider->rect.x() + tickOffset, slider->rect.y(), + thickness, slider->rect.height()); + break; + default: + break; + } + ret = visualRect(slider->direction, slider->rect, ret); + } + break; + case CC_ScrollBar: + if (const QStyleOptionSlider *scrollbar = qstyleoption_cast(opt)) { + const QRect scrollBarRect = scrollbar->rect; + int sbextent = 0; + if (!proxy()->styleHint(SH_ScrollBar_Transient, scrollbar)) + sbextent = proxy()->pixelMetric(PM_ScrollBarExtent, scrollbar); + int maxlen = ((scrollbar->orientation == Qt::Horizontal) ? + scrollBarRect.width() : scrollBarRect.height()) - (sbextent * 2); + int sliderlen; + + // calculate slider length + if (scrollbar->maximum != scrollbar->minimum) { + uint range = scrollbar->maximum - scrollbar->minimum; + sliderlen = (qint64(scrollbar->pageStep) * maxlen) / (range + scrollbar->pageStep); + + int slidermin = proxy()->pixelMetric(PM_ScrollBarSliderMin, scrollbar); + if (sliderlen < slidermin || range > INT_MAX / 2) + sliderlen = slidermin; + if (sliderlen > maxlen) + sliderlen = maxlen; + } else { + sliderlen = maxlen; + } + + int sliderstart = sbextent + sliderPositionFromValue(scrollbar->minimum, + scrollbar->maximum, + scrollbar->sliderPosition, + maxlen - sliderlen, + scrollbar->upsideDown); + + switch (sc) { + case SC_ScrollBarSubLine: // top/left button + if (scrollbar->orientation == Qt::Horizontal) { + int buttonWidth = qMin(scrollBarRect.width() / 2, sbextent); + ret.setRect(0, 0, buttonWidth, scrollBarRect.height()); + } else { + int buttonHeight = qMin(scrollBarRect.height() / 2, sbextent); + ret.setRect(0, 0, scrollBarRect.width(), buttonHeight); + } + break; + case SC_ScrollBarAddLine: // bottom/right button + if (scrollbar->orientation == Qt::Horizontal) { + int buttonWidth = qMin(scrollBarRect.width()/2, sbextent); + ret.setRect(scrollBarRect.width() - buttonWidth, 0, buttonWidth, scrollBarRect.height()); + } else { + int buttonHeight = qMin(scrollBarRect.height()/2, sbextent); + ret.setRect(0, scrollBarRect.height() - buttonHeight, scrollBarRect.width(), buttonHeight); + } + break; + case SC_ScrollBarSubPage: // between top/left button and slider + if (scrollbar->orientation == Qt::Horizontal) + ret.setRect(sbextent, 0, sliderstart - sbextent, scrollBarRect.height()); + else + ret.setRect(0, sbextent, scrollBarRect.width(), sliderstart - sbextent); + break; + case SC_ScrollBarAddPage: // between bottom/right button and slider + if (scrollbar->orientation == Qt::Horizontal) + ret.setRect(sliderstart + sliderlen, 0, + maxlen - sliderstart - sliderlen + sbextent, scrollBarRect.height()); + else + ret.setRect(0, sliderstart + sliderlen, scrollBarRect.width(), + maxlen - sliderstart - sliderlen + sbextent); + break; + case SC_ScrollBarGroove: + if (scrollbar->orientation == Qt::Horizontal) + ret.setRect(sbextent, 0, scrollBarRect.width() - sbextent * 2, + scrollBarRect.height()); + else + ret.setRect(0, sbextent, scrollBarRect.width(), + scrollBarRect.height() - sbextent * 2); + break; + case SC_ScrollBarSlider: + if (scrollbar->orientation == Qt::Horizontal) + ret.setRect(sliderstart, 0, sliderlen, scrollBarRect.height()); + else + ret.setRect(0, sliderstart, scrollBarRect.width(), sliderlen); + break; + default: + break; + } + ret = visualRect(scrollbar->direction, scrollBarRect, ret); + } + break; + case CC_SpinBox: + if (const QStyleOptionSpinBox *spinbox = qstyleoption_cast(opt)) { + QSize bs; + int fw = spinbox->frame ? proxy()->pixelMetric(PM_SpinBoxFrameWidth, spinbox) : 0; + bs.setHeight(qMax(8, spinbox->rect.height()/2 - fw)); + // 1.6 -approximate golden mean + bs.setWidth(qMax(16, qMin(bs.height() * 8 / 5, spinbox->rect.width() / 4))); + int y = fw + spinbox->rect.y(); + int x, lx, rx; + x = spinbox->rect.x() + spinbox->rect.width() - fw - bs.width(); + lx = fw; + rx = x - fw; + switch (sc) { + case SC_SpinBoxUp: + if (spinbox->buttonSymbols == QStyleOptionSpinBox::NoButtons) + return QRect(); + ret = QRect(x, y, bs.width(), bs.height()); + break; + case SC_SpinBoxDown: + if (spinbox->buttonSymbols == QStyleOptionSpinBox::NoButtons) + return QRect(); + + ret = QRect(x, y + bs.height(), bs.width(), bs.height()); + break; + case SC_SpinBoxEditField: + if (spinbox->buttonSymbols == QStyleOptionSpinBox::NoButtons) { + ret = QRect(lx, fw, spinbox->rect.width() - 2*fw, spinbox->rect.height() - 2*fw); + } else { + ret = QRect(lx, fw, rx, spinbox->rect.height() - 2*fw); + } + break; + case SC_SpinBoxFrame: + ret = spinbox->rect; + default: + break; + } + ret = visualRect(spinbox->direction, spinbox->rect, ret); + } + break; + case CC_ToolButton: + if (const QStyleOptionToolButton *tb = qstyleoption_cast(opt)) { + int mbi = proxy()->pixelMetric(PM_MenuButtonIndicator, tb); + ret = tb->rect; + switch (sc) { + case SC_ToolButton: + if ((tb->features + & (QStyleOptionToolButton::MenuButtonPopup | QStyleOptionToolButton::PopupDelay)) + == QStyleOptionToolButton::MenuButtonPopup) + ret.adjust(0, 0, -mbi, 0); + break; + case SC_ToolButtonMenu: + if ((tb->features + & (QStyleOptionToolButton::MenuButtonPopup | QStyleOptionToolButton::PopupDelay)) + == QStyleOptionToolButton::MenuButtonPopup) + ret.adjust(ret.width() - mbi, 0, 0, 0); + break; + default: + break; + } + ret = visualRect(tb->direction, tb->rect, ret); + } + break; + case CC_ComboBox: + if (const QStyleOptionComboBox *cb = qstyleoption_cast(opt)) { + const qreal dpi = QStyleHelper::dpi(opt); + const int x = cb->rect.x(), y = cb->rect.y(), wi = cb->rect.width(), he = cb->rect.height(); + const int margin = cb->frame ? qRound(QStyleHelper::dpiScaled(3, dpi)) : 0; + const int bmarg = cb->frame ? qRound(QStyleHelper::dpiScaled(2, dpi)) : 0; + const int xpos = x + wi - bmarg - qRound(QStyleHelper::dpiScaled(16, dpi)); + + + switch (sc) { + case SC_ComboBoxFrame: + ret = cb->rect; + break; + case SC_ComboBoxArrow: + ret.setRect(xpos, y + bmarg, qRound(QStyleHelper::dpiScaled(16, opt)), he - 2*bmarg); + break; + case SC_ComboBoxEditField: + ret.setRect(x + margin, y + margin, wi - 2 * margin - qRound(QStyleHelper::dpiScaled(16, dpi)), he - 2 * margin); + break; + case SC_ComboBoxListBoxPopup: + ret = cb->rect; + break; + default: + break; + } + ret = visualRect(cb->direction, cb->rect, ret); + } + break; + case CC_TitleBar: + if (const QStyleOptionTitleBar *tb = qstyleoption_cast(opt)) { + const int controlMargin = 2; + const int controlHeight = tb->rect.height() - controlMargin *2; + const int delta = controlHeight + controlMargin; + int offset = 0; + + bool isMinimized = tb->titleBarState & Qt::WindowMinimized; + bool isMaximized = tb->titleBarState & Qt::WindowMaximized; + + switch (sc) { + case SC_TitleBarLabel: + if (tb->titleBarFlags & (Qt::WindowTitleHint | Qt::WindowSystemMenuHint)) { + ret = tb->rect; + if (tb->titleBarFlags & Qt::WindowSystemMenuHint) + ret.adjust(delta, 0, -delta, 0); + if (tb->titleBarFlags & Qt::WindowMinimizeButtonHint) + ret.adjust(0, 0, -delta, 0); + if (tb->titleBarFlags & Qt::WindowMaximizeButtonHint) + ret.adjust(0, 0, -delta, 0); + if (tb->titleBarFlags & Qt::WindowShadeButtonHint) + ret.adjust(0, 0, -delta, 0); + if (tb->titleBarFlags & Qt::WindowContextHelpButtonHint) + ret.adjust(0, 0, -delta, 0); + } + break; + case SC_TitleBarContextHelpButton: + if (tb->titleBarFlags & Qt::WindowContextHelpButtonHint) + offset += delta; + Q_FALLTHROUGH(); + case SC_TitleBarMinButton: + if (!isMinimized && (tb->titleBarFlags & Qt::WindowMinimizeButtonHint)) + offset += delta; + else if (sc == SC_TitleBarMinButton) + break; + Q_FALLTHROUGH(); + case SC_TitleBarNormalButton: + if (isMinimized && (tb->titleBarFlags & Qt::WindowMinimizeButtonHint)) + offset += delta; + else if (isMaximized && (tb->titleBarFlags & Qt::WindowMaximizeButtonHint)) + offset += delta; + else if (sc == SC_TitleBarNormalButton) + break; + Q_FALLTHROUGH(); + case SC_TitleBarMaxButton: + if (!isMaximized && (tb->titleBarFlags & Qt::WindowMaximizeButtonHint)) + offset += delta; + else if (sc == SC_TitleBarMaxButton) + break; + Q_FALLTHROUGH(); + case SC_TitleBarShadeButton: + if (!isMinimized && (tb->titleBarFlags & Qt::WindowShadeButtonHint)) + offset += delta; + else if (sc == SC_TitleBarShadeButton) + break; + Q_FALLTHROUGH(); + case SC_TitleBarUnshadeButton: + if (isMinimized && (tb->titleBarFlags & Qt::WindowShadeButtonHint)) + offset += delta; + else if (sc == SC_TitleBarUnshadeButton) + break; + Q_FALLTHROUGH(); + case SC_TitleBarCloseButton: + if (tb->titleBarFlags & Qt::WindowSystemMenuHint) + offset += delta; + else if (sc == SC_TitleBarCloseButton) + break; + ret.setRect(tb->rect.right() - offset, tb->rect.top() + controlMargin, + controlHeight, controlHeight); + break; + case SC_TitleBarSysMenu: + if (tb->titleBarFlags & Qt::WindowSystemMenuHint) { + ret.setRect(tb->rect.left() + controlMargin, tb->rect.top() + controlMargin, + controlHeight, controlHeight); + } + break; + default: + break; + } + ret = visualRect(tb->direction, tb->rect, ret); + } + break; + case CC_GroupBox: { + if (const QStyleOptionGroupBox *groupBox = qstyleoption_cast(opt)) { + switch (sc) { + case SC_GroupBoxFrame: + case SC_GroupBoxContents: { + int topMargin = 0; + int topHeight = 0; + int verticalAlignment = proxy()->styleHint(SH_GroupBox_TextLabelVerticalAlignment, groupBox); + bool hasCheckBox = groupBox->subControls & QStyle::SC_GroupBoxCheckBox; + if (groupBox->text.size() || hasCheckBox) { + int checkBoxHeight = hasCheckBox ? proxy()->pixelMetric(PM_IndicatorHeight, groupBox) : 0; + topHeight = qMax(groupBox->fontMetrics.height(), checkBoxHeight); + if (verticalAlignment & Qt::AlignVCenter) + topMargin = topHeight / 2; + else if (verticalAlignment & Qt::AlignTop) + topMargin = topHeight; + } + + QRect frameRect = groupBox->rect; + frameRect.setTop(topMargin); + + if (sc == SC_GroupBoxFrame) { + ret = frameRect; + break; + } + + int frameWidth = 0; + if ((groupBox->features & QStyleOptionFrame::Flat) == 0) + frameWidth = proxy()->pixelMetric(PM_DefaultFrameWidth, groupBox); + ret = frameRect.adjusted(frameWidth, frameWidth + topHeight - topMargin, + -frameWidth, -frameWidth); + break; + } + case SC_GroupBoxCheckBox: + case SC_GroupBoxLabel: { + QFontMetrics fontMetrics = groupBox->fontMetrics; + int th = fontMetrics.height(); + int tw = fontMetrics.size(Qt::TextShowMnemonic, groupBox->text + QLatin1Char(' ')).width(); + int marg = (groupBox->features & QStyleOptionFrame::Flat) ? 0 : 8; + ret = groupBox->rect.adjusted(marg, 0, -marg, 0); + + int indicatorWidth = proxy()->pixelMetric(PM_IndicatorWidth, opt); + int indicatorHeight = proxy()->pixelMetric(PM_IndicatorHeight, opt); + int indicatorSpace = proxy()->pixelMetric(PM_CheckBoxLabelSpacing, opt) - 1; + bool hasCheckBox = groupBox->subControls & QStyle::SC_GroupBoxCheckBox; + int checkBoxWidth = hasCheckBox ? (indicatorWidth + indicatorSpace) : 0; + int checkBoxHeight = hasCheckBox ? indicatorHeight : 0; + + int h = qMax(th, checkBoxHeight); + ret.setHeight(h); + + // Adjusted rect for label + indicatorWidth + indicatorSpace + QRect totalRect = alignedRect(groupBox->direction, groupBox->textAlignment, + QSize(tw + checkBoxWidth, h), ret); + + // Adjust totalRect if checkbox is set + if (hasCheckBox) { + bool ltr = groupBox->direction == Qt::LeftToRight; + int left = 0; + // Adjust for check box + if (sc == SC_GroupBoxCheckBox) { + left = ltr ? totalRect.left() : (totalRect.right() - indicatorWidth); + int top = totalRect.top() + (h - checkBoxHeight) / 2; + totalRect.setRect(left, top, indicatorWidth, indicatorHeight); + // Adjust for label + } else { + left = ltr ? (totalRect.left() + checkBoxWidth - 2) : totalRect.left(); + int top = totalRect.top() + (h - th) / 2; + totalRect.setRect(left, top, totalRect.width() - checkBoxWidth, th); + } + } + ret = totalRect; + break; + } + default: + break; + } + } + break; + } + case CC_MdiControls: + { + int numSubControls = 0; + if (opt->subControls & SC_MdiCloseButton) + ++numSubControls; + if (opt->subControls & SC_MdiMinButton) + ++numSubControls; + if (opt->subControls & SC_MdiNormalButton) + ++numSubControls; + if (numSubControls == 0) + break; + + int buttonWidth = opt->rect.width() / numSubControls - 1; + int offset = 0; + switch (sc) { + case SC_MdiCloseButton: + // Only one sub control, no offset needed. + if (numSubControls == 1) + break; + offset += buttonWidth + 2; + Q_FALLTHROUGH(); + case SC_MdiNormalButton: + // No offset needed if + // 1) There's only one sub control + // 2) We have a close button and a normal button (offset already added in SC_MdiClose) + if (numSubControls == 1 || (numSubControls == 2 && !(opt->subControls & SC_MdiMinButton))) + break; + if (opt->subControls & SC_MdiNormalButton) + offset += buttonWidth; + break; + default: + break; + } + + // Subtract one pixel if we only have one sub control. At this point + // buttonWidth is the actual width + 1 pixel margin, but we don't want the + // margin when there are no other controllers. + if (numSubControls == 1) + --buttonWidth; + ret = QRect(offset, 0, buttonWidth, opt->rect.height()); + break; } + default: + qWarning("QCommonStyle::subControlRect: Case %d not handled", cc); + } + + return ret; +} + +int QCommonStyle::pixelMetric(PixelMetric m, const QStyleOption *opt) const +{ + int ret; + + switch (m) { + case PM_FocusFrameVMargin: + case PM_FocusFrameHMargin: + ret = 2; + break; + case PM_MenuBarVMargin: + case PM_MenuBarHMargin: + ret = 0; + break; + case PM_DialogButtonsSeparator: + ret = int(QStyleHelper::dpiScaled(5, opt)); + break; + case PM_DialogButtonsButtonWidth: + ret = int(QStyleHelper::dpiScaled(70, opt)); + break; + case PM_DialogButtonsButtonHeight: + ret = int(QStyleHelper::dpiScaled(30, opt)); + break; + case PM_TitleBarHeight: { + if (const QStyleOptionTitleBar *tb = qstyleoption_cast(opt)) { + if ((tb->titleBarFlags & Qt::WindowType_Mask) == Qt::Tool) { + ret = qMax(opt->fontMetrics.height(), 16); + } else { + ret = qMax(opt->fontMetrics.height(), 18); + } + } else { + ret = int(QStyleHelper::dpiScaled(18., opt)); + } + + break; } + case PM_TitleBarButtonSize: + ret = int(QStyleHelper::dpiScaled(16., opt)); + break; + case PM_TitleBarButtonIconSize: + ret = int(QStyleHelper::dpiScaled(16., opt)); + break; + + case PM_ScrollBarSliderMin: + ret = int(QStyleHelper::dpiScaled(9., opt)); + break; + + case PM_ButtonMargin: + ret = int(QStyleHelper::dpiScaled(6., opt)); + break; + + case PM_DockWidgetTitleBarButtonMargin: + ret = int(QStyleHelper::dpiScaled(2., opt)); + break; + + case PM_ButtonDefaultIndicator: + ret = 0; + break; + + case PM_MenuButtonIndicator: + ret = int(QStyleHelper::dpiScaled(12, opt)); + break; + + case PM_ButtonShiftHorizontal: + case PM_ButtonShiftVertical: + + case PM_DefaultFrameWidth: + ret = 2; + break; + + case PM_ComboBoxFrameWidth: + case PM_SpinBoxFrameWidth: + case PM_MenuPanelWidth: + case PM_TabBarBaseOverlap: + case PM_TabBarBaseHeight: + ret = proxy()->pixelMetric(PM_DefaultFrameWidth, opt); + break; + case PM_MdiSubWindowFrameWidth: + ret = int(QStyleHelper::dpiScaled(4, opt)); + break; + case PM_MdiSubWindowMinimizedWidth: + ret = int(QStyleHelper::dpiScaled(196, opt)); + break; + case PM_ScrollBarExtent: + ret = int(QStyleHelper::dpiScaled(16, opt)); + break; + case PM_MaximumDragDistance: + ret = QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::MaximumScrollBarDragDistance).toInt(); + break; + case PM_SliderThickness: + ret = int(QStyleHelper::dpiScaled(16, opt)); + break; + case PM_SliderTickmarkOffset: + if (const QStyleOptionSlider *sl = qstyleoption_cast(opt)) { + int space = (sl->orientation == Qt::Horizontal) ? sl->rect.height() + : sl->rect.width(); + int thickness = proxy()->pixelMetric(PM_SliderControlThickness, sl); + int ticks = sl->tickPosition; + + if (ticks == QStyleOptionSlider::TicksBothSides) + ret = (space - thickness) / 2; + else if (ticks == QStyleOptionSlider::TicksAbove) + ret = space - thickness; + else + ret = 0; + } else { + ret = 0; + } + break; + case PM_SliderSpaceAvailable: + if (const QStyleOptionSlider *sl = qstyleoption_cast(opt)) { + if (sl->orientation == Qt::Horizontal) + ret = sl->rect.width() - proxy()->pixelMetric(PM_SliderLength, sl); + else + ret = sl->rect.height() - proxy()->pixelMetric(PM_SliderLength, sl); + } else { + ret = 0; + } + break; + case PM_DockWidgetSeparatorExtent: + ret = int(QStyleHelper::dpiScaled(6, opt)); + break; + + case PM_DockWidgetHandleExtent: + ret = int(QStyleHelper::dpiScaled(8, opt)); + break; + case PM_DockWidgetTitleMargin: + ret = 0; + break; + case PM_DockWidgetFrameWidth: + ret = 1; + break; + case PM_SpinBoxSliderHeight: + case PM_MenuBarPanelWidth: + ret = 2; + break; + case PM_MenuBarItemSpacing: + ret = 0; + break; + case PM_ToolBarFrameWidth: + ret = 1; + break; + + case PM_ToolBarItemMargin: + ret = 0; + break; + + case PM_ToolBarItemSpacing: + ret = int(QStyleHelper::dpiScaled(4, opt)); + break; + + case PM_ToolBarHandleExtent: + ret = int(QStyleHelper::dpiScaled(8, opt)); + break; + + case PM_ToolBarSeparatorExtent: + ret = int(QStyleHelper::dpiScaled(6, opt)); + break; + + case PM_ToolBarExtensionExtent: + ret = int(QStyleHelper::dpiScaled(12, opt)); + break; + + case PM_TabBarTabOverlap: + ret = 3; + break; + + case PM_TabBarTabHSpace: + ret = int(QStyleHelper::dpiScaled(24, opt)); + break; + + case PM_TabBarTabShiftHorizontal: + ret = 0; + break; + + case PM_TabBarTabShiftVertical: + ret = 2; + break; + + case PM_TabBarTabVSpace: { + const QStyleOptionTab *tb = qstyleoption_cast(opt); + if (tb && (tb->shape == QStyleOptionTab::RoundedNorth || tb->shape == QStyleOptionTab::RoundedSouth + || tb->shape == QStyleOptionTab::RoundedWest || tb->shape == QStyleOptionTab::RoundedEast)) + ret = 8; + else + if(tb && (tb->shape == QStyleOptionTab::TriangularWest || tb->shape == QStyleOptionTab::TriangularEast)) + ret = 3; + else + ret = 2; + break; } + + case PM_ProgressBarChunkWidth: + ret = 9; + break; + + case PM_IndicatorWidth: + ret = int(QStyleHelper::dpiScaled(13, opt)); + break; + + case PM_IndicatorHeight: + ret = int(QStyleHelper::dpiScaled(13, opt)); + break; + + case PM_ExclusiveIndicatorWidth: + ret = int(QStyleHelper::dpiScaled(12, opt)); + break; + + case PM_ExclusiveIndicatorHeight: + ret = int(QStyleHelper::dpiScaled(12, opt)); + break; + + case PM_MenuTearoffHeight: + ret = int(QStyleHelper::dpiScaled(10, opt)); + break; + + case PM_MenuScrollerHeight: + ret = int(QStyleHelper::dpiScaled(10, opt)); + break; + + case PM_MenuDesktopFrameWidth: + case PM_MenuHMargin: + case PM_MenuVMargin: + ret = 0; + break; + + case PM_HeaderMargin: + ret = int(QStyleHelper::dpiScaled(4, opt)); + break; + case PM_HeaderMarkSize: + ret = int(QStyleHelper::dpiScaled(16, opt)); + break; + case PM_HeaderGripMargin: + ret = int(QStyleHelper::dpiScaled(4, opt)); + break; + case PM_HeaderDefaultSectionSizeHorizontal: + ret = int(QStyleHelper::dpiScaled(100, opt)); + break; + case PM_HeaderDefaultSectionSizeVertical: + ret = int(QStyleHelper::dpiScaled(30, opt)); + break; + case PM_TabBarScrollButtonWidth: + ret = int(QStyleHelper::dpiScaled(16, opt)); + break; + case PM_LayoutLeftMargin: + case PM_LayoutTopMargin: + case PM_LayoutRightMargin: + case PM_LayoutBottomMargin: + { + bool isWindow = opt ? (opt->state & State_Window) : false; + ret = proxy()->pixelMetric(isWindow ? PM_DefaultTopLevelMargin : PM_DefaultChildMargin); + } + break; + case PM_LayoutHorizontalSpacing: + case PM_LayoutVerticalSpacing: + ret = proxy()->pixelMetric(PM_DefaultLayoutSpacing); + break; + + case PM_DefaultTopLevelMargin: + ret = int(QStyleHelper::dpiScaled(11, opt)); + break; + case PM_DefaultChildMargin: + ret = int(QStyleHelper::dpiScaled(9, opt)); + break; + case PM_DefaultLayoutSpacing: + ret = int(QStyleHelper::dpiScaled(6, opt)); + break; + + case PM_ToolBarIconSize: + ret = 0; + if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) + ret = theme->themeHint(QPlatformTheme::ToolBarIconSize).toInt(); + if (ret <= 0) + ret = int(QStyleHelper::dpiScaled(24, opt)); + break; + + case PM_TabBarIconSize: + case PM_ListViewIconSize: + ret = proxy()->pixelMetric(PM_SmallIconSize, opt); + break; + + case PM_ButtonIconSize: + case PM_SmallIconSize: + ret = int(QStyleHelper::dpiScaled(16, opt)); + break; + case PM_IconViewIconSize: + ret = proxy()->pixelMetric(PM_LargeIconSize, opt); + break; + + case PM_LargeIconSize: + ret = int(QStyleHelper::dpiScaled(32, opt)); + break; + + case PM_ToolTipLabelFrameWidth: + ret = 1; + break; + case PM_CheckBoxLabelSpacing: + case PM_RadioButtonLabelSpacing: + ret = int(QStyleHelper::dpiScaled(6, opt)); + break; + case PM_SizeGripSize: + ret = int(QStyleHelper::dpiScaled(13, opt)); + break; + case PM_MessageBoxIconSize: +#ifdef Q_OS_MAC + if (QGuiApplication::desktopSettingsAware()) { + ret = 64; // No DPI scaling, it's handled elsewhere. + } else +#endif + { + ret = int(QStyleHelper::dpiScaled(32, opt)); + } + break; + case PM_TextCursorWidth: + ret = QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::TextCursorWidth).toInt(); + break; + case PM_TabBar_ScrollButtonOverlap: + ret = 1; + break; + case PM_TabCloseIndicatorWidth: + case PM_TabCloseIndicatorHeight: + ret = int(QStyleHelper::dpiScaled(16, opt)); + break; + case PM_ScrollView_ScrollBarSpacing: + ret = 2 * proxy()->pixelMetric(PM_DefaultFrameWidth, opt); + break; + case PM_ScrollView_ScrollBarOverlap: + ret = 0; + break; + case PM_SubMenuOverlap: + ret = -proxy()->pixelMetric(QStyle::PM_MenuPanelWidth, opt); + break; + case PM_TreeViewIndentation: + ret = int(QStyleHelper::dpiScaled(20, opt)); + break; + default: + ret = 0; + break; + } + + return ret; +} + +QSize QCommonStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, const QSize &csz) const +{ + Q_D(const QCommonStyle); + QSize sz(csz); + switch (ct) { + case CT_PushButton: + if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { + int w = csz.width(), + h = csz.height(), + bm = proxy()->pixelMetric(PM_ButtonMargin, btn), + fw = proxy()->pixelMetric(PM_DefaultFrameWidth, btn) * 2; + w += bm + fw; + h += bm + fw; + if (btn->features & QStyleOptionButton::AutoDefaultButton){ + int dbw = proxy()->pixelMetric(PM_ButtonDefaultIndicator, btn) * 2; + w += dbw; + h += dbw; + } + sz = QSize(w, h); + } + break; + case CT_RadioButton: + case CT_CheckBox: + if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { + bool isRadio = (ct == CT_RadioButton); + + int w = proxy()->pixelMetric(isRadio ? PM_ExclusiveIndicatorWidth + : PM_IndicatorWidth, btn); + int h = proxy()->pixelMetric(isRadio ? PM_ExclusiveIndicatorHeight + : PM_IndicatorHeight, btn); + + int margins = 0; + // we add 4 pixels for label margins + if (!btn->icon.isNull() || !btn->text.isEmpty()) + margins = 4 + proxy()->pixelMetric(isRadio ? PM_RadioButtonLabelSpacing + : PM_CheckBoxLabelSpacing, opt); + sz += QSize(w + margins, 4); + sz.setHeight(qMax(sz.height(), h)); + } + break; + case CT_MenuItem: + if (const QStyleOptionMenuItem *mi = qstyleoption_cast(opt)) { + bool checkable = mi->menuHasCheckableItems; + int maxpmw = mi->maxIconWidth; + int w = sz.width(), h = sz.height(); + if (mi->menuItemType == QStyleOptionMenuItem::Separator) { + w = 10; + h = 2; + } else { + h = mi->fontMetrics.height() + 8; + if (!mi->icon.isNull()) { + int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); + h = qMax(h, mi->icon.actualSize(QSize(iconExtent, iconExtent)).height() + 4); + } + } + if (mi->text.contains(QLatin1Char('\t'))) + w += 12; + if (maxpmw > 0) + w += maxpmw + 6; + if (checkable && maxpmw < 20) + w += 20 - maxpmw; + if (checkable || maxpmw > 0) + w += 2; + w += 12; + sz = QSize(w, h); + } + break; + case CT_ToolButton: + sz = QSize(sz.width() + 6, sz.height() + 5); + break; + case CT_ComboBox: + if (const QStyleOptionComboBox *cmb = qstyleoption_cast(opt)) { + int fw = cmb->frame ? proxy()->pixelMetric(PM_ComboBoxFrameWidth, opt) * 2 : 0; + const int textMargins = 2*(proxy()->pixelMetric(PM_FocusFrameHMargin) + 1); + // QItemDelegate::sizeHint expands the textMargins two times, thus the 2*textMargins... + int other = qMax(23, 2*textMargins + proxy()->pixelMetric(QStyle::PM_ScrollBarExtent, opt)); + sz = QSize(sz.width() + fw + other, sz.height() + fw); + } + break; + case CT_HeaderSection: + if (const QStyleOptionHeader *hdr = qstyleoption_cast(opt)) { + bool nullIcon = hdr->icon.isNull(); + int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, hdr); + int iconSize = nullIcon ? 0 : proxy()->pixelMetric(QStyle::PM_SmallIconSize, hdr); + QSize txt = hdr->fontMetrics.size(0, hdr->text); + sz.setHeight(margin + qMax(iconSize, txt.height()) + margin); + sz.setWidth((nullIcon ? 0 : margin) + iconSize + + (hdr->text.isNull() ? 0 : margin) + txt.width() + margin); + if (hdr->sortIndicator != QStyleOptionHeader::None) { + int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, hdr); + if (hdr->orientation == Qt::Horizontal) + sz.rwidth() += sz.height() + margin; + else + sz.rheight() += sz.width() + margin; + } + } + break; + case CT_TabWidget: + sz += QSize(4, 4); + break; + case CT_LineEdit: + if (const QStyleOptionFrame *f = qstyleoption_cast(opt)) { + const int borderSize = 2 * f->lineWidth; + sz += QSize(borderSize, borderSize); + const int minSize = 10; + if (sz.width() < minSize) + sz.rwidth() = minSize; + if (sz.height() < minSize) + sz.rheight() = minSize; + } + break; + case CT_GroupBox: + if (const QStyleOptionGroupBox *styleOpt = qstyleoption_cast(opt)) { + if (sz.isEmpty()) + sz = QSize(20, 20); + sz += QSize(styleOpt->features.testFlag(QStyleOptionFrame::Flat) ? 0 : 16, 0); + } + break; + case CT_MdiControls: + if (const QStyleOptionComplex *styleOpt = qstyleoption_cast(opt)) { + const int buttonSize = proxy()->pixelMetric(PM_TitleBarButtonSize, styleOpt); + int width = 1; + if (styleOpt->subControls & SC_MdiMinButton) + width += buttonSize + 1; + if (styleOpt->subControls & SC_MdiNormalButton) + width += buttonSize + 1; + if (styleOpt->subControls & SC_MdiCloseButton) + width += buttonSize + 1; + sz = QSize(width, buttonSize); + } else { + const int buttonSize = proxy()->pixelMetric(PM_TitleBarButtonSize, opt); + sz = QSize(1 + 3 * (buttonSize + 1), buttonSize); + } + break; + case CT_ItemViewItem: + if (const QStyleOptionViewItem *vopt = qstyleoption_cast(opt)) { + QRect decorationRect, displayRect, checkRect; + d->viewItemLayout(vopt, &checkRect, &decorationRect, &displayRect, true); + sz = (decorationRect|displayRect|checkRect).size(); + if (decorationRect.isValid() && sz.height() == decorationRect.height()) + sz.rheight() += 2; // Prevent icons from overlapping. + } + break; + case CT_SpinBox: + if (const QStyleOptionSpinBox *vopt = qstyleoption_cast(opt)) { + // Add button + frame widths + if (vopt->subControls == SC_SpinBoxFrame) { + const qreal dpi = QStyleHelper::dpi(opt); + const bool hasButtons = (vopt->buttonSymbols != QStyleOptionSpinBox::NoButtons); + const int buttonWidth = hasButtons ? qRound(QStyleHelper::dpiScaled(16, dpi)) : 0; + const int fw = vopt->frame ? proxy()->pixelMetric(PM_SpinBoxFrameWidth, vopt) : 0; + sz += QSize(buttonWidth + 2*fw, 1 + 2*fw); + } else { + const QSize buttonSize = proxy()->subControlRect(CC_SpinBox, vopt, SC_SpinBoxUp).size(); + const int upAndDownTogetherHeight = buttonSize.height() * 2; + sz += QSize(buttonSize.width(), upAndDownTogetherHeight); + } + } + break; + case CT_Slider: + if (const QStyleOptionSlider *option = qstyleoption_cast(opt)) + sz = subControlRect(QStyle::CC_Slider, option, QStyle::SC_SliderHandle).size(); + break; + case CT_Dial: + sz = QSize(20, 20); + break; + case CT_Frame: + if (const QStyleOptionFrame *option = qstyleoption_cast(opt)) { + const int ninePatchSplit = 1; + int w = qMax(10, (option->lineWidth * 2) + ninePatchSplit); + sz = QSize(w, w); + } + break; + case CT_ProgressBar: + if (sz.isNull()) { + // Special case: return minimum nine patch image size + sz = QSize(10, 10); + } + break; + case CT_ScrollBar: + case CT_MenuBar: + case CT_Menu: + case CT_MenuBarItem: + case CT_TabBarTab: + // just return the contentsSize for now + Q_FALLTHROUGH(); + default: + break; + } + return sz; +} + +QFont QCommonStyle::font(QStyle::ControlElement element, const QStyle::State state) const +{ + Q_UNUSED(element); + Q_UNUSED(state); + return QGuiApplication::font(); +} + +QMargins QCommonStyle::ninePatchMargins(QStyle::ControlElement /*ce*/, const QStyleOption */*opt*/, const QSize &imageSize) const +{ + // By default, we just divide the image at the center + int w = imageSize.width() / 2; + int h = imageSize.height() / 2; + return QMargins(w, h, w, h); +} + +QMargins QCommonStyle::ninePatchMargins(QStyle::ComplexControl /*cc*/, const QStyleOptionComplex */*opt*/, const QSize &imageSize) const +{ + // By default, we just divide the image at the center + int w = imageSize.width() / 2; + int h = imageSize.height() / 2; + return QMargins(w, h, w, h); +} + +int QCommonStyle::styleHint(StyleHint sh, const QStyleOption *opt, QStyleHintReturn *hret) const +{ + int ret = 0; + + switch (sh) { + case SH_Menu_KeyboardSearch: + ret = false; + break; + case SH_Slider_AbsoluteSetButtons: + ret = Qt::MiddleButton; + break; + case SH_Slider_PageSetButtons: + ret = Qt::LeftButton; + break; + case SH_ScrollBar_ContextMenu: + ret = true; + break; + case SH_GroupBox_TextLabelVerticalAlignment: + ret = Qt::AlignVCenter; + break; + case SH_GroupBox_TextLabelColor: + ret = opt ? int(opt->palette.color(QPalette::Text).rgba()) : 0; + break; + + case SH_ListViewExpand_SelectMouseType: + case SH_TabBar_SelectMouseType: + ret = QEvent::MouseButtonPress; + break; + + case SH_TabBar_Alignment: + ret = Qt::AlignLeft; + break; + + case SH_Header_ArrowAlignment: + ret = Qt::AlignRight | Qt::AlignVCenter; + break; + + case SH_TitleBar_AutoRaise: + ret = false; + break; + + case SH_Menu_SubMenuPopupDelay: + ret = 256; + break; + + case SH_Menu_SloppySubMenus: + ret = true; + break; + + case SH_Menu_SubMenuUniDirection: + ret = false; + break; + case SH_Menu_SubMenuUniDirectionFailCount: + ret = 1; + break; + case SH_Menu_SubMenuSloppySelectOtherActions: + ret = true; + break; + case SH_Menu_SubMenuSloppyCloseTimeout: + ret = 1000; + break; + case SH_Menu_SubMenuResetWhenReenteringParent: + ret = false; + break; + case SH_Menu_SubMenuDontStartSloppyOnLeave: + ret = false; + break; + + case SH_ProgressDialog_TextLabelAlignment: + ret = Qt::AlignCenter; + break; + + case SH_BlinkCursorWhenTextSelected: +#if defined(Q_OS_DARWIN) + ret = 0; +#else + ret = 1; +#endif + break; + + case SH_Table_GridLineColor: + if (opt) + ret = opt->palette.color(QPalette::Mid).rgba(); + else + ret = -1; + break; + case SH_LineEdit_PasswordCharacter: { + const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme(); + const QPlatformTheme::ThemeHint hintType = QPlatformTheme::PasswordMaskCharacter; + const QVariant hint = theme ? theme->themeHint(hintType) : QPlatformTheme::defaultThemeHint(hintType); + ret = hint.toChar().unicode(); + break; + } + case SH_LineEdit_PasswordMaskDelay: + ret = QGuiApplicationPrivate::platformTheme()->themeHint(QPlatformTheme::PasswordMaskDelay).toInt(); + break; + case SH_ToolBox_SelectedPageTitleBold: + ret = 1; + break; + + case SH_UnderlineShortcut: + ret = 1; + break; + + case SH_SpinBox_ClickAutoRepeatRate: + ret = 150; + break; + + case SH_SpinBox_ClickAutoRepeatThreshold: + ret = 500; + break; + + case SH_SpinBox_KeyPressAutoRepeatRate: + ret = 75; + break; + + case SH_Menu_SelectionWrap: + ret = true; + break; + + case SH_Menu_FillScreenWithScroll: + ret = true; + break; + + case SH_ToolTipLabel_Opacity: + ret = 255; + break; + + case SH_Button_FocusPolicy: + ret = Qt::StrongFocus; + break; + + case SH_MessageBox_UseBorderForButtonSpacing: + ret = 0; + break; + + case SH_ToolButton_PopupDelay: + ret = 600; + break; + + case SH_FocusFrame_Mask: + ret = 1; + break; + case SH_RubberBand_Mask: + if (const QStyleOptionRubberBand *rbOpt = qstyleoption_cast(opt)) { + ret = 0; + if (rbOpt->shape == QStyleOptionRubberBand::Rectangle) { + ret = true; + if(QStyleHintReturnMask *mask = qstyleoption_cast(hret)) { + mask->region = opt->rect; + int margin = proxy()->pixelMetric(PM_DefaultFrameWidth) * 2; + mask->region -= opt->rect.adjusted(margin, margin, -margin, -margin); + } + } + } + break; + case SH_SpinControls_DisableOnBounds: + ret = 1; + break; + + case SH_Dial_BackgroundRole: + ret = QPalette::Window; + break; + + case SH_ComboBox_LayoutDirection: + ret = opt ? opt->direction : Qt::LeftToRight; + break; + + case SH_ItemView_EllipsisLocation: + ret = Qt::AlignTrailing; + break; + + case SH_ItemView_ShowDecorationSelected: + ret = false; + break; + + case SH_ItemView_ActivateItemOnSingleClick: + ret = 0; + if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) + ret = theme->themeHint(QPlatformTheme::ItemViewActivateItemOnSingleClick).toBool() ? 1 : 0; + break; + case SH_TitleBar_ModifyNotification: + ret = true; + break; + case SH_ScrollBar_RollBetweenButtons: + ret = false; + break; + case SH_TabBar_ElideMode: + ret = Qt::ElideNone; + break; + case SH_DialogButtonLayout: + if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) + ret = theme->themeHint(QPlatformTheme::DialogButtonBoxLayout).toInt(); + break; + case SH_ComboBox_PopupFrameStyle: + ret = QStyleOptionFrame::StyledPanel | QStyleOptionFrame::Plain; + break; + case SH_MessageBox_TextInteractionFlags: + ret = Qt::LinksAccessibleByMouse; + break; + case SH_DialogButtonBox_ButtonsHaveIcons: + ret = 0; + if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) + ret = theme->themeHint(QPlatformTheme::DialogButtonBoxButtonsHaveIcons).toBool() ? 1 : 0; + break; + case SH_SpellCheckUnderlineStyle: + ret = QTextCharFormat::WaveUnderline; + break; + case SH_MessageBox_CenterButtons: + ret = true; + break; + case SH_ItemView_MovementWithoutUpdatingSelection: + ret = true; + break; + case SH_FocusFrame_AboveWidget: + ret = false; + break; + case SH_TabWidget_DefaultTabPosition: + ret = QStyleOptionTabBarBase::North; + break; + case SH_ToolBar_Movable: + ret = true; + break; + case SH_TextControl_FocusIndicatorTextCharFormat: + ret = true; + if (QStyleHintReturnVariant *vret = qstyleoption_cast(hret)) { + QPen outline(opt->palette.color(QPalette::Text), 1, Qt::DotLine); + QTextCharFormat fmt; + fmt.setProperty(QTextFormat::OutlinePen, outline); + vret->variant = fmt; + } + break; + case SH_WizardStyle: + break; + case SH_FormLayoutWrapPolicy: + break; + case SH_FormLayoutFieldGrowthPolicy: + break; + case SH_FormLayoutFormAlignment: + ret = Qt::AlignLeft | Qt::AlignTop; + break; + case SH_FormLayoutLabelAlignment: + ret = Qt::AlignLeft; + break; + case SH_ItemView_ArrowKeysNavigateIntoChildren: + ret = false; + break; + case SH_ItemView_DrawDelegateFrame: + ret = 0; + break; + case SH_TabBar_CloseButtonPosition: + ret = QStyleOptionTabBarBase::RightSide; + break; + case SH_TabBar_ChangeCurrentDelay: + ret = 500; + break; + case SH_DockWidget_ButtonsHaveFrame: + ret = true; + break; + case SH_ToolButtonStyle: + ret = 0; + if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) + ret = theme->themeHint(QPlatformTheme::ToolButtonStyle).toInt(); + break; + case SH_RequestSoftwareInputPanel: + ret = RSIP_OnMouseClick; + break; + case SH_ScrollBar_Transient: + ret = false; + break; + case SH_Menu_SupportsSections: + ret = false; + break; + case SH_ToolTip_WakeUpDelay: + ret = 700; + break; + case SH_ToolTip_FallAsleepDelay: + ret = 2000; + break; + case SH_Widget_Animate: + ret = true; + break; + case SH_Splitter_OpaqueResize: + ret = true; + break; + case SH_ItemView_ScrollMode: + ret = QStyleOptionViewItem::ScrollPerItem; + break; + case SH_TitleBar_ShowToolTipsOnButtons: + ret = true; + break; + case SH_Widget_Animation_Duration: + ret = styleHint(SH_Widget_Animate, opt, hret) ? 200 : 0; + break; + case SH_ComboBox_AllowWheelScrolling: + ret = true; + break; + case SH_SpinBox_ButtonsInsideFrame: + ret = true; + break; + case SH_SpinBox_StepModifier: + ret = Qt::ControlModifier; + break; + default: + ret = 0; + break; + } + + return ret; +} + +#if QT_CONFIG(imageformat_xpm) +static QPixmap cachedPixmapFromXPM(const char * const *xpm) +{ + QPixmap result; + const QString tag = QString::asprintf("xpm:0x%p", static_cast(xpm)); + if (!QPixmapCache::find(tag, &result)) { + result = QPixmap(xpm); + QPixmapCache::insert(tag, result); + } + return result; +} + +static inline QPixmap titleBarMenuCachedPixmapFromXPM() { return cachedPixmapFromXPM(qt_menu_xpm); } +#endif + +static inline QString clearText16IconPath() +{ + return QStringLiteral(":/qt-project.org/styles/commonstyle/images/cleartext-16.png"); +} + +#if defined(Q_OS_WIN) || QT_CONFIG(imageformat_png) +static QIcon clearTextIcon(bool rtl) +{ + const QString directionalThemeName = rtl + ? QStringLiteral("edit-clear-locationbar-ltr") : QStringLiteral("edit-clear-locationbar-rtl"); + if (QIcon::hasThemeIcon(directionalThemeName)) + return QIcon::fromTheme(directionalThemeName); + const QString themeName = QStringLiteral("edit-clear"); + if (QIcon::hasThemeIcon(themeName)) + return QIcon::fromTheme(themeName); + + QIcon icon; +#ifndef QT_NO_IMAGEFORMAT_PNG + QPixmap clearText16(clearText16IconPath()); + Q_ASSERT(!clearText16.size().isEmpty()); + icon.addPixmap(clearText16); + QPixmap clearText32(QStringLiteral(":/qt-project.org/styles/commonstyle/images/cleartext-32.png")); + Q_ASSERT(!clearText32.size().isEmpty()); + icon.addPixmap(clearText32); + clearText32.setDevicePixelRatio(2); // The 32x32 pixmap can also be used for 16x16/devicePixelRatio=2 + icon.addPixmap(clearText32); +#endif // !QT_NO_IMAGEFORMAT_PNG + return icon; +} +#endif + +QPixmap QCommonStyle::standardPixmap(StandardPixmap sp, const QStyleOption *option) const +{ + const bool rtl = (option && option->direction == Qt::RightToLeft) || (!option && QGuiApplication::isRightToLeft()); +#if QT_CONFIG(imageformat_png) + QPixmap pixmap; + + if (QGuiApplication::desktopSettingsAware() && !QIcon::themeName().isEmpty()) { + switch (sp) { + case SP_DialogYesButton: + case SP_DialogOkButton: + pixmap = QIcon::fromTheme(QLatin1String("dialog-ok")).pixmap(16); + break; + case SP_DialogApplyButton: + pixmap = QIcon::fromTheme(QLatin1String("dialog-ok-apply")).pixmap(16); + break; + case SP_DialogDiscardButton: + pixmap = QIcon::fromTheme(QLatin1String("edit-delete")).pixmap(16); + break; + case SP_DialogCloseButton: + pixmap = QIcon::fromTheme(QLatin1String("dialog-close")).pixmap(16); + break; + case SP_DirHomeIcon: + pixmap = QIcon::fromTheme(QLatin1String("user-home")).pixmap(16); + break; + case SP_MessageBoxInformation: + pixmap = QIcon::fromTheme(QLatin1String("messagebox_info")).pixmap(16); + break; + case SP_MessageBoxWarning: + pixmap = QIcon::fromTheme(QLatin1String("messagebox_warning")).pixmap(16); + break; + case SP_MessageBoxCritical: + pixmap = QIcon::fromTheme(QLatin1String("messagebox_critical")).pixmap(16); + break; + case SP_MessageBoxQuestion: + pixmap = QIcon::fromTheme(QLatin1String("help")).pixmap(16); + break; + case SP_DialogOpenButton: + case SP_DirOpenIcon: + pixmap = QIcon::fromTheme(QLatin1String("folder-open")).pixmap(16); + break; + case SP_FileIcon: + pixmap = QIcon::fromTheme(QLatin1String("text-x-generic"), + QIcon::fromTheme(QLatin1String("empty"))).pixmap(16); + break; + case SP_DirClosedIcon: + case SP_DirIcon: + pixmap = QIcon::fromTheme(QLatin1String("folder")).pixmap(16); + break; + case SP_DriveFDIcon: + pixmap = QIcon::fromTheme(QLatin1String("media-floppy"), + QIcon::fromTheme(QLatin1String("3floppy_unmount"))).pixmap(16); + break; + case SP_ComputerIcon: + pixmap = QIcon::fromTheme(QLatin1String("computer"), + QIcon::fromTheme(QLatin1String("system"))).pixmap(16); + break; + case SP_DesktopIcon: + pixmap = QIcon::fromTheme(QLatin1String("user-desktop"), + QIcon::fromTheme(QLatin1String("desktop"))).pixmap(16); + break; + case SP_TrashIcon: + pixmap = QIcon::fromTheme(QLatin1String("user-trash"), + QIcon::fromTheme(QLatin1String("trashcan_empty"))).pixmap(16); + break; + case SP_DriveCDIcon: + case SP_DriveDVDIcon: + pixmap = QIcon::fromTheme(QLatin1String("media-optical"), + QIcon::fromTheme(QLatin1String("cdrom_unmount"))).pixmap(16); + break; + case SP_DriveHDIcon: + pixmap = QIcon::fromTheme(QLatin1String("drive-harddisk"), + QIcon::fromTheme(QLatin1String("hdd_unmount"))).pixmap(16); + break; + case SP_FileDialogToParent: + pixmap = QIcon::fromTheme(QLatin1String("go-up"), + QIcon::fromTheme(QLatin1String("up"))).pixmap(16); + break; + case SP_FileDialogNewFolder: + pixmap = QIcon::fromTheme(QLatin1String("folder_new")).pixmap(16); + break; + case SP_ArrowUp: + pixmap = QIcon::fromTheme(QLatin1String("go-up"), + QIcon::fromTheme(QLatin1String("up"))).pixmap(16); + break; + case SP_ArrowDown: + pixmap = QIcon::fromTheme(QLatin1String("go-down"), + QIcon::fromTheme(QLatin1String("down"))).pixmap(16); + break; + case SP_ArrowRight: + pixmap = QIcon::fromTheme(QLatin1String("go-next"), + QIcon::fromTheme(QLatin1String("forward"))).pixmap(16); + break; + case SP_ArrowLeft: + pixmap = QIcon::fromTheme(QLatin1String("go-previous"), + QIcon::fromTheme(QLatin1String("back"))).pixmap(16); + break; + case SP_FileDialogDetailedView: + pixmap = QIcon::fromTheme(QLatin1String("view_detailed")).pixmap(16); + break; + case SP_FileDialogListView: + pixmap = QIcon::fromTheme(QLatin1String("view_icon")).pixmap(16); + break; + case SP_BrowserReload: + pixmap = QIcon::fromTheme(QLatin1String("reload")).pixmap(16); + break; + case SP_BrowserStop: + pixmap = QIcon::fromTheme(QLatin1String("process-stop")).pixmap(16); + break; + case SP_MediaPlay: + pixmap = QIcon::fromTheme(QLatin1String("media-playback-start")).pixmap(16); + break; + case SP_MediaPause: + pixmap = QIcon::fromTheme(QLatin1String("media-playback-pause")).pixmap(16); + break; + case SP_MediaStop: + pixmap = QIcon::fromTheme(QLatin1String("media-playback-stop")).pixmap(16); + break; + case SP_MediaSeekForward: + pixmap = QIcon::fromTheme(QLatin1String("media-seek-forward")).pixmap(16); + break; + case SP_MediaSeekBackward: + pixmap = QIcon::fromTheme(QLatin1String("media-seek-backward")).pixmap(16); + break; + case SP_MediaSkipForward: + pixmap = QIcon::fromTheme(QLatin1String("media-skip-forward")).pixmap(16); + break; + case SP_MediaSkipBackward: + pixmap = QIcon::fromTheme(QLatin1String("media-skip-backward")).pixmap(16); + break; + case SP_DialogResetButton: + pixmap = QIcon::fromTheme(QLatin1String("edit-clear")).pixmap(24); + break; + case SP_DialogHelpButton: + pixmap = QIcon::fromTheme(QLatin1String("help-contents")).pixmap(24); + break; + case SP_DialogNoButton: + case SP_DialogCancelButton: + pixmap = QIcon::fromTheme(QLatin1String("dialog-cancel"), + QIcon::fromTheme(QLatin1String("process-stop"))).pixmap(24); + break; + case SP_DialogSaveButton: + pixmap = QIcon::fromTheme(QLatin1String("document-save")).pixmap(24); + break; + case SP_FileLinkIcon: + pixmap = QIcon::fromTheme(QLatin1String("emblem-symbolic-link")).pixmap(16); + if (!pixmap.isNull()) { + QPixmap fileIcon = QIcon::fromTheme(QLatin1String("text-x-generic")).pixmap(16); + if (fileIcon.isNull()) + fileIcon = QIcon::fromTheme(QLatin1String("empty")).pixmap(16); + if (!fileIcon.isNull()) { + QPainter painter(&fileIcon); + painter.drawPixmap(0, 0, 16, 16, pixmap); + return fileIcon; + } + } + break; + case SP_DirLinkIcon: + pixmap = QIcon::fromTheme(QLatin1String("emblem-symbolic-link")).pixmap(16); + if (!pixmap.isNull()) { + QPixmap dirIcon = QIcon::fromTheme(QLatin1String("folder")).pixmap(16); + if (!dirIcon.isNull()) { + QPainter painter(&dirIcon); + painter.drawPixmap(0, 0, 16, 16, pixmap); + return dirIcon; + } + } + break; + case SP_LineEditClearButton: + pixmap = clearTextIcon(rtl).pixmap(16); + break; + default: + break; + } + } + + if (!pixmap.isNull()) + return pixmap; +#endif // QT_CONFIG(imageformat_png) + switch (sp) { +#ifndef QT_NO_IMAGEFORMAT_XPM + case SP_ToolBarHorizontalExtensionButton: + if (rtl) { + QImage im(tb_extension_arrow_h_xpm); + im = im.convertToFormat(QImage::Format_ARGB32).mirrored(true, false); + return QPixmap::fromImage(im); + } + return cachedPixmapFromXPM(tb_extension_arrow_h_xpm); + case SP_ToolBarVerticalExtensionButton: + return cachedPixmapFromXPM(tb_extension_arrow_v_xpm); + case SP_FileDialogStart: + return cachedPixmapFromXPM(filedialog_start_xpm); + case SP_FileDialogEnd: + return cachedPixmapFromXPM(filedialog_end_xpm); +#endif +#ifndef QT_NO_IMAGEFORMAT_PNG + case SP_CommandLink: + case SP_ArrowForward: + if (rtl) + return proxy()->standardPixmap(SP_ArrowLeft, option); + return proxy()->standardPixmap(SP_ArrowRight, option); + case SP_ArrowBack: + if (rtl) + return proxy()->standardPixmap(SP_ArrowRight, option); + return proxy()->standardPixmap(SP_ArrowLeft, option); + case SP_ArrowLeft: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/left-16.png")); + case SP_ArrowRight: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/right-16.png")); + case SP_ArrowUp: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/up-16.png")); + case SP_ArrowDown: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/down-16.png")); + case SP_FileDialogToParent: + return proxy()->standardPixmap(SP_ArrowUp, option); + case SP_FileDialogNewFolder: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/newdirectory-16.png")); + case SP_FileDialogDetailedView: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/viewdetailed-16.png")); + case SP_FileDialogInfoView: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/fileinfo-16.png")); + case SP_FileDialogContentsView: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/filecontents-16.png")); + case SP_FileDialogListView: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/viewlist-16.png")); + case SP_FileDialogBack: + return proxy()->standardPixmap(SP_ArrowBack, option); + case SP_DriveHDIcon: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/harddrive-16.png")); + case SP_TrashIcon: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/trash-16.png")); + case SP_DriveFDIcon: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/floppy-16.png")); + case SP_DriveNetIcon: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/networkdrive-16.png")); + case SP_DesktopIcon: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/desktop-16.png")); + case SP_ComputerIcon: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/computer-16.png")); + case SP_DriveCDIcon: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/cdr-16.png")); + case SP_DriveDVDIcon: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/dvd-16.png")); + case SP_DirHomeIcon: + case SP_DirOpenIcon: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/diropen-16.png")); + case SP_DirIcon: + case SP_DirClosedIcon: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/dirclosed-16.png")); + case SP_DirLinkIcon: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/dirlink-16.png")); + case SP_FileIcon: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/file-16.png")); + case SP_FileLinkIcon: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/filelink-16.png")); + case SP_DialogOkButton: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-ok-16.png")); + case SP_DialogCancelButton: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-cancel-16.png")); + case SP_DialogHelpButton: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-help-16.png")); + case SP_DialogOpenButton: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-open-16.png")); + case SP_DialogSaveButton: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-save-16.png")); + case SP_DialogCloseButton: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-close-16.png")); + case SP_DialogApplyButton: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-apply-16.png")); + case SP_DialogResetButton: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-clear-16.png")); + case SP_DialogDiscardButton: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-delete-16.png")); + case SP_DialogYesButton: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-yes-16.png")); + case SP_DialogNoButton: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-no-16.png")); + case SP_BrowserReload: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/refresh-24.png")); + case SP_BrowserStop: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/stop-24.png")); + case SP_MediaPlay: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-play-32.png")); + case SP_MediaPause: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-pause-32.png")); + case SP_MediaStop: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-stop-32.png")); + case SP_MediaSeekForward: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-seek-forward-32.png")); + case SP_MediaSeekBackward: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-seek-backward-32.png")); + case SP_MediaSkipForward: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-skip-forward-32.png")); + case SP_MediaSkipBackward: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-skip-backward-32.png")); + case SP_MediaVolume: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-volume-16.png")); + case SP_MediaVolumeMuted: + return QPixmap(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-volume-muted-16.png")); + case SP_LineEditClearButton: + return QPixmap(clearText16IconPath()); +#endif // QT_NO_IMAGEFORMAT_PNG + default: + break; + } + +#ifndef QT_NO_IMAGEFORMAT_XPM + switch (sp) { + case SP_TitleBarMenuButton: + return titleBarMenuCachedPixmapFromXPM(); + case SP_TitleBarShadeButton: + return cachedPixmapFromXPM(qt_shade_xpm); + case SP_TitleBarUnshadeButton: + return cachedPixmapFromXPM(qt_unshade_xpm); + case SP_TitleBarNormalButton: + return cachedPixmapFromXPM(qt_normalizeup_xpm); + case SP_TitleBarMinButton: + return cachedPixmapFromXPM(qt_minimize_xpm); + case SP_TitleBarMaxButton: + return cachedPixmapFromXPM(qt_maximize_xpm); + case SP_TitleBarCloseButton: + return cachedPixmapFromXPM(qt_close_xpm); + case SP_TitleBarContextHelpButton: + return cachedPixmapFromXPM(qt_help_xpm); + case SP_DockWidgetCloseButton: + return cachedPixmapFromXPM(dock_widget_close_xpm); + case SP_MessageBoxInformation: + return cachedPixmapFromXPM(information_xpm); + case SP_MessageBoxWarning: + return cachedPixmapFromXPM(warning_xpm); + case SP_MessageBoxCritical: + return cachedPixmapFromXPM(critical_xpm); + case SP_MessageBoxQuestion: + return cachedPixmapFromXPM(question_xpm); + default: + break; + } +#endif //QT_NO_IMAGEFORMAT_XPM + +#if !QT_CONFIG(imageformat_png) && !QT_CONFIG(imageformat_xpm) + Q_UNUSED(rtl); +#endif + + return QPixmap(); +} + +#if QT_CONFIG(imageformat_png) +static inline QString iconResourcePrefix() { return QStringLiteral(":/qt-project.org/styles/commonstyle/images/"); } +static inline QString iconPngSuffix() { return QStringLiteral(".png"); } + +static void addIconFiles(const QString &prefix, const int sizes[], size_t count, QIcon &icon) +{ + for (size_t i = 0; i < count; ++i) + icon.addFile(prefix + QString::number(sizes[i]) + iconPngSuffix()); +} + +static const int dockTitleIconSizes[] = {10, 16, 20, 32, 48, 64}; +static const int titleBarSizes[] = {16, 32, 48}; +static const int toolBarExtHSizes[] = {8, 16, 32}; +static const int toolBarExtVSizes[] = {5, 10, 20}; +#endif // imageformat_png + +/*! + \internal +*/ +QIcon QCommonStyle::standardIcon(StandardPixmap standardIcon, const QStyleOption *option) const +{ + QIcon icon; + const bool rtl = (option && option->direction == Qt::RightToLeft) || (!option && QGuiApplication::isRightToLeft()); + +#ifdef Q_OS_WIN + switch (standardIcon) { + case SP_DriveCDIcon: + case SP_DriveDVDIcon: + case SP_DriveNetIcon: + case SP_DriveHDIcon: + case SP_DriveFDIcon: + case SP_FileIcon: + case SP_FileLinkIcon: + case SP_DesktopIcon: + case SP_ComputerIcon: + case SP_VistaShield: + case SP_MessageBoxInformation: + case SP_MessageBoxWarning: + case SP_MessageBoxCritical: + case SP_MessageBoxQuestion: + if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) { + QPlatformTheme::StandardPixmap sp = static_cast(standardIcon); + for (int size = 16 ; size <= 32 ; size += 16) { + QPixmap pixmap = theme->standardPixmap(sp, QSizeF(size, size)); + icon.addPixmap(pixmap, QIcon::Normal); + } + } + break; + case SP_DirIcon: + case SP_DirLinkIcon: + if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) { + QPlatformTheme::StandardPixmap spOff = static_cast(standardIcon); + QPlatformTheme::StandardPixmap spOn = standardIcon == SP_DirIcon ? QPlatformTheme::DirOpenIcon : + QPlatformTheme::DirLinkOpenIcon; + for (int size = 16 ; size <= 32 ; size += 16) { + QSizeF pixSize(size, size); + QPixmap pixmap = theme->standardPixmap(spOff, pixSize); + icon.addPixmap(pixmap, QIcon::Normal, QIcon::Off); + pixmap = theme->standardPixmap(spOn, pixSize); + icon.addPixmap(pixmap, QIcon::Normal, QIcon::On); + } + } + break; + case SP_LineEditClearButton: + icon = clearTextIcon(rtl); + break; + default: + break; + } + if (!icon.isNull()) + return icon; + +#endif + + if (QGuiApplication::desktopSettingsAware() && !QIcon::themeName().isEmpty()) { + switch (standardIcon) { + case SP_DirHomeIcon: + icon = QIcon::fromTheme(QLatin1String("user-home")); + break; + case SP_MessageBoxInformation: + icon = QIcon::fromTheme(QLatin1String("dialog-information")); + break; + case SP_MessageBoxWarning: + icon = QIcon::fromTheme(QLatin1String("dialog-warning")); + break; + case SP_MessageBoxCritical: + icon = QIcon::fromTheme(QLatin1String("dialog-error")); + break; + case SP_MessageBoxQuestion: + icon = QIcon::fromTheme(QLatin1String("dialog-question")); + break; + case SP_DialogOpenButton: + case SP_DirOpenIcon: + icon = QIcon::fromTheme(QLatin1String("folder-open")); + break; + case SP_DialogSaveButton: + icon = QIcon::fromTheme(QLatin1String("document-save")); + break; + case SP_DialogApplyButton: + icon = QIcon::fromTheme(QLatin1String("dialog-ok-apply")); + break; + case SP_DialogYesButton: + case SP_DialogOkButton: + icon = QIcon::fromTheme(QLatin1String("dialog-ok")); + break; + case SP_DialogDiscardButton: + icon = QIcon::fromTheme(QLatin1String("edit-delete")); + break; + case SP_DialogResetButton: + icon = QIcon::fromTheme(QLatin1String("edit-clear")); + break; + case SP_DialogHelpButton: + icon = QIcon::fromTheme(QLatin1String("help-contents")); + break; + case SP_FileIcon: + icon = QIcon::fromTheme(QLatin1String("text-x-generic")); + break; + case SP_DirClosedIcon: + case SP_DirIcon: + icon = QIcon::fromTheme(QLatin1String("folder")); + break; + case SP_DriveFDIcon: + icon = QIcon::fromTheme(QLatin1String("floppy_unmount")); + break; + case SP_ComputerIcon: + icon = QIcon::fromTheme(QLatin1String("computer"), + QIcon::fromTheme(QLatin1String("system"))); + break; + case SP_DesktopIcon: + icon = QIcon::fromTheme(QLatin1String("user-desktop")); + break; + case SP_TrashIcon: + icon = QIcon::fromTheme(QLatin1String("user-trash")); + break; + case SP_DriveCDIcon: + case SP_DriveDVDIcon: + icon = QIcon::fromTheme(QLatin1String("media-optical")); + break; + case SP_DriveHDIcon: + icon = QIcon::fromTheme(QLatin1String("drive-harddisk")); + break; + case SP_FileDialogToParent: + icon = QIcon::fromTheme(QLatin1String("go-up")); + break; + case SP_FileDialogNewFolder: + icon = QIcon::fromTheme(QLatin1String("folder-new")); + break; + case SP_ArrowUp: + icon = QIcon::fromTheme(QLatin1String("go-up")); + break; + case SP_ArrowDown: + icon = QIcon::fromTheme(QLatin1String("go-down")); + break; + case SP_ArrowRight: + icon = QIcon::fromTheme(QLatin1String("go-next")); + break; + case SP_ArrowLeft: + icon = QIcon::fromTheme(QLatin1String("go-previous")); + break; + case SP_DialogNoButton: + case SP_DialogCancelButton: + icon = QIcon::fromTheme(QLatin1String("dialog-cancel"), + QIcon::fromTheme(QLatin1String("process-stop"))); + break; + case SP_DialogCloseButton: + icon = QIcon::fromTheme(QLatin1String("window-close")); + break; + case SP_FileDialogDetailedView: + icon = QIcon::fromTheme(QLatin1String("view-list-details")); + break; + case SP_FileDialogListView: + icon = QIcon::fromTheme(QLatin1String("view-list-icons")); + break; + case SP_BrowserReload: + icon = QIcon::fromTheme(QLatin1String("view-refresh")); + break; + case SP_BrowserStop: + icon = QIcon::fromTheme(QLatin1String("process-stop")); + break; + case SP_MediaPlay: + icon = QIcon::fromTheme(QLatin1String("media-playback-start")); + break; + case SP_MediaPause: + icon = QIcon::fromTheme(QLatin1String("media-playback-pause")); + break; + case SP_MediaStop: + icon = QIcon::fromTheme(QLatin1String("media-playback-stop")); + break; + case SP_MediaSeekForward: + icon = QIcon::fromTheme(QLatin1String("media-seek-forward")); + break; + case SP_MediaSeekBackward: + icon = QIcon::fromTheme(QLatin1String("media-seek-backward")); + break; + case SP_MediaSkipForward: + icon = QIcon::fromTheme(QLatin1String("media-skip-forward")); + break; + case SP_MediaSkipBackward: + icon = QIcon::fromTheme(QLatin1String("media-skip-backward")); + break; + case SP_MediaVolume: + icon = QIcon::fromTheme(QLatin1String("audio-volume-medium")); + break; + case SP_MediaVolumeMuted: + icon = QIcon::fromTheme(QLatin1String("audio-volume-muted")); + break; + case SP_ArrowForward: + if (rtl) + return QCommonStyle::standardIcon(SP_ArrowLeft, option); + return QCommonStyle::standardIcon(SP_ArrowRight, option); + case SP_ArrowBack: + if (rtl) + return QCommonStyle::standardIcon(SP_ArrowRight, option); + return QCommonStyle::standardIcon(SP_ArrowLeft, option); + case SP_FileLinkIcon: + { + QIcon linkIcon = QIcon::fromTheme(QLatin1String("emblem-symbolic-link")); + if (!linkIcon.isNull()) { + QIcon baseIcon = QCommonStyle::standardIcon(SP_FileIcon, option); + const QList sizes = baseIcon.availableSizes(QIcon::Normal, QIcon::Off); + const qreal devicePixelRatio = option ? dpr(option->window) : 1.; + for (int i = 0 ; i < sizes.size() ; ++i) { + int size = sizes[i].width(); + QPixmap basePixmap = baseIcon.pixmap(QSize(size, size), devicePixelRatio); + QPixmap linkPixmap = linkIcon.pixmap(QSize(size / 2, size / 2), devicePixelRatio); + QPainter painter(&basePixmap); + painter.drawPixmap(size/2, size/2, linkPixmap); + icon.addPixmap(basePixmap); + } + } + } + break; + case SP_DirLinkIcon: + { + QIcon linkIcon = QIcon::fromTheme(QLatin1String("emblem-symbolic-link")); + if (!linkIcon.isNull()) { + QIcon baseIcon = QCommonStyle::standardIcon(SP_DirIcon, option); + const QList sizes = baseIcon.availableSizes(QIcon::Normal, QIcon::Off); + const qreal devicePixelRatio = option ? dpr(option->window) : 1.; + for (int i = 0 ; i < sizes.size() ; ++i) { + int size = sizes[i].width(); + QPixmap basePixmap = baseIcon.pixmap(QSize(size, size), devicePixelRatio); + QPixmap linkPixmap = linkIcon.pixmap(QSize(size / 2, size / 2), devicePixelRatio); + QPainter painter(&basePixmap); + painter.drawPixmap(size/2, size/2, linkPixmap); + icon.addPixmap(basePixmap); + } + } + } + break; + default: + break; + } + } // if (QGuiApplication::desktopSettingsAware() && !QIcon::themeName().isEmpty()) + + if (!icon.isNull()) + return icon; + +#if defined(Q_OS_MAC) + if (QGuiApplication::desktopSettingsAware()) { + switch (standardIcon) { + case SP_DirIcon: { + // A rather special case + QIcon closeIcon = QCommonStyle::standardIcon(SP_DirClosedIcon, option); + QIcon openIcon = QCommonStyle::standardIcon(SP_DirOpenIcon, option); + closeIcon.addPixmap(openIcon.pixmap(16, 16), QIcon::Normal, QIcon::On); + closeIcon.addPixmap(openIcon.pixmap(32, 32), QIcon::Normal, QIcon::On); + closeIcon.addPixmap(openIcon.pixmap(64, 64), QIcon::Normal, QIcon::On); + closeIcon.addPixmap(openIcon.pixmap(128, 128), QIcon::Normal, QIcon::On); + return closeIcon; + } + + case SP_TitleBarNormalButton: + case SP_TitleBarCloseButton: { + QIcon titleBarIcon; + if (standardIcon == SP_TitleBarCloseButton) { + titleBarIcon.addFile(QLatin1String(":/qt-project.org/styles/macstyle/images/closedock-16.png")); + titleBarIcon.addFile(QLatin1String(":/qt-project.org/styles/macstyle/images/closedock-down-16.png"), QSize(16, 16), QIcon::Normal, QIcon::On); + } else { + titleBarIcon.addFile(QLatin1String(":/qt-project.org/styles/macstyle/images/dockdock-16.png")); + titleBarIcon.addFile(QLatin1String(":/qt-project.org/styles/macstyle/images/dockdock-down-16.png"), QSize(16, 16), QIcon::Normal, QIcon::On); + } + return titleBarIcon; + } + + case SP_MessageBoxQuestion: + case SP_MessageBoxInformation: + case SP_MessageBoxWarning: + case SP_MessageBoxCritical: + case SP_DesktopIcon: + case SP_TrashIcon: + case SP_ComputerIcon: + case SP_DriveFDIcon: + case SP_DriveHDIcon: + case SP_DriveCDIcon: + case SP_DriveDVDIcon: + case SP_DriveNetIcon: + case SP_DirOpenIcon: + case SP_DirClosedIcon: + case SP_DirLinkIcon: + case SP_FileLinkIcon: + case SP_FileIcon: + if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) { + QPlatformTheme::StandardPixmap sp = static_cast(standardIcon); + QIcon retIcon; + const QList sizes = theme->themeHint(QPlatformTheme::IconPixmapSizes).value >(); + for (const QSize &size : sizes) { + QPixmap mainIcon; + const QString cacheKey = QLatin1String("qt_mac_constructQIconFromIconRef") + QString::number(standardIcon) + QString::number(size.width()); + if (standardIcon >= QStyle::SP_CustomBase) { + mainIcon = theme->standardPixmap(sp, QSizeF(size)); + } else if (QPixmapCache::find(cacheKey, &mainIcon) == false) { + mainIcon = theme->standardPixmap(sp, QSizeF(size)); + QPixmapCache::insert(cacheKey, mainIcon); + } + + retIcon.addPixmap(mainIcon); + } + if (!retIcon.isNull()) + return retIcon; + } + + default: + break; + } + } // if (QGuiApplication::desktopSettingsAware()) +#endif // Q_OS_MAC + + switch (standardIcon) { +#ifndef QT_NO_IMAGEFORMAT_PNG + case SP_TitleBarMinButton: + addIconFiles(iconResourcePrefix() + QStringLiteral("titlebar-min-"), + titleBarSizes, sizeof(titleBarSizes)/sizeof(titleBarSizes[0]), icon); + break; + case SP_TitleBarMaxButton: + addIconFiles(iconResourcePrefix() + QStringLiteral("titlebar-max-"), + titleBarSizes, sizeof(titleBarSizes)/sizeof(titleBarSizes[0]), icon); + break; + case SP_TitleBarShadeButton: + addIconFiles(iconResourcePrefix() + QStringLiteral("titlebar-shade-"), + titleBarSizes, sizeof(titleBarSizes)/sizeof(titleBarSizes[0]), icon); + + break; + case SP_TitleBarUnshadeButton: + addIconFiles(iconResourcePrefix() + QStringLiteral("titlebar-unshade-"), + titleBarSizes, sizeof(titleBarSizes)/sizeof(titleBarSizes[0]), icon); + break; + case SP_TitleBarContextHelpButton: + addIconFiles(iconResourcePrefix() + QStringLiteral("titlebar-contexthelp-"), + titleBarSizes, sizeof(titleBarSizes)/sizeof(titleBarSizes[0]), icon); + break; + case SP_FileDialogNewFolder: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/newdirectory-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/newdirectory-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/newdirectory-128.png"), QSize(128, 128)); + break; + case SP_FileDialogBack: + return QCommonStyle::standardIcon(SP_ArrowBack, option); + case SP_FileDialogToParent: + return QCommonStyle::standardIcon(SP_ArrowUp, option); + case SP_FileDialogDetailedView: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/viewdetailed-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/viewdetailed-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/viewdetailed-128.png"), QSize(128, 128)); + break; + case SP_FileDialogInfoView: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/fileinfo-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/fileinfo-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/fileinfo-128.png"), QSize(128, 128)); + break; + case SP_FileDialogContentsView: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/filecontents-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/filecontents-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/filecontents-128.png"), QSize(128, 128)); + break; + case SP_FileDialogListView: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/viewlist-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/viewlist-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/viewlist-128.png"), QSize(128, 128)); + break; + case SP_DialogOkButton: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-ok-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-ok-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-ok-128.png"), QSize(128, 128)); + break; + case SP_DialogCancelButton: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-cancel-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-cancel-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-cancel-128.png"), QSize(128, 128)); + break; + case SP_DialogHelpButton: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-help-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-help-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-help-128.png"), QSize(128, 128)); + break; + case SP_DialogOpenButton: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-open-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-open-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-open-128.png"), QSize(128, 128)); + break; + case SP_DialogSaveButton: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-save-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-save-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-save-128.png"), QSize(128, 128)); + break; + case SP_DialogCloseButton: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-close-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-close-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-close-128.png"), QSize(128, 128)); + break; + case SP_DialogApplyButton: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-apply-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-apply-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-apply-128.png"), QSize(128, 128)); + break; + case SP_DialogResetButton: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-clear-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-clear-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-clear-128.png"), QSize(128, 128)); + break; + case SP_DialogDiscardButton: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-delete-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-delete-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-delete-128.png"), QSize(128, 128)); + break; + case SP_DialogYesButton: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-yes-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-yes-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-yes-128.png"), QSize(128, 128)); + break; + case SP_DialogNoButton: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-no-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-no-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/standardbutton-no-128.png"), QSize(128, 128)); + break; + case SP_ArrowForward: + if (rtl) + return QCommonStyle::standardIcon(SP_ArrowLeft, option); + return QCommonStyle::standardIcon(SP_ArrowRight, option); + case SP_ArrowBack: + if (rtl) + return QCommonStyle::standardIcon(SP_ArrowRight, option); + return QCommonStyle::standardIcon(SP_ArrowLeft, option); + case SP_ArrowLeft: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/left-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/left-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/left-128.png"), QSize(128, 128)); + break; + case SP_ArrowRight: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/right-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/right-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/right-128.png"), QSize(128, 128)); + break; + case SP_ArrowUp: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/up-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/up-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/up-128.png"), QSize(128, 128)); + break; + case SP_ArrowDown: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/down-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/down-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/down-128.png"), QSize(128, 128)); + break; + case SP_DirHomeIcon: + case SP_DirIcon: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/dirclosed-16.png"), + QSize(), QIcon::Normal, QIcon::Off); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/diropen-16.png"), + QSize(), QIcon::Normal, QIcon::On); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/dirclosed-32.png"), + QSize(32, 32), QIcon::Normal, QIcon::Off); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/diropen-32.png"), + QSize(32, 32), QIcon::Normal, QIcon::On); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/dirclosed-128.png"), + QSize(128, 128), QIcon::Normal, QIcon::Off); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/diropen-128.png"), + QSize(128, 128), QIcon::Normal, QIcon::On); + break; + case SP_DriveCDIcon: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/cdr-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/cdr-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/cdr-128.png"), QSize(128, 128)); + break; + case SP_DriveDVDIcon: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/dvd-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/dvd-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/dvd-128.png"), QSize(128, 128)); + break; + case SP_FileIcon: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/file-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/file-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/file-128.png"), QSize(128, 128)); + break; + case SP_FileLinkIcon: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/filelink-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/filelink-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/filelink-128.png"), QSize(128, 128)); + break; + case SP_TrashIcon: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/trash-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/trash-32.png"), QSize(32, 32)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/trash-128.png"), QSize(128, 128)); + break; + case SP_BrowserReload: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/refresh-24.png"), QSize(24, 24)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/refresh-32.png"), QSize(32, 32)); + break; + case SP_BrowserStop: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/stop-24.png"), QSize(24, 24)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/stop-32.png"), QSize(32, 32)); + break; + case SP_MediaPlay: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-play-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-play-32.png"), QSize(32, 32)); + break; + case SP_MediaPause: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-pause-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-pause-32.png"), QSize(32, 32)); + break; + case SP_MediaStop: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-stop-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-stop-32.png"), QSize(32, 32)); + break; + case SP_MediaSeekForward: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-seek-forward-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-seek-forward-32.png"), QSize(32, 32)); + break; + case SP_MediaSeekBackward: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-seek-backward-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-seek-backward-32.png"), QSize(32, 32)); + break; + case SP_MediaSkipForward: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-skip-forward-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-skip-forward-32.png"), QSize(32, 32)); + break; + case SP_MediaSkipBackward: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-skip-backward-16.png"), QSize(16, 16)); + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-skip-backward-32.png"), QSize(32, 32)); + break; + case SP_MediaVolume: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-volume-16.png"), QSize(16, 16)); + break; + case SP_MediaVolumeMuted: + icon.addFile(QLatin1String(":/qt-project.org/styles/commonstyle/images/media-volume-muted-16.png"), QSize(16, 16)); + break; + case SP_TitleBarCloseButton: + addIconFiles(iconResourcePrefix() + QStringLiteral("closedock-"), + dockTitleIconSizes, sizeof(dockTitleIconSizes)/sizeof(dockTitleIconSizes[0]), icon); + break; + case SP_TitleBarMenuButton: +# ifndef QT_NO_IMAGEFORMAT_XPM + icon.addPixmap(titleBarMenuCachedPixmapFromXPM()); +# endif + icon.addFile(QLatin1String(":/qt-project.org/qmessagebox/images/qtlogo-64.png")); + break; + case SP_TitleBarNormalButton: + addIconFiles(iconResourcePrefix() + QStringLiteral("normalizedockup-"), + dockTitleIconSizes, sizeof(dockTitleIconSizes)/sizeof(dockTitleIconSizes[0]), icon); + break; + case SP_ToolBarHorizontalExtensionButton: { + QString prefix = iconResourcePrefix() + QStringLiteral("toolbar-ext-h-"); + if (rtl) + prefix += QStringLiteral("rtl-"); + addIconFiles(prefix, toolBarExtHSizes, sizeof(toolBarExtHSizes)/sizeof(toolBarExtHSizes[0]), icon); + } + break; + case SP_ToolBarVerticalExtensionButton: + addIconFiles(iconResourcePrefix() + QStringLiteral("toolbar-ext-v-"), + toolBarExtVSizes, sizeof(toolBarExtVSizes)/sizeof(toolBarExtVSizes[0]), icon); + break; +#endif // QT_NO_IMAGEFORMAT_PNG + default: + icon.addPixmap(proxy()->standardPixmap(standardIcon, option)); + break; + } + return icon; +} + +static inline uint qt_intensity(uint r, uint g, uint b) +{ + // 30% red, 59% green, 11% blue + return (77 * r + 150 * g + 28 * b) / 255; +} + +/*! \reimp */ +QPixmap QCommonStyle::generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, + const QStyleOption *opt) const +{ + switch (iconMode) { + case QIcon::Disabled: { + QImage im = pixmap.toImage().convertToFormat(QImage::Format_ARGB32); + + // Create a colortable based on the background (black -> bg -> white) + QColor bg = opt->palette.color(QPalette::Disabled, QPalette::Window); + int red = bg.red(); + int green = bg.green(); + int blue = bg.blue(); + uchar reds[256], greens[256], blues[256]; + for (int i=0; i<128; ++i) { + reds[i] = uchar((red * (i<<1)) >> 8); + greens[i] = uchar((green * (i<<1)) >> 8); + blues[i] = uchar((blue * (i<<1)) >> 8); + } + for (int i=0; i<128; ++i) { + reds[i+128] = uchar(qMin(red + (i << 1), 255)); + greens[i+128] = uchar(qMin(green + (i << 1), 255)); + blues[i+128] = uchar(qMin(blue + (i << 1), 255)); + } + + int intensity = qt_intensity(red, green, blue); + const int factor = 191; + + // High intensity colors needs dark shifting in the color table, while + // low intensity colors needs light shifting. This is to increase the + // perceived contrast. + if ((red - factor > green && red - factor > blue) + || (green - factor > red && green - factor > blue) + || (blue - factor > red && blue - factor > green)) + intensity = qMin(255, intensity + 91); + else if (intensity <= 128) + intensity -= 51; + + for (int y=0; ypalette.color(QPalette::Normal, QPalette::Highlight); + color.setAlphaF(0.3f); + QPainter painter(&img); + painter.setCompositionMode(QPainter::CompositionMode_SourceAtop); + painter.fillRect(0, 0, img.width(), img.height(), color); + painter.end(); + return QPixmap::fromImage(img); } + case QIcon::Active: + return pixmap; + default: + break; + } + return pixmap; +} + +} // namespace QQC2 + +QT_END_NAMESPACE + +#include "moc_qquickcommonstyle.cpp" diff --git a/src/quicknativestyle/qstyle/qquickcommonstyle.h b/src/quicknativestyle/qstyle/qquickcommonstyle.h new file mode 100644 index 00000000..894194a0 --- /dev/null +++ b/src/quicknativestyle/qstyle/qquickcommonstyle.h @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QCOMMONSTYLE_H +#define QCOMMONSTYLE_H + +#include "qquickstyle.h" + +QT_BEGIN_NAMESPACE + +namespace QQC2 { + +class QCommonStylePrivate; + +class QCommonStyle: public QStyle +{ + Q_OBJECT + +public: + QCommonStyle(); + ~QCommonStyle() override; + + void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p) const override; + void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p) const override; + void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p) const override; + + QRect subElementRect(SubElement r, const QStyleOption *opt) const override; + QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc) const override; + + QSize sizeFromContents(ContentsType ct, const QStyleOption *opt, const QSize &contentsSize) const override; + QFont font(ControlElement element, const QStyle::State state) const override; + QMargins ninePatchMargins(ControlElement ce, const QStyleOption *opt, const QSize &imageSize) const override; + QMargins ninePatchMargins(ComplexControl cc, const QStyleOptionComplex *opt, const QSize &imageSize) const override; + + int pixelMetric(PixelMetric m, const QStyleOption *opt = nullptr) const override; + int styleHint(StyleHint sh, const QStyleOption *opt = nullptr, QStyleHintReturn *shret = nullptr) const override; + + QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *opt = nullptr) const override; + QPixmap standardPixmap(StandardPixmap sp, const QStyleOption *opt = nullptr) const override; + QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const override; + + SubControl hitTestComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, const QPoint &pt) const override; + +protected: + QCommonStyle(QCommonStylePrivate &dd); + +private: + Q_DECLARE_PRIVATE(QCommonStyle) + Q_DISABLE_COPY(QCommonStyle) +}; + +} // namespace QQC2 + +QT_END_NAMESPACE + +#endif // QCOMMONSTYLE_H diff --git a/src/quicknativestyle/qstyle/qquickcommonstyle_p.h b/src/quicknativestyle/qstyle/qquickcommonstyle_p.h new file mode 100644 index 00000000..ba2b8689 --- /dev/null +++ b/src/quicknativestyle/qstyle/qquickcommonstyle_p.h @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QCOMMONSTYLE_P_H +#define QCOMMONSTYLE_P_H + +#include "qquickcommonstyle.h" +#include "qquickstyle_p.h" +#include "qquickstyleoption.h" + +QT_BEGIN_NAMESPACE + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of qapplication_*.cpp, qwidget*.cpp and qfiledialog.cpp. This header +// file may change from version to version without notice, or even be removed. +// +// We mean it. +// + +class QTextOption; + +namespace QQC2 { + +class QCommonStylePrivate : public QStylePrivate +{ + Q_DECLARE_PUBLIC(QCommonStyle) +public: + + ~QCommonStylePrivate() + { + delete cachedOption; + } + + QString calculateElidedText(const QString &text, const QTextOption &textOption, + const QFont &font, const QRect &textRect, const Qt::Alignment valign, + Qt::TextElideMode textElideMode, int flags, + bool lastVisibleLineShouldBeElided, QPointF *paintStartPosition) const; + void viewItemDrawText(QPainter *p, const QStyleOptionViewItem *option, const QRect &rect) const; + void viewItemLayout(const QStyleOptionViewItem *opt, QRect *checkRect, + QRect *pixmapRect, QRect *textRect, bool sizehint) const; + QSize viewItemSize(const QStyleOptionViewItem *option, int role) const; + + mutable QRect decorationRect, displayRect, checkRect; + mutable QStyleOptionViewItem *cachedOption = nullptr; + bool isViewItemCached(const QStyleOptionViewItem &option) const { + return cachedOption + && option.index == cachedOption->index + && option.state == cachedOption->state + && option.rect == cachedOption->rect + && option.text == cachedOption->text + && option.direction == cachedOption->direction + && option.displayAlignment == cachedOption->displayAlignment + && option.decorationAlignment == cachedOption->decorationAlignment + && option.decorationPosition == cachedOption->decorationPosition + && option.decorationSize == cachedOption->decorationSize + && option.features == cachedOption->features + && option.icon.isNull() == cachedOption->icon.isNull() + && option.font == cachedOption->font + && option.viewItemPosition == cachedOption->viewItemPosition; + } + QString toolButtonElideText(const QStyleOptionToolButton *toolbutton, + const QRect &textRect, int flags) const; + + mutable QIcon tabBarcloseButtonIcon; + virtual void tabLayout(const QStyleOptionTab *opt, QRect *textRect, QRect *pixmapRect) const; +}; + +} // namespace QQC2 + +QT_END_NAMESPACE + +#endif //QCOMMONSTYLE_P_H diff --git a/src/quicknativestyle/qstyle/qquickcommonstylepixmaps_p.h b/src/quicknativestyle/qstyle/qquickcommonstylepixmaps_p.h new file mode 100644 index 00000000..59f1afac --- /dev/null +++ b/src/quicknativestyle/qstyle/qquickcommonstylepixmaps_p.h @@ -0,0 +1,532 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QT_NO_IMAGEFORMAT_XPM + +// +// 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. +// + +QT_BEGIN_NAMESPACE + +namespace QQC2 { + +static const char * const check_list_controller_xpm[] = { +"16 16 4 1", +" c None", +". c #000000000000", +"X c #FFFFFFFF0000", +"o c #C71BC30BC71B", +" ", +" ", +" .......... ", +" .XXXXXXXX. ", +" .XXXXXXXX.oo ", +" .XXXXXXXX.oo ", +" .XXXXXXXX.oo ", +" .XXXXXXXX.oo ", +" .XXXXXXXX.oo ", +" .XXXXXXXX.oo ", +" .XXXXXXXX.oo ", +" ..........oo ", +" oooooooooo ", +" oooooooooo ", +" ", +" "}; + + +static const char * const tb_extension_arrow_v_xpm[] = { + "5 8 3 1", + " c None", + ". c #000000", + "+ c none", + ".+++.", + "..+..", + "+...+", + "++.++", + ".+++.", + "..+..", + "+...+", + "++.++" +}; + +static const char * const tb_extension_arrow_h_xpm[] = { + "8 5 3 1", + " c None", + ". c #000000", + "+ c none", + "..++..++", + "+..++..+", + "++..++..", + "+..++..+", + "..++..++", +}; + +static const char * const filedialog_start_xpm[]={ + "16 15 8 1", + "a c #cec6bd", + "# c #000000", + "e c #ffff00", + "b c #999999", + "f c #cccccc", + "d c #dcdcdc", + "c c #ffffff", + ". c None", + ".....######aaaaa", + "...bb#cccc##aaaa", + "..bcc#cccc#d#aaa", + ".bcef#cccc#dd#aa", + ".bcfe#cccc#####a", + ".bcef#ccccccccc#", + "bbbbbbbbbbbbccc#", + "bccccccccccbbcc#", + "bcefefefefee#bc#", + ".bcefefefefef#c#", + ".bcfefefefefe#c#", + "..bcfefefefeeb##", + "..bbbbbbbbbbbbb#", + "...#############", + "................"}; + +static const char * const filedialog_end_xpm[]={ + "16 15 9 1", + "d c #a0a0a0", + "c c #c3c3c3", + "# c #cec6bd", + ". c #000000", + "f c #ffff00", + "e c #999999", + "g c #cccccc", + "b c #ffffff", + "a c None", + "......####aaaaaa", + ".bbbb..###aaaaaa", + ".bbbb.c.##aaaaaa", + ".bbbb....ddeeeea", + ".bbbbbbb.bbbbbe.", + ".bbbbbbb.bcfgfe.", + "eeeeeeeeeeeeefe.", + "ebbbbbbbbbbeege.", + "ebfgfgfgfgff.ee.", + "aebfgfgfgfgfg.e.", + "aebgfgfgfgfgf.e.", + "aaebgfgfgfgffe..", + "aaeeeeeeeeeeeee.", + "aaa.............", + "aaaaaaaaaaaaaaaa"}; + + +/* XPM */ +static const char * const qt_menu_xpm[] = { +"16 16 72 1", +" c None", +". c #65AF36", +"+ c #66B036", +"@ c #77B94C", +"# c #A7D28C", +"$ c #BADBA4", +"% c #A4D088", +"& c #72B646", +"* c #9ACB7A", +"= c #7FBD56", +"- c #85C05F", +"; c #F4F9F0", +"> c #FFFFFF", +", c #E5F1DC", +"' c #ECF5E7", +") c #7ABA50", +"! c #83BF5C", +"~ c #AED595", +"{ c #D7EACA", +"] c #A9D28D", +"^ c #BCDDA8", +"/ c #C4E0B1", +"( c #81BE59", +"_ c #D0E7C2", +": c #D4E9C6", +"< c #6FB542", +"[ c #6EB440", +"} c #88C162", +"| c #98CA78", +"1 c #F4F9F1", +"2 c #8FC56C", +"3 c #F1F8EC", +"4 c #E8F3E1", +"5 c #D4E9C7", +"6 c #74B748", +"7 c #80BE59", +"8 c #73B747", +"9 c #6DB43F", +"0 c #CBE4BA", +"a c #80BD58", +"b c #6DB33F", +"c c #FEFFFE", +"d c #68B138", +"e c #F9FCF7", +"f c #91C66F", +"g c #E8F3E0", +"h c #DCEDD0", +"i c #91C66E", +"j c #A3CF86", +"k c #C9E3B8", +"l c #B0D697", +"m c #E3F0DA", +"n c #95C873", +"o c #E6F2DE", +"p c #9ECD80", +"q c #BEDEAA", +"r c #C7E2B6", +"s c #79BA4F", +"t c #6EB441", +"u c #BCDCA7", +"v c #FAFCF8", +"w c #F6FAF3", +"x c #84BF5D", +"y c #EDF6E7", +"z c #FAFDF9", +"A c #88C263", +"B c #98CA77", +"C c #CDE5BE", +"D c #67B037", +"E c #D9EBCD", +"F c #6AB23C", +"G c #77B94D", +" .++++++++++++++", +".+++++++++++++++", +"+++@#$%&+++*=+++", +"++-;>,>')+!>~+++", +"++{>]+^>/(_>:~<+", +"+[>>}+|>123>456+", +"+7>>8+->>90>~+++", +"+a>>b+a>c[0>~+++", +"+de>=+f>g+0>~+++", +"++h>i+j>k+0>~+++", +"++l>mno>p+q>rst+", +"++duv>wl++xy>zA+", +"++++B>Cb++++&D++", +"+++++0zE++++++++", +"++++++FG+++++++.", +"++++++++++++++. "}; + +static const char * const qt_close_xpm[] = { +"10 10 2 1", +"# c #000000", +". c None", +"..........", +".##....##.", +"..##..##..", +"...####...", +"....##....", +"...####...", +"..##..##..", +".##....##.", +"..........", +".........."}; + +static const char * const qt_maximize_xpm[]={ +"10 10 2 1", +"# c #000000", +". c None", +"#########.", +"#########.", +"#.......#.", +"#.......#.", +"#.......#.", +"#.......#.", +"#.......#.", +"#.......#.", +"#########.", +".........."}; + +static const char * const qt_minimize_xpm[] = { +"10 10 2 1", +"# c #000000", +". c None", +"..........", +"..........", +"..........", +"..........", +"..........", +"..........", +"..........", +".#######..", +".#######..", +".........."}; + +static const char * const qt_normalizeup_xpm[] = { +"10 10 2 1", +"# c #000000", +". c None", +"...######.", +"...######.", +"...#....#.", +".######.#.", +".######.#.", +".#....###.", +".#....#...", +".#....#...", +".######...", +".........."}; + +static const char * const qt_help_xpm[] = { +"10 10 2 1", +". c None", +"# c #000000", +"..........", +"..######..", +".##....##.", +"......##..", +".....##...", +"....##....", +"....##....", +"..........", +"....##....", +".........."}; + +static const char * const qt_shade_xpm[] = { +"10 10 2 1", +"# c #000000", +". c None", +"..........", +"..........", +"..........", +"..........", +"....#.....", +"...###....", +"..#####...", +".#######..", +"..........", +".........."}; + +static const char * const qt_unshade_xpm[] = { +"10 10 2 1", +"# c #000000", +". c None", +"..........", +"..........", +"..........", +".#######..", +"..#####...", +"...###....", +"....#.....", +"..........", +"..........", +".........."}; + +static const char * const dock_widget_close_xpm[] = { +"8 8 2 1", +"# c #000000", +". c None", +"........", +".##..##.", +"..####..", +"...##...", +"..####..", +".##..##.", +"........", +"........"}; + +/* XPM */ +static const char * const information_xpm[]={ +"32 32 5 1", +". c None", +"c c #000000", +"* c #999999", +"a c #ffffff", +"b c #0000ff", +"...........********.............", +"........***aaaaaaaa***..........", +"......**aaaaaaaaaaaaaa**........", +".....*aaaaaaaaaaaaaaaaaa*.......", +"....*aaaaaaaabbbbaaaaaaaac......", +"...*aaaaaaaabbbbbbaaaaaaaac.....", +"..*aaaaaaaaabbbbbbaaaaaaaaac....", +".*aaaaaaaaaaabbbbaaaaaaaaaaac...", +".*aaaaaaaaaaaaaaaaaaaaaaaaaac*..", +"*aaaaaaaaaaaaaaaaaaaaaaaaaaaac*.", +"*aaaaaaaaaabbbbbbbaaaaaaaaaaac*.", +"*aaaaaaaaaaaabbbbbaaaaaaaaaaac**", +"*aaaaaaaaaaaabbbbbaaaaaaaaaaac**", +"*aaaaaaaaaaaabbbbbaaaaaaaaaaac**", +"*aaaaaaaaaaaabbbbbaaaaaaaaaaac**", +"*aaaaaaaaaaaabbbbbaaaaaaaaaaac**", +".*aaaaaaaaaaabbbbbaaaaaaaaaac***", +".*aaaaaaaaaaabbbbbaaaaaaaaaac***", +"..*aaaaaaaaaabbbbbaaaaaaaaac***.", +"...caaaaaaabbbbbbbbbaaaaaac****.", +"....caaaaaaaaaaaaaaaaaaaac****..", +".....caaaaaaaaaaaaaaaaaac****...", +"......ccaaaaaaaaaaaaaacc****....", +".......*cccaaaaaaaaccc*****.....", +"........***cccaaaac*******......", +"..........****caaac*****........", +".............*caaac**...........", +"...............caac**...........", +"................cac**...........", +".................cc**...........", +"..................***...........", +"...................**..........."}; +/* XPM */ +static const char* const warning_xpm[]={ +"32 32 4 1", +". c None", +"a c #ffff00", +"* c #000000", +"b c #999999", +".............***................", +"............*aaa*...............", +"...........*aaaaa*b.............", +"...........*aaaaa*bb............", +"..........*aaaaaaa*bb...........", +"..........*aaaaaaa*bb...........", +".........*aaaaaaaaa*bb..........", +".........*aaaaaaaaa*bb..........", +"........*aaaaaaaaaaa*bb.........", +"........*aaaa***aaaa*bb.........", +".......*aaaa*****aaaa*bb........", +".......*aaaa*****aaaa*bb........", +"......*aaaaa*****aaaaa*bb.......", +"......*aaaaa*****aaaaa*bb.......", +".....*aaaaaa*****aaaaaa*bb......", +".....*aaaaaa*****aaaaaa*bb......", +"....*aaaaaaaa***aaaaaaaa*bb.....", +"....*aaaaaaaa***aaaaaaaa*bb.....", +"...*aaaaaaaaa***aaaaaaaaa*bb....", +"...*aaaaaaaaaa*aaaaaaaaaa*bb....", +"..*aaaaaaaaaaa*aaaaaaaaaaa*bb...", +"..*aaaaaaaaaaaaaaaaaaaaaaa*bb...", +".*aaaaaaaaaaaa**aaaaaaaaaaa*bb..", +".*aaaaaaaaaaa****aaaaaaaaaa*bb..", +"*aaaaaaaaaaaa****aaaaaaaaaaa*bb.", +"*aaaaaaaaaaaaa**aaaaaaaaaaaa*bb.", +"*aaaaaaaaaaaaaaaaaaaaaaaaaaa*bbb", +"*aaaaaaaaaaaaaaaaaaaaaaaaaaa*bbb", +".*aaaaaaaaaaaaaaaaaaaaaaaaa*bbbb", +"..*************************bbbbb", +"....bbbbbbbbbbbbbbbbbbbbbbbbbbb.", +".....bbbbbbbbbbbbbbbbbbbbbbbbb.."}; +/* XPM */ +static const char* const critical_xpm[]={ +"32 32 4 1", +". c None", +"a c #999999", +"* c #ff0000", +"b c #ffffff", +"...........********.............", +".........************...........", +".......****************.........", +"......******************........", +".....********************a......", +"....**********************a.....", +"...************************a....", +"..*******b**********b*******a...", +"..******bbb********bbb******a...", +".******bbbbb******bbbbb******a..", +".*******bbbbb****bbbbb*******a..", +"*********bbbbb**bbbbb*********a.", +"**********bbbbbbbbbb**********a.", +"***********bbbbbbbb***********aa", +"************bbbbbb************aa", +"************bbbbbb************aa", +"***********bbbbbbbb***********aa", +"**********bbbbbbbbbb**********aa", +"*********bbbbb**bbbbb*********aa", +".*******bbbbb****bbbbb*******aa.", +".******bbbbb******bbbbb******aa.", +"..******bbb********bbb******aaa.", +"..*******b**********b*******aa..", +"...************************aaa..", +"....**********************aaa...", +"....a********************aaa....", +".....a******************aaa.....", +"......a****************aaa......", +".......aa************aaaa.......", +".........aa********aaaaa........", +"...........aaaaaaaaaaa..........", +".............aaaaaaa............"}; +/* XPM */ +static const char *const question_xpm[] = { +"32 32 5 1", +". c None", +"c c #000000", +"* c #999999", +"a c #ffffff", +"b c #0000ff", +"...........********.............", +"........***aaaaaaaa***..........", +"......**aaaaaaaaaaaaaa**........", +".....*aaaaaaaaaaaaaaaaaa*.......", +"....*aaaaaaaaaaaaaaaaaaaac......", +"...*aaaaaaaabbbbbbaaaaaaaac.....", +"..*aaaaaaaabaaabbbbaaaaaaaac....", +".*aaaaaaaabbaaaabbbbaaaaaaaac...", +".*aaaaaaaabbbbaabbbbaaaaaaaac*..", +"*aaaaaaaaabbbbaabbbbaaaaaaaaac*.", +"*aaaaaaaaaabbaabbbbaaaaaaaaaac*.", +"*aaaaaaaaaaaaabbbbaaaaaaaaaaac**", +"*aaaaaaaaaaaaabbbaaaaaaaaaaaac**", +"*aaaaaaaaaaaaabbaaaaaaaaaaaaac**", +"*aaaaaaaaaaaaabbaaaaaaaaaaaaac**", +"*aaaaaaaaaaaaaaaaaaaaaaaaaaaac**", +".*aaaaaaaaaaaabbaaaaaaaaaaaac***", +".*aaaaaaaaaaabbbbaaaaaaaaaaac***", +"..*aaaaaaaaaabbbbaaaaaaaaaac***.", +"...caaaaaaaaaabbaaaaaaaaaac****.", +"....caaaaaaaaaaaaaaaaaaaac****..", +".....caaaaaaaaaaaaaaaaaac****...", +"......ccaaaaaaaaaaaaaacc****....", +".......*cccaaaaaaaaccc*****.....", +"........***cccaaaac*******......", +"..........****caaac*****........", +".............*caaac**...........", +"...............caac**...........", +"................cac**...........", +".................cc**...........", +"..................***...........", +"...................**..........."}; + +} // namespace QQC2 + +QT_END_NAMESPACE + +#endif //QT_NO_IMAGEFORMAT_XPM diff --git a/src/quicknativestyle/qstyle/qquickdrawutil.cpp b/src/quicknativestyle/qstyle/qquickdrawutil.cpp new file mode 100644 index 00000000..d5290a7b --- /dev/null +++ b/src/quicknativestyle/qstyle/qquickdrawutil.cpp @@ -0,0 +1,1145 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickdrawutil.h" + +#include "qbitmap.h" +#include "qpixmapcache.h" +#include "qpainter.h" +#include "qpalette.h" +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +namespace QQC2 { + +namespace { +class PainterStateGuard { + Q_DISABLE_COPY_MOVE(PainterStateGuard) +public: + explicit PainterStateGuard(QPainter *p) : m_painter(p) {} + ~PainterStateGuard() + { + for ( ; m_level > 0; --m_level) + m_painter->restore(); + } + + void save() + { + m_painter->save(); + ++m_level; + } + + void restore() + { + m_painter->restore(); + --m_level; + } + +private: + QPainter *m_painter; + int m_level= 0; +}; +} // namespace + +/*! + \headerfile + \title Drawing Utility Functions + + \sa QPainter +*/ + +/*! + \fn void qDrawShadeLine(QPainter *painter, int x1, int y1, int x2, int y2, + const QPalette &palette, bool sunken, + int lineWidth, int midLineWidth) + \relates + + Draws a horizontal (\a y1 == \a y2) or vertical (\a x1 == \a x2) + shaded line using the given \a painter. Note that nothing is + drawn if \a y1 != \a y2 and \a x1 != \a x2 (i.e. the line is + neither horizontal nor vertical). + + The provided \a palette specifies the shading colors (\l + {QPalette::light()}{light}, \l {QPalette::dark()}{dark} and \l + {QPalette::mid()}{middle} colors). The given \a lineWidth + specifies the line width for each of the lines; it is not the + total line width. The given \a midLineWidth specifies the width of + a middle line drawn in the QPalette::mid() color. + + The line appears sunken if \a sunken is true, otherwise raised. + + \warning This function does not look at QWidget::style() or + QApplication::style(). Use the drawing functions in QStyle to + make widgets that follow the current GUI style. + + + Alternatively you can use a QFrame widget and apply the + QFrame::setFrameStyle() function to display a shaded line: + + \snippet code/src_gui_painting_qdrawutil.cpp 0 + + \sa qDrawShadeRect(), qDrawShadePanel(), QStyle +*/ + +void qDrawShadeLine(QPainter *p, int x1, int y1, int x2, int y2, + const QPalette &pal, bool sunken, + int lineWidth, int midLineWidth) +{ + if (Q_UNLIKELY(!p || lineWidth < 0 || midLineWidth < 0)) { + qWarning("qDrawShadeLine: Invalid parameters"); + return; + } + int tlw = lineWidth*2 + midLineWidth; // total line width + QPen oldPen = p->pen(); // save pen + if (sunken) + p->setPen(pal.color(QPalette::Dark)); + else + p->setPen(pal.light().color()); + QPolygon a; + int i; + if (y1 == y2) { // horizontal line + int y = y1 - tlw/2; + if (x1 > x2) { // swap x1 and x2 + int t = x1; + x1 = x2; + x2 = t; + } + x2--; + for (i=0; idrawPolyline(a); + } + if (midLineWidth > 0) { + p->setPen(pal.mid().color()); + for (i=0; idrawLine(x1+lineWidth, y+lineWidth+i, + x2-lineWidth, y+lineWidth+i); + } + if (sunken) + p->setPen(pal.light().color()); + else + p->setPen(pal.dark().color()); + for (i=0; idrawPolyline(a); + } + } + else if (x1 == x2) { // vertical line + int x = x1 - tlw/2; + if (y1 > y2) { // swap y1 and y2 + int t = y1; + y1 = y2; + y2 = t; + } + y2--; + for (i=0; idrawPolyline(a); + } + if (midLineWidth > 0) { + p->setPen(pal.mid().color()); + for (i=0; idrawLine(x+lineWidth+i, y1+lineWidth, x+lineWidth+i, y2); + } + if (sunken) + p->setPen(pal.light().color()); + else + p->setPen(pal.dark().color()); + for (i=0; idrawPolyline(a); + } + } + p->setPen(oldPen); +} + +/*! + \fn void qDrawShadeRect(QPainter *painter, int x, int y, int width, int height, + const QPalette &palette, bool sunken, + int lineWidth, int midLineWidth, + const QBrush *fill) + \relates + + Draws the shaded rectangle beginning at (\a x, \a y) with the + given \a width and \a height using the provided \a painter. + + The provide \a palette specifies the shading colors (\l + {QPalette::light()}{light}, \l {QPalette::dark()}{dark} and \l + {QPalette::mid()}{middle} colors. The given \a lineWidth + specifies the line width for each of the lines; it is not the + total line width. The \a midLineWidth specifies the width of a + middle line drawn in the QPalette::mid() color. The rectangle's + interior is filled with the \a fill brush unless \a fill is 0. + + The rectangle appears sunken if \a sunken is true, otherwise + raised. + + \warning This function does not look at QWidget::style() or + QApplication::style(). Use the drawing functions in QStyle to make + widgets that follow the current GUI style. + + Alternatively you can use a QFrame widget and apply the + QFrame::setFrameStyle() function to display a shaded rectangle: + + \snippet code/src_gui_painting_qdrawutil.cpp 1 + + \sa qDrawShadeLine(), qDrawShadePanel(), qDrawPlainRect(), QStyle +*/ + +void qDrawShadeRect(QPainter *p, int x, int y, int w, int h, + const QPalette &pal, bool sunken, + int lineWidth, int midLineWidth, + const QBrush *fill) +{ + if (w == 0 || h == 0) + return; + if (Q_UNLIKELY(w < 0 || h < 0 || lineWidth < 0 || midLineWidth < 0)) { + qWarning("qDrawShadeRect: Invalid parameters"); + return; + } + + PainterStateGuard painterGuard(p); + const qreal devicePixelRatio = p->device()->devicePixelRatioF(); + if (!qFuzzyCompare(devicePixelRatio, qreal(1))) { + painterGuard.save(); + const qreal inverseScale = qreal(1) / devicePixelRatio; + p->scale(inverseScale, inverseScale); + x = qRound(devicePixelRatio * x); + y = qRound(devicePixelRatio * y); + w = qRound(devicePixelRatio * w); + h = qRound(devicePixelRatio * h); + lineWidth = qRound(devicePixelRatio * lineWidth); + midLineWidth = qRound(devicePixelRatio * midLineWidth); + } + + QPen oldPen = p->pen(); + if (sunken) + p->setPen(pal.dark().color()); + else + p->setPen(pal.light().color()); + int x1=x, y1=y, x2=x+w-1, y2=y+h-1; + + if (lineWidth == 1 && midLineWidth == 0) {// standard shade rectangle + p->drawRect(x1, y1, w-2, h-2); + if (sunken) + p->setPen(pal.light().color()); + else + p->setPen(pal.dark().color()); + QLineF lines[4] = { QLineF(x1+1, y1+1, x2-2, y1+1), + QLineF(x1+1, y1+2, x1+1, y2-2), + QLineF(x1, y2, x2, y2), + QLineF(x2,y1, x2,y2-1) }; + p->drawLines(lines, 4); // draw bottom/right lines + } else { // more complicated + int m = lineWidth+midLineWidth; + int i, j=0, k=m; + for (i=0; idrawLines(lines, 4); + k++; + } + p->setPen(pal.mid().color()); + j = lineWidth*2; + for (i=0; idrawRect(x1+lineWidth+i, y1+lineWidth+i, w-j-1, h-j-1); + j += 2; + } + if (sunken) + p->setPen(pal.light().color()); + else + p->setPen(pal.dark().color()); + k = m; + for (i=0; idrawLines(lines, 4); + k++; + } + } + if (fill) { + QBrush oldBrush = p->brush(); + int tlw = lineWidth + midLineWidth; + p->setPen(Qt::NoPen); + p->setBrush(*fill); + p->drawRect(x+tlw, y+tlw, w-2*tlw, h-2*tlw); + p->setBrush(oldBrush); + } + p->setPen(oldPen); // restore pen +} + + +/*! + \fn void qDrawShadePanel(QPainter *painter, int x, int y, int width, int height, + const QPalette &palette, bool sunken, + int lineWidth, const QBrush *fill) + \relates + + Draws the shaded panel beginning at (\a x, \a y) with the given \a + width and \a height using the provided \a painter and the given \a + lineWidth. + + The given \a palette specifies the shading colors (\l + {QPalette::light()}{light}, \l {QPalette::dark()}{dark} and \l + {QPalette::mid()}{middle} colors). The panel's interior is filled + with the \a fill brush unless \a fill is 0. + + The panel appears sunken if \a sunken is true, otherwise raised. + + \warning This function does not look at QWidget::style() or + QApplication::style(). Use the drawing functions in QStyle to make + widgets that follow the current GUI style. + + Alternatively you can use a QFrame widget and apply the + QFrame::setFrameStyle() function to display a shaded panel: + + \snippet code/src_gui_painting_qdrawutil.cpp 2 + + \sa qDrawWinPanel(), qDrawShadeLine(), qDrawShadeRect(), QStyle +*/ + +void qDrawShadePanel(QPainter *p, int x, int y, int w, int h, + const QPalette &pal, bool sunken, + int lineWidth, const QBrush *fill) +{ + if (w == 0 || h == 0) + return; + if (Q_UNLIKELY(w < 0 || h < 0 || lineWidth < 0)) { + qWarning("qDrawShadePanel: Invalid parameters"); + } + + PainterStateGuard painterGuard(p); + const qreal devicePixelRatio = p->device()->devicePixelRatioF(); + if (!qFuzzyCompare(devicePixelRatio, qreal(1))) { + painterGuard.save(); + const qreal inverseScale = qreal(1) / devicePixelRatio; + p->scale(inverseScale, inverseScale); + x = qRound(devicePixelRatio * x); + y = qRound(devicePixelRatio * y); + w = qRound(devicePixelRatio * w); + h = qRound(devicePixelRatio * h); + lineWidth = qRound(devicePixelRatio * lineWidth); + } + + QColor shade = pal.dark().color(); + QColor light = pal.light().color(); + if (fill) { + if (fill->color() == shade) + shade = pal.shadow().color(); + if (fill->color() == light) + light = pal.midlight().color(); + } + QPen oldPen = p->pen(); // save pen + QVector lines; + lines.reserve(2*lineWidth); + + if (sunken) + p->setPen(shade); + else + p->setPen(light); + int x1, y1, x2, y2; + int i; + x1 = x; + y1 = y2 = y; + x2 = x+w-2; + for (i=0; idrawLines(lines); + lines.clear(); + if (sunken) + p->setPen(light); + else + p->setPen(shade); + x1 = x; + y1 = y2 = y+h-1; + x2 = x+w-1; + for (i=0; idrawLines(lines); + if (fill) // fill with fill color + p->fillRect(x+lineWidth, y+lineWidth, w-lineWidth*2, h-lineWidth*2, *fill); + p->setPen(oldPen); // restore pen +} + + +/*! + \internal + This function draws a rectangle with two pixel line width. + It is called from qDrawWinButton() and qDrawWinPanel(). + + c1..c4 and fill are used: + + 1 1 1 1 1 2 + 1 3 3 3 4 2 + 1 3 F F 4 2 + 1 3 F F 4 2 + 1 4 4 4 4 2 + 2 2 2 2 2 2 +*/ + +static void qDrawWinShades(QPainter *p, + int x, int y, int w, int h, + const QColor &c1, const QColor &c2, + const QColor &c3, const QColor &c4, + const QBrush *fill) +{ + if (w < 2 || h < 2) // can't do anything with that + return; + + PainterStateGuard painterGuard(p); + const qreal devicePixelRatio = p->device()->devicePixelRatioF(); + if (!qFuzzyCompare(devicePixelRatio, qreal(1))) { + painterGuard.save(); + const qreal inverseScale = qreal(1) / devicePixelRatio; + p->scale(inverseScale, inverseScale); + x = qRound(devicePixelRatio * x); + y = qRound(devicePixelRatio * y); + w = qRound(devicePixelRatio * w); + h = qRound(devicePixelRatio * h); + } + + QPen oldPen = p->pen(); + QPoint a[3] = { QPoint(x, y+h-2), QPoint(x, y), QPoint(x+w-2, y) }; + p->setPen(c1); + p->drawPolyline(a, 3); + QPoint b[3] = { QPoint(x, y+h-1), QPoint(x+w-1, y+h-1), QPoint(x+w-1, y) }; + p->setPen(c2); + p->drawPolyline(b, 3); + if (w > 4 && h > 4) { + QPoint c[3] = { QPoint(x+1, y+h-3), QPoint(x+1, y+1), QPoint(x+w-3, y+1) }; + p->setPen(c3); + p->drawPolyline(c, 3); + QPoint d[3] = { QPoint(x+1, y+h-2), QPoint(x+w-2, y+h-2), QPoint(x+w-2, y+1) }; + p->setPen(c4); + p->drawPolyline(d, 3); + if (fill) + p->fillRect(QRect(x+2, y+2, w-4, h-4), *fill); + } + p->setPen(oldPen); +} + + +/*! + \fn void qDrawWinButton(QPainter *painter, int x, int y, int width, int height, + const QPalette &palette, bool sunken, + const QBrush *fill) + \relates + + Draws the Windows-style button specified by the given point (\a x, + \a y}, \a width and \a height using the provided \a painter with a + line width of 2 pixels. The button's interior is filled with the + \a{fill} brush unless \a fill is 0. + + The given \a palette specifies the shading colors (\l + {QPalette::light()}{light}, \l {QPalette::dark()}{dark} and \l + {QPalette::mid()}{middle} colors). + + The button appears sunken if \a sunken is true, otherwise raised. + + \warning This function does not look at QWidget::style() or + QApplication::style()-> Use the drawing functions in QStyle to make + widgets that follow the current GUI style. + + \sa qDrawWinPanel(), QStyle +*/ + +void qDrawWinButton(QPainter *p, int x, int y, int w, int h, + const QPalette &pal, bool sunken, + const QBrush *fill) +{ + if (sunken) + qDrawWinShades(p, x, y, w, h, + pal.shadow().color(), pal.light().color(), pal.dark().color(), + pal.button().color(), fill); + else + qDrawWinShades(p, x, y, w, h, + pal.light().color(), pal.shadow().color(), pal.button().color(), + pal.dark().color(), fill); +} + +/*! + \fn void qDrawWinPanel(QPainter *painter, int x, int y, int width, int height, + const QPalette &palette, bool sunken, + const QBrush *fill) + \relates + + Draws the Windows-style panel specified by the given point(\a x, + \a y), \a width and \a height using the provided \a painter with a + line width of 2 pixels. The button's interior is filled with the + \a fill brush unless \a fill is 0. + + The given \a palette specifies the shading colors. The panel + appears sunken if \a sunken is true, otherwise raised. + + \warning This function does not look at QWidget::style() or + QApplication::style(). Use the drawing functions in QStyle to make + widgets that follow the current GUI style. + + Alternatively you can use a QFrame widget and apply the + QFrame::setFrameStyle() function to display a shaded panel: + + \snippet code/src_gui_painting_qdrawutil.cpp 3 + + \sa qDrawShadePanel(), qDrawWinButton(), QStyle +*/ + +void qDrawWinPanel(QPainter *p, int x, int y, int w, int h, + const QPalette &pal, bool sunken, + const QBrush *fill) +{ + if (sunken) + qDrawWinShades(p, x, y, w, h, + pal.dark().color(), pal.light().color(), pal.shadow().color(), + pal.midlight().color(), fill); + else + qDrawWinShades(p, x, y, w, h, + pal.light().color(), pal.shadow().color(), pal.midlight().color(), + pal.dark().color(), fill); +} + +/*! + \fn void qDrawPlainRect(QPainter *painter, int x, int y, int width, int height, const QColor &lineColor, + int lineWidth, const QBrush *fill) + \relates + + Draws the plain rectangle beginning at (\a x, \a y) with the given + \a width and \a height, using the specified \a painter, \a lineColor + and \a lineWidth. The rectangle's interior is filled with the \a + fill brush unless \a fill is 0. + + \warning This function does not look at QWidget::style() or + QApplication::style(). Use the drawing functions in QStyle to make + widgets that follow the current GUI style. + + Alternatively you can use a QFrame widget and apply the + QFrame::setFrameStyle() function to display a plain rectangle: + + \snippet code/src_gui_painting_qdrawutil.cpp 4 + + \sa qDrawShadeRect(), QStyle +*/ + +void qDrawPlainRect(QPainter *p, int x, int y, int w, int h, const QColor &c, + int lineWidth, const QBrush *fill) +{ + if (w == 0 || h == 0) + return; + if (Q_UNLIKELY(w < 0 || h < 0 || lineWidth < 0)) { + qWarning("qDrawPlainRect: Invalid parameters"); + } + + PainterStateGuard painterGuard(p); + const qreal devicePixelRatio = p->device()->devicePixelRatioF(); + if (!qFuzzyCompare(devicePixelRatio, qreal(1))) { + painterGuard.save(); + const qreal inverseScale = qreal(1) / devicePixelRatio; + p->scale(inverseScale, inverseScale); + x = qRound(devicePixelRatio * x); + y = qRound(devicePixelRatio * y); + w = qRound(devicePixelRatio * w); + h = qRound(devicePixelRatio * h); + lineWidth = qRound(devicePixelRatio * lineWidth); + } + + QPen oldPen = p->pen(); + QBrush oldBrush = p->brush(); + p->setPen(c); + p->setBrush(Qt::NoBrush); + for (int i=0; idrawRect(x+i, y+i, w-i*2 - 1, h-i*2 - 1); + if (fill) { // fill with fill color + p->setPen(Qt::NoPen); + p->setBrush(*fill); + p->drawRect(x+lineWidth, y+lineWidth, w-lineWidth*2, h-lineWidth*2); + } + p->setPen(oldPen); + p->setBrush(oldBrush); +} + +/***************************************************************************** + Overloaded functions. + *****************************************************************************/ + +/*! + \fn void qDrawShadeLine(QPainter *painter, const QPoint &p1, const QPoint &p2, + const QPalette &palette, bool sunken, int lineWidth, int midLineWidth) + \relates + \overload + + Draws a horizontal or vertical shaded line between \a p1 and \a p2 + using the given \a painter. Note that nothing is drawn if the line + between the points would be neither horizontal nor vertical. + + The provided \a palette specifies the shading colors (\l + {QPalette::light()}{light}, \l {QPalette::dark()}{dark} and \l + {QPalette::mid()}{middle} colors). The given \a lineWidth + specifies the line width for each of the lines; it is not the + total line width. The given \a midLineWidth specifies the width of + a middle line drawn in the QPalette::mid() color. + + The line appears sunken if \a sunken is true, otherwise raised. + + \warning This function does not look at QWidget::style() or + QApplication::style(). Use the drawing functions in QStyle to + make widgets that follow the current GUI style. + + + Alternatively you can use a QFrame widget and apply the + QFrame::setFrameStyle() function to display a shaded line: + + \snippet code/src_gui_painting_qdrawutil.cpp 5 + + \sa qDrawShadeRect(), qDrawShadePanel(), QStyle +*/ + +void qDrawShadeLine(QPainter *p, const QPoint &p1, const QPoint &p2, + const QPalette &pal, bool sunken, + int lineWidth, int midLineWidth) +{ + qDrawShadeLine(p, p1.x(), p1.y(), p2.x(), p2.y(), pal, sunken, + lineWidth, midLineWidth); +} + +/*! + \fn void qDrawShadeRect(QPainter *painter, const QRect &rect, const QPalette &palette, + bool sunken, int lineWidth, int midLineWidth, const QBrush *fill) + \relates + \overload + + Draws the shaded rectangle specified by \a rect using the given \a painter. + + The provide \a palette specifies the shading colors (\l + {QPalette::light()}{light}, \l {QPalette::dark()}{dark} and \l + {QPalette::mid()}{middle} colors. The given \a lineWidth + specifies the line width for each of the lines; it is not the + total line width. The \a midLineWidth specifies the width of a + middle line drawn in the QPalette::mid() color. The rectangle's + interior is filled with the \a fill brush unless \a fill is 0. + + The rectangle appears sunken if \a sunken is true, otherwise + raised. + + \warning This function does not look at QWidget::style() or + QApplication::style(). Use the drawing functions in QStyle to make + widgets that follow the current GUI style. + + Alternatively you can use a QFrame widget and apply the + QFrame::setFrameStyle() function to display a shaded rectangle: + + \snippet code/src_gui_painting_qdrawutil.cpp 6 + + \sa qDrawShadeLine(), qDrawShadePanel(), qDrawPlainRect(), QStyle +*/ + +void qDrawShadeRect(QPainter *p, const QRect &r, + const QPalette &pal, bool sunken, + int lineWidth, int midLineWidth, + const QBrush *fill) +{ + qDrawShadeRect(p, r.x(), r.y(), r.width(), r.height(), pal, sunken, + lineWidth, midLineWidth, fill); +} + +/*! + \fn void qDrawShadePanel(QPainter *painter, const QRect &rect, const QPalette &palette, + bool sunken, int lineWidth, const QBrush *fill) + \relates + \overload + + Draws the shaded panel at the rectangle specified by \a rect using the + given \a painter and the given \a lineWidth. + + The given \a palette specifies the shading colors (\l + {QPalette::light()}{light}, \l {QPalette::dark()}{dark} and \l + {QPalette::mid()}{middle} colors). The panel's interior is filled + with the \a fill brush unless \a fill is 0. + + The panel appears sunken if \a sunken is true, otherwise raised. + + \warning This function does not look at QWidget::style() or + QApplication::style(). Use the drawing functions in QStyle to make + widgets that follow the current GUI style. + + Alternatively you can use a QFrame widget and apply the + QFrame::setFrameStyle() function to display a shaded panel: + + \snippet code/src_gui_painting_qdrawutil.cpp 7 + + \sa qDrawWinPanel(), qDrawShadeLine(), qDrawShadeRect(), QStyle +*/ + +void qDrawShadePanel(QPainter *p, const QRect &r, + const QPalette &pal, bool sunken, + int lineWidth, const QBrush *fill) +{ + qDrawShadePanel(p, r.x(), r.y(), r.width(), r.height(), pal, sunken, + lineWidth, fill); +} + +/*! + \fn void qDrawWinButton(QPainter *painter, const QRect &rect, const QPalette &palette, + bool sunken, const QBrush *fill) + \relates + \overload + + Draws the Windows-style button at the rectangle specified by \a rect using + the given \a painter with a line width of 2 pixels. The button's interior + is filled with the \a{fill} brush unless \a fill is 0. + + The given \a palette specifies the shading colors (\l + {QPalette::light()}{light}, \l {QPalette::dark()}{dark} and \l + {QPalette::mid()}{middle} colors). + + The button appears sunken if \a sunken is true, otherwise raised. + + \warning This function does not look at QWidget::style() or + QApplication::style()-> Use the drawing functions in QStyle to make + widgets that follow the current GUI style. + + \sa qDrawWinPanel(), QStyle +*/ + +void qDrawWinButton(QPainter *p, const QRect &r, + const QPalette &pal, bool sunken, const QBrush *fill) +{ + qDrawWinButton(p, r.x(), r.y(), r.width(), r.height(), pal, sunken, fill); +} + +/*! + \fn void qDrawWinPanel(QPainter *painter, const QRect &rect, const QPalette &palette, + bool sunken, const QBrush *fill) + \overload + + Draws the Windows-style panel at the rectangle specified by \a rect using + the given \a painter with a line width of 2 pixels. The button's interior + is filled with the \a fill brush unless \a fill is 0. + + The given \a palette specifies the shading colors. The panel + appears sunken if \a sunken is true, otherwise raised. + + \warning This function does not look at QWidget::style() or + QApplication::style(). Use the drawing functions in QStyle to make + widgets that follow the current GUI style. + + Alternatively you can use a QFrame widget and apply the + QFrame::setFrameStyle() function to display a shaded panel: + + \snippet code/src_gui_painting_qdrawutil.cpp 8 + + \sa qDrawShadePanel(), qDrawWinButton(), QStyle +*/ + +void qDrawWinPanel(QPainter *p, const QRect &r, + const QPalette &pal, bool sunken, const QBrush *fill) +{ + qDrawWinPanel(p, r.x(), r.y(), r.width(), r.height(), pal, sunken, fill); +} + +/*! + \fn void qDrawPlainRect(QPainter *painter, const QRect &rect, const QColor &lineColor, int lineWidth, const QBrush *fill) + \relates + \overload + + Draws the plain rectangle specified by \a rect using the given \a painter, + \a lineColor and \a lineWidth. The rectangle's interior is filled with the + \a fill brush unless \a fill is 0. + + \warning This function does not look at QWidget::style() or + QApplication::style(). Use the drawing functions in QStyle to make + widgets that follow the current GUI style. + + Alternatively you can use a QFrame widget and apply the + QFrame::setFrameStyle() function to display a plain rectangle: + + \snippet code/src_gui_painting_qdrawutil.cpp 9 + + \sa qDrawShadeRect(), QStyle +*/ + +void qDrawPlainRect(QPainter *p, const QRect &r, const QColor &c, + int lineWidth, const QBrush *fill) +{ + qDrawPlainRect(p, r.x(), r.y(), r.width(), r.height(), c, + lineWidth, fill); +} + + +/*! + \class QTileRules + \since 4.6 + + \inmodule QtWidgets + + \brief The QTileRules class provides the rules used to draw a + pixmap or image split into nine segments. + + Spliiting is similar to \l{http://www.w3.org/TR/css3-background/}{CSS3 border-images}. + + \sa Qt::TileRule, QMargins +*/ + +/*! \fn QTileRules::QTileRules(Qt::TileRule horizontalRule, Qt::TileRule verticalRule) + Constructs a QTileRules with the given \a horizontalRule and + \a verticalRule. + */ + +/*! \fn QTileRules::QTileRules(Qt::TileRule rule) + Constructs a QTileRules with the given \a rule used for both + the horizontal rule and the vertical rule. + */ + +/*! + \fn void qDrawBorderPixmap(QPainter *painter, const QRect &target, const QMargins &margins, const QPixmap &pixmap) + \relates + \since 4.6 + + \brief The qDrawBorderPixmap function is for drawing a pixmap into + the margins of a rectangle. + + Draws the given \a pixmap into the given \a target rectangle, using the + given \a painter. The pixmap will be split into nine segments and drawn + according to the \a margins structure. +*/ + +typedef QVarLengthArray QPixmapFragmentsArray; + +/*! + \since 4.6 + + Draws the indicated \a sourceRect rectangle from the given \a pixmap into + the given \a targetRect rectangle, using the given \a painter. The pixmap + will be split into nine segments according to the given \a targetMargins + and \a sourceMargins structures. Finally, the pixmap will be drawn + according to the given \a rules. + + This function is used to draw a scaled pixmap, similar to + \l{http://www.w3.org/TR/css3-background/}{CSS3 border-images} + + \sa Qt::TileRule, QTileRules, QMargins +*/ + +void qDrawBorderPixmap(QPainter *painter, const QRect &targetRect, const QMargins &targetMargins, + const QPixmap &pixmap, const QRect &sourceRect,const QMargins &sourceMargins, + const QTileRules &rules +#ifndef Q_CLANG_QDOC + , QDrawBorderPixmap::DrawingHints hints +#endif + ) +{ + QPainter::PixmapFragment d; + d.opacity = 1.0; + d.rotation = 0.0; + + QPixmapFragmentsArray opaqueData; + QPixmapFragmentsArray translucentData; + + // source center + const int sourceCenterTop = sourceRect.top() + sourceMargins.top(); + const int sourceCenterLeft = sourceRect.left() + sourceMargins.left(); + const int sourceCenterBottom = sourceRect.bottom() - sourceMargins.bottom() + 1; + const int sourceCenterRight = sourceRect.right() - sourceMargins.right() + 1; + const int sourceCenterWidth = sourceCenterRight - sourceCenterLeft; + const int sourceCenterHeight = sourceCenterBottom - sourceCenterTop; + // target center + const int targetCenterTop = targetRect.top() + targetMargins.top(); + const int targetCenterLeft = targetRect.left() + targetMargins.left(); + const int targetCenterBottom = targetRect.bottom() - targetMargins.bottom() + 1; + const int targetCenterRight = targetRect.right() - targetMargins.right() + 1; + const int targetCenterWidth = targetCenterRight - targetCenterLeft; + const int targetCenterHeight = targetCenterBottom - targetCenterTop; + + QVarLengthArray xTarget; // x-coordinates of target rectangles + QVarLengthArray yTarget; // y-coordinates of target rectangles + + int columns = 3; + int rows = 3; + if (rules.horizontal != Qt::StretchTile && sourceCenterWidth != 0) + columns = qMax(3, 2 + qCeil(targetCenterWidth / qreal(sourceCenterWidth))); + if (rules.vertical != Qt::StretchTile && sourceCenterHeight != 0) + rows = qMax(3, 2 + qCeil(targetCenterHeight / qreal(sourceCenterHeight))); + + xTarget.resize(columns + 1); + yTarget.resize(rows + 1); + + bool oldAA = painter->testRenderHint(QPainter::Antialiasing); + if (painter->paintEngine()->type() != QPaintEngine::OpenGL + && painter->paintEngine()->type() != QPaintEngine::OpenGL2 + && oldAA && painter->combinedTransform().type() != QTransform::TxNone) { + painter->setRenderHint(QPainter::Antialiasing, false); + } + + xTarget[0] = targetRect.left(); + xTarget[1] = targetCenterLeft; + xTarget[columns - 1] = targetCenterRight; + xTarget[columns] = targetRect.left() + targetRect.width(); + + yTarget[0] = targetRect.top(); + yTarget[1] = targetCenterTop; + yTarget[rows - 1] = targetCenterBottom; + yTarget[rows] = targetRect.top() + targetRect.height(); + + qreal dx = targetCenterWidth; + qreal dy = targetCenterHeight; + + switch (rules.horizontal) { + case Qt::StretchTile: + dx = targetCenterWidth; + break; + case Qt::RepeatTile: + dx = sourceCenterWidth; + break; + case Qt::RoundTile: + dx = targetCenterWidth / qreal(columns - 2); + break; + } + + for (int i = 2; i < columns - 1; ++i) + xTarget[i] = xTarget[i - 1] + dx; + + switch (rules.vertical) { + case Qt::StretchTile: + dy = targetCenterHeight; + break; + case Qt::RepeatTile: + dy = sourceCenterHeight; + break; + case Qt::RoundTile: + dy = targetCenterHeight / qreal(rows - 2); + break; + } + + for (int i = 2; i < rows - 1; ++i) + yTarget[i] = yTarget[i - 1] + dy; + + // corners + if (targetMargins.top() > 0 && targetMargins.left() > 0 && sourceMargins.top() > 0 && sourceMargins.left() > 0) { // top left + d.x = (0.5 * (xTarget[1] + xTarget[0])); + d.y = (0.5 * (yTarget[1] + yTarget[0])); + d.sourceLeft = sourceRect.left(); + d.sourceTop = sourceRect.top(); + d.width = sourceMargins.left(); + d.height = sourceMargins.top(); + d.scaleX = qreal(xTarget[1] - xTarget[0]) / d.width; + d.scaleY = qreal(yTarget[1] - yTarget[0]) / d.height; + if (hints & QDrawBorderPixmap::OpaqueTopLeft) + opaqueData.append(d); + else + translucentData.append(d); + } + if (targetMargins.top() > 0 && targetMargins.right() > 0 && sourceMargins.top() > 0 && sourceMargins.right() > 0) { // top right + d.x = (0.5 * (xTarget[columns] + xTarget[columns - 1])); + d.y = (0.5 * (yTarget[1] + yTarget[0])); + d.sourceLeft = sourceCenterRight; + d.sourceTop = sourceRect.top(); + d.width = sourceMargins.right(); + d.height = sourceMargins.top(); + d.scaleX = qreal(xTarget[columns] - xTarget[columns - 1]) / d.width; + d.scaleY = qreal(yTarget[1] - yTarget[0]) / d.height; + if (hints & QDrawBorderPixmap::OpaqueTopRight) + opaqueData.append(d); + else + translucentData.append(d); + } + if (targetMargins.bottom() > 0 && targetMargins.left() > 0 && sourceMargins.bottom() > 0 && sourceMargins.left() > 0) { // bottom left + d.x = (0.5 * (xTarget[1] + xTarget[0])); + d.y =(0.5 * (yTarget[rows] + yTarget[rows - 1])); + d.sourceLeft = sourceRect.left(); + d.sourceTop = sourceCenterBottom; + d.width = sourceMargins.left(); + d.height = sourceMargins.bottom(); + d.scaleX = qreal(xTarget[1] - xTarget[0]) / d.width; + d.scaleY = qreal(yTarget[rows] - yTarget[rows - 1]) / d.height; + if (hints & QDrawBorderPixmap::OpaqueBottomLeft) + opaqueData.append(d); + else + translucentData.append(d); + } + if (targetMargins.bottom() > 0 && targetMargins.right() > 0 && sourceMargins.bottom() > 0 && sourceMargins.right() > 0) { // bottom right + d.x = (0.5 * (xTarget[columns] + xTarget[columns - 1])); + d.y = (0.5 * (yTarget[rows] + yTarget[rows - 1])); + d.sourceLeft = sourceCenterRight; + d.sourceTop = sourceCenterBottom; + d.width = sourceMargins.right(); + d.height = sourceMargins.bottom(); + d.scaleX = qreal(xTarget[columns] - xTarget[columns - 1]) / d.width; + d.scaleY = qreal(yTarget[rows] - yTarget[rows - 1]) / d.height; + if (hints & QDrawBorderPixmap::OpaqueBottomRight) + opaqueData.append(d); + else + translucentData.append(d); + } + + // horizontal edges + if (targetCenterWidth > 0 && sourceCenterWidth > 0) { + if (targetMargins.top() > 0 && sourceMargins.top() > 0) { // top + QPixmapFragmentsArray &data = hints & QDrawBorderPixmap::OpaqueTop ? opaqueData : translucentData; + d.sourceLeft = sourceCenterLeft; + d.sourceTop = sourceRect.top(); + d.width = sourceCenterWidth; + d.height = sourceMargins.top(); + d.y = (0.5 * (yTarget[1] + yTarget[0])); + d.scaleX = dx / d.width; + d.scaleY = qreal(yTarget[1] - yTarget[0]) / d.height; + for (int i = 1; i < columns - 1; ++i) { + d.x = (0.5 * (xTarget[i + 1] + xTarget[i])); + data.append(d); + } + if (rules.horizontal == Qt::RepeatTile) + data[data.size() - 1].width = ((xTarget[columns - 1] - xTarget[columns - 2]) / d.scaleX); + } + if (targetMargins.bottom() > 0 && sourceMargins.bottom() > 0) { // bottom + QPixmapFragmentsArray &data = hints & QDrawBorderPixmap::OpaqueBottom ? opaqueData : translucentData; + d.sourceLeft = sourceCenterLeft; + d.sourceTop = sourceCenterBottom; + d.width = sourceCenterWidth; + d.height = sourceMargins.bottom(); + d.y = (0.5 * (yTarget[rows] + yTarget[rows - 1])); + d.scaleX = dx / d.width; + d.scaleY = qreal(yTarget[rows] - yTarget[rows - 1]) / d.height; + for (int i = 1; i < columns - 1; ++i) { + d.x = (0.5 * (xTarget[i + 1] + xTarget[i])); + data.append(d); + } + if (rules.horizontal == Qt::RepeatTile) + data[data.size() - 1].width = ((xTarget[columns - 1] - xTarget[columns - 2]) / d.scaleX); + } + } + + // vertical edges + if (targetCenterHeight > 0 && sourceCenterHeight > 0) { + if (targetMargins.left() > 0 && sourceMargins.left() > 0) { // left + QPixmapFragmentsArray &data = hints & QDrawBorderPixmap::OpaqueLeft ? opaqueData : translucentData; + d.sourceLeft = sourceRect.left(); + d.sourceTop = sourceCenterTop; + d.width = sourceMargins.left(); + d.height = sourceCenterHeight; + d.x = (0.5 * (xTarget[1] + xTarget[0])); + d.scaleX = qreal(xTarget[1] - xTarget[0]) / d.width; + d.scaleY = dy / d.height; + for (int i = 1; i < rows - 1; ++i) { + d.y = (0.5 * (yTarget[i + 1] + yTarget[i])); + data.append(d); + } + if (rules.vertical == Qt::RepeatTile) + data[data.size() - 1].height = ((yTarget[rows - 1] - yTarget[rows - 2]) / d.scaleY); + } + if (targetMargins.right() > 0 && sourceMargins.right() > 0) { // right + QPixmapFragmentsArray &data = hints & QDrawBorderPixmap::OpaqueRight ? opaqueData : translucentData; + d.sourceLeft = sourceCenterRight; + d.sourceTop = sourceCenterTop; + d.width = sourceMargins.right(); + d.height = sourceCenterHeight; + d.x = (0.5 * (xTarget[columns] + xTarget[columns - 1])); + d.scaleX = qreal(xTarget[columns] - xTarget[columns - 1]) / d.width; + d.scaleY = dy / d.height; + for (int i = 1; i < rows - 1; ++i) { + d.y = (0.5 * (yTarget[i + 1] + yTarget[i])); + data.append(d); + } + if (rules.vertical == Qt::RepeatTile) + data[data.size() - 1].height = ((yTarget[rows - 1] - yTarget[rows - 2]) / d.scaleY); + } + } + + // center + if (targetCenterWidth > 0 && targetCenterHeight > 0 && sourceCenterWidth > 0 && sourceCenterHeight > 0) { + QPixmapFragmentsArray &data = hints & QDrawBorderPixmap::OpaqueCenter ? opaqueData : translucentData; + d.sourceLeft = sourceCenterLeft; + d.sourceTop = sourceCenterTop; + d.width = sourceCenterWidth; + d.height = sourceCenterHeight; + d.scaleX = dx / d.width; + d.scaleY = dy / d.height; + + qreal repeatWidth = (xTarget[columns - 1] - xTarget[columns - 2]) / d.scaleX; + qreal repeatHeight = (yTarget[rows - 1] - yTarget[rows - 2]) / d.scaleY; + + for (int j = 1; j < rows - 1; ++j) { + d.y = (0.5 * (yTarget[j + 1] + yTarget[j])); + for (int i = 1; i < columns - 1; ++i) { + d.x = (0.5 * (xTarget[i + 1] + xTarget[i])); + data.append(d); + } + if (rules.horizontal == Qt::RepeatTile) + data[data.size() - 1].width = repeatWidth; + } + if (rules.vertical == Qt::RepeatTile) { + for (int i = 1; i < columns - 1; ++i) + data[data.size() - i].height = repeatHeight; + } + } + + if (opaqueData.size()) + painter->drawPixmapFragments(opaqueData.data(), opaqueData.size(), pixmap, QPainter::OpaqueHint); + if (translucentData.size()) + painter->drawPixmapFragments(translucentData.data(), translucentData.size(), pixmap); + + if (oldAA) + painter->setRenderHint(QPainter::Antialiasing, true); +} + +} // namespace QQC2 + +QT_END_NAMESPACE diff --git a/src/quicknativestyle/qstyle/qquickdrawutil.h b/src/quicknativestyle/qstyle/qquickdrawutil.h new file mode 100644 index 00000000..4f7a6c2e --- /dev/null +++ b/src/quicknativestyle/qstyle/qquickdrawutil.h @@ -0,0 +1,170 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QDRAWUTIL_H +#define QDRAWUTIL_H + +#include +#include // char*->QString conversion +#include +#include + +QT_BEGIN_NAMESPACE + + +class QPainter; +class QPalette; +class QPoint; +class QColor; +class QBrush; +class QRect; + +namespace QQC2 { + +// +// Standard shade drawing +// + +void qDrawShadeLine(QPainter *p, int x1, int y1, int x2, int y2, + const QPalette &pal, bool sunken = true, + int lineWidth = 1, int midLineWidth = 0); + +void qDrawShadeLine(QPainter *p, const QPoint &p1, const QPoint &p2, + const QPalette &pal, bool sunken = true, + int lineWidth = 1, int midLineWidth = 0); + +void qDrawShadeRect(QPainter *p, int x, int y, int w, int h, + const QPalette &pal, bool sunken = false, + int lineWidth = 1, int midLineWidth = 0, + const QBrush *fill = nullptr); + +void qDrawShadeRect(QPainter *p, const QRect &r, + const QPalette &pal, bool sunken = false, + int lineWidth = 1, int midLineWidth = 0, + const QBrush *fill = nullptr); + +void qDrawShadePanel(QPainter *p, int x, int y, int w, int h, + const QPalette &pal, bool sunken = false, + int lineWidth = 1, const QBrush *fill = nullptr); + +void qDrawShadePanel(QPainter *p, const QRect &r, + const QPalette &pal, bool sunken = false, + int lineWidth = 1, const QBrush *fill = nullptr); + +void qDrawWinButton(QPainter *p, int x, int y, int w, int h, + const QPalette &pal, bool sunken = false, + const QBrush *fill = nullptr); + +void qDrawWinButton(QPainter *p, const QRect &r, + const QPalette &pal, bool sunken = false, + const QBrush *fill = nullptr); + +void qDrawWinPanel(QPainter *p, int x, int y, int w, int h, + const QPalette &pal, bool sunken = false, + const QBrush *fill = nullptr); + +void qDrawWinPanel(QPainter *p, const QRect &r, + const QPalette &pal, bool sunken = false, + const QBrush *fill = nullptr); + +void qDrawPlainRect(QPainter *p, int x, int y, int w, int h, const QColor &, + int lineWidth = 1, const QBrush *fill = nullptr); + +void qDrawPlainRect(QPainter *p, const QRect &r, const QColor &, + int lineWidth = 1, const QBrush *fill = nullptr); + + + +struct QTileRules +{ + inline QTileRules(Qt::TileRule horizontalRule, Qt::TileRule verticalRule) + : horizontal(horizontalRule), vertical(verticalRule) {} + inline QTileRules(Qt::TileRule rule = Qt::StretchTile) + : horizontal(rule), vertical(rule) {} + Qt::TileRule horizontal; + Qt::TileRule vertical; +}; + +#ifndef Q_CLANG_QDOC +// For internal use only. +namespace QDrawBorderPixmap +{ + enum DrawingHint + { + OpaqueTopLeft = 0x0001, + OpaqueTop = 0x0002, + OpaqueTopRight = 0x0004, + OpaqueLeft = 0x0008, + OpaqueCenter = 0x0010, + OpaqueRight = 0x0020, + OpaqueBottomLeft = 0x0040, + OpaqueBottom = 0x0080, + OpaqueBottomRight = 0x0100, + OpaqueCorners = OpaqueTopLeft | OpaqueTopRight | OpaqueBottomLeft | OpaqueBottomRight, + OpaqueEdges = OpaqueTop | OpaqueLeft | OpaqueRight | OpaqueBottom, + OpaqueFrame = OpaqueCorners | OpaqueEdges, + OpaqueAll = OpaqueCenter | OpaqueFrame + }; + + Q_DECLARE_FLAGS(DrawingHints, DrawingHint) +} +#endif + +void qDrawBorderPixmap(QPainter *painter, + const QRect &targetRect, + const QMargins &targetMargins, + const QPixmap &pixmap, + const QRect &sourceRect, + const QMargins &sourceMargins, + const QTileRules &rules = QTileRules() +#ifndef Q_CLANG_QDOC + , QDrawBorderPixmap::DrawingHints hints = QDrawBorderPixmap::DrawingHints() +#endif + ); + +inline void qDrawBorderPixmap(QPainter *painter, + const QRect &target, + const QMargins &margins, + const QPixmap &pixmap) +{ + qDrawBorderPixmap(painter, target, margins, pixmap, pixmap.rect(), margins); +} + +} // namespace QQC2 + +QT_END_NAMESPACE + +#endif // QDRAWUTIL_H diff --git a/src/quicknativestyle/qstyle/qquicknativestyle.cpp b/src/quicknativestyle/qstyle/qquicknativestyle.cpp new file mode 100644 index 00000000..7a2030e0 --- /dev/null +++ b/src/quicknativestyle/qstyle/qquicknativestyle.cpp @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquicknativestyle.h" + +QT_BEGIN_NAMESPACE + +namespace QQC2 { + +QStyle *QQuickNativeStyle::s_style = nullptr; + +} // namespace QQC2 + +QT_END_NAMESPACE diff --git a/src/quicknativestyle/qstyle/qquicknativestyle.h b/src/quicknativestyle/qstyle/qquicknativestyle.h new file mode 100644 index 00000000..13c313f0 --- /dev/null +++ b/src/quicknativestyle/qstyle/qquicknativestyle.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKNATIVESTYLE_H +#define QQUICKNATIVESTYLE_H + +#include "qquickstyle.h" + +QT_BEGIN_NAMESPACE + +namespace QQC2 { + +class QQuickNativeStyle +{ +public: + static void setStyle(QStyle *style) + { + if (s_style) + delete s_style; + s_style = style; + } + + inline static QStyle *style() + { + return s_style; + } + +private: + static QStyle *s_style; +}; + +} // namespace QQC2 + +QT_END_NAMESPACE + +#endif // QQUICKNATIVESTYLE_H diff --git a/src/quicknativestyle/qstyle/qquickstyle.cpp b/src/quicknativestyle/qstyle/qquickstyle.cpp new file mode 100644 index 00000000..2278fb65 --- /dev/null +++ b/src/quicknativestyle/qstyle/qquickstyle.cpp @@ -0,0 +1,412 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickstyle.h" +#include "qquickstyle_p.h" +#include "qquickstyleoption.h" + +#include +#include +#include +#include + +#include + +#ifndef QT_NO_DEBUG +# include +#endif + +#include +#include + +QT_BEGIN_NAMESPACE + +namespace QQC2 { + +/*! + Constructs a style object. +*/ +QStyle::QStyle() + : QObject(*new QStylePrivate) +{ + Q_D(QStyle); + d->proxyStyle = this; +} + +/*! + \internal + + Constructs a style object. +*/ +QStyle::QStyle(QStylePrivate &dd) + : QObject(dd) +{ + Q_D(QStyle); + d->proxyStyle = this; +} + +/*! + Destroys the style object. +*/ +QStyle::~QStyle() +{ +} + +/*! + \fn QRect QStyle::itemTextRect(const QFontMetrics &metrics, const QRect &rectangle, int alignment, bool enabled, const QString &text) const + + Returns the area within the given \a rectangle in which to draw + the provided \a text according to the specified font \a metrics + and \a alignment. The \a enabled parameter indicates whether or + not the associated item is enabled. + + If the given \a rectangle is larger than the area needed to render + the \a text, the rectangle that is returned will be offset within + \a rectangle according to the specified \a alignment. For + example, if \a alignment is Qt::AlignCenter, the returned + rectangle will be centered within \a rectangle. If the given \a + rectangle is smaller than the area needed, the returned rectangle + will be the smallest rectangle large enough to render the \a text. + + \sa Qt::Alignment +*/ +QRect QStyle::itemTextRect(const QFontMetrics &metrics, const QRect &rect, int alignment, bool enabled, + const QString &text) const +{ + QRect result; + int x, y, w, h; + rect.getRect(&x, &y, &w, &h); + if (!text.isEmpty()) { + result = metrics.boundingRect(x, y, w, h, alignment, text); + if (!enabled && proxy()->styleHint(SH_EtchDisabledText)) { + result.setWidth(result.width()+1); + result.setHeight(result.height()+1); + } + } else { + result = QRect(x, y, w, h); + } + return result; +} + +/*! + \fn QRect QStyle::itemPixmapRect(const QRect &rectangle, int alignment, const QPixmap &pixmap) const + + Returns the area within the given \a rectangle in which to draw + the specified \a pixmap according to the defined \a alignment. +*/ +QRect QStyle::itemPixmapRect(const QRect &rect, int alignment, const QPixmap &pixmap) const +{ + QRect result; + int x, y, w, h; + rect.getRect(&x, &y, &w, &h); + + const int pixmapWidth = pixmap.width()/pixmap.devicePixelRatio(); + const int pixmapHeight = pixmap.height()/pixmap.devicePixelRatio(); + + if ((alignment & Qt::AlignVCenter) == Qt::AlignVCenter) + y += h/2 - pixmapHeight/2; + else if ((alignment & Qt::AlignBottom) == Qt::AlignBottom) + y += h - pixmapHeight; + if ((alignment & Qt::AlignRight) == Qt::AlignRight) + x += w - pixmapWidth; + else if ((alignment & Qt::AlignHCenter) == Qt::AlignHCenter) + x += w/2 - pixmapWidth/2; + else if ((alignment & Qt::AlignLeft) != Qt::AlignLeft && QGuiApplication::isRightToLeft()) + x += w - pixmapWidth; + result = QRect(x, y, pixmapWidth, pixmapHeight); + return result; +} + +/*! + \fn void QStyle::drawItemText(QPainter *painter, const QRect &rectangle, int alignment, const QPalette &palette, bool enabled, const QString& text, QPalette::ColorRole textRole) const + + Draws the given \a text in the specified \a rectangle using the + provided \a painter and \a palette. + + The text is drawn using the painter's pen, and aligned and wrapped + according to the specified \a alignment. If an explicit \a + textRole is specified, the text is drawn using the \a palette's + color for the given role. The \a enabled parameter indicates + whether or not the item is enabled; when reimplementing this + function, the \a enabled parameter should influence how the item is + drawn. + + \sa Qt::Alignment, drawItemPixmap() +*/ +void QStyle::drawItemText(QPainter *painter, const QRect &rect, int alignment, const QPalette &pal, + bool enabled, const QString& text, QPalette::ColorRole textRole) const +{ + if (text.isEmpty()) + return; + QPen savedPen; + if (textRole != QPalette::NoRole) { + savedPen = painter->pen(); + painter->setPen(QPen(pal.brush(textRole), savedPen.widthF())); + } + if (!enabled) { + if (proxy()->styleHint(SH_DitherDisabledText)) { + QRect br; + painter->drawText(rect, alignment, text, &br); + painter->fillRect(br, QBrush(painter->background().color(), Qt::Dense5Pattern)); + return; + } else if (proxy()->styleHint(SH_EtchDisabledText)) { + QPen pen = painter->pen(); + painter->setPen(pal.light().color()); + painter->drawText(rect.adjusted(1, 1, 1, 1), alignment, text); + painter->setPen(pen); + } + } + painter->drawText(rect, alignment, text); + if (textRole != QPalette::NoRole) + painter->setPen(savedPen); +} + +/*! + \fn void QStyle::drawItemPixmap(QPainter *painter, const QRect &rectangle, int alignment, + const QPixmap &pixmap) const + + Draws the given \a pixmap in the specified \a rectangle, according + to the specified \a alignment, using the provided \a painter. + + \sa drawItemText() +*/ + +void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, + const QPixmap &pixmap) const +{ + qreal scale = pixmap.devicePixelRatio(); + QRect aligned = alignedRect(QGuiApplication::layoutDirection(), QFlag(alignment), pixmap.size() / scale, rect); + QRect inter = aligned.intersected(rect); + + painter->drawPixmap(inter.x(), inter.y(), pixmap, inter.x() - aligned.x(), inter.y() - aligned.y(), inter.width() * scale, inter.height() *scale); +} + +/*! + \fn QRect QStyle::visualRect(Qt::LayoutDirection direction, const QRect &boundingRectangle, const QRect &logicalRectangle) + + Returns the given \a logicalRectangle converted to screen + coordinates based on the specified \a direction. The \a + boundingRectangle is used when performing the translation. + + This function is provided to support right-to-left desktops, and + is typically used in implementations of the subControlRect() + function. + + \sa QWidget::layoutDirection +*/ +QRect QStyle::visualRect(Qt::LayoutDirection direction, const QRect &boundingRect, const QRect &logicalRect) +{ + if (direction == Qt::LeftToRight) + return logicalRect; + QRect rect = logicalRect; + rect.translate(2 * (boundingRect.right() - logicalRect.right()) + + logicalRect.width() - boundingRect.width(), 0); + return rect; +} + +/*! + \fn QPoint QStyle::visualPos(Qt::LayoutDirection direction, const QRect &boundingRectangle, const QPoint &logicalPosition) + + Returns the given \a logicalPosition converted to screen + coordinates based on the specified \a direction. The \a + boundingRectangle is used when performing the translation. + + \sa QWidget::layoutDirection +*/ +QPoint QStyle::visualPos(Qt::LayoutDirection direction, const QRect &boundingRect, const QPoint &logicalPos) +{ + if (direction == Qt::LeftToRight) + return logicalPos; + return QPoint(boundingRect.right() - logicalPos.x(), logicalPos.y()); +} + +/*! + Returns a new rectangle of the specified \a size that is aligned to the given \a + rectangle according to the specified \a alignment and \a direction. + */ +QRect QStyle::alignedRect(Qt::LayoutDirection direction, Qt::Alignment alignment, const QSize &size, const QRect &rectangle) +{ + alignment = visualAlignment(direction, alignment); + int x = rectangle.x(); + int y = rectangle.y(); + int w = size.width(); + int h = size.height(); + if ((alignment & Qt::AlignVCenter) == Qt::AlignVCenter) + y += rectangle.size().height()/2 - h/2; + else if ((alignment & Qt::AlignBottom) == Qt::AlignBottom) + y += rectangle.size().height() - h; + if ((alignment & Qt::AlignRight) == Qt::AlignRight) + x += rectangle.size().width() - w; + else if ((alignment & Qt::AlignHCenter) == Qt::AlignHCenter) + x += rectangle.size().width()/2 - w/2; + return QRect(x, y, w, h); +} + +/*! + Transforms an \a alignment of Qt::AlignLeft or Qt::AlignRight + without Qt::AlignAbsolute into Qt::AlignLeft or Qt::AlignRight with + Qt::AlignAbsolute according to the layout \a direction. The other + alignment flags are left untouched. + + If no horizontal alignment was specified, the function returns the + default alignment for the given layout \a direction. + + QWidget::layoutDirection +*/ +Qt::Alignment QStyle::visualAlignment(Qt::LayoutDirection direction, Qt::Alignment alignment) +{ + return QGuiApplicationPrivate::visualAlignment(direction, alignment); +} + +/*! + Converts the given \a logicalValue to a pixel position. The \a min + parameter maps to 0, \a max maps to \a span and other values are + distributed evenly in-between. + + This function can handle the entire integer range without + overflow, providing that \a span is less than 4096. + + By default, this function assumes that the maximum value is on the + right for horizontal items and on the bottom for vertical items. + Set the \a upsideDown parameter to true to reverse this behavior. + + \sa sliderValueFromPosition() +*/ + +int QStyle::sliderPositionFromValue(int min, int max, int logicalValue, int span, bool upsideDown) +{ + if (span <= 0 || logicalValue < min || max <= min) + return 0; + if (logicalValue > max) + return upsideDown ? span : min; + + uint range = max - min; + uint p = upsideDown ? max - logicalValue : logicalValue - min; + + if (range > (uint)INT_MAX/4096) { + double dpos = (double(p))/(double(range)/span); + return int(dpos); + } else if (range > (uint)span) { + return (2 * p * span + range) / (2*range); + } else { + uint div = span / range; + uint mod = span % range; + return p * div + (2 * p * mod + range) / (2 * range); + } + // equiv. to (p * span) / range + 0.5 + // no overflow because of this implicit assumption: + // span <= 4096 +} + +/*! + \fn int QStyle::sliderValueFromPosition(int min, int max, int position, int span, bool upsideDown) + + Converts the given pixel \a position to a logical value. 0 maps to + the \a min parameter, \a span maps to \a max and other values are + distributed evenly in-between. + + This function can handle the entire integer range without + overflow. + + By default, this function assumes that the maximum value is on the + right for horizontal items and on the bottom for vertical + items. Set the \a upsideDown parameter to true to reverse this + behavior. + + \sa sliderPositionFromValue() +*/ + +int QStyle::sliderValueFromPosition(int min, int max, int pos, int span, bool upsideDown) +{ + if (span <= 0 || pos <= 0) + return upsideDown ? max : min; + if (pos >= span) + return upsideDown ? min : max; + + uint range = max - min; + + if ((uint)span > range) { + int tmp = (2 * pos * range + span) / (2 * span); + return upsideDown ? max - tmp : tmp + min; + } else { + uint div = range / span; + uint mod = range % span; + int tmp = pos * div + (2 * pos * mod + span) / (2 * span); + return upsideDown ? max - tmp : tmp + min; + } + // equiv. to min + (pos*range)/span + 0.5 + // no overflow because of this implicit assumption: + // pos <= span < sqrt(INT_MAX+0.0625)+0.25 ~ sqrt(INT_MAX) +} + +/*! + Returns the style's standard palette. + + Note that on systems that support system colors, the style's + standard palette is not used. In particular, the Windows + Vista and Mac styles do not use the standard palette, but make + use of native theme engines. With these styles, you should not set + the palette with QApplication::setPalette(). + + \sa QApplication::setPalette() + */ +QPalette QStyle::standardPalette() const +{ + QColor background = QColor(0xd4, 0xd0, 0xc8); // win 2000 grey + + QColor light(background.lighter()); + QColor dark(background.darker()); + QColor mid(Qt::gray); + QPalette palette(Qt::black, background, light, dark, mid, Qt::black, Qt::white); + palette.setBrush(QPalette::Disabled, QPalette::WindowText, dark); + palette.setBrush(QPalette::Disabled, QPalette::Text, dark); + palette.setBrush(QPalette::Disabled, QPalette::ButtonText, dark); + palette.setBrush(QPalette::Disabled, QPalette::Base, background); + return palette; +} + +//Windows and KDE allow menus to cover the taskbar, while GNOME and macOS don't +bool QStylePrivate::useFullScreenForPopup() +{ + auto theme = QGuiApplicationPrivate::platformTheme(); + return theme && theme->themeHint(QPlatformTheme::UseFullScreenForPopupMenu).toBool(); +} + +} // namespace QQC2 + +QT_END_NAMESPACE + +#include "moc_qquickstyle.cpp" diff --git a/src/quicknativestyle/qstyle/qquickstyle.h b/src/quicknativestyle/qstyle/qquickstyle.h new file mode 100644 index 00000000..38a0dcf5 --- /dev/null +++ b/src/quicknativestyle/qstyle/qquickstyle.h @@ -0,0 +1,839 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QSTYLE_H +#define QSTYLE_H + +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QAction; +class QDebug; +class QFontMetrics; + +namespace QQC2 { + +class QStyleHintReturn; +class QStyleOption; +class QStyleOptionComplex; +class QStylePrivate; + +class QStyle : public QObject +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QStyle) + +protected: + QStyle(QStylePrivate &dd); + +public: + QStyle(); + virtual ~QStyle(); + + enum StateFlag { + State_None = 0x00000000, + State_Enabled = 0x00000001, + State_Raised = 0x00000002, + State_Sunken = 0x00000004, + State_Off = 0x00000008, + State_NoChange = 0x00000010, + State_On = 0x00000020, + State_DownArrow = 0x00000040, + State_Horizontal = 0x00000080, + State_HasFocus = 0x00000100, + State_Top = 0x00000200, + State_Bottom = 0x00000400, + State_FocusAtBorder = 0x00000800, + State_AutoRaise = 0x00001000, + State_MouseOver = 0x00002000, + State_UpArrow = 0x00004000, + State_Selected = 0x00008000, + State_Active = 0x00010000, + State_Window = 0x00020000, + State_Open = 0x00040000, + State_Children = 0x00080000, + State_Item = 0x00100000, + State_Sibling = 0x00200000, + State_Editing = 0x00400000, + State_KeyboardFocusChange = 0x00800000, +#ifdef QT_KEYPAD_NAVIGATION + State_HasEditFocus = 0x01000000, +#endif + State_ReadOnly = 0x02000000, + State_Small = 0x04000000, + State_Mini = 0x08000000 + }; + Q_ENUM(StateFlag) + Q_DECLARE_FLAGS(State, StateFlag) + + enum PrimitiveElement { + PE_Frame, + PE_FrameDefaultButton, + PE_FrameDockWidget, + PE_FrameFocusRect, + PE_FrameGroupBox, + PE_FrameLineEdit, + PE_FrameMenu, + PE_FrameStatusBarItem, + PE_FrameTabWidget, + PE_FrameWindow, + PE_FrameButtonBevel, + PE_FrameButtonTool, + PE_FrameTabBarBase, + + PE_PanelButtonCommand, + PE_PanelButtonBevel, + PE_PanelButtonTool, + PE_PanelMenuBar, + PE_PanelToolBar, + PE_PanelLineEdit, + + PE_IndicatorArrowDown, + PE_IndicatorArrowLeft, + PE_IndicatorArrowRight, + PE_IndicatorArrowUp, + PE_IndicatorBranch, + PE_IndicatorButtonDropDown, + PE_IndicatorItemViewItemCheck, + PE_IndicatorCheckBox, + PE_IndicatorDockWidgetResizeHandle, + PE_IndicatorHeaderArrow, + PE_IndicatorMenuCheckMark, + PE_IndicatorProgressChunk, + PE_IndicatorRadioButton, + PE_IndicatorSpinDown, + PE_IndicatorSpinMinus, + PE_IndicatorSpinPlus, + PE_IndicatorSpinUp, + PE_IndicatorToolBarHandle, + PE_IndicatorToolBarSeparator, + PE_PanelTipLabel, + PE_IndicatorTabTear, + PE_IndicatorTabTearLeft = PE_IndicatorTabTear, + PE_PanelScrollAreaCorner, + + PE_Widget, + + PE_IndicatorColumnViewArrow, + PE_IndicatorItemViewItemDrop, + + PE_PanelItemViewItem, + PE_PanelItemViewRow, // ### Qt 6: remove + + PE_PanelStatusBar, + + PE_IndicatorTabClose, + PE_PanelMenu, + + PE_IndicatorTabTearRight, + + // do not add any values below/greater this + PE_CustomBase = 0xf000000 + }; + Q_ENUM(PrimitiveElement) + + enum ControlElement { + CE_PushButton, + CE_PushButtonBevel, + CE_PushButtonLabel, + + CE_CheckBox, + CE_CheckBoxLabel, + + CE_RadioButton, + CE_RadioButtonLabel, + + CE_TabBarTab, + CE_TabBarTabShape, + CE_TabBarTabLabel, + + CE_ProgressBar, + CE_ProgressBarGroove, + CE_ProgressBarContents, + CE_ProgressBarLabel, + + CE_MenuItem, + CE_MenuScroller, + CE_MenuVMargin, + CE_MenuHMargin, + CE_MenuTearoff, + CE_MenuEmptyArea, + + CE_MenuBarItem, + CE_MenuBarEmptyArea, + + CE_ToolButtonLabel, + + CE_Header, + CE_HeaderSection, + CE_HeaderLabel, + + CE_ToolBoxTab, + CE_SizeGrip, + CE_Splitter, + CE_RubberBand, + CE_DockWidgetTitle, + + CE_ScrollBarAddLine, + CE_ScrollBarSubLine, + CE_ScrollBarAddPage, + CE_ScrollBarSubPage, + CE_ScrollBarSlider, + CE_ScrollBarFirst, + CE_ScrollBarLast, + + CE_FocusFrame, + CE_ComboBoxLabel, + + CE_ToolBar, + CE_ToolBoxTabShape, + CE_ToolBoxTabLabel, + CE_HeaderEmptyArea, + + CE_ColumnViewGrip, + + CE_ItemViewItem, + + CE_ShapedFrame, + + // do not add any values below/greater than this + CE_CustomBase = 0xf0000000 + }; + Q_ENUM(ControlElement) + + enum SubElement { + SE_PushButtonContents, + SE_PushButtonFocusRect, + + SE_CheckBoxIndicator, + SE_CheckBoxContents, + SE_CheckBoxFocusRect, + SE_CheckBoxClickRect, + + SE_RadioButtonIndicator, + SE_RadioButtonContents, + SE_RadioButtonFocusRect, + SE_RadioButtonClickRect, + + SE_ComboBoxFocusRect, + + SE_SliderFocusRect, + + SE_ProgressBarGroove, + SE_ProgressBarContents, + SE_ProgressBarLabel, + + SE_ToolBoxTabContents, + + SE_HeaderLabel, + SE_HeaderArrow, + + SE_TabWidgetTabBar, + SE_TabWidgetTabPane, + SE_TabWidgetTabContents, + SE_TabWidgetLeftCorner, + SE_TabWidgetRightCorner, + + SE_ItemViewItemCheckIndicator, + SE_TabBarTearIndicator, + SE_TabBarTearIndicatorLeft = SE_TabBarTearIndicator, + + SE_TreeViewDisclosureItem, + + SE_LineEditContents, + SE_FrameContents, + + SE_DockWidgetCloseButton, + SE_DockWidgetFloatButton, + SE_DockWidgetTitleBarText, + SE_DockWidgetIcon, + + SE_CheckBoxLayoutItem, + SE_ComboBoxLayoutItem, + SE_DateTimeEditLayoutItem, + SE_LabelLayoutItem, + SE_ProgressBarLayoutItem, + SE_PushButtonLayoutItem, + SE_RadioButtonLayoutItem, + SE_SliderLayoutItem, + SE_ScrollBarLayoutItem, + SE_SpinBoxLayoutItem, + SE_ToolButtonLayoutItem, + + SE_FrameLayoutItem, + SE_GroupBoxLayoutItem, + SE_TabWidgetLayoutItem, + + SE_ItemViewItemDecoration, + SE_ItemViewItemText, + SE_ItemViewItemFocusRect, + + SE_TabBarTabLeftButton, + SE_TabBarTabRightButton, + SE_TabBarTabText, + + SE_ShapedFrameContents, + + SE_ToolBarHandle, + + SE_TabBarScrollLeftButton, + SE_TabBarScrollRightButton, + SE_TabBarTearIndicatorRight, + + // do not add any values below/greater than this + SE_CustomBase = 0xf0000000 + }; + Q_ENUM(SubElement) + + enum ComplexControl { + CC_SpinBox, + CC_ComboBox, + CC_ScrollBar, + CC_Slider, + CC_ToolButton, + CC_TitleBar, + CC_Dial, + CC_GroupBox, + CC_MdiControls, + + // do not add any values below/greater than this + CC_CustomBase = 0xf0000000 + }; + Q_ENUM(ComplexControl) + + enum SubControl { + SC_None = 0x00000000, + + SC_ScrollBarAddLine = 0x00000001, + SC_ScrollBarSubLine = 0x00000002, + SC_ScrollBarAddPage = 0x00000004, + SC_ScrollBarSubPage = 0x00000008, + SC_ScrollBarFirst = 0x00000010, + SC_ScrollBarLast = 0x00000020, + SC_ScrollBarSlider = 0x00000040, + SC_ScrollBarGroove = 0x00000080, + + SC_SpinBoxUp = 0x00000001, + SC_SpinBoxDown = 0x00000002, + SC_SpinBoxFrame = 0x00000004, + SC_SpinBoxEditField = 0x00000008, + + SC_ComboBoxFrame = 0x00000001, + SC_ComboBoxEditField = 0x00000002, + SC_ComboBoxArrow = 0x00000004, + SC_ComboBoxListBoxPopup = 0x00000008, + + SC_SliderGroove = 0x00000001, + SC_SliderHandle = 0x00000002, + SC_SliderTickmarks = 0x00000004, + + SC_ToolButton = 0x00000001, + SC_ToolButtonMenu = 0x00000002, + + SC_TitleBarSysMenu = 0x00000001, + SC_TitleBarMinButton = 0x00000002, + SC_TitleBarMaxButton = 0x00000004, + SC_TitleBarCloseButton = 0x00000008, + SC_TitleBarNormalButton = 0x00000010, + SC_TitleBarShadeButton = 0x00000020, + SC_TitleBarUnshadeButton = 0x00000040, + SC_TitleBarContextHelpButton = 0x00000080, + SC_TitleBarLabel = 0x00000100, + + SC_DialGroove = 0x00000001, + SC_DialHandle = 0x00000002, + SC_DialTickmarks = 0x00000004, + + SC_GroupBoxCheckBox = 0x00000001, + SC_GroupBoxLabel = 0x00000002, + SC_GroupBoxContents = 0x00000004, + SC_GroupBoxFrame = 0x00000008, + + SC_MdiMinButton = 0x00000001, + SC_MdiNormalButton = 0x00000002, + SC_MdiCloseButton = 0x00000004, + + SC_CustomBase = 0xf0000000, + SC_All = 0xffffffff + }; + Q_ENUM(SubControl) + Q_DECLARE_FLAGS(SubControls, SubControl) + + enum PixelMetric { + PM_ButtonMargin, + PM_ButtonDefaultIndicator, + PM_MenuButtonIndicator, + PM_ButtonShiftHorizontal, + PM_ButtonShiftVertical, + + PM_DefaultFrameWidth, + PM_SpinBoxFrameWidth, + PM_ComboBoxFrameWidth, + + PM_MaximumDragDistance, + + PM_ScrollBarExtent, + PM_ScrollBarSliderMin, + + PM_SliderThickness, // total slider thickness + PM_SliderControlThickness, // thickness of the business part + PM_SliderLength, // total length of slider + PM_SliderTickmarkOffset, // + PM_SliderSpaceAvailable, // available space for slider to move + + PM_DockWidgetSeparatorExtent, + PM_DockWidgetHandleExtent, + PM_DockWidgetFrameWidth, + + PM_TabBarTabOverlap, + PM_TabBarTabHSpace, + PM_TabBarTabVSpace, + PM_TabBarBaseHeight, + PM_TabBarBaseOverlap, + + PM_ProgressBarChunkWidth, + + PM_SplitterWidth, + PM_TitleBarHeight, + + PM_MenuScrollerHeight, + PM_MenuHMargin, + PM_MenuVMargin, + PM_MenuPanelWidth, + PM_MenuTearoffHeight, + PM_MenuDesktopFrameWidth, + + PM_MenuBarPanelWidth, + PM_MenuBarItemSpacing, + PM_MenuBarVMargin, + PM_MenuBarHMargin, + + PM_IndicatorWidth, + PM_IndicatorHeight, + PM_ExclusiveIndicatorWidth, + PM_ExclusiveIndicatorHeight, + + PM_DialogButtonsSeparator, + PM_DialogButtonsButtonWidth, + PM_DialogButtonsButtonHeight, + + PM_MdiSubWindowFrameWidth, + PM_MdiSubWindowMinimizedWidth, + + PM_HeaderMargin, + PM_HeaderMarkSize, + PM_HeaderGripMargin, + PM_TabBarTabShiftHorizontal, + PM_TabBarTabShiftVertical, + PM_TabBarScrollButtonWidth, + + PM_ToolBarFrameWidth, + PM_ToolBarHandleExtent, + PM_ToolBarItemSpacing, + PM_ToolBarItemMargin, + PM_ToolBarSeparatorExtent, + PM_ToolBarExtensionExtent, + + PM_SpinBoxSliderHeight, + + PM_DefaultTopLevelMargin, + PM_DefaultChildMargin, + PM_DefaultLayoutSpacing, + + PM_ToolBarIconSize, + PM_ListViewIconSize, + PM_IconViewIconSize, + PM_SmallIconSize, + PM_LargeIconSize, + + PM_FocusFrameVMargin, + PM_FocusFrameHMargin, + + PM_ToolTipLabelFrameWidth, + PM_CheckBoxLabelSpacing, + PM_TabBarIconSize, + PM_SizeGripSize, + PM_DockWidgetTitleMargin, + PM_MessageBoxIconSize, + PM_ButtonIconSize, + + PM_DockWidgetTitleBarButtonMargin, + + PM_RadioButtonLabelSpacing, + PM_LayoutLeftMargin, + PM_LayoutTopMargin, + PM_LayoutRightMargin, + PM_LayoutBottomMargin, + PM_LayoutHorizontalSpacing, + PM_LayoutVerticalSpacing, + PM_TabBar_ScrollButtonOverlap, + + PM_TextCursorWidth, + + PM_TabCloseIndicatorWidth, + PM_TabCloseIndicatorHeight, + + PM_ScrollView_ScrollBarSpacing, + PM_ScrollView_ScrollBarOverlap, + PM_SubMenuOverlap, + PM_TreeViewIndentation, + + PM_HeaderDefaultSectionSizeHorizontal, + PM_HeaderDefaultSectionSizeVertical, + + PM_TitleBarButtonIconSize, + PM_TitleBarButtonSize, + + PM_PushButtonFocusFrameRadius, + PM_CheckBoxFocusFrameRadius, + PM_ComboBoxFocusFrameRadius, + PM_DialFocusFrameRadius, + PM_RadioButtonFocusFrameRadius, + PM_SliderFocusFrameRadius, + PM_SpinBoxFocusFrameRadius, + PM_TextAreaFocusFrameRadius, + PM_TextFieldFocusFrameRadius, + + // do not add any values below/greater than this + PM_CustomBase = 0xf0000000 + }; + Q_ENUM(PixelMetric) + + enum ContentsType { + CT_PushButton, + CT_CheckBox, + CT_RadioButton, + CT_ToolButton, + CT_ComboBox, + CT_Splitter, + CT_ProgressBar, + CT_MenuItem, + CT_MenuBarItem, + CT_MenuBar, + CT_Menu, + CT_TabBarTab, + CT_Slider, + CT_Dial, + CT_ScrollBar, + CT_LineEdit, + CT_SpinBox, + CT_SizeGrip, + CT_TabWidget, + CT_DialogButtons, + CT_HeaderSection, + CT_GroupBox, + CT_MdiControls, + CT_ItemViewItem, + CT_Frame, + // do not add any values below/greater than this + CT_CustomBase = 0xf0000000 + }; + Q_ENUM(ContentsType) + + enum RequestSoftwareInputPanel { + RSIP_OnMouseClickAndAlreadyFocused, + RSIP_OnMouseClick + }; + Q_ENUM(RequestSoftwareInputPanel) + + enum StyleHint { + SH_EtchDisabledText, + SH_DitherDisabledText, + SH_ScrollBar_MiddleClickAbsolutePosition, + SH_ScrollBar_ScrollWhenPointerLeavesControl, + SH_TabBar_SelectMouseType, + SH_TabBar_Alignment, + SH_Header_ArrowAlignment, + SH_Slider_SnapToValue, + SH_Slider_SloppyKeyEvents, + SH_ProgressDialog_CenterCancelButton, + SH_ProgressDialog_TextLabelAlignment, + SH_PrintDialog_RightAlignButtons, + SH_MainWindow_SpaceBelowMenuBar, + SH_FontDialog_SelectAssociatedText, + SH_Menu_AllowActiveAndDisabled, + SH_Menu_SpaceActivatesItem, + SH_Menu_SubMenuPopupDelay, + SH_ScrollView_FrameOnlyAroundContents, + SH_MenuBar_AltKeyNavigation, + SH_ComboBox_ListMouseTracking, + SH_Menu_MouseTracking, + SH_MenuBar_MouseTracking, + SH_ItemView_ChangeHighlightOnFocus, + SH_Widget_ShareActivation, + SH_Workspace_FillSpaceOnMaximize, + SH_ComboBox_Popup, + SH_TitleBar_NoBorder, + SH_Slider_StopMouseOverSlider, + SH_BlinkCursorWhenTextSelected, + SH_RichText_FullWidthSelection, + SH_Menu_Scrollable, + SH_GroupBox_TextLabelVerticalAlignment, + SH_GroupBox_TextLabelColor, + SH_Menu_SloppySubMenus, + SH_Table_GridLineColor, + SH_LineEdit_PasswordCharacter, + SH_DialogButtons_DefaultButton, + SH_ToolBox_SelectedPageTitleBold, + SH_TabBar_PreferNoArrows, + SH_ScrollBar_LeftClickAbsolutePosition, + SH_ListViewExpand_SelectMouseType, + SH_UnderlineShortcut, + SH_SpinBox_AnimateButton, + SH_SpinBox_KeyPressAutoRepeatRate, + SH_SpinBox_ClickAutoRepeatRate, + SH_Menu_FillScreenWithScroll, + SH_ToolTipLabel_Opacity, + SH_DrawMenuBarSeparator, + SH_TitleBar_ModifyNotification, + SH_Button_FocusPolicy, + SH_MessageBox_UseBorderForButtonSpacing, + SH_TitleBar_AutoRaise, + SH_ToolButton_PopupDelay, + SH_FocusFrame_Mask, + SH_RubberBand_Mask, + SH_WindowFrame_Mask, + SH_SpinControls_DisableOnBounds, + SH_Dial_BackgroundRole, + SH_ComboBox_LayoutDirection, + SH_ItemView_EllipsisLocation, + SH_ItemView_ShowDecorationSelected, + SH_ItemView_ActivateItemOnSingleClick, + SH_ScrollBar_ContextMenu, + SH_ScrollBar_RollBetweenButtons, + SH_Slider_AbsoluteSetButtons, + SH_Slider_PageSetButtons, + SH_Menu_KeyboardSearch, + SH_TabBar_ElideMode, + SH_DialogButtonLayout, + SH_ComboBox_PopupFrameStyle, + SH_MessageBox_TextInteractionFlags, + SH_DialogButtonBox_ButtonsHaveIcons, + SH_SpellCheckUnderlineStyle, + SH_MessageBox_CenterButtons, + SH_Menu_SelectionWrap, + SH_ItemView_MovementWithoutUpdatingSelection, + SH_ToolTip_Mask, + SH_FocusFrame_AboveWidget, + SH_TextControl_FocusIndicatorTextCharFormat, + SH_WizardStyle, + SH_ItemView_ArrowKeysNavigateIntoChildren, + SH_Menu_Mask, + SH_Menu_FlashTriggeredItem, + SH_Menu_FadeOutOnHide, + SH_SpinBox_ClickAutoRepeatThreshold, + SH_ItemView_PaintAlternatingRowColorsForEmptyArea, + SH_FormLayoutWrapPolicy, + SH_TabWidget_DefaultTabPosition, + SH_ToolBar_Movable, + SH_FormLayoutFieldGrowthPolicy, + SH_FormLayoutFormAlignment, + SH_FormLayoutLabelAlignment, + SH_ItemView_DrawDelegateFrame, + SH_TabBar_CloseButtonPosition, + SH_DockWidget_ButtonsHaveFrame, + SH_ToolButtonStyle, + SH_RequestSoftwareInputPanel, + SH_ScrollBar_Transient, + SH_Menu_SupportsSections, + SH_ToolTip_WakeUpDelay, + SH_ToolTip_FallAsleepDelay, + SH_Widget_Animate, + SH_Splitter_OpaqueResize, + // Whether we should use a native popup. + // Only supported for non-editable combo boxes on Mac OS X so far. + SH_ComboBox_UseNativePopup, + SH_LineEdit_PasswordMaskDelay, + SH_TabBar_ChangeCurrentDelay, + SH_Menu_SubMenuUniDirection, + SH_Menu_SubMenuUniDirectionFailCount, + SH_Menu_SubMenuSloppySelectOtherActions, + SH_Menu_SubMenuSloppyCloseTimeout, + SH_Menu_SubMenuResetWhenReenteringParent, + SH_Menu_SubMenuDontStartSloppyOnLeave, + SH_ItemView_ScrollMode, + SH_TitleBar_ShowToolTipsOnButtons, + SH_Widget_Animation_Duration, + SH_ComboBox_AllowWheelScrolling, + SH_SpinBox_ButtonsInsideFrame, + SH_SpinBox_StepModifier, + // Add new style hint values here + + SH_CustomBase = 0xf0000000 + }; + Q_ENUM(StyleHint) + + enum StandardPixmap { + SP_TitleBarMenuButton, + SP_TitleBarMinButton, + SP_TitleBarMaxButton, + SP_TitleBarCloseButton, + SP_TitleBarNormalButton, + SP_TitleBarShadeButton, + SP_TitleBarUnshadeButton, + SP_TitleBarContextHelpButton, + SP_DockWidgetCloseButton, + SP_MessageBoxInformation, + SP_MessageBoxWarning, + SP_MessageBoxCritical, + SP_MessageBoxQuestion, + SP_DesktopIcon, + SP_TrashIcon, + SP_ComputerIcon, + SP_DriveFDIcon, + SP_DriveHDIcon, + SP_DriveCDIcon, + SP_DriveDVDIcon, + SP_DriveNetIcon, + SP_DirOpenIcon, + SP_DirClosedIcon, + SP_DirLinkIcon, + SP_DirLinkOpenIcon, + SP_FileIcon, + SP_FileLinkIcon, + SP_ToolBarHorizontalExtensionButton, + SP_ToolBarVerticalExtensionButton, + SP_FileDialogStart, + SP_FileDialogEnd, + SP_FileDialogToParent, + SP_FileDialogNewFolder, + SP_FileDialogDetailedView, + SP_FileDialogInfoView, + SP_FileDialogContentsView, + SP_FileDialogListView, + SP_FileDialogBack, + SP_DirIcon, + SP_DialogOkButton, + SP_DialogCancelButton, + SP_DialogHelpButton, + SP_DialogOpenButton, + SP_DialogSaveButton, + SP_DialogCloseButton, + SP_DialogApplyButton, + SP_DialogResetButton, + SP_DialogDiscardButton, + SP_DialogYesButton, + SP_DialogNoButton, + SP_ArrowUp, + SP_ArrowDown, + SP_ArrowLeft, + SP_ArrowRight, + SP_ArrowBack, + SP_ArrowForward, + SP_DirHomeIcon, + SP_CommandLink, + SP_VistaShield, + SP_BrowserReload, + SP_BrowserStop, + SP_MediaPlay, + SP_MediaStop, + SP_MediaPause, + SP_MediaSkipForward, + SP_MediaSkipBackward, + SP_MediaSeekForward, + SP_MediaSeekBackward, + SP_MediaVolume, + SP_MediaVolumeMuted, + SP_LineEditClearButton, + SP_DialogYesToAllButton, + SP_DialogNoToAllButton, + SP_DialogSaveAllButton, + SP_DialogAbortButton, + SP_DialogRetryButton, + SP_DialogIgnoreButton, + SP_RestoreDefaultsButton, + // do not add any values below/greater than this + SP_CustomBase = 0xf0000000 + }; + Q_ENUM(StandardPixmap) + + virtual QRect itemTextRect(const QFontMetrics &fm, const QRect &r, int flags, bool enabled, const QString &text) const; + virtual QRect itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const; + virtual QRect subElementRect(SubElement subElement, const QStyleOption *option) const = 0; + virtual QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc) const = 0; + + virtual QSize sizeFromContents(ContentsType ct, const QStyleOption *opt, const QSize &contentsSize) const = 0; + virtual QFont font(ControlElement element, const QStyle::State state) const = 0; + virtual QMargins ninePatchMargins(ControlElement ce, const QStyleOption *opt, const QSize &imageSize) const = 0; + virtual QMargins ninePatchMargins(ComplexControl cc, const QStyleOptionComplex *opt, const QSize &imageSize) const = 0; + + virtual SubControl hitTestComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, const QPoint &pt) const = 0; + + virtual int pixelMetric(PixelMetric metric, const QStyleOption *option = nullptr) const = 0; + virtual int styleHint(StyleHint stylehint, const QStyleOption *opt = nullptr, QStyleHintReturn* returnData = nullptr) const = 0; + + virtual void drawItemText(QPainter *painter, const QRect &rect, + int flags, const QPalette &pal, bool enabled, + const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const; + virtual void drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const; + virtual void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p) const = 0; + virtual void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p) const = 0; + virtual void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p) const = 0; + + virtual QPalette standardPalette() const; + virtual QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt = nullptr) const = 0; + virtual QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = nullptr) const = 0; + virtual QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const = 0; + + static QRect visualRect(Qt::LayoutDirection direction, const QRect &boundingRect, const QRect &logicalRect); + static QPoint visualPos(Qt::LayoutDirection direction, const QRect &boundingRect, const QPoint &logicalPos); + static int sliderPositionFromValue(int min, int max, int val, int space, bool upsideDown = false); + static int sliderValueFromPosition(int min, int max, int pos, int space, bool upsideDown = false); + static Qt::Alignment visualAlignment(Qt::LayoutDirection direction, Qt::Alignment alignment); + static QRect alignedRect(Qt::LayoutDirection direction, Qt::Alignment alignment, const QSize &size, const QRect &rectangle); + + // TODO: Remove the concept of proxy (but keep it for now until everything builds) + const QStyle *proxy() const { return this; } + +private: + Q_DISABLE_COPY(QStyle) +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(QStyle::State) +Q_DECLARE_OPERATORS_FOR_FLAGS(QStyle::SubControls) + +} // namespace QQC2 + +QT_END_NAMESPACE + +#endif // QSTYLE_H diff --git a/src/quicknativestyle/qstyle/qquickstyle_p.h b/src/quicknativestyle/qstyle/qquickstyle_p.h new file mode 100644 index 00000000..46f53740 --- /dev/null +++ b/src/quicknativestyle/qstyle/qquickstyle_p.h @@ -0,0 +1,121 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QSTYLE_P_H +#define QSTYLE_P_H + +#include "qquickstyle.h" + +#include +#include + +QT_BEGIN_NAMESPACE + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of qstyle_*.cpp. This header file may change from version to version +// without notice, or even be removed. +// +// We mean it. +// + +// Private class + +namespace QQC2 { + +class QStylePrivate: public QObjectPrivate +{ + Q_DECLARE_PUBLIC(QStyle) + +public: + static bool useFullScreenForPopup(); + mutable int layoutSpacingIndex = -1; + QStyle *proxyStyle; +}; + +inline QImage styleCacheImage(const QSize &size) +{ + const qreal pixelRatio = qApp->devicePixelRatio(); + QImage cacheImage = QImage(size * pixelRatio, QImage::Format_ARGB32_Premultiplied); + cacheImage.setDevicePixelRatio(pixelRatio); + return cacheImage; +} + +inline QPixmap styleCachePixmap(const QSize &size) +{ + const qreal pixelRatio = qApp->devicePixelRatio(); + QPixmap cachePixmap = QPixmap(size * pixelRatio); + cachePixmap.setDevicePixelRatio(pixelRatio); + return cachePixmap; +} + +#define BEGIN_STYLE_PIXMAPCACHE(a) \ + QRect rect = option->rect; \ + QPixmap internalPixmapCache; \ + QImage imageCache; \ + QPainter *p = painter; \ + QString unique = QStyleHelper::uniqueName((a), option, option->rect.size()); \ + int txType = painter->deviceTransform().type() | painter->worldTransform().type(); \ + bool doPixmapCache = (!option->rect.isEmpty()) \ + && ((txType <= QTransform::TxTranslate) || (painter->deviceTransform().type() == QTransform::TxScale)); \ + if (doPixmapCache && QPixmapCache::find(unique, &internalPixmapCache)) { \ + painter->drawPixmap(option->rect.topLeft(), internalPixmapCache); \ + } else { \ + if (doPixmapCache) { \ + rect.setRect(0, 0, option->rect.width(), option->rect.height()); \ + imageCache = styleCacheImage(option->rect.size()); \ + imageCache.fill(0); \ + p = new QPainter(&imageCache); \ + } + +#define END_STYLE_PIXMAPCACHE \ + if (doPixmapCache) { \ + p->end(); \ + delete p; \ + internalPixmapCache = QPixmap::fromImage(imageCache); \ + painter->drawPixmap(option->rect.topLeft(), internalPixmapCache); \ + QPixmapCache::insert(unique, internalPixmapCache); \ + } \ + } + +} // namespace QQC2 + +QT_END_NAMESPACE + +#endif //QSTYLE_P_H diff --git a/src/quicknativestyle/qstyle/qquickstylehelper.cpp b/src/quicknativestyle/qstyle/qquickstylehelper.cpp new file mode 100644 index 00000000..ebc82864 --- /dev/null +++ b/src/quicknativestyle/qstyle/qquickstylehelper.cpp @@ -0,0 +1,438 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickstylehelper_p.h" +#include "qquickstyleoption.h" +#include "qquickstyle_p.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +QT_BEGIN_NAMESPACE + +Q_GUI_EXPORT int qt_defaultDpiX(); + +namespace QQC2 { + +namespace QStyleHelper { + +QString uniqueName(const QString &key, const QStyleOption *option, const QSize &size) +{ + const QStyleOptionComplex *complexOption = qstyleoption_cast(option); + QString tmp = key % HexString(option->state) + % HexString(option->direction) + % HexString(complexOption ? uint(complexOption->activeSubControls) : 0u) + % HexString(option->palette.cacheKey()) + % HexString(size.width()) + % HexString(size.height()); + + if (const QStyleOptionSpinBox *spinBox = qstyleoption_cast(option)) { + tmp = tmp % HexString(spinBox->buttonSymbols) + % HexString(spinBox->stepEnabled) + % QLatin1Char(spinBox->frame ? '1' : '0'); ; + } + + return tmp; +} + +#ifdef Q_OS_DARWIN +static const qreal qstyleBaseDpi = 72; +#else +static const qreal qstyleBaseDpi = 96; +#endif + +qreal dpi(const QStyleOption *option) +{ +#ifndef Q_OS_DARWIN + // Prioritize the application override, except for on macOS where + // we have historically not supported the AA_Use96Dpi flag. + if (QCoreApplication::testAttribute(Qt::AA_Use96Dpi)) + return 96; +#endif + + // Expect that QStyleOption::QFontMetrics::QFont has the correct DPI set + if (option) + return option->fontMetrics.fontDpi(); + + return qstyleBaseDpi; +} + +qreal dpiScaled(qreal value, qreal dpi) +{ + return value * dpi / qstyleBaseDpi; +} + +qreal dpiScaled(qreal value, const QPaintDevice *device) +{ + return dpiScaled(value, device->logicalDpiX()); +} + +qreal dpiScaled(qreal value, const QStyleOption *option) +{ + return dpiScaled(value, dpi(option)); +} + +bool isInstanceOf(QObject *obj, QAccessible::Role role) +{ + bool match = false; + QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(obj); + match = iface && iface->role() == role; + return match; +} + +// Searches for an ancestor of a particular accessible role +bool hasAncestor(QObject *obj, QAccessible::Role role) +{ + bool found = false; + QObject *parent = obj ? obj->parent() : nullptr; + while (parent && !found) { + if (isInstanceOf(parent, role)) + found = true; + parent = parent->parent(); + } + return found; +} + + +int calcBigLineSize(int radius) +{ + int bigLineSize = radius / 6; + if (bigLineSize < 4) + bigLineSize = 4; + if (bigLineSize > radius / 2) + bigLineSize = radius / 2; + return bigLineSize; +} + +static QPointF calcRadialPos(const QStyleOptionSlider *dial, qreal offset) +{ + const int width = dial->rect.width(); + const int height = dial->rect.height(); + const int r = qMin(width, height) / 2; + const int currentSliderPosition = dial->upsideDown ? dial->sliderPosition : (dial->maximum - dial->sliderPosition); + qreal a = 0; + if (dial->maximum == dial->minimum) + a = Q_PI / 2; + else if (dial->dialWrapping) + a = Q_PI * 3 / 2 - (currentSliderPosition - dial->minimum) * 2 * Q_PI + / (dial->maximum - dial->minimum); + else + a = (Q_PI * 8 - (currentSliderPosition - dial->minimum) * 10 * Q_PI + / (dial->maximum - dial->minimum)) / 6; + qreal xc = width / 2.0; + qreal yc = height / 2.0; + qreal len = r - QStyleHelper::calcBigLineSize(r) - 3; + qreal back = offset * len; + QPointF pos(QPointF(xc + back * qCos(a), yc - back * qSin(a))); + return pos; +} + +qreal angle(const QPointF &p1, const QPointF &p2) +{ + static const qreal rad_factor = 180 / Q_PI; + qreal _angle = 0; + + if (p1.x() == p2.x()) { + if (p1.y() < p2.y()) + _angle = 270; + else + _angle = 90; + } else { + qreal x1, x2, y1, y2; + + if (p1.x() <= p2.x()) { + x1 = p1.x(); y1 = p1.y(); + x2 = p2.x(); y2 = p2.y(); + } else { + x2 = p1.x(); y2 = p1.y(); + x1 = p2.x(); y1 = p2.y(); + } + + qreal m = -(y2 - y1) / (x2 - x1); + _angle = qAtan(m) * rad_factor; + + if (p1.x() < p2.x()) + _angle = 180 - _angle; + else + _angle = -_angle; + } + return _angle; +} + +QPolygonF calcLines(const QStyleOptionSlider *dial) +{ + QPolygonF poly; + int width = dial->rect.width(); + int height = dial->rect.height(); + qreal r = qMin(width, height) / 2; + int bigLineSize = calcBigLineSize(int(r)); + + qreal xc = width / 2 + 0.5; + qreal yc = height / 2 + 0.5; + const int ns = dial->tickInterval; + if (!ns) // Invalid values may be set by Qt Designer. + return poly; + int notches = (dial->maximum + ns - 1 - dial->minimum) / ns; + if (notches <= 0) + return poly; + if (dial->maximum < dial->minimum || dial->maximum - dial->minimum > 1000) { + int maximum = dial->minimum + 1000; + notches = (maximum + ns - 1 - dial->minimum) / ns; + } + + poly.resize(2 + 2 * notches); + int smallLineSize = bigLineSize / 2; + for (int i = 0; i <= notches; ++i) { + qreal angle = dial->dialWrapping ? Q_PI * 3 / 2 - i * 2 * Q_PI / notches + : (Q_PI * 8 - i * 10 * Q_PI / notches) / 6; + qreal s = qSin(angle); + qreal c = qCos(angle); + if (i == 0 || (((ns * i) % (dial->pageStep ? dial->pageStep : 1)) == 0)) { + poly[2 * i] = QPointF(xc + (r - bigLineSize) * c, + yc - (r - bigLineSize) * s); + poly[2 * i + 1] = QPointF(xc + r * c, yc - r * s); + } else { + poly[2 * i] = QPointF(xc + (r - 1 - smallLineSize) * c, + yc - (r - 1 - smallLineSize) * s); + poly[2 * i + 1] = QPointF(xc + (r - 1) * c, yc -(r - 1) * s); + } + } + return poly; +} + +// This will draw a nice and shiny QDial for us. We don't want +// all the shinyness in QWindowsStyle, hence we place it here + +void drawDial(const QStyleOptionSlider *option, QPainter *painter) +{ + QPalette pal = option->palette; + QColor buttonColor = pal.button().color(); + const int width = option->rect.width(); + const int height = option->rect.height(); + const bool enabled = option->state & QStyle::State_Enabled; + qreal r = qMin(width, height) / 2; + r -= r/50; + const qreal penSize = r/20.0; + + painter->save(); + painter->setRenderHint(QPainter::Antialiasing); + + // Draw notches + if (option->subControls & QStyle::SC_DialTickmarks) { + painter->setPen(option->palette.dark().color().darker(120)); + painter->drawLines(QStyleHelper::calcLines(option)); + } + + // setting color before BEGIN_STYLE_PIXMAPCACHE since + // otherwise it is not set when the image is in the cache + buttonColor.setHsv(buttonColor .hue(), + qMin(140, buttonColor .saturation()), + qMax(180, buttonColor.value())); + + // Cache dial background + BEGIN_STYLE_PIXMAPCACHE(QString::fromLatin1("qdial")) + p->setRenderHint(QPainter::Antialiasing); + + const qreal d_ = r / 6; + const qreal dx = option->rect.x() + d_ + (width - 2 * r) / 2 + 1; + const qreal dy = option->rect.y() + d_ + (height - 2 * r) / 2 + 1; + + QRectF br = QRectF(dx + 0.5, dy + 0.5, + int(r * 2 - 2 * d_ - 2), + int(r * 2 - 2 * d_ - 2)); + + if (enabled) { + // Drop shadow + qreal shadowSize = qMax(1.0, penSize/2.0); + QRectF shadowRect= br.adjusted(-2*shadowSize, -2*shadowSize, + 2*shadowSize, 2*shadowSize); + QRadialGradient shadowGradient(shadowRect.center().x(), + shadowRect.center().y(), shadowRect.width()/2.0, + shadowRect.center().x(), shadowRect.center().y()); + shadowGradient.setColorAt(qreal(0.91), QColor(0, 0, 0, 40)); + shadowGradient.setColorAt(qreal(1.0), Qt::transparent); + p->setBrush(shadowGradient); + p->setPen(Qt::NoPen); + p->translate(shadowSize, shadowSize); + p->drawEllipse(shadowRect); + p->translate(-shadowSize, -shadowSize); + + // Main gradient + QRadialGradient gradient(br.center().x() - br.width()/3, dy, + br.width()*1.3, br.center().x(), + br.center().y() - br.height()/2); + gradient.setColorAt(0, buttonColor.lighter(110)); + gradient.setColorAt(qreal(0.5), buttonColor); + gradient.setColorAt(qreal(0.501), buttonColor.darker(102)); + gradient.setColorAt(1, buttonColor.darker(115)); + p->setBrush(gradient); + } else { + p->setBrush(Qt::NoBrush); + } + + p->setPen(QPen(buttonColor.darker(280))); + p->drawEllipse(br); + p->setBrush(Qt::NoBrush); + p->setPen(buttonColor.lighter(110)); + p->drawEllipse(br.adjusted(1, 1, -1, -1)); + + if (option->state & QStyle::State_HasFocus) { + QColor highlight = pal.highlight().color(); + highlight.setHsv(highlight.hue(), + qMin(160, highlight.saturation()), + qMax(230, highlight.value())); + highlight.setAlpha(127); + p->setPen(QPen(highlight, 2.0)); + p->setBrush(Qt::NoBrush); + p->drawEllipse(br.adjusted(-1, -1, 1, 1)); + } + + END_STYLE_PIXMAPCACHE + + QPointF dp = calcRadialPos(option, qreal(0.70)); + buttonColor = buttonColor.lighter(104); + buttonColor.setAlphaF(0.8f); + const qreal ds = r/qreal(7.0); + QRectF dialRect(dp.x() - ds, dp.y() - ds, 2*ds, 2*ds); + QRadialGradient dialGradient(dialRect.center().x() + dialRect.width()/2, + dialRect.center().y() + dialRect.width(), + dialRect.width()*2, + dialRect.center().x(), dialRect.center().y()); + dialGradient.setColorAt(1, buttonColor.darker(140)); + dialGradient.setColorAt(qreal(0.4), buttonColor.darker(120)); + dialGradient.setColorAt(0, buttonColor.darker(110)); + if (penSize > 3.0) { + painter->setPen(QPen(QColor(0, 0, 0, 25), penSize)); + painter->drawLine(calcRadialPos(option, qreal(0.90)), calcRadialPos(option, qreal(0.96))); + } + + painter->setBrush(dialGradient); + painter->setPen(QColor(255, 255, 255, 150)); + painter->drawEllipse(dialRect.adjusted(-1, -1, 1, 1)); + painter->setPen(QColor(0, 0, 0, 80)); + painter->drawEllipse(dialRect); + painter->restore(); +} + +void drawBorderPixmap(const QPixmap &pixmap, QPainter *painter, const QRect &rect, + int left, int top, int right, + int bottom) +{ + QSize size = pixmap.size(); + //painter->setRenderHint(QPainter::SmoothPixmapTransform); + + //top + if (top > 0) { + painter->drawPixmap(QRect(rect.left() + left, rect.top(), rect.width() -right - left, top), pixmap, + QRect(left, 0, size.width() -right - left, top)); + + //top-left + if(left > 0) + painter->drawPixmap(QRect(rect.left(), rect.top(), left, top), pixmap, + QRect(0, 0, left, top)); + + //top-right + if (right > 0) + painter->drawPixmap(QRect(rect.left() + rect.width() - right, rect.top(), right, top), pixmap, + QRect(size.width() - right, 0, right, top)); + } + + //left + if (left > 0) + painter->drawPixmap(QRect(rect.left(), rect.top()+top, left, rect.height() - top - bottom), pixmap, + QRect(0, top, left, size.height() - bottom - top)); + + //center + painter->drawPixmap(QRect(rect.left() + left, rect.top()+top, rect.width() -right - left, + rect.height() - bottom - top), pixmap, + QRect(left, top, size.width() -right -left, + size.height() - bottom - top)); + //right + if (right > 0) + painter->drawPixmap(QRect(rect.left() +rect.width() - right, rect.top()+top, right, rect.height() - top - bottom), pixmap, + QRect(size.width() - right, top, right, size.height() - bottom - top)); + + //bottom + if (bottom > 0) { + painter->drawPixmap(QRect(rect.left() +left, rect.top() + rect.height() - bottom, + rect.width() - right - left, bottom), pixmap, + QRect(left, size.height() - bottom, + size.width() - right - left, bottom)); + //bottom-left + if (left > 0) + painter->drawPixmap(QRect(rect.left(), rect.top() + rect.height() - bottom, left, bottom), pixmap, + QRect(0, size.height() - bottom, left, bottom)); + + //bottom-right + if (right > 0) + painter->drawPixmap(QRect(rect.left() + rect.width() - right, rect.top() + rect.height() - bottom, right, bottom), pixmap, + QRect(size.width() - right, size.height() - bottom, right, bottom)); + + } +} + +WidgetSizePolicy widgetSizePolicy(const QStyleOption *opt) +{ + if (opt && opt->state & QStyle::State_Mini) + return SizeMini; + else if (opt && opt->state & QStyle::State_Small) + return SizeSmall; + + return SizeDefault; +} + +QColor backgroundColor(const QPalette &pal) +{ +// if (qobject_cast(widget) && widget->parent() && +// qobject_cast(widget->parent()->parent())) +// return widget->parentWidget()->parentWidget()->palette().color(QPalette::Base); + return pal.color(QPalette::Base); +} + +} + +} // namespace QQC2 + +QT_END_NAMESPACE diff --git a/src/quicknativestyle/qstyle/qquickstylehelper_p.h b/src/quicknativestyle/qstyle/qquickstylehelper_p.h new file mode 100644 index 00000000..757d647d --- /dev/null +++ b/src/quicknativestyle/qstyle/qquickstylehelper_p.h @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include +#include +#include + +#ifndef QSTYLEHELPER_P_H +#define QSTYLEHELPER_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. +// + +QT_BEGIN_NAMESPACE + +class QObject; +class QPainter; +class QPixmap; + +namespace QQC2 { + +class QStyleOptionSlider; +class QStyleOption; + +namespace QStyleHelper +{ + QString uniqueName(const QString &key, const QStyleOption *option, const QSize &size); + + qreal dpi(const QStyleOption *option); + qreal dpiScaled(qreal value, qreal dpi); + qreal dpiScaled(qreal value, const QPaintDevice *device); + qreal dpiScaled(qreal value, const QStyleOption *option); + + qreal angle(const QPointF &p1, const QPointF &p2); + QPolygonF calcLines(const QStyleOptionSlider *dial); + int calcBigLineSize(int radius); + void drawDial(const QStyleOptionSlider *dial, QPainter *painter); + + void drawBorderPixmap(const QPixmap &pixmap, QPainter *painter, const QRect &rect, + int left = 0, int top = 0, int right = 0, + int bottom = 0); + + bool isInstanceOf(QObject *obj, QAccessible::Role role); + bool hasAncestor(QObject *obj, QAccessible::Role role); + QColor backgroundColor(const QPalette &pal); + + enum WidgetSizePolicy { SizeLarge = 0, SizeSmall = 1, SizeMini = 2, SizeDefault = -1 }; + WidgetSizePolicy widgetSizePolicy(const QStyleOption *opt); +} + +} // namespace QQC2 + +QT_END_NAMESPACE + +#endif // QSTYLEHELPER_P_H diff --git a/src/quicknativestyle/qstyle/qquickstyleoption.cpp b/src/quicknativestyle/qstyle/qquickstyleoption.cpp new file mode 100644 index 00000000..c34dddd7 --- /dev/null +++ b/src/quicknativestyle/qstyle/qquickstyleoption.cpp @@ -0,0 +1,652 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickstyleoption.h" + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +namespace QQC2 { + +QStyleOption::QStyleOption(int version, int type) + : version(version), type(type), state(QStyle::State_None), + direction(QGuiApplication::layoutDirection()), fontMetrics(QFont()), + styleObject(nullptr), control(nullptr), window(nullptr) +{ +} + +/*! + Destroys this style option object. +*/ +QStyleOption::~QStyleOption() +{ +} + +/*! + Constructs a copy of \a other. +*/ +QStyleOption::QStyleOption(const QStyleOption &other) + : version(Version), type(Type), state(other.state), + direction(other.direction), rect(other.rect), fontMetrics(other.fontMetrics), + palette(other.palette), styleObject(other.styleObject), + control(other.control), window(other.window) +{ +} + +/*! + Assign \a other to this QStyleOption. +*/ +QStyleOption &QStyleOption::operator=(const QStyleOption &other) +{ + control = other.control; + window = other.window; + state = other.state; + direction = other.direction; + rect = other.rect; + fontMetrics = other.fontMetrics; + palette = other.palette; + styleObject = other.styleObject; + return *this; +} + +/*! + Constructs a QStyleOptionFocusRect, initializing the members + variables to their default values. +*/ +QStyleOptionFocusRect::QStyleOptionFocusRect() + : QStyleOption(Version, SO_FocusRect) +{ + state |= QStyle::State_KeyboardFocusChange; // assume we had one, will be corrected in initFrom() +} + +/*! + \internal +*/ +QStyleOptionFocusRect::QStyleOptionFocusRect(int versionIn) + : QStyleOption(versionIn, SO_FocusRect) +{ + state |= QStyle::State_KeyboardFocusChange; // assume we had one, will be corrected in initFrom() +} + +/*! + Constructs a QStyleOptionFrame, initializing the members + variables to their default values. +*/ +QStyleOptionFrame::QStyleOptionFrame() + : QStyleOption(Version, SO_Frame), lineWidth(0), midLineWidth(0), + features(None), frameShape(NoFrame) +{ +} + +/*! + \internal +*/ +QStyleOptionFrame::QStyleOptionFrame(int versionIn) + : QStyleOption(versionIn, SO_Frame), lineWidth(0), midLineWidth(0), + features(None) +{ +} + +/*! + Constructs a QStyleOptionGroupBox, initializing the members + variables to their default values. +*/ +QStyleOptionGroupBox::QStyleOptionGroupBox() + : QStyleOptionComplex(Version, Type), features(QStyleOptionFrame::None), + textAlignment(Qt::AlignLeft), lineWidth(0), midLineWidth(0) +{ +} + +QStyleOptionGroupBox::QStyleOptionGroupBox(int versionIn) + : QStyleOptionComplex(versionIn, Type), features(QStyleOptionFrame::None), + textAlignment(Qt::AlignLeft), lineWidth(0), midLineWidth(0) +{ +} + +/*! + Constructs a QStyleOptionHeader, initializing the members + variables to their default values. +*/ +QStyleOptionHeader::QStyleOptionHeader() + : QStyleOption(QStyleOptionHeader::Version, SO_Header), + section(0), textAlignment(Qt::AlignLeft), iconAlignment(Qt::AlignLeft), + position(QStyleOptionHeader::Beginning), + selectedPosition(QStyleOptionHeader::NotAdjacent), sortIndicator(None), + orientation(Qt::Horizontal) +{ +} + +/*! + \internal +*/ +QStyleOptionHeader::QStyleOptionHeader(int versionIn) + : QStyleOption(versionIn, SO_Header), + section(0), textAlignment(Qt::AlignLeft), iconAlignment(Qt::AlignLeft), + position(QStyleOptionHeader::Beginning), + selectedPosition(QStyleOptionHeader::NotAdjacent), sortIndicator(None), + orientation(Qt::Horizontal) +{ +} + +/*! + Constructs a QStyleOptionButton, initializing the members + variables to their default values. +*/ +QStyleOptionButton::QStyleOptionButton() + : QStyleOption(QStyleOptionButton::Version, SO_Button), features(None) +{ +} + +/*! + \internal +*/ +QStyleOptionButton::QStyleOptionButton(int versionIn) + : QStyleOption(versionIn, SO_Button), features(None) +{ +} + +/*! + Constructs a QStyleOptionToolBar, initializing the members + variables to their default values. +*/ +QStyleOptionToolBar::QStyleOptionToolBar() + : QStyleOption(Version, SO_ToolBar), positionOfLine(OnlyOne), positionWithinLine(OnlyOne), + toolBarArea(Qt::TopToolBarArea), features(None), lineWidth(0), midLineWidth(0) +{ +} + +/*! + \fn QStyleOptionToolBar::QStyleOptionToolBar(const QStyleOptionToolBar &other) + + Constructs a copy of the \a other style option. +*/ +QStyleOptionToolBar::QStyleOptionToolBar(int versionIn) +: QStyleOption(versionIn, SO_ToolBar), positionOfLine(OnlyOne), positionWithinLine(OnlyOne), + toolBarArea(Qt::TopToolBarArea), features(None), lineWidth(0), midLineWidth(0) +{ + +} + +/*! + Constructs a QStyleOptionTab object, initializing the members + variables to their default values. +*/ +QStyleOptionTab::QStyleOptionTab() + : QStyleOption(QStyleOptionTab::Version, SO_Tab), + row(0), + position(Beginning), + selectedPosition(NotAdjacent), cornerWidgets(QStyleOptionTab::NoCornerWidgets), + documentMode(false), + features(QStyleOptionTab::None) +{ +} + +QStyleOptionTab::QStyleOptionTab(int versionIn) + : QStyleOption(versionIn, SO_Tab), + row(0), + position(Beginning), + selectedPosition(NotAdjacent), cornerWidgets(QStyleOptionTab::NoCornerWidgets), + documentMode(false), + features(QStyleOptionTab::None) +{ +} + +/*! + Constructs a QStyleOptionTabV4 object, initializing the members + variables to their default values. + */ +QStyleOptionTabV4::QStyleOptionTabV4() : QStyleOptionTab(QStyleOptionTabV4::Version) +{ +} + +/*! + Constructs a QStyleOptionProgressBar, initializing the members + variables to their default values. +*/ +QStyleOptionProgressBar::QStyleOptionProgressBar() + : QStyleOption(QStyleOptionProgressBar::Version, SO_ProgressBar), + minimum(0), maximum(0), progress(0), textAlignment(Qt::AlignLeft), textVisible(false), + invertedAppearance(false), bottomToTop(false) +{ +} + +QStyleOptionProgressBar::QStyleOptionProgressBar(int versionIn) + : QStyleOption(versionIn, SO_ProgressBar), + minimum(0), maximum(0), progress(0), textAlignment(Qt::AlignLeft), textVisible(false), + invertedAppearance(false), bottomToTop(false) +{ +} + +/*! + Constructs a QStyleOptionMenuItem, initializing the members + variables to their default values. +*/ +QStyleOptionMenuItem::QStyleOptionMenuItem() + : QStyleOption(QStyleOptionMenuItem::Version, SO_MenuItem), menuItemType(Normal), + checkType(NotCheckable), checked(false), menuHasCheckableItems(true), maxIconWidth(0), tabWidth(0) +{ +} + +/*! + \internal +*/ +QStyleOptionMenuItem::QStyleOptionMenuItem(int versionIn) + : QStyleOption(versionIn, SO_MenuItem), menuItemType(Normal), + checkType(NotCheckable), checked(false), menuHasCheckableItems(true), maxIconWidth(0), tabWidth(0) +{ +} + +/*! + Constructs a QStyleOptionComplex of the specified \a type and \a + version, initializing the member variables to their default + values. This constructor is usually called by subclasses. +*/ +QStyleOptionComplex::QStyleOptionComplex(int versionIn, int typeIn) + : QStyleOption(versionIn, typeIn), subControls(QStyle::SC_All), activeSubControls(QStyle::SC_None) +{ +} + + +/*! + Constructs a QStyleOptionSlider, initializing the members + variables to their default values. +*/ +QStyleOptionSlider::QStyleOptionSlider() + : QStyleOptionComplex(Version, SO_Slider), orientation(Qt::Horizontal), minimum(0), maximum(0), + tickPosition(NoTicks), tickInterval(0), upsideDown(false), + sliderPosition(0), sliderValue(0), singleStep(0), pageStep(0), notchTarget(0.0), + dialWrapping(false) +{ +} + +/*! + \internal +*/ +QStyleOptionSlider::QStyleOptionSlider(int versionIn) + : QStyleOptionComplex(versionIn, SO_Slider), orientation(Qt::Horizontal), minimum(0), maximum(0), + tickPosition(NoTicks), tickInterval(0), upsideDown(false), + sliderPosition(0), sliderValue(0), singleStep(0), pageStep(0), notchTarget(0.0), + dialWrapping(false) +{ +} + +/*! + Constructs a QStyleOptionSpinBox, initializing the members + variables to their default values. +*/ +QStyleOptionSpinBox::QStyleOptionSpinBox() + : QStyleOptionComplex(Version, SO_SpinBox), buttonSymbols(UpDownArrows), + stepEnabled(StepNone), frame(false) +{ +} + +/*! + \internal +*/ +QStyleOptionSpinBox::QStyleOptionSpinBox(int versionIn) + : QStyleOptionComplex(versionIn, SO_SpinBox), buttonSymbols(UpDownArrows), + stepEnabled(StepNone), frame(false) +{ +} + +/*! + Constructs a QStyleOptionDockWidget, initializing the member + variables to their default values. +*/ +QStyleOptionDockWidget::QStyleOptionDockWidget() + : QStyleOption(Version, SO_DockWidget), closable(false), + movable(false), floatable(false), verticalTitleBar(false) +{ +} + +/*! + \internal +*/ +QStyleOptionDockWidget::QStyleOptionDockWidget(int versionIn) + : QStyleOption(versionIn, SO_DockWidget), closable(false), + movable(false), floatable(false), verticalTitleBar(false) +{ +} + +/*! + Constructs a QStyleOptionToolButton, initializing the members + variables to their default values. +*/ +QStyleOptionToolButton::QStyleOptionToolButton() + : QStyleOptionComplex(Version, SO_ToolButton), features(None), arrowType(Qt::DownArrow) + , toolButtonStyle(Qt::ToolButtonIconOnly) +{ +} + +QStyleOptionToolButton::QStyleOptionToolButton(int versionIn) + : QStyleOptionComplex(versionIn, SO_ToolButton), features(None), arrowType(Qt::DownArrow) + , toolButtonStyle(Qt::ToolButtonIconOnly) + +{ +} + +/*! + Creates a QStyleOptionComboBox, initializing the members variables + to their default values. +*/ +QStyleOptionComboBox::QStyleOptionComboBox() + : QStyleOptionComplex(Version, SO_ComboBox), editable(false), frame(true) +{ +} + +QStyleOptionComboBox::QStyleOptionComboBox(int versionIn) + : QStyleOptionComplex(versionIn, SO_ComboBox), editable(false), frame(true) +{ +} + +/*! + Creates a QStyleOptionToolBox, initializing the members variables + to their default values. +*/ +QStyleOptionToolBox::QStyleOptionToolBox() + : QStyleOption(Version, SO_ToolBox), position(Beginning), selectedPosition(NotAdjacent) +{ +} + +QStyleOptionToolBox::QStyleOptionToolBox(int versionIn) + : QStyleOption(versionIn, SO_ToolBox), position(Beginning), selectedPosition(NotAdjacent) +{ +} + + +/*! + Creates a QStyleOptionRubberBand, initializing the members + variables to their default values. +*/ +QStyleOptionRubberBand::QStyleOptionRubberBand() + : QStyleOption(Version, SO_RubberBand), opaque(false), shape(Line) +{ +} + +QStyleOptionRubberBand::QStyleOptionRubberBand(int versionIn) + : QStyleOption(versionIn, SO_RubberBand), opaque(false) +{ +} + +/*! + Constructs a QStyleOptionTitleBar, initializing the members + variables to their default values. +*/ +QStyleOptionTitleBar::QStyleOptionTitleBar() + : QStyleOptionComplex(Version, SO_TitleBar), titleBarState(0) +{ +} + +QStyleOptionTitleBar::QStyleOptionTitleBar(int versionIn) + : QStyleOptionComplex(versionIn, SO_TitleBar), titleBarState(0) +{ +} + +/*! + Constructs a QStyleOptionViewItem, initializing the members + variables to their default values. +*/ +QStyleOptionViewItem::QStyleOptionViewItem() + : QStyleOption(Version, SO_ViewItem), + displayAlignment(Qt::AlignLeft), decorationAlignment(Qt::AlignLeft), + textElideMode(Qt::ElideMiddle), decorationPosition(Left), + showDecorationSelected(false), features(None), + checkState(Qt::Unchecked), viewItemPosition(QStyleOptionViewItem::Invalid) +{ +} + +QStyleOptionViewItem::QStyleOptionViewItem(int versionIn) + : QStyleOption(versionIn, SO_ViewItem), + displayAlignment(Qt::AlignLeft), decorationAlignment(Qt::AlignLeft), + textElideMode(Qt::ElideMiddle), decorationPosition(Left), + showDecorationSelected(false), features(None), + checkState(Qt::Unchecked), viewItemPosition(QStyleOptionViewItem::Invalid) +{ +} + +/*! + Constructs a QStyleOptionTabWidgetFrame, initializing the members + variables to their default values. +*/ +QStyleOptionTabWidgetFrame::QStyleOptionTabWidgetFrame() + : QStyleOption(Version, SO_TabWidgetFrame), lineWidth(0), midLineWidth(0), shape(QStyleOptionTab::RoundedNorth) +{ +} + +QStyleOptionTabWidgetFrame::QStyleOptionTabWidgetFrame(int versionIn) + : QStyleOption(versionIn, SO_TabWidgetFrame), lineWidth(0), midLineWidth(0) +{ +} + +/*! + Construct a QStyleOptionTabBarBase, initializing the members + vaiables to their default values. +*/ +QStyleOptionTabBarBase::QStyleOptionTabBarBase() + : QStyleOption(Version, SO_TabBarBase), documentMode(false), shape(QStyleOptionTab::RoundedNorth) +{ +} + +QStyleOptionTabBarBase::QStyleOptionTabBarBase(int versionIn) + : QStyleOption(versionIn, SO_TabBarBase), documentMode(false) +{ +} + +/*! + Constructs a QStyleOptionSizeGrip. +*/ +QStyleOptionSizeGrip::QStyleOptionSizeGrip() + : QStyleOptionComplex(Version, Type), corner(Qt::BottomRightCorner) +{ +} + +QStyleOptionSizeGrip::QStyleOptionSizeGrip(int versionIn) + : QStyleOptionComplex(versionIn, Type), corner(Qt::BottomRightCorner) +{ +} + +/*! + Constructs a QStyleOptionGraphicsItem. +*/ +QStyleOptionGraphicsItem::QStyleOptionGraphicsItem() + : QStyleOption(Version, Type), levelOfDetail(1) +{ +} + +QStyleOptionGraphicsItem::QStyleOptionGraphicsItem(int versionIn) + : QStyleOption(versionIn, Type), levelOfDetail(1) +{ +} + +/*! + \since 4.6 + + Returns the level of detail from the \a worldTransform. + + Its value represents the maximum value of the height and + width of a unity rectangle, mapped using the \a worldTransform + of the painter used to draw the item. By default, if no + transformations are applied, its value is 1. If zoomed out 1:2, the level + of detail will be 0.5, and if zoomed in 2:1, its value is 2. + + \sa QGraphicsScene::minimumRenderSize() +*/ +qreal QStyleOptionGraphicsItem::levelOfDetailFromTransform(const QTransform &worldTransform) +{ + if (worldTransform.type() <= QTransform::TxTranslate) + return 1; // Translation only? The LOD is 1. + + // Two unit vectors. + QLineF v1(0, 0, 1, 0); + QLineF v2(0, 0, 0, 1); + // LOD is the transformed area of a 1x1 rectangle. + return qSqrt(worldTransform.map(v1).length() * worldTransform.map(v2).length()); +} + +/*! + Constructs a QStyleHintReturn with version \a version and type \a + type. + + The version has no special meaning for QStyleHintReturn; it can be + used by subclasses to distinguish between different version of + the same hint type. + + \sa QStyleOption::version, QStyleOption::type +*/ +QStyleHintReturn::QStyleHintReturn(int versionIn, int type) + : version(versionIn), type(type) +{ +} + +/*! + \internal +*/ + +QStyleHintReturn::~QStyleHintReturn() +{ +} + +/*! + Constructs a QStyleHintReturnMask. The member variables are + initialized to default values. +*/ +QStyleHintReturnMask::QStyleHintReturnMask() : QStyleHintReturn(Version, Type) +{ +} + +QStyleHintReturnMask::~QStyleHintReturnMask() +{ +} + +/*! + Constructs a QStyleHintReturnVariant. The member variables are + initialized to default values. +*/ +QStyleHintReturnVariant::QStyleHintReturnVariant() : QStyleHintReturn(Version, Type) +{ +} + +QStyleHintReturnVariant::~QStyleHintReturnVariant() +{ +} + +#if !defined(QT_NO_DEBUG_STREAM) +QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType) +{ +#if !defined(QT_NO_DEBUG) + switch (optionType) { + case QStyleOption::SO_Default: + debug << "SO_Default"; break; + case QStyleOption::SO_FocusRect: + debug << "SO_FocusRect"; break; + case QStyleOption::SO_Button: + debug << "SO_Button"; break; + case QStyleOption::SO_Tab: + debug << "SO_Tab"; break; + case QStyleOption::SO_MenuItem: + debug << "SO_MenuItem"; break; + case QStyleOption::SO_Frame: + debug << "SO_Frame"; break; + case QStyleOption::SO_ProgressBar: + debug << "SO_ProgressBar"; break; + case QStyleOption::SO_ToolBox: + debug << "SO_ToolBox"; break; + case QStyleOption::SO_Header: + debug << "SO_Header"; break; + case QStyleOption::SO_DockWidget: + debug << "SO_DockWidget"; break; + case QStyleOption::SO_ViewItem: + debug << "SO_ViewItem"; break; + case QStyleOption::SO_TabWidgetFrame: + debug << "SO_TabWidgetFrame"; break; + case QStyleOption::SO_TabBarBase: + debug << "SO_TabBarBase"; break; + case QStyleOption::SO_RubberBand: + debug << "SO_RubberBand"; break; + case QStyleOption::SO_Complex: + debug << "SO_Complex"; break; + case QStyleOption::SO_Slider: + debug << "SO_Slider"; break; + case QStyleOption::SO_SpinBox: + debug << "SO_SpinBox"; break; + case QStyleOption::SO_ToolButton: + debug << "SO_ToolButton"; break; + case QStyleOption::SO_ComboBox: + debug << "SO_ComboBox"; break; + case QStyleOption::SO_TitleBar: + debug << "SO_TitleBar"; break; + case QStyleOption::SO_CustomBase: + debug << "SO_CustomBase"; break; + case QStyleOption::SO_GroupBox: + debug << "SO_GroupBox"; break; + case QStyleOption::SO_ToolBar: + debug << "SO_ToolBar"; break; + case QStyleOption::SO_ComplexCustomBase: + debug << "SO_ComplexCustomBase"; break; + case QStyleOption::SO_SizeGrip: + debug << "SO_SizeGrip"; break; + case QStyleOption::SO_GraphicsItem: + debug << "SO_GraphicsItem"; break; + } +#else + Q_UNUSED(optionType); +#endif + return debug; +} + +QDebug operator<<(QDebug debug, const QStyleOption &option) +{ +#if !defined(QT_NO_DEBUG) + debug << "QStyleOption("; + debug << QStyleOption::OptionType(option.type); + debug << ',' << (option.direction == Qt::RightToLeft ? "RightToLeft" : "LeftToRight"); + debug << ',' << option.state; + debug << ',' << option.rect; + debug << ',' << option.styleObject; + debug << ')'; +#else + Q_UNUSED(option); +#endif + return debug; +} +#endif + +} // namespace QQC2 + +QT_END_NAMESPACE diff --git a/src/quicknativestyle/qstyle/qquickstyleoption.h b/src/quicknativestyle/qstyle/qquickstyleoption.h new file mode 100644 index 00000000..05c9ce57 --- /dev/null +++ b/src/quicknativestyle/qstyle/qquickstyleoption.h @@ -0,0 +1,795 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QSTYLEOPTION_H +#define QSTYLEOPTION_H + +#include "qquickstyle.h" + +#include +#include +#include +#include + +#include +#include + +QT_BEGIN_NAMESPACE + +class QQuickItem; + +namespace QQC2 { + +class QStyleOption +{ +public: + enum OptionType { + SO_Default, SO_FocusRect, SO_Button, SO_Tab, SO_MenuItem, + SO_Frame, SO_ProgressBar, SO_ToolBox, SO_Header, + SO_DockWidget, SO_ViewItem, SO_TabWidgetFrame, + SO_TabBarBase, SO_RubberBand, SO_ToolBar, SO_GraphicsItem, + + SO_Complex = 0xf0000, SO_Slider, SO_SpinBox, SO_ToolButton, SO_ComboBox, + SO_TitleBar, SO_GroupBox, SO_SizeGrip, + + SO_CustomBase = 0xf00, + SO_ComplexCustomBase = 0xf000000 + }; + Q_ENUMS(OptionType) + + enum StyleOptionType { Type = SO_Default }; + enum StyleOptionVersion { Version = 1 }; + + int version; // TODO: Remove version information + int type; + QStyle::State state; + Qt::LayoutDirection direction; + QRect rect; + QFontMetrics fontMetrics; + QPalette palette; + QObject *styleObject; + + // QQC2 additions. Remember to also update copy + // constructor and assignment operator when adding + // new variables here. + QQuickItem *control; + QWindow *window; + + QStyleOption(int version = QStyleOption::Version, int type = SO_Default); + QStyleOption(const QStyleOption &other); + ~QStyleOption(); + + QStyleOption &operator=(const QStyleOption &other); +}; + +class QStyleOptionFocusRect : public QStyleOption +{ +public: + enum StyleOptionType { Type = SO_FocusRect }; + enum StyleOptionVersion { Version = 1 }; + + QColor backgroundColor; + + QStyleOptionFocusRect(); + QStyleOptionFocusRect(const QStyleOptionFocusRect &other) : QStyleOption(Version, Type) { *this = other; } + QStyleOptionFocusRect &operator=(const QStyleOptionFocusRect &) = default; + +protected: + QStyleOptionFocusRect(int version); +}; + +class QStyleOptionFrame : public QStyleOption +{ +public: + enum StyleOptionType { Type = SO_Frame }; + enum StyleOptionVersion { Version = 3 }; + enum FrameFeature { + None = 0x00, + Flat = 0x01, + Rounded = 0x02 + }; + Q_DECLARE_FLAGS(FrameFeatures, FrameFeature) + enum Shape { + NoFrame = 0, // no frame + Box = 0x0001, // rectangular box + Panel = 0x0002, // rectangular panel + WinPanel = 0x0003, // rectangular panel (Windows) + HLine = 0x0004, // horizontal line + VLine = 0x0005, // vertical line + StyledPanel = 0x0006 // rectangular panel depending on the GUI style + }; + enum Shadow { + Plain = 0x0010, // plain line + Raised = 0x0020, // raised shadow effect + Sunken = 0x0030 // sunken shadow effect + }; + + int lineWidth; + int midLineWidth; + FrameFeatures features; + Shape frameShape; + + QStyleOptionFrame(); + QStyleOptionFrame(const QStyleOptionFrame &other) : QStyleOption(Version, Type) { *this = other; } + QStyleOptionFrame &operator=(const QStyleOptionFrame &) = default; + +protected: + QStyleOptionFrame(int version); +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionFrame::FrameFeatures) + +Q_DECL_DEPRECATED typedef QStyleOptionFrame QStyleOptionFrameV2; +Q_DECL_DEPRECATED typedef QStyleOptionFrame QStyleOptionFrameV3; + +class QStyleOptionTab : public QStyleOption +{ +public: + enum StyleOptionType { Type = SO_Tab }; + enum StyleOptionVersion { Version = 3 }; + + enum TabPosition { Beginning, Middle, End, OnlyOneTab }; + enum SelectedPosition { NotAdjacent, NextIsSelected, PreviousIsSelected }; + enum CornerWidget { NoCornerWidgets = 0x00, LeftCornerWidget = 0x01, + RightCornerWidget = 0x02 }; + enum TabFeature { None = 0x00, HasFrame = 0x01 }; + enum Shape { RoundedNorth, RoundedSouth, RoundedWest, RoundedEast, + TriangularNorth, TriangularSouth, TriangularWest, TriangularEast + }; + Q_DECLARE_FLAGS(CornerWidgets, CornerWidget) + Q_DECLARE_FLAGS(TabFeatures, TabFeature) + + QString text; + QIcon icon; + int row; + TabPosition position; + Shape shape = RoundedNorth; + SelectedPosition selectedPosition; + CornerWidgets cornerWidgets; + QSize iconSize; + bool documentMode; + QSize leftButtonSize; + QSize rightButtonSize; + TabFeatures features; + + QStyleOptionTab(); + QStyleOptionTab(const QStyleOptionTab &other) : QStyleOption(Version, Type) { *this = other; } + QStyleOptionTab &operator=(const QStyleOptionTab &) = default; + +protected: + QStyleOptionTab(int version); +}; + +class QStyleOptionTabWidgetFrame : public QStyleOption +{ +public: + enum StyleOptionType { Type = SO_TabWidgetFrame }; + enum StyleOptionVersion { Version = 2 }; + + int lineWidth; + int midLineWidth; + QStyleOptionTab::Shape shape; + QSize tabBarSize; + QSize rightCornerWidgetSize; + QSize leftCornerWidgetSize; + QRect tabBarRect; + QRect selectedTabRect; + + QStyleOptionTabWidgetFrame(); + inline QStyleOptionTabWidgetFrame(const QStyleOptionTabWidgetFrame &other) + : QStyleOption(Version, Type) { *this = other; } + QStyleOptionTabWidgetFrame &operator=(const QStyleOptionTabWidgetFrame &) = default; + +protected: + QStyleOptionTabWidgetFrame(int version); +}; + +Q_DECL_DEPRECATED typedef QStyleOptionTabWidgetFrame QStyleOptionTabWidgetFrameV2; + + +class QStyleOptionTabBarBase : public QStyleOption +{ +public: + enum StyleOptionType { Type = SO_TabBarBase }; + + enum TabBarPosition { North, South, West, East }; + enum ButtonPosition { LeftSide, RightSide }; + + QRect tabBarRect; + QRect selectedTabRect; + bool documentMode; + QStyleOptionTab::Shape shape; + + QStyleOptionTabBarBase(); + QStyleOptionTabBarBase(const QStyleOptionTabBarBase &other) : QStyleOption(Version, Type) { *this = other; } + QStyleOptionTabBarBase &operator=(const QStyleOptionTabBarBase &) = default; + +protected: + QStyleOptionTabBarBase(int version); +}; + +class QStyleOptionHeader : public QStyleOption +{ +public: + enum StyleOptionType { Type = SO_Header }; + enum StyleOptionVersion { Version = 1 }; + enum SectionPosition { Beginning, Middle, End, OnlyOneSection }; + enum SelectedPosition { NotAdjacent, NextIsSelected, PreviousIsSelected, + NextAndPreviousAreSelected }; + enum SortIndicator { None, SortUp, SortDown }; + + int section; + QString text; + Qt::Alignment textAlignment; + QIcon icon; + Qt::Alignment iconAlignment; + SectionPosition position; + SelectedPosition selectedPosition; + SortIndicator sortIndicator; + Qt::Orientation orientation; + + QStyleOptionHeader(); + QStyleOptionHeader(const QStyleOptionHeader &other) : QStyleOption(Version, Type) { *this = other; } + QStyleOptionHeader &operator=(const QStyleOptionHeader &) = default; + +protected: + QStyleOptionHeader(int version); +}; + +class QStyleOptionButton : public QStyleOption +{ +public: + enum StyleOptionType { Type = SO_Button }; + enum StyleOptionVersion { Version = 1 }; + + enum ButtonFeature { None = 0x00, Flat = 0x01, HasMenu = 0x02, DefaultButton = 0x04, + AutoDefaultButton = 0x08, CommandLinkButton = 0x10 }; + Q_DECLARE_FLAGS(ButtonFeatures, ButtonFeature) + + ButtonFeatures features; + QString text; + QIcon icon; + QSize iconSize; + + QStyleOptionButton(); + QStyleOptionButton(const QStyleOptionButton &other) : QStyleOption(Version, Type) { *this = other; } + QStyleOptionButton &operator=(const QStyleOptionButton &) = default; + +protected: + QStyleOptionButton(int version); +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionButton::ButtonFeatures) + +class QStyleOptionTabV4 : public QStyleOptionTab +{ +public: + enum StyleOptionVersion { Version = 4 }; + QStyleOptionTabV4(); + int tabIndex = -1; +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionTab::CornerWidgets) + +Q_DECL_DEPRECATED typedef QStyleOptionTab QStyleOptionTabV2; +Q_DECL_DEPRECATED typedef QStyleOptionTab QStyleOptionTabV3; + + +class QStyleOptionToolBar : public QStyleOption +{ +public: + enum StyleOptionType { Type = SO_ToolBar }; + enum StyleOptionVersion { Version = 1 }; + enum ToolBarPosition { Beginning, Middle, End, OnlyOne }; + enum ToolBarFeature { None = 0x0, Movable = 0x1 }; + Q_DECLARE_FLAGS(ToolBarFeatures, ToolBarFeature) + + ToolBarPosition positionOfLine; // The toolbar line position + ToolBarPosition positionWithinLine; // The position within a toolbar + Qt::ToolBarArea toolBarArea; // The toolbar docking area + ToolBarFeatures features; + int lineWidth; + int midLineWidth; + + QStyleOptionToolBar(); + QStyleOptionToolBar(const QStyleOptionToolBar &other) : QStyleOption(Version, Type) { *this = other; } + QStyleOptionToolBar &operator=(const QStyleOptionToolBar &) = default; + +protected: + QStyleOptionToolBar(int version); +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionToolBar::ToolBarFeatures) + +class QStyleOptionProgressBar : public QStyleOption +{ +public: + enum StyleOptionType { Type = SO_ProgressBar }; + enum StyleOptionVersion { Version = 2 }; + + int minimum; + int maximum; + int progress; + QString text; + Qt::Alignment textAlignment; + bool textVisible; + bool invertedAppearance; + bool bottomToTop; + + QStyleOptionProgressBar(); + QStyleOptionProgressBar(const QStyleOptionProgressBar &other) : QStyleOption(Version, Type) { *this = other; } + QStyleOptionProgressBar &operator=(const QStyleOptionProgressBar &) = default; + +protected: + QStyleOptionProgressBar(int version); +}; + +class QStyleOptionMenuItem : public QStyleOption +{ +public: + enum StyleOptionType { Type = SO_MenuItem }; + enum StyleOptionVersion { Version = 1 }; + + enum MenuItemType { Normal, DefaultItem, Separator, SubMenu, Scroller, TearOff, Margin, + EmptyArea }; + enum CheckType { NotCheckable, Exclusive, NonExclusive }; + + MenuItemType menuItemType; + CheckType checkType; + bool checked; + bool menuHasCheckableItems; + QRect menuRect; + QString text; + QIcon icon; + int maxIconWidth; + int tabWidth; // ### Qt 6: rename to reservedShortcutWidth + QFont font; + + QStyleOptionMenuItem(); + QStyleOptionMenuItem(const QStyleOptionMenuItem &other) : QStyleOption(Version, Type) { *this = other; } + QStyleOptionMenuItem &operator=(const QStyleOptionMenuItem &) = default; + +protected: + QStyleOptionMenuItem(int version); +}; + +class QStyleOptionDockWidget : public QStyleOption +{ +public: + enum StyleOptionType { Type = SO_DockWidget }; + enum StyleOptionVersion { Version = 2 }; + + QString title; + bool closable; + bool movable; + bool floatable; + bool verticalTitleBar; + + QStyleOptionDockWidget(); + QStyleOptionDockWidget(const QStyleOptionDockWidget &other) : QStyleOption(Version, Type) { *this = other; } + QStyleOptionDockWidget &operator=(const QStyleOptionDockWidget &) = default; + +protected: + QStyleOptionDockWidget(int version); +}; + +Q_DECL_DEPRECATED typedef QStyleOptionDockWidget QStyleOptionDockWidgetV2; + +class QStyleOptionViewItem : public QStyleOption +{ +public: + enum StyleOptionType { Type = SO_ViewItem }; + enum StyleOptionVersion { Version = 4 }; + + enum Position { Left, Right, Top, Bottom }; + enum ScrollMode { ScrollPerItem, ScrollPerPixel }; // Doesn't really belong in this class. + + Qt::Alignment displayAlignment; + Qt::Alignment decorationAlignment; + Qt::TextElideMode textElideMode; + Position decorationPosition; + QSize decorationSize; + QFont font; + bool showDecorationSelected; + + enum ViewItemFeature { + None = 0x00, + WrapText = 0x01, + Alternate = 0x02, + HasCheckIndicator = 0x04, + HasDisplay = 0x08, + HasDecoration = 0x10 + }; + Q_DECLARE_FLAGS(ViewItemFeatures, ViewItemFeature) + + ViewItemFeatures features; + + QLocale locale; + + enum ViewItemPosition { Invalid, Beginning, Middle, End, OnlyOne }; + + QModelIndex index; + Qt::CheckState checkState; + QIcon icon; + QString text; + ViewItemPosition viewItemPosition; + QBrush backgroundBrush; + + QStyleOptionViewItem(); + QStyleOptionViewItem(const QStyleOptionViewItem &other) : QStyleOption(Version, Type) { *this = other; } + QStyleOptionViewItem &operator=(const QStyleOptionViewItem &) = default; + +protected: + QStyleOptionViewItem(int version); +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionViewItem::ViewItemFeatures) + +Q_DECL_DEPRECATED typedef QStyleOptionViewItem QStyleOptionViewItemV2; +Q_DECL_DEPRECATED typedef QStyleOptionViewItem QStyleOptionViewItemV3; +Q_DECL_DEPRECATED typedef QStyleOptionViewItem QStyleOptionViewItemV4; + +class QStyleOptionToolBox : public QStyleOption +{ +public: + enum StyleOptionType { Type = SO_ToolBox }; + enum StyleOptionVersion { Version = 2 }; + + QString text; + QIcon icon; + + enum TabPosition { Beginning, Middle, End, OnlyOneTab }; + enum SelectedPosition { NotAdjacent, NextIsSelected, PreviousIsSelected }; + + TabPosition position; + SelectedPosition selectedPosition; + + QStyleOptionToolBox(); + QStyleOptionToolBox(const QStyleOptionToolBox &other) : QStyleOption(Version, Type) { *this = other; } + QStyleOptionToolBox &operator=(const QStyleOptionToolBox &) = default; + +protected: + QStyleOptionToolBox(int version); +}; + +Q_DECL_DEPRECATED typedef QStyleOptionToolBox QStyleOptionToolBoxV2; + +class QStyleOptionRubberBand : public QStyleOption +{ +public: + enum StyleOptionType { Type = SO_RubberBand }; + enum StyleOptionVersion { Version = 1 }; + enum Shape { Line, Rectangle }; + + bool opaque; + Shape shape; + + QStyleOptionRubberBand(); + QStyleOptionRubberBand(const QStyleOptionRubberBand &other) : QStyleOption(Version, Type) { *this = other; } + QStyleOptionRubberBand &operator=(const QStyleOptionRubberBand &) = default; + +protected: + QStyleOptionRubberBand(int version); +}; + +// -------------------------- Complex style options ------------------------------- +class QStyleOptionComplex : public QStyleOption +{ +public: + enum StyleOptionType { Type = SO_Complex }; + enum StyleOptionVersion { Version = 1 }; + + QStyle::SubControls subControls; + QStyle::SubControls activeSubControls; + + QStyleOptionComplex(int version = QStyleOptionComplex::Version, int type = SO_Complex); + QStyleOptionComplex(const QStyleOptionComplex &other) : QStyleOption(Version, Type) { *this = other; } + QStyleOptionComplex &operator=(const QStyleOptionComplex &) = default; +}; + +class QStyleOptionSlider : public QStyleOptionComplex +{ +public: + enum StyleOptionType { Type = SO_Slider }; + enum StyleOptionVersion { Version = 1 }; + enum TickPosition { + NoTicks = 0, + TicksAbove = 1, + TicksLeft = TicksAbove, + TicksBelow = 2, + TicksRight = TicksBelow, + TicksBothSides = 3 + }; + + Qt::Orientation orientation; + int minimum; + int maximum; + TickPosition tickPosition; + int tickInterval; + bool upsideDown; + int sliderPosition; + int sliderValue; + int singleStep; + int pageStep; + qreal notchTarget; + bool dialWrapping; + + QStyleOptionSlider(); + QStyleOptionSlider(const QStyleOptionSlider &other) : QStyleOptionComplex(Version, Type) { *this = other; } + QStyleOptionSlider &operator=(const QStyleOptionSlider &) = default; + +protected: + QStyleOptionSlider(int version); +}; + +class QStyleOptionSpinBox : public QStyleOptionComplex +{ +public: + enum StyleOptionType { Type = SO_SpinBox }; + enum StyleOptionVersion { Version = 1 }; + enum StepEnabledFlag { StepNone = 0x00, StepUpEnabled = 0x01, StepDownEnabled = 0x02, StepEnabled = 0xFF }; + enum ButtonSymbols { UpDownArrows, PlusMinus, NoButtons }; + + ButtonSymbols buttonSymbols; + StepEnabledFlag stepEnabled; + bool frame; + + QStyleOptionSpinBox(); + QStyleOptionSpinBox(const QStyleOptionSpinBox &other) : QStyleOptionComplex(Version, Type) { *this = other; } + QStyleOptionSpinBox &operator=(const QStyleOptionSpinBox &) = default; + +protected: + QStyleOptionSpinBox(int version); +}; + +class QStyleOptionToolButton : public QStyleOptionComplex +{ +public: + enum StyleOptionType { Type = SO_ToolButton }; + enum StyleOptionVersion { Version = 1 }; + + enum ToolButtonFeature { None = 0x00, Arrow = 0x01, Menu = 0x04, MenuButtonPopup = Menu, PopupDelay = 0x08, + HasMenu = 0x10 }; + Q_DECLARE_FLAGS(ToolButtonFeatures, ToolButtonFeature) + + ToolButtonFeatures features; + QIcon icon; + QSize iconSize; + QString text; + Qt::ArrowType arrowType; + Qt::ToolButtonStyle toolButtonStyle; + QPoint pos; + QFont font; + + QStyleOptionToolButton(); + QStyleOptionToolButton(const QStyleOptionToolButton &other) : QStyleOptionComplex(Version, Type) { *this = other; } + QStyleOptionToolButton &operator=(const QStyleOptionToolButton &) = default; + +protected: + QStyleOptionToolButton(int version); +}; + +Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionToolButton::ToolButtonFeatures) + +class QStyleOptionComboBox : public QStyleOptionComplex +{ +public: + enum StyleOptionType { Type = SO_ComboBox }; + enum StyleOptionVersion { Version = 1 }; + + bool editable; + QRect popupRect; + bool frame; + QString currentText; + QIcon currentIcon; + QSize iconSize; + + QStyleOptionComboBox(); + QStyleOptionComboBox(const QStyleOptionComboBox &other) : QStyleOptionComplex(Version, Type) { *this = other; } + QStyleOptionComboBox &operator=(const QStyleOptionComboBox &) = default; + +protected: + QStyleOptionComboBox(int version); +}; + +class QStyleOptionTitleBar : public QStyleOptionComplex +{ +public: + enum StyleOptionType { Type = SO_TitleBar }; + enum StyleOptionVersion { Version = 1 }; + + QString text; + QIcon icon; + int titleBarState; + Qt::WindowFlags titleBarFlags; + + QStyleOptionTitleBar(); + QStyleOptionTitleBar(const QStyleOptionTitleBar &other) : QStyleOptionComplex(Version, Type) { *this = other; } + QStyleOptionTitleBar &operator=(const QStyleOptionTitleBar &) = default; + +protected: + QStyleOptionTitleBar(int version); +}; + +class QStyleOptionGroupBox : public QStyleOptionComplex +{ +public: + enum StyleOptionType { Type = SO_GroupBox }; + enum StyleOptionVersion { Version = 1 }; + + QStyleOptionFrame::FrameFeatures features; + QString text; + Qt::Alignment textAlignment; + QColor textColor; + int lineWidth; + int midLineWidth; + + QStyleOptionGroupBox(); + QStyleOptionGroupBox(const QStyleOptionGroupBox &other) : QStyleOptionComplex(Version, Type) { *this = other; } + QStyleOptionGroupBox &operator=(const QStyleOptionGroupBox &) = default; +protected: + QStyleOptionGroupBox(int version); +}; + +class QStyleOptionSizeGrip : public QStyleOptionComplex +{ +public: + enum StyleOptionType { Type = SO_SizeGrip }; + enum StyleOptionVersion { Version = 1 }; + + Qt::Corner corner; + + QStyleOptionSizeGrip(); + QStyleOptionSizeGrip(const QStyleOptionSizeGrip &other) : QStyleOptionComplex(Version, Type) { *this = other; } + QStyleOptionSizeGrip &operator=(const QStyleOptionSizeGrip &) = default; +protected: + QStyleOptionSizeGrip(int version); +}; + +class QStyleOptionGraphicsItem : public QStyleOption +{ +public: + enum StyleOptionType { Type = SO_GraphicsItem }; + enum StyleOptionVersion { Version = 1 }; + + QRectF exposedRect; + qreal levelOfDetail; + + QStyleOptionGraphicsItem(); + QStyleOptionGraphicsItem(const QStyleOptionGraphicsItem &other) : QStyleOption(Version, Type) { *this = other; } + QStyleOptionGraphicsItem &operator=(const QStyleOptionGraphicsItem &) = default; + static qreal levelOfDetailFromTransform(const QTransform &worldTransform); +protected: + QStyleOptionGraphicsItem(int version); +}; + +template +T qstyleoption_cast(const QStyleOption *opt) +{ + typedef typename std::remove_cv::type>::type Opt; + if (opt && opt->version >= Opt::Version && (opt->type == Opt::Type + || int(Opt::Type) == QStyleOption::SO_Default + || (int(Opt::Type) == QStyleOption::SO_Complex + && opt->type > QStyleOption::SO_Complex))) + return static_cast(opt); + return nullptr; +} + +template +T qstyleoption_cast(QStyleOption *opt) +{ + typedef typename std::remove_cv::type>::type Opt; + if (opt && opt->version >= Opt::Version && (opt->type == Opt::Type + || int(Opt::Type) == QStyleOption::SO_Default + || (int(Opt::Type) == QStyleOption::SO_Complex + && opt->type > QStyleOption::SO_Complex))) + return static_cast(opt); + return nullptr; +} + +// -------------------------- QStyleHintReturn ------------------------------- + +class QStyleHintReturn +{ +public: + enum HintReturnType { + SH_Default=0xf000, SH_Mask, SH_Variant + }; + + enum StyleOptionType { Type = SH_Default }; + enum StyleOptionVersion { Version = 1 }; + + QStyleHintReturn(int version = QStyleOption::Version, int type = SH_Default); + ~QStyleHintReturn(); + + int version; + int type; +}; + +class QStyleHintReturnMask : public QStyleHintReturn +{ +public: + enum StyleOptionType { Type = SH_Mask }; + enum StyleOptionVersion { Version = 1 }; + + QStyleHintReturnMask(); + ~QStyleHintReturnMask(); + + QRegion region; +}; + +class QStyleHintReturnVariant : public QStyleHintReturn +{ +public: + enum StyleOptionType { Type = SH_Variant }; + enum StyleOptionVersion { Version = 1 }; + + QStyleHintReturnVariant(); + ~QStyleHintReturnVariant(); + + QVariant variant; +}; + +template +T qstyleoption_cast(const QStyleHintReturn *hint) +{ + typedef typename std::remove_cv::type>::type Opt; + if (hint && hint->version <= Opt::Version && + (hint->type == Opt::Type || int(Opt::Type) == QStyleHintReturn::SH_Default)) + return static_cast(hint); + return nullptr; +} + +template +T qstyleoption_cast(QStyleHintReturn *hint) +{ + typedef typename std::remove_cv::type>::type Opt; + if (hint && hint->version <= Opt::Version && + (hint->type == Opt::Type || int(Opt::Type) == QStyleHintReturn::SH_Default)) + return static_cast(hint); + return nullptr; +} + +#if !defined(QT_NO_DEBUG_STREAM) +QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType); +QDebug operator<<(QDebug debug, const QStyleOption &option); +#endif + +} // namespace QQC2 + +QT_END_NAMESPACE + +#endif // QSTYLEOPTION_H diff --git a/src/quicknativestyle/qstyle/qstyle.pri b/src/quicknativestyle/qstyle/qstyle.pri new file mode 100644 index 00000000..4d025498 --- /dev/null +++ b/src/quicknativestyle/qstyle/qstyle.pri @@ -0,0 +1,23 @@ +INCLUDEPATH += $$PWD + +HEADERS += \ + $$PWD/qquicknativestyle.h \ + $$PWD/qquickcommonstyle.h \ + $$PWD/qquickcommonstyle_p.h \ + $$PWD/qquickcommonstylepixmaps_p.h \ + $$PWD/qquickdrawutil.h \ + $$PWD/qquickstyle.h \ + $$PWD/qquickstyle_p.h \ + $$PWD/qquickstylehelper_p.h \ + $$PWD/qquickstyleoption.h + +SOURCES += \ + $$PWD/qquicknativestyle.cpp \ + $$PWD/qquickcommonstyle.cpp \ + $$PWD/qquickdrawutil.cpp \ + $$PWD/qquickstyle.cpp \ + $$PWD/qquickstylehelper.cpp \ + $$PWD/qquickstyleoption.cpp + +macos: include(mac/mac.pri) +win32: include(windows/windows.pri) diff --git a/src/quicknativestyle/qstyle/windows/qquickwindowsstyle.cpp b/src/quicknativestyle/qstyle/windows/qquickwindowsstyle.cpp new file mode 100644 index 00000000..242b770d --- /dev/null +++ b/src/quicknativestyle/qstyle/windows/qquickwindowsstyle.cpp @@ -0,0 +1,2388 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWidgets module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickwindowsstyle_p.h" +#include "qquickwindowsstyle_p_p.h" +#include "qquickstyleoption.h" +#include "qquickstylehelper_p.h" +#include "qquickdrawutil.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if 0 && QT_CONFIG(animation) +//#include +#endif + +#include + +QT_BEGIN_NAMESPACE + +#if defined(Q_OS_WIN) + +QT_BEGIN_INCLUDE_NAMESPACE +#include "qt_windows.h" +QT_END_INCLUDE_NAMESPACE +# ifndef COLOR_GRADIENTACTIVECAPTION +# define COLOR_GRADIENTACTIVECAPTION 27 +# endif +# ifndef COLOR_GRADIENTINACTIVECAPTION +# define COLOR_GRADIENTINACTIVECAPTION 28 +# endif + +Q_GUI_EXPORT HICON qt_pixmapToWinHICON(const QPixmap &); +#endif //Q_OS_WIN + +QT_BEGIN_INCLUDE_NAMESPACE +#include +QT_END_INCLUDE_NAMESPACE + +namespace QQC2 { + +enum QSliderDirection { SlUp, SlDown, SlLeft, SlRight }; + +/* + \internal +*/ + +QWindowsStylePrivate::QWindowsStylePrivate() = default; + +qreal QWindowsStylePrivate::appDevicePixelRatio() +{ + return qApp->devicePixelRatio(); +} + +bool QWindowsStylePrivate::isDarkMode() +{ + bool result = false; +#ifdef Q_OS_WIN + // Windows only: Return whether dark mode style support is desired and + // dark mode is in effect. + if (auto ni = QGuiApplication::platformNativeInterface()) { + const QVariant darkModeStyleP = ni->property("darkModeStyle"); + result = darkModeStyleP.metaType().id() == QMetaType::Bool + && darkModeStyleP.value() + && ni->property("darkMode").value(); + } +#endif + return result; +} + +// ###TODO SH_UnderlineShortcut +#if 0 +// Returns \c true if the toplevel parent of \a widget has seen the Alt-key +bool QWindowsStylePrivate::hasSeenAlt(const QWidget *widget) const +{ + widget = widget->window(); + return seenAlt.contains(widget); +} + +/*! + \reimp +*/ +bool QWindowsStyle::eventFilter(QObject *o, QEvent *e) +{ + // Records Alt- and Focus events +// if (!o->isWidgetType()) + return QObject::eventFilter(o, e); + QWidget *widget = qobject_cast(o); + Q_D(QWindowsStyle); + switch (e->type()) { + case QEvent::KeyPress: + if (static_cast(e)->key() == Qt::Key_Alt) { + widget = widget->window(); + + // Alt has been pressed - find all widgets that care + QList l = widget->findChildren(); + auto ignorable = [](QWidget *w) { + return w->isWindow() || !w->isVisible() + || w->style()->styleHint(SH_UnderlineShortcut, nullptr, w); + }; + l.erase(std::remove_if (l.begin(), l.end(), ignorable), l.end()); + // Update states before repainting + d->seenAlt.append(widget); + d->alt_down = true; + + // Repaint all relevant widgets + for (int pos = 0; pos < l.size(); ++pos) + l.at(pos)->update(); + } + break; + case QEvent::KeyRelease: + if (static_cast(e)->key() == Qt::Key_Alt) { + widget = widget->window(); + + // Update state and repaint the menu bars. + d->alt_down = false; +#if 0 && QT_CONFIG(menubar) + QList l = widget->findChildren(); + for (int i = 0; i < l.size(); ++i) + l.at(i)->update(); +#endif + } + break; + case QEvent::Close: + // Reset widget when closing + d->seenAlt.removeAll(widget); + d->seenAlt.removeAll(widget->window()); + break; + default: + break; + } + return QCommonStyle::eventFilter(o, e); +} +#endif + +/*! + \class QWindowsStyle + \brief The QWindowsStyle class provides a Microsoft Windows-like look and feel. + + \ingroup appearance + \inmodule QtWidgets + \internal + + This style is Qt's default GUI style on Windows. + + \image qwindowsstyle.png + \sa QWindowsVistaStyle, QMacStyle, QFusionStyle +*/ + +/*! + Constructs a QWindowsStyle object. +*/ +QWindowsStyle::QWindowsStyle() : QCommonStyle(*new QWindowsStylePrivate) +{ +} + +/*! + \internal + + Constructs a QWindowsStyle object. +*/ +QWindowsStyle::QWindowsStyle(QWindowsStylePrivate &dd) : QCommonStyle(dd) +{ +} + + +/*! Destroys the QWindowsStyle object. */ +QWindowsStyle::~QWindowsStyle() +{ +} + +#ifdef Q_OS_WIN +static inline QRgb colorref2qrgb(COLORREF col) +{ + return qRgb(GetRValue(col), GetGValue(col), GetBValue(col)); +} +#endif +#if 0 +/*! \reimp */ +void QWindowsStyle::polish(QApplication *app) +{ + QCommonStyle::polish(app); + QWindowsStylePrivate *d = const_cast(d_func()); + // We only need the overhead when shortcuts are sometimes hidden + if (!proxy()->styleHint(SH_UnderlineShortcut, nullptr) && app) + app->installEventFilter(this); + + const auto &palette = QGuiApplication::palette(); + d->activeGradientCaptionColor = palette.highlight().color(); + d->activeCaptionColor = d->activeGradientCaptionColor; + d->inactiveGradientCaptionColor = palette.dark().color(); + d->inactiveCaptionColor = d->inactiveGradientCaptionColor; + d->inactiveCaptionText = palette.window().color(); + +#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) //fetch native title bar colors + if (app->desktopSettingsAware()){ + DWORD activeCaption = GetSysColor(COLOR_ACTIVECAPTION); + DWORD gradientActiveCaption = GetSysColor(COLOR_GRADIENTACTIVECAPTION); + DWORD inactiveCaption = GetSysColor(COLOR_INACTIVECAPTION); + DWORD gradientInactiveCaption = GetSysColor(COLOR_GRADIENTINACTIVECAPTION); + DWORD inactiveCaptionText = GetSysColor(COLOR_INACTIVECAPTIONTEXT); + d->activeCaptionColor = colorref2qrgb(activeCaption); + d->activeGradientCaptionColor = colorref2qrgb(gradientActiveCaption); + d->inactiveCaptionColor = colorref2qrgb(inactiveCaption); + d->inactiveGradientCaptionColor = colorref2qrgb(gradientInactiveCaption); + d->inactiveCaptionText = colorref2qrgb(inactiveCaptionText); + } +#endif +} + +/*! \reimp */ +void QWindowsStyle::unpolish(QApplication *app) +{ + QCommonStyle::unpolish(app); + app->removeEventFilter(this); +} + +/*! \reimp */ +void QWindowsStyle::polish(QWidget *widget) +{ + QCommonStyle::polish(widget); +} + +/*! \reimp */ +void QWindowsStyle::unpolish(QWidget *widget) +{ + QCommonStyle::unpolish(widget); +} + +/*! + \reimp +*/ +void QWindowsStyle::polish(QPalette &pal) +{ + QCommonStyle::polish(pal); +} +#endif + +int QWindowsStylePrivate::pixelMetricFromSystemDp(QStyle::PixelMetric pm, const QStyleOption *opt) +{ +#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) + switch (pm) { + case QStyle::PM_DockWidgetFrameWidth: + return GetSystemMetrics(SM_CXFRAME); + + case QStyle::PM_TitleBarHeight: + Q_ASSERT(opt); + if (const QStyleOptionTitleBar *tb = qstyleoption_cast(opt)) { + if ((tb->titleBarFlags & Qt::WindowType_Mask) == Qt::Tool) { + // MS always use one less than they say + return GetSystemMetrics(SM_CYSMCAPTION) - 1; + } + } + return GetSystemMetrics(SM_CYCAPTION) - 1; + + case QStyle::PM_ScrollBarExtent: + { + NONCLIENTMETRICS ncm; + ncm.cbSize = FIELD_OFFSET(NONCLIENTMETRICS, lfMessageFont) + sizeof(LOGFONT); + if (SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0)) + return qMax(ncm.iScrollHeight, ncm.iScrollWidth); + } + break; + + case QStyle::PM_MdiSubWindowFrameWidth: + return GetSystemMetrics(SM_CYFRAME); + + default: + break; + } +#else // Q_OS_WIN && !Q_OS_WINRT + Q_UNUSED(pm); + Q_UNUSED(widget); +#endif + return QWindowsStylePrivate::InvalidMetric; +} + +int QWindowsStylePrivate::fixedPixelMetric(QStyle::PixelMetric pm) +{ + switch (pm) { + case QStyle::PM_ToolBarItemSpacing: + return 0; + case QStyle::PM_ButtonDefaultIndicator: + case QStyle::PM_ButtonShiftHorizontal: + case QStyle::PM_ButtonShiftVertical: + case QStyle::PM_MenuHMargin: + case QStyle::PM_MenuVMargin: + case QStyle::PM_ToolBarItemMargin: + return 1; + case QStyle::PM_DockWidgetSeparatorExtent: + return 4; +#if 0 && QT_CONFIG(tabbar) + case QStyle::PM_TabBarTabShiftHorizontal: + return 0; + case QStyle::PM_TabBarTabShiftVertical: + return 2; +#endif + + case QStyle::PM_SliderLength: + return 11; + +#if 0 && QT_CONFIG(menu) + case QStyle::PM_MenuBarHMargin: + case QStyle::PM_MenuBarVMargin: + case QStyle::PM_MenuBarPanelWidth: + return 0; + case QStyle::PM_SmallIconSize: + return 16; + case QStyle::PM_LargeIconSize: + return 32; + case QStyle::PM_DockWidgetTitleMargin: + return 2; + case QStyle::PM_DockWidgetTitleBarButtonMargin: + case QStyle::PM_DockWidgetFrameWidth: + return 4; + +#endif // QT_CONFIG(menu) + case QStyle::PM_ToolBarHandleExtent: + return 10; + default: + break; + } + return QWindowsStylePrivate::InvalidMetric; +} + +static QScreen *screenOf(const QWindow *w) +{ + if (w) { + if (auto screen = w->screen()) + return screen; + } + return QGuiApplication::primaryScreen(); +} + +// Calculate the overall scale factor to obtain Qt Device Independent +// Pixels from a native Windows size. Divide by devicePixelRatio +// and account for secondary screens with differing logical DPI. +qreal QWindowsStylePrivate::nativeMetricScaleFactor(const QStyleOption *opt) +{ + Q_ASSERT(opt); + const QWindow *win = opt->window; + return nativeMetricScaleFactor(win); +} + +qreal QWindowsStylePrivate::nativeMetricScaleFactor(const QWindow *win) +{ + qreal result = qreal(1) / QWindowsStylePrivate::devicePixelRatio(win); + if (QGuiApplicationPrivate::screen_list.size() > 1) { + const QScreen *primaryScreen = QGuiApplication::primaryScreen(); + const QScreen *screen = screenOf(win); + if (screen != primaryScreen) { + const qreal primaryLogicalDpi = primaryScreen->handle()->logicalDpi().first; + const qreal logicalDpi = screen->handle()->logicalDpi().first; + if (!qFuzzyCompare(primaryLogicalDpi, logicalDpi)) + result *= logicalDpi / primaryLogicalDpi; + } + } + return result; +} + +/*! + \reimp +*/ +int QWindowsStyle::pixelMetric(PixelMetric pm, const QStyleOption *opt) const +{ + int ret = QWindowsStylePrivate::pixelMetricFromSystemDp(pm, opt); + if (ret != QWindowsStylePrivate::InvalidMetric) + return qRound(qreal(ret) * QWindowsStylePrivate::nativeMetricScaleFactor(opt)); + + ret = QWindowsStylePrivate::fixedPixelMetric(pm); + if (ret != QWindowsStylePrivate::InvalidMetric) + return int(QStyleHelper::dpiScaled(ret, opt)); + + ret = 0; + + switch (pm) { + case PM_MaximumDragDistance: + ret = QCommonStyle::pixelMetric(PM_MaximumDragDistance); + if (ret == -1) + ret = 60; + break; + + // Returns the number of pixels to use for the business part of the + // slider (i.e., the non-tickmark portion). The remaining space is shared + // equally between the tickmark regions. + case PM_SliderControlThickness: + if (const QStyleOptionSlider *sl = qstyleoption_cast(opt)) { + int space = (sl->orientation == Qt::Horizontal) ? sl->rect.height() : sl->rect.width(); + int ticks = sl->tickPosition; + int n = 0; + if (ticks & QStyleOptionSlider::TicksAbove) + ++n; + if (ticks & QStyleOptionSlider::TicksBelow) + ++n; + if (!n) { + ret = space; + break; + } + + int thick = 6; // Magic constant to get 5 + 16 + 5 + if (ticks != QStyleOptionSlider::TicksBothSides && ticks != QStyleOptionSlider::NoTicks) + thick += proxy()->pixelMetric(PM_SliderLength, sl) / 4; + + space -= thick; + if (space > 0) + thick += (space * 2) / (n + 2); + ret = thick; + } + break; + + case PM_IconViewIconSize: + ret = proxy()->pixelMetric(PM_LargeIconSize, opt); + break; + + case PM_SplitterWidth: + ret = int(QStyleHelper::dpiScaled(4, opt)); + break; + + default: + ret = QCommonStyle::pixelMetric(pm, opt); + break; + } + + return ret; +} + +/*! + \reimp + */ +QPixmap QWindowsStyle::standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt) const +{ +#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) + QPixmap desktopIcon; + switch (standardPixmap) { + case SP_DriveCDIcon: + case SP_DriveDVDIcon: + case SP_DriveNetIcon: + case SP_DriveHDIcon: + case SP_DriveFDIcon: + case SP_FileIcon: + case SP_FileLinkIcon: + case SP_DirLinkIcon: + case SP_DirClosedIcon: + case SP_DesktopIcon: + case SP_ComputerIcon: + case SP_DirOpenIcon: + case SP_FileDialogNewFolder: + case SP_DirHomeIcon: + case SP_TrashIcon: + case SP_VistaShield: + if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) { + QPlatformTheme::StandardPixmap sp = static_cast(standardPixmap); + desktopIcon = theme->standardPixmap(sp, QSizeF(16, 16)); + } + break; + case SP_MessageBoxInformation: + case SP_MessageBoxWarning: + case SP_MessageBoxCritical: + case SP_MessageBoxQuestion: + if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) { + QPlatformTheme::StandardPixmap sp = static_cast(standardPixmap); + desktopIcon = theme->standardPixmap(sp, QSizeF()); + } + break; + default: + break; + } + if (!desktopIcon.isNull()) { + return desktopIcon; + } +#endif // Q_OS_WIN && !Q_OS_WINRT + return QCommonStyle::standardPixmap(standardPixmap, opt); +} + +/*! \reimp */ +int QWindowsStyle::styleHint(StyleHint hint, const QStyleOption *opt, + QStyleHintReturn *returnData) const +{ + int ret = 0; + + switch (hint) { + case SH_EtchDisabledText: + ret = d_func()->isDarkMode() ? 0 : 1; + break; + case SH_Slider_SnapToValue: + case SH_PrintDialog_RightAlignButtons: + case SH_FontDialog_SelectAssociatedText: + case SH_Menu_AllowActiveAndDisabled: + case SH_MenuBar_AltKeyNavigation: + case SH_MenuBar_MouseTracking: + case SH_Menu_MouseTracking: + case SH_ComboBox_ListMouseTracking: + case SH_Slider_StopMouseOverSlider: + case SH_MainWindow_SpaceBelowMenuBar: + ret = 1; + + break; + case SH_ItemView_ShowDecorationSelected: +#if 0 && QT_CONFIG(listview) + if (qobject_cast(widget)) + ret = 1; +#endif + break; + case SH_ItemView_ChangeHighlightOnFocus: + ret = 1; + break; + case SH_ToolBox_SelectedPageTitleBold: + ret = 0; + break; + +#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) // Option not used on WinRT -> common style + case SH_UnderlineShortcut: + { + ret = 1; + BOOL cues = false; + SystemParametersInfo(SPI_GETKEYBOARDCUES, 0, &cues, 0); + ret = int(cues); + // Do nothing if we always paint underlines + Q_D(const QWindowsStyle); + if (!ret && d) { +#if 0 && QT_CONFIG(menubar) + const QMenuBar *menuBar = qobject_cast(widget); + if (!menuBar && qobject_cast(widget)) { + QWidget *w = QApplication::activeWindow(); + if (w && w != widget) + menuBar = w->findChild(); + } + // If we paint a menu bar draw underlines if is in the keyboardState + if (menuBar) { + if (menuBar->d_func()->keyboardState || d->altDown()) + ret = 1; + // Otherwise draw underlines if the toplevel widget has seen an alt-press + } else +#endif // QT_CONFIG(menubar) +// if (d->hasSeenAlt(widget)) { +// ret = 1; +// } + } +#ifndef QT_NO_ACCESSIBILITY + if (!ret && opt && opt->type == QStyleOption::SO_MenuItem + && QStyleHelper::isInstanceOf(opt->styleObject, QAccessible::MenuItem) + && opt->styleObject->property("_q_showUnderlined").toBool()) + ret = 1; +#endif // QT_NO_ACCESSIBILITY + break; + } +#endif // Q_OS_WIN && !Q_OS_WINRT + case SH_Menu_SubMenuSloppyCloseTimeout: + case SH_Menu_SubMenuPopupDelay: { +#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT) + DWORD delay; + if (SystemParametersInfo(SPI_GETMENUSHOWDELAY, 0, &delay, 0)) + ret = delay; + else +#endif // Q_OS_WIN && !Q_OS_WINRT + ret = 400; + break; + } +#if 0 && QT_CONFIG(rubberband) + case SH_RubberBand_Mask: + if (const QStyleOptionRubberBand *rbOpt = qstyleoption_cast(opt)) { + ret = 0; + if (rbOpt->shape == QRubberBand::Rectangle) { + ret = true; + if (QStyleHintReturnMask *mask = qstyleoption_cast(returnData)) { + mask->region = opt->rect; + int size = 1; + if (widget && widget->isWindow()) + size = 4; + mask->region -= opt->rect.adjusted(size, size, -size, -size); + } + } + } + break; +#endif // QT_CONFIG(rubberband) +#if 0 && QT_CONFIG(wizard) + case SH_WizardStyle: + ret = QWizard::ModernStyle; + break; +#endif + case SH_ItemView_ArrowKeysNavigateIntoChildren: + ret = true; + break; + case SH_DialogButtonBox_ButtonsHaveIcons: + ret = 0; + break; + default: + ret = QCommonStyle::styleHint(hint, opt, returnData); + break; + } + return ret; +} + +/*! \reimp */ +void QWindowsStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p) const +{ + // Used to restore across fallthrough cases. Currently only used in PE_IndicatorCheckBox + bool doRestore = false; + + switch (pe) { +#if 0 && QT_CONFIG(toolbar) + case PE_IndicatorToolBarSeparator: + { + QRect rect = opt->rect; + const int margin = 2; + QPen oldPen = p->pen(); + if (opt->state & State_Horizontal){ + const int offset = rect.width()/2; + p->setPen(QPen(opt->palette.dark().color())); + p->drawLine(rect.bottomLeft().x() + offset, + rect.bottomLeft().y() - margin, + rect.topLeft().x() + offset, + rect.topLeft().y() + margin); + p->setPen(QPen(opt->palette.light().color())); + p->drawLine(rect.bottomLeft().x() + offset + 1, + rect.bottomLeft().y() - margin, + rect.topLeft().x() + offset + 1, + rect.topLeft().y() + margin); + } + else{ //Draw vertical separator + const int offset = rect.height()/2; + p->setPen(QPen(opt->palette.dark().color())); + p->drawLine(rect.topLeft().x() + margin , + rect.topLeft().y() + offset, + rect.topRight().x() - margin, + rect.topRight().y() + offset); + p->setPen(QPen(opt->palette.light().color())); + p->drawLine(rect.topLeft().x() + margin , + rect.topLeft().y() + offset + 1, + rect.topRight().x() - margin, + rect.topRight().y() + offset + 1); + } + p->setPen(oldPen); + } + break; + case PE_IndicatorToolBarHandle: + p->save(); + p->translate(opt->rect.x(), opt->rect.y()); + if (opt->state & State_Horizontal) { + int x = opt->rect.width() / 2 - 4; + if (opt->direction == Qt::RightToLeft) + x -= 2; + if (opt->rect.height() > 4) { + qDrawShadePanel(p, x, 2, 3, opt->rect.height() - 4, + opt->palette, false, 1, nullptr); + qDrawShadePanel(p, x + 3, 2, 3, opt->rect.height() - 4, + opt->palette, false, 1, nullptr); + } + } else { + if (opt->rect.width() > 4) { + int y = opt->rect.height() / 2 - 4; + qDrawShadePanel(p, 2, y, opt->rect.width() - 4, 3, + opt->palette, false, 1, nullptr); + qDrawShadePanel(p, 2, y + 3, opt->rect.width() - 4, 3, + opt->palette, false, 1, nullptr); + } + } + p->restore(); + break; + +#endif // QT_CONFIG(toolbar) + case PE_FrameButtonTool: + case PE_PanelButtonTool: { + QPen oldPen = p->pen(); +#if 0 && QT_CONFIG(dockwidget) + if (w && w->inherits("QDockWidgetTitleButton")) { + if (const QWidget *dw = w->parentWidget()) + if (dw->isWindow()){ + qDrawWinButton(p, opt->rect.adjusted(1, 1, 0, 0), opt->palette, opt->state & (State_Sunken | State_On), + &opt->palette.button()); + + return; + } + } +#endif // QT_CONFIG(dockwidget) + QBrush fill; + bool stippled; + bool panel = (pe == PE_PanelButtonTool); + if ((!(opt->state & State_Sunken )) + && (!(opt->state & State_Enabled) + || !(opt->state & State_MouseOver && opt->state & State_AutoRaise)) + && (opt->state & State_On)) { + fill = QBrush(opt->palette.light().color(), Qt::Dense4Pattern); + stippled = true; + } else { + fill = opt->palette.brush(QPalette::Button); + stippled = false; + } + + if (opt->state & (State_Raised | State_Sunken | State_On)) { + if (opt->state & State_AutoRaise) { + if (opt->state & (State_Enabled | State_Sunken | State_On)){ + if (panel) + qDrawShadePanel(p, opt->rect, opt->palette, + opt->state & (State_Sunken | State_On), 1, &fill); + else + qDrawShadeRect(p, opt->rect, opt->palette, + opt->state & (State_Sunken | State_On), 1); + } + if (stippled) { + p->setPen(opt->palette.button().color()); + p->drawRect(opt->rect.adjusted(1,1,-2,-2)); + } + } else { + qDrawWinButton(p, opt->rect, opt->palette, + opt->state & (State_Sunken | State_On), panel ? &fill : nullptr); + } + } else { + p->fillRect(opt->rect, fill); + } + p->setPen(oldPen); + break; } + case PE_PanelButtonCommand: + if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { + QBrush fill; + State flags = opt->state; + QPalette pal = opt->palette; + QRect r = opt->rect; + if (! (flags & State_Sunken) && (flags & State_On)) + fill = QBrush(pal.light().color(), Qt::Dense4Pattern); + else + fill = pal.brush(QPalette::Button); + + if (btn->features & QStyleOptionButton::DefaultButton && flags & State_Sunken) { + p->setPen(pal.dark().color()); + p->setBrush(fill); + p->drawRect(r.adjusted(0, 0, -1, -1)); + } else if (flags & (State_Raised | State_On | State_Sunken)) { + qDrawWinButton(p, r, pal, flags & (State_Sunken | State_On), + &fill); + } else { + p->fillRect(r, fill); + } + } + break; + case PE_FrameDefaultButton: { + QPen oldPen = p->pen(); + p->setPen(QPen(opt->palette.shadow().color(), 0)); + QRectF rect = opt->rect; + const qreal dpi = QStyleHelper::dpi(opt); + const qreal topLevelAdjustment = QStyleHelper::dpiScaled(0.5, dpi); + const qreal bottomRightAdjustment = QStyleHelper::dpiScaled(-1.5, dpi); + rect.adjust(topLevelAdjustment, topLevelAdjustment, + bottomRightAdjustment, bottomRightAdjustment); + p->drawRect(rect); + p->setPen(oldPen); + break; + } + case PE_IndicatorCheckBox: { + QBrush fill; + if (opt->state & State_NoChange) + fill = QBrush(opt->palette.base().color(), Qt::Dense4Pattern); + else if (opt->state & State_Sunken) + fill = opt->palette.button(); + else if (opt->state & State_Enabled) + fill = opt->palette.base(); + else + fill = opt->palette.window(); + p->save(); + doRestore = true; + qDrawWinPanel(p, opt->rect, opt->palette, true, &fill); + if (opt->state & State_NoChange) + p->setPen(opt->palette.dark().color()); + else + p->setPen(opt->palette.text().color()); + } + Q_FALLTHROUGH(); + case PE_IndicatorItemViewItemCheck: + if (!doRestore) { + p->save(); + doRestore = true; + } +#if 0 && QT_CONFIG(itemviews) + if (pe == PE_IndicatorItemViewItemCheck) { + const QStyleOptionViewItem *itemViewOpt = qstyleoption_cast(opt); + p->setPen(itemViewOpt + && itemViewOpt->showDecorationSelected + && opt->state & State_Selected + ? opt->palette.highlightedText().color() + : opt->palette.text().color()); + if (opt->state & State_NoChange) + p->setBrush(opt->palette.brush(QPalette::Button)); + p->drawRect(opt->rect.x() + 1, opt->rect.y() + 1, opt->rect.width() - 2, opt->rect.height() - 2); + } +#endif // QT_CONFIG(itemviews) + if (!(opt->state & State_Off)) { + QPointF points[6]; + qreal scaleh = opt->rect.width() / 12.0; + qreal scalev = opt->rect.height() / 12.0; + points[0] = { opt->rect.x() + 3.5 * scaleh, opt->rect.y() + 5.5 * scalev }; + points[1] = { points[0].x(), points[0].y() + 2 * scalev }; + points[2] = { points[1].x() + 2 * scaleh, points[1].y() + 2 * scalev }; + points[3] = { points[2].x() + 4 * scaleh, points[2].y() - 4 * scalev }; + points[4] = { points[3].x(), points[3].y() - 2 * scalev }; + points[5] = { points[4].x() - 4 * scaleh, points[4].y() + 4 * scalev }; + p->setPen(QPen(opt->palette.text().color(), 0)); + p->setBrush(opt->palette.text().color()); + p->drawPolygon(points, 6); + } + if (doRestore) + p->restore(); + break; + case PE_FrameFocusRect: + if (const QStyleOptionFocusRect *fropt = qstyleoption_cast(opt)) { + //### check for d->alt_down + if (!(fropt->state & State_KeyboardFocusChange) && !proxy()->styleHint(SH_UnderlineShortcut, opt)) + return; + QRect r = opt->rect; + p->save(); + p->setBackgroundMode(Qt::TransparentMode); + QColor bg_col = fropt->backgroundColor; + if (!bg_col.isValid()) + bg_col = p->background().color(); + // Create an "XOR" color. + QColor patternCol((bg_col.red() ^ 0xff) & 0xff, + (bg_col.green() ^ 0xff) & 0xff, + (bg_col.blue() ^ 0xff) & 0xff); + p->setBrush(QBrush(patternCol, Qt::Dense4Pattern)); + p->setBrushOrigin(r.topLeft()); + p->setPen(Qt::NoPen); + p->drawRect(r.left(), r.top(), r.width(), 1); // Top + p->drawRect(r.left(), r.bottom(), r.width(), 1); // Bottom + p->drawRect(r.left(), r.top(), 1, r.height()); // Left + p->drawRect(r.right(), r.top(), 1, r.height()); // Right + p->restore(); + } + break; + case PE_IndicatorRadioButton: + { + QRect r = opt->rect; + p->save(); + p->setRenderHint(QPainter::Antialiasing, true); + + QPointF circleCenter = r.center() + QPoint(1, 1); + qreal radius = (r.width() + (r.width() + 1) % 2) / 2.0 - 1; + + QPainterPath path1; + path1.addEllipse(circleCenter, radius, radius); + radius *= 0.85; + QPainterPath path2; + path2.addEllipse(circleCenter, radius, radius); + radius *= 0.85; + QPainterPath path3; + path3.addEllipse(circleCenter, radius, radius); + radius *= 0.5; + QPainterPath path4; + path4.addEllipse(circleCenter, radius, radius); + + QPolygon topLeftPol, bottomRightPol; + topLeftPol.setPoints(3, r.x(), r.y(), r.x(), r.y() + r.height(), r.x() + r.width(), r.y()); + bottomRightPol.setPoints(3, r.x(), r.y() + r.height(), r.x() + r.width(), r.y() + r.height(), r.x() + r.width(), r.y()); + + p->setClipRegion(QRegion(topLeftPol)); + p->setPen(opt->palette.dark().color()); + p->setBrush(opt->palette.dark().color()); + p->drawPath(path1); + p->setPen(opt->palette.shadow().color()); + p->setBrush(opt->palette.shadow().color()); + p->drawPath(path2); + + p->setClipRegion(QRegion(bottomRightPol)); + p->setPen(opt->palette.light().color()); + p->setBrush(opt->palette.light().color()); + p->drawPath(path1); + p->setPen(opt->palette.midlight().color()); + p->setBrush(opt->palette.midlight().color()); + p->drawPath(path2); + + QColor fillColor = ((opt->state & State_Sunken) || !(opt->state & State_Enabled)) ? + opt->palette.button().color() : opt->palette.base().color(); + + p->setClipping(false); + p->setPen(fillColor); + p->setBrush(fillColor); + p->drawPath(path3); + + if (opt->state & State_On) { + p->setPen(opt->palette.text().color()); + p->setBrush(opt->palette.text()); + p->drawPath(path4); + } + p->restore(); + break; + } +#ifndef QT_NO_FRAME + case PE_Frame: + case PE_FrameMenu: + if (const QStyleOptionFrame *frame = qstyleoption_cast(opt)) { + if (frame->lineWidth == 2 || pe == PE_Frame) { + QPalette popupPal = frame->palette; + if (pe == PE_FrameMenu) { + popupPal.setColor(QPalette::Light, frame->palette.window().color()); + popupPal.setColor(QPalette::Midlight, frame->palette.light().color()); + } + if (pe == PE_Frame && (frame->state & State_Raised)) + qDrawWinButton(p, frame->rect, popupPal, frame->state & State_Sunken); + else if (pe == PE_Frame && (frame->state & State_Sunken)) + { + popupPal.setColor(QPalette::Midlight, frame->palette.window().color()); + qDrawWinPanel(p, frame->rect, popupPal, frame->state & State_Sunken); + } + else + qDrawWinPanel(p, frame->rect, popupPal, frame->state & State_Sunken); + } else { + QCommonStyle::drawPrimitive(pe, opt, p); + } + } else { + QPalette popupPal = opt->palette; + popupPal.setColor(QPalette::Light, opt->palette.window().color()); + popupPal.setColor(QPalette::Midlight, opt->palette.light().color()); + qDrawWinPanel(p, opt->rect, popupPal, opt->state & State_Sunken); + } + break; +#endif // QT_NO_FRAME + case PE_FrameButtonBevel: + case PE_PanelButtonBevel: { + QBrush fill; + bool panel = pe != PE_FrameButtonBevel; + p->setBrushOrigin(opt->rect.topLeft()); + if (!(opt->state & State_Sunken) && (opt->state & State_On)) + fill = QBrush(opt->palette.light().color(), Qt::Dense4Pattern); + else + fill = opt->palette.brush(QPalette::Button); + + if (opt->state & (State_Raised | State_On | State_Sunken)) { + qDrawWinButton(p, opt->rect, opt->palette, opt->state & (State_Sunken | State_On), + panel ? &fill : nullptr); + } else { + if (panel) + p->fillRect(opt->rect, fill); + else + p->drawRect(opt->rect); + } + break; } + case PE_FrameWindow: { + QPalette popupPal = opt->palette; + popupPal.setColor(QPalette::Light, opt->palette.window().color()); + popupPal.setColor(QPalette::Midlight, opt->palette.light().color()); + qDrawWinPanel(p, opt->rect, popupPal, opt->state & State_Sunken); + break; } +#if 0 && QT_CONFIG(dockwidget) + case PE_IndicatorDockWidgetResizeHandle: + break; + case PE_FrameDockWidget: + if (qstyleoption_cast(opt)) { + proxy()->drawPrimitive(QStyle::PE_FrameWindow, opt, p, w); + } + break; +#endif // QT_CONFIG(dockwidget) + + case PE_FrameStatusBarItem: + qDrawShadePanel(p, opt->rect, opt->palette, true, 1, nullptr); + break; + + case PE_IndicatorProgressChunk: + { + bool vertical = false, inverted = false; + if (const QStyleOptionProgressBar *pb = qstyleoption_cast(opt)) { + vertical = !(pb->state & QStyle::State_Horizontal); + inverted = pb->invertedAppearance; + } + + int space = 2; + int chunksize = proxy()->pixelMetric(PM_ProgressBarChunkWidth, opt) - space; + if (!vertical) { + if (opt->rect.width() <= chunksize) + space = 0; + + if (inverted) + p->fillRect(opt->rect.x() + space, opt->rect.y(), opt->rect.width() - space, opt->rect.height(), + opt->palette.brush(QPalette::Highlight)); + else + p->fillRect(opt->rect.x(), opt->rect.y(), opt->rect.width() - space, opt->rect.height(), + opt->palette.brush(QPalette::Highlight)); + } else { + if (opt->rect.height() <= chunksize) + space = 0; + + if (inverted) + p->fillRect(opt->rect.x(), opt->rect.y(), opt->rect.width(), opt->rect.height() - space, + opt->palette.brush(QPalette::Highlight)); + else + p->fillRect(opt->rect.x(), opt->rect.y() + space, opt->rect.width(), opt->rect.height() - space, + opt->palette.brush(QPalette::Highlight)); + } + } + break; + + case PE_FrameTabWidget: { + qDrawWinButton(p, opt->rect, opt->palette, false, nullptr); + break; + } + default: + QCommonStyle::drawPrimitive(pe, opt, p); + } +} + +/*! \reimp */ +void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter *p) const +{ + switch (ce) { +#if 0 && QT_CONFIG(rubberband) + case CE_RubberBand: + if (qstyleoption_cast(opt)) { + // ### workaround for slow general painter path + QPixmap tiledPixmap(16, 16); + QPainter pixmapPainter(&tiledPixmap); + pixmapPainter.setPen(Qt::NoPen); + pixmapPainter.setBrush(Qt::Dense4Pattern); + pixmapPainter.setBackground(Qt::white); + pixmapPainter.setBackgroundMode(Qt::OpaqueMode); + pixmapPainter.drawRect(0, 0, tiledPixmap.width(), tiledPixmap.height()); + pixmapPainter.end(); + tiledPixmap = QPixmap::fromImage(tiledPixmap.toImage()); + p->save(); + QRect r = opt->rect; + QStyleHintReturnMask mask; + if (proxy()->styleHint(QStyle::SH_RubberBand_Mask, opt, widget, &mask)) + p->setClipRegion(mask.region); + p->drawTiledPixmap(r.x(), r.y(), r.width(), r.height(), tiledPixmap); + p->restore(); + return; + } + break; +#endif // QT_CONFIG(rubberband) + +#if 0 && QT_CONFIG(menu) && QT_CONFIG(mainwindow) + case CE_MenuBarEmptyArea: + if (widget && qobject_cast(widget->parentWidget())) { + p->fillRect(opt->rect, opt->palette.button()); + QPen oldPen = p->pen(); + p->setPen(QPen(opt->palette.dark().color())); + p->drawLine(opt->rect.bottomLeft(), opt->rect.bottomRight()); + p->setPen(oldPen); + } + break; +#endif +#if 0 && QT_CONFIG(menu) + case CE_MenuItem: + if (const QStyleOptionMenuItem *menuitem = qstyleoption_cast(opt)) { + int x, y, w, h; + menuitem->rect.getRect(&x, &y, &w, &h); + int tab = menuitem->tabWidth; + bool dis = !(menuitem->state & State_Enabled); + bool checked = menuitem->checkType != QStyleOptionMenuItem::NotCheckable + ? menuitem->checked : false; + bool act = menuitem->state & State_Selected; + + // windows always has a check column, regardless whether we have an icon or not + int checkcol = qMax(menuitem->maxIconWidth, QWindowsStylePrivate::windowsCheckMarkWidth); + + QBrush fill = menuitem->palette.brush(act ? QPalette::Highlight : QPalette::Button); + p->fillRect(menuitem->rect.adjusted(0, 0, -1, 0), fill); + + if (menuitem->menuItemType == QStyleOptionMenuItem::Separator){ + int yoff = y-1 + h / 2; + p->setPen(menuitem->palette.dark().color()); + p->drawLine(x + 2, yoff, x + w - 4, yoff); + p->setPen(menuitem->palette.light().color()); + p->drawLine(x + 2, yoff + 1, x + w - 4, yoff + 1); + return; + } + + QRect vCheckRect = visualRect(opt->direction, menuitem->rect, QRect(menuitem->rect.x(), menuitem->rect.y(), checkcol, menuitem->rect.height())); + if (!menuitem->icon.isNull() && checked) { + if (act) { + qDrawShadePanel(p, vCheckRect, + menuitem->palette, true, 1, + &menuitem->palette.brush(QPalette::Button)); + } else { + QBrush fill(menuitem->palette.light().color(), Qt::Dense4Pattern); + qDrawShadePanel(p, vCheckRect, menuitem->palette, true, 1, &fill); + } + } else if (!act) { + p->fillRect(vCheckRect, menuitem->palette.brush(QPalette::Button)); + } + + // On Windows Style, if we have a checkable item and an icon we + // draw the icon recessed to indicate an item is checked. If we + // have no icon, we draw a checkmark instead. + if (!menuitem->icon.isNull()) { + QIcon::Mode mode = dis ? QIcon::Disabled : QIcon::Normal; + if (act && !dis) + mode = QIcon::Active; + QPixmap pixmap; + if (checked) + pixmap = menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, opt, widget), mode, QIcon::On); + else + pixmap = menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, opt, widget), mode); + const int pixw = pixmap.width() / pixmap.devicePixelRatio(); + const int pixh = pixmap.height() / pixmap.devicePixelRatio(); + QRect pmr(0, 0, pixw, pixh); + pmr.moveCenter(vCheckRect.center()); + p->setPen(menuitem->palette.text().color()); + p->drawPixmap(pmr.topLeft(), pixmap); + } else if (checked) { + QStyleOptionMenuItem newMi = *menuitem; + newMi.state = State_None; + if (!dis) + newMi.state |= State_Enabled; + if (act) + newMi.state |= State_On; + newMi.rect = visualRect(opt->direction, menuitem->rect, QRect(menuitem->rect.x() + QWindowsStylePrivate::windowsItemFrame, + menuitem->rect.y() + QWindowsStylePrivate::windowsItemFrame, + checkcol - 2 * QWindowsStylePrivate::windowsItemFrame, + menuitem->rect.height() - 2 * QWindowsStylePrivate::windowsItemFrame)); + proxy()->drawPrimitive(PE_IndicatorMenuCheckMark, &newMi, p, widget); + } + p->setPen(act ? menuitem->palette.highlightedText().color() : menuitem->palette.buttonText().color()); + + QColor discol; + if (dis) { + discol = menuitem->palette.text().color(); + p->setPen(discol); + } + + int xm = int(QWindowsStylePrivate::windowsItemFrame) + checkcol + int(QWindowsStylePrivate::windowsItemHMargin); + int xpos = menuitem->rect.x() + xm; + QRect textRect(xpos, y + QWindowsStylePrivate::windowsItemVMargin, + w - xm - QWindowsStylePrivate::windowsRightBorder - tab + 1, h - 2 * QWindowsStylePrivate::windowsItemVMargin); + QRect vTextRect = visualRect(opt->direction, menuitem->rect, textRect); + QStringRef s(&menuitem->text); + if (!s.isEmpty()) { // draw text + p->save(); + int t = s.indexOf(QLatin1Char('\t')); + int text_flags = Qt::AlignVCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine; + if (!proxy()->styleHint(SH_UnderlineShortcut, menuitem, widget)) + text_flags |= Qt::TextHideMnemonic; + text_flags |= Qt::AlignLeft; + if (t >= 0) { + QRect vShortcutRect = visualRect(opt->direction, menuitem->rect, + QRect(textRect.topRight(), QPoint(menuitem->rect.right(), textRect.bottom()))); + const QString textToDraw = s.mid(t + 1).toString(); + if (dis && !act && proxy()->styleHint(SH_EtchDisabledText, opt, widget)) { + p->setPen(menuitem->palette.light().color()); + p->drawText(vShortcutRect.adjusted(1, 1, 1, 1), text_flags, textToDraw); + p->setPen(discol); + } + p->drawText(vShortcutRect, text_flags, textToDraw); + s = s.left(t); + } + QFont font = menuitem->font; + if (menuitem->menuItemType == QStyleOptionMenuItem::DefaultItem) + font.setBold(true); + p->setFont(font); + const QString textToDraw = s.left(t).toString(); + if (dis && !act && proxy()->styleHint(SH_EtchDisabledText, opt, widget)) { + p->setPen(menuitem->palette.light().color()); + p->drawText(vTextRect.adjusted(1, 1, 1, 1), text_flags, textToDraw); + p->setPen(discol); + } + p->drawText(vTextRect, text_flags, textToDraw); + p->restore(); + } + if (menuitem->menuItemType == QStyleOptionMenuItem::SubMenu) {// draw sub menu arrow + int dim = (h - 2 * QWindowsStylePrivate::windowsItemFrame) / 2; + PrimitiveElement arrow; + arrow = (opt->direction == Qt::RightToLeft) ? PE_IndicatorArrowLeft : PE_IndicatorArrowRight; + xpos = x + w - QWindowsStylePrivate::windowsArrowHMargin - QWindowsStylePrivate::windowsItemFrame - dim; + QRect vSubMenuRect = visualRect(opt->direction, menuitem->rect, QRect(xpos, y + h / 2 - dim / 2, dim, dim)); + QStyleOptionMenuItem newMI = *menuitem; + newMI.rect = vSubMenuRect; + newMI.state = dis ? State_None : State_Enabled; + if (act) + newMI.palette.setColor(QPalette::ButtonText, + newMI.palette.highlightedText().color()); + proxy()->drawPrimitive(arrow, &newMI, p, widget); + } + + } + break; +#endif // QT_CONFIG(menu) +#if 0 && QT_CONFIG(menubar) + case CE_MenuBarItem: + if (const QStyleOptionMenuItem *mbi = qstyleoption_cast(opt)) { + bool active = mbi->state & State_Selected; + bool hasFocus = mbi->state & State_HasFocus; + bool down = mbi->state & State_Sunken; + QStyleOptionMenuItem newMbi = *mbi; + p->fillRect(mbi->rect, mbi->palette.brush(QPalette::Button)); + if (active || hasFocus) { + QBrush b = mbi->palette.brush(QPalette::Button); + if (active && down) + p->setBrushOrigin(p->brushOrigin() + QPoint(1, 1)); + if (active && hasFocus) + qDrawShadeRect(p, mbi->rect.x(), mbi->rect.y(), mbi->rect.width(), + mbi->rect.height(), mbi->palette, active && down, 1, 0, &b); + if (active && down) { + newMbi.rect.translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, mbi, widget), + proxy()->pixelMetric(PM_ButtonShiftVertical, mbi, widget)); + p->setBrushOrigin(p->brushOrigin() - QPoint(1, 1)); + } + } + QCommonStyle::drawControl(ce, &newMbi, p, widget); + } + break; +#endif // QT_CONFIG(menubar) +#if 0 && QT_CONFIG(tabbar) + case CE_TabBarTabShape: + if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { + bool rtlHorTabs = (tab->direction == Qt::RightToLeft + && (tab->shape == QTabBar::RoundedNorth + || tab->shape == QTabBar::RoundedSouth)); + bool selected = tab->state & State_Selected; + bool lastTab = ((!rtlHorTabs && tab->position == QStyleOptionTab::End) + || (rtlHorTabs + && tab->position == QStyleOptionTab::Beginning)); + bool firstTab = ((!rtlHorTabs + && tab->position == QStyleOptionTab::Beginning) + || (rtlHorTabs + && tab->position == QStyleOptionTab::End)); + bool onlyOne = tab->position == QStyleOptionTab::OnlyOneTab; + bool previousSelected = + ((!rtlHorTabs + && tab->selectedPosition == QStyleOptionTab::PreviousIsSelected) + || (rtlHorTabs + && tab->selectedPosition == QStyleOptionTab::NextIsSelected)); + bool nextSelected = + ((!rtlHorTabs + && tab->selectedPosition == QStyleOptionTab::NextIsSelected) + || (rtlHorTabs + && tab->selectedPosition + == QStyleOptionTab::PreviousIsSelected)); + int tabBarAlignment = proxy()->styleHint(SH_TabBar_Alignment, tab, widget); + bool leftAligned = (!rtlHorTabs && tabBarAlignment == Qt::AlignLeft) + || (rtlHorTabs + && tabBarAlignment == Qt::AlignRight); + + bool rightAligned = (!rtlHorTabs && tabBarAlignment == Qt::AlignRight) + || (rtlHorTabs + && tabBarAlignment == Qt::AlignLeft); + + QColor light = tab->palette.light().color(); + QColor dark = tab->palette.dark().color(); + QColor shadow = tab->palette.shadow().color(); + int borderThinkness = proxy()->pixelMetric(PM_TabBarBaseOverlap, tab, widget); + if (selected) + borderThinkness /= 2; + QRect r2(opt->rect); + int x1 = r2.left(); + int x2 = r2.right(); + int y1 = r2.top(); + int y2 = r2.bottom(); + switch (tab->shape) { + default: + QCommonStyle::drawControl(ce, tab, p, widget); + break; + case QTabBar::RoundedNorth: { + if (!selected) { + y1 += 2; + x1 += onlyOne || firstTab ? borderThinkness : 0; + x2 -= onlyOne || lastTab ? borderThinkness : 0; + } + + p->fillRect(QRect(x1 + 1, y1 + 1, (x2 - x1) - 1, (y2 - y1) - 2), tab->palette.window()); + + // Delete border + if (selected) { + p->fillRect(QRect(x1,y2-1,x2-x1,1), tab->palette.window()); + p->fillRect(QRect(x1,y2,x2-x1,1), tab->palette.window()); + } + // Left + if (firstTab || selected || onlyOne || !previousSelected) { + p->setPen(light); + p->drawLine(x1, y1 + 2, x1, y2 - ((onlyOne || firstTab) && selected && leftAligned ? 0 : borderThinkness)); + p->drawPoint(x1 + 1, y1 + 1); + } + // Top + { + int beg = x1 + (previousSelected ? 0 : 2); + int end = x2 - (nextSelected ? 0 : 2); + p->setPen(light); + p->drawLine(beg, y1, end, y1); + } + // Right + if (lastTab || selected || onlyOne || !nextSelected) { + p->setPen(shadow); + p->drawLine(x2, y1 + 2, x2, y2 - ((onlyOne || lastTab) && selected && rightAligned ? 0 : borderThinkness)); + p->drawPoint(x2 - 1, y1 + 1); + p->setPen(dark); + p->drawLine(x2 - 1, y1 + 2, x2 - 1, y2 - ((onlyOne || lastTab) && selected && rightAligned ? 0 : borderThinkness)); + } + break; } + case QTabBar::RoundedSouth: { + if (!selected) { + y2 -= 2; + x1 += firstTab ? borderThinkness : 0; + x2 -= lastTab ? borderThinkness : 0; + } + + p->fillRect(QRect(x1 + 1, y1 + 2, (x2 - x1) - 1, (y2 - y1) - 1), tab->palette.window()); + + // Delete border + if (selected) { + p->fillRect(QRect(x1, y1 + 1, (x2 - 1)-x1, 1), tab->palette.window()); + p->fillRect(QRect(x1, y1, (x2 - 1)-x1, 1), tab->palette.window()); + } + // Left + if (firstTab || selected || onlyOne || !previousSelected) { + p->setPen(light); + p->drawLine(x1, y2 - 2, x1, y1 + ((onlyOne || firstTab) && selected && leftAligned ? 0 : borderThinkness)); + p->drawPoint(x1 + 1, y2 - 1); + } + // Bottom + { + int beg = x1 + (previousSelected ? 0 : 2); + int end = x2 - (nextSelected ? 0 : 2); + p->setPen(shadow); + p->drawLine(beg, y2, end, y2); + p->setPen(dark); + p->drawLine(beg, y2 - 1, end, y2 - 1); + } + // Right + if (lastTab || selected || onlyOne || !nextSelected) { + p->setPen(shadow); + p->drawLine(x2, y2 - 2, x2, y1 + ((onlyOne || lastTab) && selected && rightAligned ? 0 : borderThinkness)); + p->drawPoint(x2 - 1, y2 - 1); + p->setPen(dark); + p->drawLine(x2 - 1, y2 - 2, x2 - 1, y1 + ((onlyOne || lastTab) && selected && rightAligned ? 0 : borderThinkness)); + } + break; } + case QTabBar::RoundedWest: { + if (!selected) { + x1 += 2; + y1 += firstTab ? borderThinkness : 0; + y2 -= lastTab ? borderThinkness : 0; + } + + p->fillRect(QRect(x1 + 1, y1 + 1, (x2 - x1) - 2, (y2 - y1) - 1), tab->palette.window()); + + // Delete border + if (selected) { + p->fillRect(QRect(x2 - 1, y1, 1, y2-y1), tab->palette.window()); + p->fillRect(QRect(x2, y1, 1, y2-y1), tab->palette.window()); + } + // Top + if (firstTab || selected || onlyOne || !previousSelected) { + p->setPen(light); + p->drawLine(x1 + 2, y1, x2 - ((onlyOne || firstTab) && selected && leftAligned ? 0 : borderThinkness), y1); + p->drawPoint(x1 + 1, y1 + 1); + } + // Left + { + int beg = y1 + (previousSelected ? 0 : 2); + int end = y2 - (nextSelected ? 0 : 2); + p->setPen(light); + p->drawLine(x1, beg, x1, end); + } + // Bottom + if (lastTab || selected || onlyOne || !nextSelected) { + p->setPen(shadow); + p->drawLine(x1 + 3, y2, x2 - ((onlyOne || lastTab) && selected && rightAligned ? 0 : borderThinkness), y2); + p->drawPoint(x1 + 2, y2 - 1); + p->setPen(dark); + p->drawLine(x1 + 3, y2 - 1, x2 - ((onlyOne || lastTab) && selected && rightAligned ? 0 : borderThinkness), y2 - 1); + p->drawPoint(x1 + 1, y2 - 1); + p->drawPoint(x1 + 2, y2); + } + break; } + case QTabBar::RoundedEast: { + if (!selected) { + x2 -= 2; + y1 += firstTab ? borderThinkness : 0; + y2 -= lastTab ? borderThinkness : 0; + } + + p->fillRect(QRect(x1 + 2, y1 + 1, (x2 - x1) - 1, (y2 - y1) - 1), tab->palette.window()); + + // Delete border + if (selected) { + p->fillRect(QRect(x1 + 1, y1, 1, (y2 - 1)-y1),tab->palette.window()); + p->fillRect(QRect(x1, y1, 1, (y2-1)-y1), tab->palette.window()); + } + // Top + if (firstTab || selected || onlyOne || !previousSelected) { + p->setPen(light); + p->drawLine(x2 - 2, y1, x1 + ((onlyOne || firstTab) && selected && leftAligned ? 0 : borderThinkness), y1); + p->drawPoint(x2 - 1, y1 + 1); + } + // Right + { + int beg = y1 + (previousSelected ? 0 : 2); + int end = y2 - (nextSelected ? 0 : 2); + p->setPen(shadow); + p->drawLine(x2, beg, x2, end); + p->setPen(dark); + p->drawLine(x2 - 1, beg, x2 - 1, end); + } + // Bottom + if (lastTab || selected || onlyOne || !nextSelected) { + p->setPen(shadow); + p->drawLine(x2 - 2, y2, x1 + ((onlyOne || lastTab) && selected && rightAligned ? 0 : borderThinkness), y2); + p->drawPoint(x2 - 1, y2 - 1); + p->setPen(dark); + p->drawLine(x2 - 2, y2 - 1, x1 + ((onlyOne || lastTab) && selected && rightAligned ? 0 : borderThinkness), y2 - 1); + } + break; } + } + } + break; +#endif // QT_CONFIG(tabbar) + case CE_ToolBoxTabShape: + qDrawShadePanel(p, opt->rect, opt->palette, + opt->state & (State_Sunken | State_On), 1, + &opt->palette.brush(QPalette::Button)); + break; +#if 0 && QT_CONFIG(splitter) + case CE_Splitter: + p->eraseRect(opt->rect); + break; +#endif // QT_CONFIG(splitter) +#if 0 && QT_CONFIG(scrollbar) + case CE_ScrollBarSubLine: + case CE_ScrollBarAddLine: { + if ((opt->state & State_Sunken)) { + p->setPen(opt->palette.dark().color()); + p->setBrush(opt->palette.brush(QPalette::Button)); + p->drawRect(opt->rect.adjusted(0, 0, -1, -1)); + } else { + QStyleOption buttonOpt = *opt; + if (!(buttonOpt.state & State_Sunken)) + buttonOpt.state |= State_Raised; + QPalette pal(opt->palette); + pal.setColor(QPalette::Button, opt->palette.light().color()); + pal.setColor(QPalette::Light, opt->palette.button().color()); + qDrawWinButton(p, opt->rect, pal, opt->state & (State_Sunken | State_On), + &opt->palette.brush(QPalette::Button)); + } + PrimitiveElement arrow; + if (opt->state & State_Horizontal) { + if (ce == CE_ScrollBarAddLine) + arrow = opt->direction == Qt::LeftToRight ? PE_IndicatorArrowRight : PE_IndicatorArrowLeft; + else + arrow = opt->direction == Qt::LeftToRight ? PE_IndicatorArrowLeft : PE_IndicatorArrowRight; + } else { + if (ce == CE_ScrollBarAddLine) + arrow = PE_IndicatorArrowDown; + else + arrow = PE_IndicatorArrowUp; + } + QStyleOption arrowOpt = *opt; + arrowOpt.rect = opt->rect.adjusted(4, 4, -4, -4); + proxy()->drawPrimitive(arrow, &arrowOpt, p, widget); + break; } + case CE_ScrollBarAddPage: + case CE_ScrollBarSubPage: { + QBrush br; + QBrush bg = p->background(); + Qt::BGMode bg_mode = p->backgroundMode(); + p->setPen(Qt::NoPen); + p->setBackgroundMode(Qt::OpaqueMode); + + if (opt->state & State_Sunken) { + br = QBrush(opt->palette.shadow().color(), Qt::Dense4Pattern); + p->setBackground(opt->palette.dark().color()); + p->setBrush(br); + } else { + const QBrush paletteBrush = opt->palette.brush(QPalette::Light); + if (paletteBrush.style() == Qt::TexturePattern) { + if (qHasPixmapTexture(paletteBrush)) + br = QBrush(paletteBrush.texture()); + else + br = QBrush(paletteBrush.textureImage()); + } else + br = QBrush(opt->palette.light().color(), Qt::Dense4Pattern); + p->setBackground(opt->palette.window().color()); + p->setBrush(br); + } + p->drawRect(opt->rect); + p->setBackground(bg); + p->setBackgroundMode(bg_mode); + break; } + case CE_ScrollBarSlider: + if (!(opt->state & State_Enabled)) { + QBrush br; + const QBrush paletteBrush = opt->palette.brush(QPalette::Light); + if (paletteBrush.style() == Qt::TexturePattern) { + if (qHasPixmapTexture(paletteBrush)) + br = QBrush(paletteBrush.texture()); + else + br = QBrush(paletteBrush.textureImage()); + } else + br = QBrush(opt->palette.light().color(), Qt::Dense4Pattern); + p->setPen(Qt::NoPen); + p->setBrush(br); + p->setBackgroundMode(Qt::OpaqueMode); + p->drawRect(opt->rect); + } else { + QStyleOptionButton buttonOpt; + buttonOpt.QStyleOption::operator=(*opt); + buttonOpt.state = State_Enabled | State_Raised; + + QPalette pal(opt->palette); + pal.setColor(QPalette::Button, opt->palette.light().color()); + pal.setColor(QPalette::Light, opt->palette.button().color()); + qDrawWinButton(p, opt->rect, pal, false, &opt->palette.brush(QPalette::Button)); + } + break; +#endif // QT_CONFIG(scrollbar) + case CE_HeaderSection: { + QBrush fill; + if (opt->state & State_On) + fill = QBrush(opt->palette.light().color(), Qt::Dense4Pattern); + else + fill = opt->palette.brush(QPalette::Button); + + if (opt->state & (State_Raised | State_Sunken)) { + qDrawWinButton(p, opt->rect, opt->palette, opt->state & State_Sunken, &fill); + } else { + p->fillRect(opt->rect, fill); + } + break; } +#if 0 && QT_CONFIG(toolbar) + case CE_ToolBar: + if (const QStyleOptionToolBar *toolbar = qstyleoption_cast(opt)) { + // Reserve the beveled appearance only for mainwindow toolbars + if (!(widget && qobject_cast (widget->parentWidget()))) + break; + + QRect rect = opt->rect; + bool paintLeftBorder = true; + bool paintRightBorder = true; + bool paintBottomBorder = true; + + switch (toolbar->toolBarArea){ + case Qt::BottomToolBarArea : + switch (toolbar->positionOfLine){ + case QStyleOptionToolBar::Beginning: + case QStyleOptionToolBar::OnlyOne: + paintBottomBorder = false; + break; + default: + break; + } + Q_FALLTHROUGH(); // It continues in the end of the next case + case Qt::TopToolBarArea : + switch (toolbar->positionWithinLine){ + case QStyleOptionToolBar::Beginning: + paintLeftBorder = false; + break; + case QStyleOptionToolBar::End: + paintRightBorder = false; + break; + case QStyleOptionToolBar::OnlyOne: + paintRightBorder = false; + paintLeftBorder = false; + break; + default: + break; + } + if (opt->direction == Qt::RightToLeft){ //reverse layout changes the order of Beginning/end + bool tmp = paintLeftBorder; + paintRightBorder=paintLeftBorder; + paintLeftBorder=tmp; + } + break; + case Qt::RightToolBarArea : + switch (toolbar->positionOfLine){ + case QStyleOptionToolBar::Beginning: + case QStyleOptionToolBar::OnlyOne: + paintRightBorder = false; + break; + default: + break; + } + break; + case Qt::LeftToolBarArea : + switch (toolbar->positionOfLine){ + case QStyleOptionToolBar::Beginning: + case QStyleOptionToolBar::OnlyOne: + paintLeftBorder = false; + break; + default: + break; + } + break; + default: + break; + } + + + //draw top border + p->setPen(QPen(opt->palette.light().color())); + p->drawLine(rect.topLeft().x(), + rect.topLeft().y(), + rect.topRight().x(), + rect.topRight().y()); + + if (paintLeftBorder){ + p->setPen(QPen(opt->palette.light().color())); + p->drawLine(rect.topLeft().x(), + rect.topLeft().y(), + rect.bottomLeft().x(), + rect.bottomLeft().y()); + } + + if (paintRightBorder){ + p->setPen(QPen(opt->palette.dark().color())); + p->drawLine(rect.topRight().x(), + rect.topRight().y(), + rect.bottomRight().x(), + rect.bottomRight().y()); + } + + if (paintBottomBorder){ + p->setPen(QPen(opt->palette.dark().color())); + p->drawLine(rect.bottomLeft().x(), + rect.bottomLeft().y(), + rect.bottomRight().x(), + rect.bottomRight().y()); + } + } + break; + + +#endif // QT_CONFIG(toolbar) + + case CE_ProgressBarContents: + if (const QStyleOptionProgressBar *pb = qstyleoption_cast(opt)) { + QRect rect = pb->rect; + if (!rect.isValid()) + return; + + const bool vertical = !(pb->state & QStyle::State_Horizontal); + const bool inverted = pb->invertedAppearance; + + QTransform m; + if (vertical) { + rect = QRect(rect.y(), rect.x(), rect.height(), rect.width()); // flip width and height + m.rotate(90); + m.translate(0, -(rect.height() + rect.y()*2)); + } + QPalette pal2 = pb->palette; + // Correct the highlight color if it is the same as the background + if (pal2.highlight() == pal2.window()) + pal2.setColor(QPalette::Highlight, pb->palette.color(QPalette::Active, + QPalette::Highlight)); + bool reverse = ((!vertical && (pb->direction == Qt::RightToLeft)) || vertical); + if (inverted) + reverse = !reverse; + int w = rect.width(); + Q_D(const QWindowsStyle); + if (pb->minimum == 0 && pb->maximum == 0) { + const int unit_width = proxy()->pixelMetric(PM_ProgressBarChunkWidth, pb); + QStyleOptionProgressBar pbBits = *pb; + Q_ASSERT(unit_width >0); + + pbBits.rect = rect; + pbBits.palette = pal2; + + int step = 0; + int chunkCount = w / unit_width + 1; +#if 0 && QT_CONFIG(animation) + if (QProgressStyleAnimation *animation = qobject_cast(d->animation(opt->styleObject))) + step = (animation->animationStep() / 3) % chunkCount; + else + d->startAnimation(new QProgressStyleAnimation(d->animationFps, opt->styleObject)); +#else + Q_UNUSED(d); +#endif + int chunksInRow = 5; + int myY = pbBits.rect.y(); + int myHeight = pbBits.rect.height(); + int chunksToDraw = chunksInRow; + + if (step > chunkCount - 5)chunksToDraw = (chunkCount - step); + p->save(); + p->setClipRect(m.mapRect(QRectF(rect)).toRect()); + + int x0 = reverse ? rect.left() + rect.width() - unit_width*(step) - unit_width : rect.left() + unit_width * step; + int x = 0; + + for (int i = 0; i < chunksToDraw ; ++i) { + pbBits.rect.setRect(x0 + x, myY, unit_width, myHeight); + pbBits.rect = m.mapRect(QRectF(pbBits.rect)).toRect(); + proxy()->drawPrimitive(PE_IndicatorProgressChunk, &pbBits, p); + x += reverse ? -unit_width : unit_width; + } + //Draw wrap-around chunks + if ( step > chunkCount-5){ + x0 = reverse ? rect.left() + rect.width() - unit_width : rect.left() ; + x = 0; + int chunksToDraw = step - (chunkCount - chunksInRow); + for (int i = 0; i < chunksToDraw ; ++i) { + pbBits.rect.setRect(x0 + x, myY, unit_width, myHeight); + pbBits.rect = m.mapRect(QRectF(pbBits.rect)).toRect(); + proxy()->drawPrimitive(PE_IndicatorProgressChunk, &pbBits, p); + x += reverse ? -unit_width : unit_width; + } + } + p->restore(); //restore state + } + else { +#if 0 && QT_CONFIG(animation) + d->stopAnimation(opt->styleObject); +#endif + QCommonStyle::drawControl(ce, opt, p); + } + } + break; + +#if 0 && QT_CONFIG(dockwidget) + case CE_DockWidgetTitle: + + if (const QStyleOptionDockWidget *dwOpt = qstyleoption_cast(opt)) { + Q_D(const QWindowsStyle); + + const bool verticalTitleBar = dwOpt->verticalTitleBar; + + QRect rect = dwOpt->rect; + QRect r = rect; + + if (verticalTitleBar) { + r = r.transposed(); + + p->save(); + p->translate(r.left(), r.top() + r.width()); + p->rotate(-90); + p->translate(-r.left(), -r.top()); + } + + bool floating = false; + bool active = dwOpt->state & State_Active; + QColor inactiveCaptionTextColor = d->inactiveCaptionText; + if (dwOpt->movable) { + QColor left, right; + + //Titlebar gradient + if (opt->state & QStyle::State_Window) { + floating = true; + if (active) { + left = d->activeCaptionColor; + right = d->activeGradientCaptionColor; + } else { + left = d->inactiveCaptionColor; + right = d->inactiveGradientCaptionColor; + } + QBrush fillBrush(left); + if (left != right) { + QPoint p1(r.x(), r.top() + r.height()/2); + QPoint p2(rect.right(), r.top() + r.height()/2); + QLinearGradient lg(p1, p2); + lg.setColorAt(0, left); + lg.setColorAt(1, right); + fillBrush = lg; + } + p->fillRect(r.adjusted(0, 0, 0, -3), fillBrush); + } + } + if (!dwOpt->title.isEmpty()) { + QFont oldFont = p->font(); + if (floating) { + QFont font = oldFont; + font.setBold(true); + p->setFont(font); + } + QPalette palette = dwOpt->palette; + palette.setColor(QPalette::Window, inactiveCaptionTextColor); + QRect titleRect = subElementRect(SE_DockWidgetTitleBarText, opt, widget); + if (verticalTitleBar) { + titleRect = QRect(r.left() + rect.bottom() + - titleRect.bottom(), + r.top() + titleRect.left() - rect.left(), + titleRect.height(), titleRect.width()); + } + proxy()->drawItemText(p, titleRect, + Qt::AlignLeft | Qt::AlignVCenter, palette, + dwOpt->state & State_Enabled, dwOpt->title, + floating ? (active ? QPalette::BrightText : QPalette::Window) : QPalette::WindowText); + p->setFont(oldFont); + } + if (verticalTitleBar) + p->restore(); + } + return; +#endif // QT_CONFIG(dockwidget) +#if 0 && QT_CONFIG(combobox) + case CE_ComboBoxLabel: + if (const QStyleOptionComboBox *cb = qstyleoption_cast(opt)) { + if (cb->state & State_HasFocus) { + p->setPen(cb->palette.highlightedText().color()); + p->setBackground(cb->palette.highlight()); + } else { + p->setPen(cb->palette.text().color()); + p->setBackground(cb->palette.window()); + } + } + QCommonStyle::drawControl(ce, opt, p, widget); + break; +#endif // QT_CONFIG(combobox) + default: + QCommonStyle::drawControl(ce, opt, p); + } +} + +/*! \reimp */ +QRect QWindowsStyle::subElementRect(SubElement sr, const QStyleOption *opt) const +{ + QRect r; + switch (sr) { + case SE_SliderFocusRect: + case SE_ToolBoxTabContents: + r = visualRect(opt->direction, opt->rect, opt->rect); + break; + case SE_DockWidgetTitleBarText: { + r = QCommonStyle::subElementRect(sr, opt); + const QStyleOptionDockWidget *dwOpt + = qstyleoption_cast(opt); + const bool verticalTitleBar = dwOpt && dwOpt->verticalTitleBar; + int m = proxy()->pixelMetric(PM_DockWidgetTitleMargin, opt); + if (verticalTitleBar) { + r.adjust(0, 0, 0, -m); + } else { + if (opt->direction == Qt::LeftToRight) + r.adjust(m, 0, 0, 0); + else + r.adjust(0, 0, -m, 0); + } + break; + } + case SE_ProgressBarContents: + r = QCommonStyle::subElementRect(SE_ProgressBarGroove, opt); + r.adjust(3, 3, -3, -3); + break; + default: + r = QCommonStyle::subElementRect(sr, opt); + } + return r; +} + + +/*! \reimp */ +void QWindowsStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, + QPainter *p) const +{ +#if 0 + switch (cc) { +#if QT_CONFIG(slider) + case CC_Slider: + if (const QStyleOptionSlider *slider = qstyleoption_cast(opt)) { + int thickness = proxy()->pixelMetric(PM_SliderControlThickness, slider); + int len = proxy()->pixelMetric(PM_SliderLength, slider); + int ticks = slider->tickPosition; + QRect groove = proxy()->subControlRect(CC_Slider, slider, SC_SliderGroove); + QRect handle = proxy()->subControlRect(CC_Slider, slider, SC_SliderHandle); + + if ((slider->subControls & SC_SliderGroove) && groove.isValid()) { + int mid = thickness / 2; + + if (ticks & QStyleOptionSlider::TicksAbove) + mid += len / 8; + if (ticks & QStyleOptionSlider::TicksBelow) + mid -= len / 8; + + p->setPen(slider->palette.shadow().color()); + if (slider->orientation == Qt::Horizontal) { + qDrawWinPanel(p, groove.x(), groove.y() + mid - 2, + groove.width(), 4, slider->palette, true); + p->drawLine(groove.x() + 1, groove.y() + mid - 1, + groove.x() + groove.width() - 3, groove.y() + mid - 1); + } else { + qDrawWinPanel(p, groove.x() + mid - 2, groove.y(), + 4, groove.height(), slider->palette, true); + p->drawLine(groove.x() + mid - 1, groove.y() + 1, + groove.x() + mid - 1, groove.y() + groove.height() - 3); + } + } + + if (slider->subControls & SC_SliderTickmarks) { + QStyleOptionSlider tmpSlider = *slider; + tmpSlider.subControls = SC_SliderTickmarks; + QCommonStyle::drawComplexControl(cc, &tmpSlider, p); + } + + if (slider->subControls & SC_SliderHandle) { + // 4444440 + // 4333310 + // 4322210 + // 4322210 + // 4322210 + // 4322210 + // *43210* + // **410** + // ***0*** + const QColor c0 = slider->palette.shadow().color(); + const QColor c1 = slider->palette.dark().color(); + // const QColor c2 = g.button(); + const QColor c3 = slider->palette.midlight().color(); + const QColor c4 = slider->palette.light().color(); + QBrush handleBrush; + + if (slider->state & State_Enabled) { + handleBrush = slider->palette.color(QPalette::Button); + } else { + handleBrush = QBrush(slider->palette.color(QPalette::Button), + Qt::Dense4Pattern); + } + + + int x = handle.x(), y = handle.y(), + wi = handle.width(), he = handle.height(); + + int x1 = x; + int x2 = x+wi-1; + int y1 = y; + int y2 = y+he-1; + + Qt::Orientation orient = slider->orientation; + bool tickAbove = slider->tickPosition == QStyleOptionSlider::TicksAbove; + bool tickBelow = slider->tickPosition == QStyleOptionSlider::TicksBelow; + + if (slider->state & State_HasFocus) { + QStyleOptionFocusRect fropt; + fropt.QStyleOption::operator=(*slider); + fropt.rect = subElementRect(SE_SliderFocusRect, slider); + proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, p); + } + + if ((tickAbove && tickBelow) || (!tickAbove && !tickBelow)) { + Qt::BGMode oldMode = p->backgroundMode(); + p->setBackgroundMode(Qt::OpaqueMode); + qDrawWinButton(p, QRect(x, y, wi, he), slider->palette, false, + &handleBrush); + p->setBackgroundMode(oldMode); + return; + } + + QSliderDirection dir; + + if (orient == Qt::Horizontal) + if (tickAbove) + dir = SlUp; + else + dir = SlDown; + else + if (tickAbove) + dir = SlLeft; + else + dir = SlRight; + + QPolygon a; + + int d = 0; + switch (dir) { + case SlUp: + y1 = y1 + wi/2; + d = (wi + 1) / 2 - 1; + a.setPoints(5, x1,y1, x1,y2, x2,y2, x2,y1, x1+d,y1-d); + break; + case SlDown: + y2 = y2 - wi/2; + d = (wi + 1) / 2 - 1; + a.setPoints(5, x1,y1, x1,y2, x1+d,y2+d, x2,y2, x2,y1); + break; + case SlLeft: + d = (he + 1) / 2 - 1; + x1 = x1 + he/2; + a.setPoints(5, x1,y1, x1-d,y1+d, x1,y2, x2,y2, x2,y1); + break; + case SlRight: + d = (he + 1) / 2 - 1; + x2 = x2 - he/2; + a.setPoints(5, x1,y1, x1,y2, x2,y2, x2+d,y1+d, x2,y1); + break; + } + + QBrush oldBrush = p->brush(); + p->setPen(Qt::NoPen); + p->setBrush(handleBrush); + Qt::BGMode oldMode = p->backgroundMode(); + p->setBackgroundMode(Qt::OpaqueMode); + p->drawRect(x1, y1, x2-x1+1, y2-y1+1); + p->drawPolygon(a); + p->setBrush(oldBrush); + p->setBackgroundMode(oldMode); + + if (dir != SlUp) { + p->setPen(c4); + p->drawLine(x1, y1, x2, y1); + p->setPen(c3); + p->drawLine(x1, y1+1, x2, y1+1); + } + if (dir != SlLeft) { + p->setPen(c3); + p->drawLine(x1+1, y1+1, x1+1, y2); + p->setPen(c4); + p->drawLine(x1, y1, x1, y2); + } + if (dir != SlRight) { + p->setPen(c0); + p->drawLine(x2, y1, x2, y2); + p->setPen(c1); + p->drawLine(x2-1, y1+1, x2-1, y2-1); + } + if (dir != SlDown) { + p->setPen(c0); + p->drawLine(x1, y2, x2, y2); + p->setPen(c1); + p->drawLine(x1+1, y2-1, x2-1, y2-1); + } + + switch (dir) { + case SlUp: + p->setPen(c4); + p->drawLine(x1, y1, x1+d, y1-d); + p->setPen(c0); + d = wi - d - 1; + p->drawLine(x2, y1, x2-d, y1-d); + d--; + p->setPen(c3); + p->drawLine(x1+1, y1, x1+1+d, y1-d); + p->setPen(c1); + p->drawLine(x2-1, y1, x2-1-d, y1-d); + break; + case SlDown: + p->setPen(c4); + p->drawLine(x1, y2, x1+d, y2+d); + p->setPen(c0); + d = wi - d - 1; + p->drawLine(x2, y2, x2-d, y2+d); + d--; + p->setPen(c3); + p->drawLine(x1+1, y2, x1+1+d, y2+d); + p->setPen(c1); + p->drawLine(x2-1, y2, x2-1-d, y2+d); + break; + case SlLeft: + p->setPen(c4); + p->drawLine(x1, y1, x1-d, y1+d); + p->setPen(c0); + d = he - d - 1; + p->drawLine(x1, y2, x1-d, y2-d); + d--; + p->setPen(c3); + p->drawLine(x1, y1+1, x1-d, y1+1+d); + p->setPen(c1); + p->drawLine(x1, y2-1, x1-d, y2-1-d); + break; + case SlRight: + p->setPen(c4); + p->drawLine(x2, y1, x2+d, y1+d); + p->setPen(c0); + d = he - d - 1; + p->drawLine(x2, y2, x2+d, y2-d); + d--; + p->setPen(c3); + p->drawLine(x2, y1+1, x2+d, y1+1+d); + p->setPen(c1); + p->drawLine(x2, y2-1, x2+d, y2-1-d); + break; + } + } + } + break; +#endif // QT_CONFIG(slider) +#if QT_CONFIG(scrollbar) + case CC_ScrollBar: + if (const QStyleOptionSlider *scrollbar = qstyleoption_cast(opt)) { + QStyleOptionSlider newScrollbar = *scrollbar; + if (scrollbar->minimum == scrollbar->maximum) + newScrollbar.state &= ~State_Enabled; //do not draw the slider. + QCommonStyle::drawComplexControl(cc, &newScrollbar, p, widget); + } + break; +#endif // QT_CONFIG(scrollbar) +#if QT_CONFIG(combobox) + case CC_ComboBox: + if (const QStyleOptionComboBox *cmb = qstyleoption_cast(opt)) { + QBrush editBrush = cmb->palette.brush(QPalette::Button); + if ((cmb->subControls & SC_ComboBoxFrame)) { + if (cmb->frame) { + QPalette shadePal = opt->palette; + shadePal.setColor(QPalette::Midlight, shadePal.button().color()); + qDrawWinPanel(p, opt->rect, shadePal, true, &editBrush); + } + else { + p->fillRect(opt->rect, editBrush); + } + } + if (cmb->subControls & SC_ComboBoxArrow) { + State flags = State_None; + + QRect ar = proxy()->subControlRect(CC_ComboBox, cmb, SC_ComboBoxArrow, widget); + bool sunkenArrow = cmb->activeSubControls == SC_ComboBoxArrow + && cmb->state & State_Sunken; + if (sunkenArrow) { + p->setPen(cmb->palette.dark().color()); + p->setBrush(cmb->palette.brush(QPalette::Button)); + p->drawRect(ar.adjusted(0,0,-1,-1)); + } else { + // Make qDrawWinButton use the right colors for drawing the shade of the button + QPalette pal(cmb->palette); + pal.setColor(QPalette::Button, cmb->palette.light().color()); + pal.setColor(QPalette::Light, cmb->palette.button().color()); + qDrawWinButton(p, ar, pal, false, + &cmb->palette.brush(QPalette::Button)); + } + + ar.adjust(2, 2, -2, -2); + if (opt->state & State_Enabled) + flags |= State_Enabled; + if (opt->state & State_HasFocus) + flags |= State_HasFocus; + + if (sunkenArrow) + flags |= State_Sunken; + QStyleOption arrowOpt = *cmb; + arrowOpt.rect = ar.adjusted(1, 1, -1, -1); + arrowOpt.state = flags; + proxy()->drawPrimitive(PE_IndicatorArrowDown, &arrowOpt, p, widget); + } + + if (cmb->subControls & SC_ComboBoxEditField) { + QRect re = proxy()->subControlRect(CC_ComboBox, cmb, SC_ComboBoxEditField, widget); + if (cmb->state & State_HasFocus && !cmb->editable) + p->fillRect(re.x(), re.y(), re.width(), re.height(), + cmb->palette.brush(QPalette::Highlight)); + + if (cmb->state & State_HasFocus) { + p->setPen(cmb->palette.highlightedText().color()); + p->setBackground(cmb->palette.highlight()); + + } else { + p->setPen(cmb->palette.text().color()); + p->setBackground(cmb->palette.window()); + } + + if (cmb->state & State_HasFocus && !cmb->editable) { + QStyleOptionFocusRect focus; + focus.QStyleOption::operator=(*cmb); + focus.rect = subElementRect(SE_ComboBoxFocusRect, cmb, widget); + focus.state |= State_FocusAtBorder; + focus.backgroundColor = cmb->palette.highlight().color(); + proxy()->drawPrimitive(PE_FrameFocusRect, &focus, p, widget); + } + } + } + break; +#endif // QT_CONFIG(combobox) +#if QT_CONFIG(spinbox) + case CC_SpinBox: + if (const QStyleOptionSpinBox *sb = qstyleoption_cast(opt)) { + QStyleOptionSpinBox copy = *sb; + PrimitiveElement pe; + bool enabled = opt->state & State_Enabled; + if (sb->frame && (sb->subControls & SC_SpinBoxFrame)) { + QBrush editBrush = sb->palette.brush(QPalette::Base); + QRect r = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxFrame, widget); + QPalette shadePal = sb->palette; + shadePal.setColor(QPalette::Midlight, shadePal.button().color()); + qDrawWinPanel(p, r, shadePal, true, &editBrush); + } + + QPalette shadePal(opt->palette); + shadePal.setColor(QPalette::Button, opt->palette.light().color()); + shadePal.setColor(QPalette::Light, opt->palette.button().color()); + + if (sb->subControls & SC_SpinBoxUp) { + copy.subControls = SC_SpinBoxUp; + QPalette pal2 = sb->palette; + if (!(sb->stepEnabled & QAbstractSpinBox::StepUpEnabled)) { + pal2.setCurrentColorGroup(QPalette::Disabled); + copy.state &= ~State_Enabled; + } + + copy.palette = pal2; + + if (sb->activeSubControls == SC_SpinBoxUp && (sb->state & State_Sunken)) { + copy.state |= State_On; + copy.state |= State_Sunken; + } else { + copy.state |= State_Raised; + copy.state &= ~State_Sunken; + } + pe = (sb->buttonSymbols == QAbstractSpinBox::PlusMinus ? PE_IndicatorSpinPlus + : PE_IndicatorSpinUp); + + copy.rect = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxUp, widget); + qDrawWinButton(p, copy.rect, shadePal, copy.state & (State_Sunken | State_On), + ©.palette.brush(QPalette::Button)); + copy.rect.adjust(4, 1, -5, -1); + if ((!enabled || !(sb->stepEnabled & QAbstractSpinBox::StepUpEnabled)) + && proxy()->styleHint(SH_EtchDisabledText, opt, widget) ) + { + QStyleOptionSpinBox lightCopy = copy; + lightCopy.rect.adjust(1, 1, 1, 1); + lightCopy.palette.setBrush(QPalette::ButtonText, copy.palette.light()); + proxy()->drawPrimitive(pe, &lightCopy, p, widget); + } + proxy()->drawPrimitive(pe, ©, p, widget); + } + + if (sb->subControls & SC_SpinBoxDown) { + copy.subControls = SC_SpinBoxDown; + copy.state = sb->state; + QPalette pal2 = sb->palette; + if (!(sb->stepEnabled & QAbstractSpinBox::StepDownEnabled)) { + pal2.setCurrentColorGroup(QPalette::Disabled); + copy.state &= ~State_Enabled; + } + copy.palette = pal2; + + if (sb->activeSubControls == SC_SpinBoxDown && (sb->state & State_Sunken)) { + copy.state |= State_On; + copy.state |= State_Sunken; + } else { + copy.state |= State_Raised; + copy.state &= ~State_Sunken; + } + pe = (sb->buttonSymbols == QAbstractSpinBox::PlusMinus ? PE_IndicatorSpinMinus + : PE_IndicatorSpinDown); + + copy.rect = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxDown, widget); + qDrawWinButton(p, copy.rect, shadePal, copy.state & (State_Sunken | State_On), + ©.palette.brush(QPalette::Button)); + copy.rect.adjust(4, 0, -5, -1); + if ((!enabled || !(sb->stepEnabled & QAbstractSpinBox::StepDownEnabled)) + && proxy()->styleHint(SH_EtchDisabledText, opt, widget) ) + { + QStyleOptionSpinBox lightCopy = copy; + lightCopy.rect.adjust(1, 1, 1, 1); + lightCopy.palette.setBrush(QPalette::ButtonText, copy.palette.light()); + proxy()->drawPrimitive(pe, &lightCopy, p, widget); + } + proxy()->drawPrimitive(pe, ©, p, widget); + } + } + break; +#endif // QT_CONFIG(spinbox) + default: + QCommonStyle::drawComplexControl(cc, opt, p); + } +#else // 0 + QCommonStyle::drawComplexControl(cc, opt, p); +#endif +} + +/*! \reimp */ +QSize QWindowsStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, const QSize &csz) const +{ + QSize sz(csz); + switch (ct) { + case CT_PushButton: + if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { + sz = QCommonStyle::sizeFromContents(ct, opt, csz); + int w = sz.width(), + h = sz.height(); + int defwidth = 0; + if (btn->features & QStyleOptionButton::AutoDefaultButton) + defwidth = 2 * proxy()->pixelMetric(PM_ButtonDefaultIndicator, btn); + const qreal dpi = QStyleHelper::dpi(opt); + int minwidth = int(QStyleHelper::dpiScaled(75, dpi)); + int minheight = int(QStyleHelper::dpiScaled(23, dpi)); + +#ifndef QT_QWS_SMALL_PUSHBUTTON + if (w < minwidth + defwidth && !btn->text.isEmpty()) + w = minwidth + defwidth; + if (h < minheight + defwidth) + h = minheight + defwidth; +#endif + sz = QSize(w, h); + } + break; +#if 0 && QT_CONFIG(menu) + case CT_MenuItem: + if (const QStyleOptionMenuItem *mi = qstyleoption_cast(opt)) { + int w = sz.width(); + sz = QCommonStyle::sizeFromContents(ct, opt, csz, widget); + + if (mi->menuItemType == QStyleOptionMenuItem::Separator) { + sz = QSize(10, QWindowsStylePrivate::windowsSepHeight); + } + else if (mi->icon.isNull()) { + sz.setHeight(sz.height() - 2); + w -= 6; + } + + if (mi->menuItemType != QStyleOptionMenuItem::Separator && !mi->icon.isNull()) { + int iconExtent = proxy()->pixelMetric(PM_SmallIconSize, opt, widget); + sz.setHeight(qMax(sz.height(), + mi->icon.actualSize(QSize(iconExtent, iconExtent)).height() + + 2 * QWindowsStylePrivate::windowsItemFrame)); + } + int maxpmw = mi->maxIconWidth; + int tabSpacing = 20; + if (mi->text.contains(QLatin1Char('\t'))) + w += tabSpacing; + else if (mi->menuItemType == QStyleOptionMenuItem::SubMenu) + w += 2 * QWindowsStylePrivate::windowsArrowHMargin; + else if (mi->menuItemType == QStyleOptionMenuItem::DefaultItem) { + // adjust the font and add the difference in size. + // it would be better if the font could be adjusted in the initStyleOption qmenu func!! + QFontMetrics fm(mi->font); + QFont fontBold = mi->font; + fontBold.setBold(true); + QFontMetrics fmBold(fontBold); + w += fmBold.horizontalAdvance(mi->text) - fm.horizontalAdvance(mi->text); + } + + int checkcol = qMax(maxpmw, QWindowsStylePrivate::windowsCheckMarkWidth); // Windows always shows a check column + w += checkcol; + w += int(QWindowsStylePrivate::windowsRightBorder) + 10; + sz.setWidth(w); + } + break; +#endif // QT_CONFIG(menu) +#if 0 && QT_CONFIG(menubar) + case CT_MenuBarItem: + if (!sz.isEmpty()) + sz += QSize(QWindowsStylePrivate::windowsItemHMargin * 4, QWindowsStylePrivate::windowsItemVMargin * 2); + break; +#endif + case CT_ToolButton: + if (qstyleoption_cast(opt)) + return sz += QSize(7, 6); + Q_FALLTHROUGH(); + + default: + sz = QCommonStyle::sizeFromContents(ct, opt, csz); + } + return sz; +} + +/*! + \reimp +*/ +QIcon QWindowsStyle::standardIcon(StandardPixmap standardIcon, const QStyleOption *option) const +{ + return QCommonStyle::standardIcon(standardIcon, option); +} + +} // namespace QQC2 + +QT_END_NAMESPACE + +#include "moc_qquickwindowsstyle_p.cpp" diff --git a/src/quicknativestyle/qstyle/windows/qquickwindowsstyle_p.h b/src/quicknativestyle/qstyle/windows/qquickwindowsstyle_p.h new file mode 100644 index 00000000..92926b71 --- /dev/null +++ b/src/quicknativestyle/qstyle/windows/qquickwindowsstyle_p.h @@ -0,0 +1,111 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWidgets module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKWINDOWSSTYLE_P_H +#define QQUICKWINDOWSSTYLE_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 "qquickcommonstyle.h" + +QT_BEGIN_NAMESPACE + +class QPalette; + +namespace QQC2 { + +class QStyleOptionButton; +class QWindowsStylePrivate; + +class QWindowsStylePrivate; + +class QWindowsStyle : public QCommonStyle +{ + Q_OBJECT +public: + QWindowsStyle(); + ~QWindowsStyle() override; +/* + void polish(QApplication*) override; + void unpolish(QApplication*) override; + + void polish(QWidget*) override; + void unpolish(QWidget*) override; + + void polish(QPalette &) override; +*/ + void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p) const override; + void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p) const override; + void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p) const override; + + QRect subElementRect(SubElement r, const QStyleOption *opt) const override; + QSize sizeFromContents(ContentsType ct, const QStyleOption *opt, const QSize &contentsSize) const override; + + int pixelMetric(PixelMetric pm, const QStyleOption *option = nullptr) const override; + + int styleHint(StyleHint hint, const QStyleOption *opt = nullptr, + QStyleHintReturn *returnData = nullptr) const override; + + QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt) const override; + + QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = nullptr) const override; + +protected: +// bool eventFilter(QObject *o, QEvent *e) override; + QWindowsStyle(QWindowsStylePrivate &dd); + +private: + Q_DISABLE_COPY_MOVE(QWindowsStyle) + Q_DECLARE_PRIVATE(QWindowsStyle) +}; + +} // namespace QQC2 + +QT_END_NAMESPACE + +#endif // QQUICKWINDOWSSTYLE_P_H diff --git a/src/quicknativestyle/qstyle/windows/qquickwindowsstyle_p_p.h b/src/quicknativestyle/qstyle/windows/qquickwindowsstyle_p_p.h new file mode 100644 index 00000000..64b95a40 --- /dev/null +++ b/src/quicknativestyle/qstyle/windows/qquickwindowsstyle_p_p.h @@ -0,0 +1,122 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWidgets module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKWINDOWSSTYLE_P_P_H +#define QQUICKWINDOWSSTYLE_P_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of XX. This header +// file may change from version to version without notice, or even be removed. +// +// We mean it. +// + +#include "qquickwindowsstyle_p.h" +#include "qquickcommonstyle_p.h" +#include "qquickstylehelper_p.h" + +QT_BEGIN_NAMESPACE + +namespace QQC2 { + +class QStyleOptionButton; +class QWindowsStylePrivate; + +#include + +class QTime; + +class QWindowsStylePrivate : public QCommonStylePrivate +{ + Q_DECLARE_PUBLIC(QWindowsStyle) +public: + enum { InvalidMetric = -23576 }; + + QWindowsStylePrivate(); + static int pixelMetricFromSystemDp(QStyle::PixelMetric pm, const QStyleOption *option = nullptr); + static int fixedPixelMetric(QStyle::PixelMetric pm); + static qreal devicePixelRatio(const QStyleOption *option = nullptr) + { + return devicePixelRatio(option ? option->window : nullptr); + } + + static qreal devicePixelRatio(const QWindow *win) + { return win ? win->devicePixelRatio() : QWindowsStylePrivate::appDevicePixelRatio(); } + static qreal nativeMetricScaleFactor(const QStyleOption *option = nullptr); + static qreal nativeMetricScaleFactor(const QWindow *win); + static bool isDarkMode(); + +#if 0 + bool hasSeenAlt(const QWidget *widget) const; + bool altDown() const { return alt_down; } + bool alt_down = false; +#endif + QList seenAlt; + int menuBarTimer = 0; + + QColor inactiveCaptionText; + QColor activeCaptionColor; + QColor activeGradientCaptionColor; + QColor inactiveCaptionColor; + QColor inactiveGradientCaptionColor; + + enum { + windowsItemFrame = 2, // menu item frame width + windowsSepHeight = 9, // separator item height + windowsItemHMargin = 3, // menu item hor text margin + windowsItemVMargin = 2, // menu item ver text margin + windowsArrowHMargin = 6, // arrow horizontal margin + windowsRightBorder = 15, // right border on windows + windowsCheckMarkWidth = 12 // checkmarks width on windows + }; + +private: + static qreal appDevicePixelRatio(); +}; + +} // namespace QQC2 + +QT_END_NAMESPACE + +#endif //QQUICKWINDOWSSTYLE_P_P_H + diff --git a/src/quicknativestyle/qstyle/windows/qquickwindowsvistastyle.cpp b/src/quicknativestyle/qstyle/windows/qquickwindowsvistastyle.cpp new file mode 100644 index 00000000..512f8291 --- /dev/null +++ b/src/quicknativestyle/qstyle/windows/qquickwindowsvistastyle.cpp @@ -0,0 +1,2509 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWidgets module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickwindowsvistastyle_p.h" +#include "qquickwindowsvistastyle_p_p.h" +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +static const int windowsItemFrame = 2; // menu item frame width +static const int windowsItemHMargin = 3; // menu item hor text margin +static const int windowsItemVMargin = 4; // menu item ver text margin +static const int windowsArrowHMargin = 6; // arrow horizontal margin +static const int windowsRightBorder = 15; // right border on windows + +#ifndef TMT_CONTENTMARGINS +# define TMT_CONTENTMARGINS 3602 +#endif +#ifndef TMT_SIZINGMARGINS +# define TMT_SIZINGMARGINS 3601 +#endif +#ifndef LISS_NORMAL +# define LISS_NORMAL 1 +# define LISS_HOT 2 +# define LISS_SELECTED 3 +# define LISS_DISABLED 4 +# define LISS_SELECTEDNOTFOCUS 5 +# define LISS_HOTSELECTED 6 +#endif +#ifndef BP_COMMANDLINK +# define BP_COMMANDLINK 6 +# define BP_COMMANDLINKGLYPH 7 +# define CMDLGS_NORMAL 1 +# define CMDLGS_HOT 2 +# define CMDLGS_PRESSED 3 +# define CMDLGS_DISABLED 4 +#endif + +/* \internal + Checks if we should use Vista style , or if we should + fall back to Windows style. +*/ +bool QWindowsVistaStylePrivate::useVista() +{ + return QWindowsVistaStylePrivate::useXP(); +} + +/* \internal + Checks and returns the style object +*/ +inline QObject *styleObject(const QStyleOption *option) { + return option ? option->styleObject : nullptr; +} + +/* \internal + Checks if we can animate on a style option +*/ +bool canAnimate(const QStyleOption *option) { + return option + && option->styleObject + && !option->styleObject->property("_q_no_animation").toBool(); +} + +static inline QImage createAnimationBuffer(const QStyleOption *option, const QWidget *widget) +{ + const int devicePixelRatio = widget ? widget->devicePixelRatio() : 1; + QImage result(option->rect.size() * devicePixelRatio, QImage::Format_ARGB32_Premultiplied); + result.setDevicePixelRatio(devicePixelRatio); + result.fill(0); + return result; +} + +/* \internal + Used by animations to clone a styleoption and shift its offset +*/ +QStyleOption *clonedAnimationStyleOption(const QStyleOption*option) { + QStyleOption *styleOption = nullptr; + if (const QStyleOptionSlider *slider = qstyleoption_cast(option)) + styleOption = new QStyleOptionSlider(*slider); + else if (const QStyleOptionSpinBox *spinbox = qstyleoption_cast(option)) + styleOption = new QStyleOptionSpinBox(*spinbox); + else if (const QStyleOptionGroupBox *groupBox = qstyleoption_cast(option)) + styleOption = new QStyleOptionGroupBox(*groupBox); + else if (const QStyleOptionComboBox *combo = qstyleoption_cast(option)) + styleOption = new QStyleOptionComboBox(*combo); + else if (const QStyleOptionButton *button = qstyleoption_cast(option)) + styleOption = new QStyleOptionButton(*button); + else + styleOption = new QStyleOption(*option); + styleOption->rect = QRect(QPoint(0,0), option->rect.size()); + return styleOption; +} + +/* \internal + Used by animations to delete cloned styleoption +*/ +void deleteClonedAnimationStyleOption(const QStyleOption *option) +{ + if (const QStyleOptionSlider *slider = qstyleoption_cast(option)) + delete slider; + else if (const QStyleOptionSpinBox *spinbox = qstyleoption_cast(option)) + delete spinbox; + else if (const QStyleOptionGroupBox *groupBox = qstyleoption_cast(option)) + delete groupBox; + else if (const QStyleOptionComboBox *combo = qstyleoption_cast(option)) + delete combo; + else if (const QStyleOptionButton *button = qstyleoption_cast(option)) + delete button; + else + delete option; +} + +/*! + \class QWindowsVistaStyle + \brief The QWindowsVistaStyle class provides a look and feel suitable for applications on Microsoft Windows Vista. + \since 4.3 + \ingroup appearance + \inmodule QtWidgets + \internal + + \warning This style is only available on the Windows Vista platform + because it makes use of Windows Vista's style engine. + + \sa QMacStyle, QWindowsXPStyle, QFusionStyle +*/ + +/*! + Constructs a QWindowsVistaStyle object. +*/ +QWindowsVistaStyle::QWindowsVistaStyle() + : QWindowsXPStyle(*new QWindowsVistaStylePrivate) +{ +} + +/*! + Destructor. +*/ +QWindowsVistaStyle::~QWindowsVistaStyle() = default; + +//convert Qt state flags to uxtheme button states +static int buttonStateId(int flags, int partId) +{ + int stateId = 0; + if (partId == BP_RADIOBUTTON || partId == BP_CHECKBOX) { + if (!(flags & QStyle::State_Enabled)) + stateId = RBS_UNCHECKEDDISABLED; + else if (flags & QStyle::State_Sunken) + stateId = RBS_UNCHECKEDPRESSED; + else if (flags & QStyle::State_MouseOver) + stateId = RBS_UNCHECKEDHOT; + else + stateId = RBS_UNCHECKEDNORMAL; + + if (flags & QStyle::State_On) + stateId += RBS_CHECKEDNORMAL-1; + + } else if (partId == BP_PUSHBUTTON) { + if (!(flags & QStyle::State_Enabled)) + stateId = PBS_DISABLED; + else if (flags & (QStyle::State_Sunken | QStyle::State_On)) + stateId = PBS_PRESSED; + else if (flags & QStyle::State_MouseOver) + stateId = PBS_HOT; + else + stateId = PBS_NORMAL; + } else { + Q_ASSERT(1); + } + return stateId; +} + +bool QWindowsVistaAnimation::isUpdateNeeded() const +{ + return QWindowsVistaStylePrivate::useVista(); +} + +void QWindowsVistaAnimation::paint(QPainter *painter, const QStyleOption *option) +{ + painter->drawImage(option->rect, currentImage()); +} + +static inline bool supportsStateTransition(QStyle::PrimitiveElement element, + const QStyleOption *option, + const QWidget *widget) +{ + bool result = false; + switch (element) { + case QStyle::PE_IndicatorRadioButton: + case QStyle::PE_IndicatorCheckBox: + result = true; + break; + // QTBUG-40634, do not animate when color is set in palette for PE_PanelLineEdit. + case QStyle::PE_FrameLineEdit: + result = !QWindowsXPStylePrivate::isLineEditBaseColorSet(option, widget); + break; + default: + break; + } + return result; +} + +/*! + \internal + + Animations are used for some state transitions on specific widgets. + + Only one running animation can exist for a widget at any specific + time. Animations can be added through + QWindowsVistaStylePrivate::startAnimation(Animation *) and any + existing animation on a widget can be retrieved with + QWindowsVistaStylePrivate::widgetAnimation(Widget *). + + Once an animation has been started, + QWindowsVistaStylePrivate::timerEvent(QTimerEvent *) will + continuously call update() on the widget until it is stopped, + meaning that drawPrimitive will be called many times until the + transition has completed. During this time, the result will be + retrieved by the Animation::paint(...) function and not by the style + itself. + + To determine if a transition should occur, the style needs to know + the previous state of the widget as well as the current one. This is + solved by updating dynamic properties on the widget every time the + function is called. + + Transitions interrupting existing transitions should always be + smooth, so whenever a hover-transition is started on a pulsating + button, it uses the current frame of the pulse-animation as the + starting image for the hover transition. + + */ + +void QWindowsVistaStyle::drawPrimitive(PrimitiveElement element, const QStyleOption *option, + QPainter *painter, const QWidget *widget) const +{ + QWindowsVistaStylePrivate *d = const_cast(d_func()); + + int state = option->state; + if (!QWindowsVistaStylePrivate::useVista()) { + QWindowsStyle::drawPrimitive(element, option, painter, widget); + return; + } + + if ((option->state & State_Enabled) && d->transitionsEnabled() && canAnimate(option)) { + { + QRect oldRect; + QRect newRect; + + if (supportsStateTransition(element, option, widget)) { + // Retrieve and update the dynamic properties tracking + // the previous state of the widget: + QObject *styleObject = option->styleObject; + styleObject->setProperty("_q_no_animation", true); + + int oldState = styleObject->property("_q_stylestate").toInt(); + oldRect = styleObject->property("_q_stylerect").toRect(); + newRect = option->rect; + styleObject->setProperty("_q_stylestate", int(option->state)); + styleObject->setProperty("_q_stylerect", option->rect); + + bool doTransition = oldState && + ((state & State_Sunken) != (oldState & State_Sunken) || + (state & State_On) != (oldState & State_On) || + (state & State_MouseOver) != (oldState & State_MouseOver)); + + if (oldRect != newRect || + (state & State_Enabled) != (oldState & State_Enabled) || + (state & State_Active) != (oldState & State_Active)) + d->stopAnimation(styleObject); + + if (option->state & State_ReadOnly && element == PE_FrameLineEdit) // Do not animate read only line edits + doTransition = false; + + if (doTransition) { + QStyleOption *styleOption = clonedAnimationStyleOption(option); + styleOption->state = QStyle::State(oldState); + + QWindowsVistaAnimation *anim = qobject_cast(d->animation(styleObject)); + QWindowsVistaTransition *t = new QWindowsVistaTransition(styleObject); + + // We create separate images for the initial and final transition states and store them in the + // Transition object. + QImage startImage = createAnimationBuffer(option, widget); + QPainter startPainter(&startImage); + + QImage endImage = createAnimationBuffer(option, widget); + QPainter endPainter(&endImage); + + // If we have a running animation on the widget already, we will use that to paint the initial + // state of the new transition, this ensures a smooth transition from a current animation such as a + // pulsating default button into the intended target state. + if (!anim) + proxy()->drawPrimitive(element, styleOption, &startPainter, widget); + else + anim->paint(&startPainter, styleOption); + + t->setStartImage(startImage); + + // The end state of the transition is simply the result we would have painted + // if the style was not animated. + styleOption->styleObject = nullptr; + styleOption->state = option->state; + proxy()->drawPrimitive(element, styleOption, &endPainter, widget); + + + t->setEndImage(endImage); + + HTHEME theme; + int partId; + DWORD duration; + int fromState = 0; + int toState = 0; + + //translate state flags to UXTHEME states : + if (element == PE_FrameLineEdit) { + theme = OpenThemeData(nullptr, L"Edit"); + partId = EP_EDITBORDER_NOSCROLL; + + if (oldState & State_MouseOver) + fromState = ETS_HOT; + else if (oldState & State_HasFocus) + fromState = ETS_FOCUSED; + else + fromState = ETS_NORMAL; + + if (state & State_MouseOver) + toState = ETS_HOT; + else if (state & State_HasFocus) + toState = ETS_FOCUSED; + else + toState = ETS_NORMAL; + + } else { + theme = OpenThemeData(nullptr, L"Button"); + if (element == PE_IndicatorRadioButton) + partId = BP_RADIOBUTTON; + else if (element == PE_IndicatorCheckBox) + partId = BP_CHECKBOX; + else + partId = BP_PUSHBUTTON; + + fromState = buttonStateId(oldState, partId); + toState = buttonStateId(option->state, partId); + } + + // Retrieve the transition time between the states from the system. + if (theme + && SUCCEEDED(GetThemeTransitionDuration(theme, partId, fromState, toState, + TMT_TRANSITIONDURATIONS, &duration))) { + t->setDuration(int(duration)); + } + t->setStartTime(QTime::currentTime()); + + deleteClonedAnimationStyleOption(styleOption); + d->startAnimation(t); + } + styleObject->setProperty("_q_no_animation", false); + } + + } // End of animation part + } + + QRect rect = option->rect; + + switch (element) { + case PE_IndicatorHeaderArrow: + if (const QStyleOptionHeader *header = qstyleoption_cast(option)) { + int stateId = HSAS_SORTEDDOWN; + if (header->sortIndicator & QStyleOptionHeader::SortDown) + stateId = HSAS_SORTEDUP; //note that the uxtheme sort down indicator is the inverse of ours + XPThemeData theme(widget, painter, + QWindowsXPStylePrivate::HeaderTheme, + HP_HEADERSORTARROW, stateId, option->rect); + d->drawBackground(theme); + } + break; + + case PE_IndicatorBranch: + { + XPThemeData theme(widget, painter, QWindowsXPStylePrivate::VistaTreeViewTheme); + static int decoration_size = 0; + if (!decoration_size && theme.isValid()) { + XPThemeData themeSize = theme; + themeSize.partId = TVP_HOTGLYPH; + themeSize.stateId = GLPS_OPENED; + const QSizeF size = themeSize.size() * QWindowsStylePrivate::nativeMetricScaleFactor(widget); + decoration_size = qRound(qMax(size.width(), size.height())); + } + int mid_h = option->rect.x() + option->rect.width() / 2; + int mid_v = option->rect.y() + option->rect.height() / 2; + int bef_h = mid_h; + int bef_v = mid_v; + int aft_h = mid_h; + int aft_v = mid_v; + if (option->state & State_Children) { + int delta = decoration_size / 2; + theme.rect = QRect(bef_h - delta, bef_v - delta, decoration_size, decoration_size); + theme.partId = option->state & State_MouseOver ? TVP_HOTGLYPH : TVP_GLYPH; + theme.stateId = option->state & QStyle::State_Open ? GLPS_OPENED : GLPS_CLOSED; + if (option->direction == Qt::RightToLeft) + theme.mirrorHorizontally = true; + d->drawBackground(theme); + bef_h -= delta + 2; + bef_v -= delta + 2; + aft_h += delta - 2; + aft_v += delta - 2; + } +#if 0 + QBrush brush(option->palette.dark().color(), Qt::Dense4Pattern); + if (option->state & State_Item) { + if (option->direction == Qt::RightToLeft) + painter->fillRect(option->rect.left(), mid_v, bef_h - option->rect.left(), 1, brush); + else + painter->fillRect(aft_h, mid_v, option->rect.right() - aft_h + 1, 1, brush); + } + if (option->state & State_Sibling && option->rect.bottom() > aft_v) + painter->fillRect(mid_h, aft_v, 1, option->rect.bottom() - aft_v + 1, brush); + if (option->state & (State_Open | State_Children | State_Item | State_Sibling) && (bef_v > option->rect.y())) + painter->fillRect(mid_h, option->rect.y(), 1, bef_v - option->rect.y(), brush); +#endif + } + break; + + case PE_PanelButtonBevel: + case PE_IndicatorCheckBox: + case PE_IndicatorRadioButton: + { + if (QWindowsVistaAnimation *a = + qobject_cast(d->animation(styleObject(option)))){ + a->paint(painter, option); + } else { + QWindowsXPStyle::drawPrimitive(element, option, painter, widget); + } + } + break; + + case PE_FrameMenu: + { + int stateId = option->state & State_Active ? MB_ACTIVE : MB_INACTIVE; + XPThemeData theme(widget, painter, + QWindowsXPStylePrivate::MenuTheme, + MENU_POPUPBORDERS, stateId, option->rect); + d->drawBackground(theme); + } + break; + case PE_Frame: { +#ifndef QT_NO_ACCESSIBILITY + if (QStyleHelper::isInstanceOf(option->styleObject, QAccessible::EditableText) + || QStyleHelper::isInstanceOf(option->styleObject, QAccessible::StaticText) || +#else + if ( +#endif + (widget && widget->inherits("QTextEdit"))) { + painter->save(); + int stateId = ETS_NORMAL; + if (!(state & State_Enabled)) + stateId = ETS_DISABLED; + else if (state & State_ReadOnly) + stateId = ETS_READONLY; + else if (state & State_HasFocus) + stateId = ETS_SELECTED; + XPThemeData theme(widget, painter, + QWindowsXPStylePrivate::EditTheme, + EP_EDITBORDER_HVSCROLL, stateId, option->rect); + // Since EP_EDITBORDER_HVSCROLL does not us borderfill, theme.noContent cannot be used for clipping + int borderSize = 1; + GetThemeInt(theme.handle(), theme.partId, theme.stateId, TMT_BORDERSIZE, &borderSize); + QRegion clipRegion = option->rect; + QRegion content = option->rect.adjusted(borderSize, borderSize, -borderSize, -borderSize); + clipRegion ^= content; + painter->setClipRegion(clipRegion); + d->drawBackground(theme); + painter->restore(); + } else { + QWindowsXPStyle::drawPrimitive(element, option, painter, widget); + } + } + break; + + case PE_PanelLineEdit: + if (const QStyleOptionFrame *panel = qstyleoption_cast(option)) { + bool isEnabled = option->state & State_Enabled; + if (QWindowsXPStylePrivate::isLineEditBaseColorSet(option, widget)) { + painter->fillRect(panel->rect, panel->palette.brush(QPalette::Base)); + } else { + int partId = EP_BACKGROUND; + int stateId = EBS_NORMAL; + if (!isEnabled) + stateId = EBS_DISABLED; + else if (state & State_ReadOnly) + stateId = EBS_READONLY; + else if (state & State_MouseOver) + stateId = EBS_HOT; + + XPThemeData theme(nullptr, painter, QWindowsXPStylePrivate::EditTheme, + partId, stateId, rect); + if (!theme.isValid()) { + QWindowsStyle::drawPrimitive(element, option, painter, widget); + return; + } + int bgType; + GetThemeEnumValue(theme.handle(), partId, stateId, TMT_BGTYPE, &bgType); + if ( bgType == BT_IMAGEFILE ) { + d->drawBackground(theme); + } else { + QBrush fillColor = option->palette.brush(QPalette::Base); + if (!isEnabled) { + PROPERTYORIGIN origin = PO_NOTFOUND; + GetThemePropertyOrigin(theme.handle(), theme.partId, theme.stateId, TMT_FILLCOLOR, &origin); + // Use only if the fill property comes from our part + if ((origin == PO_PART || origin == PO_STATE)) { + COLORREF bgRef; + GetThemeColor(theme.handle(), partId, stateId, TMT_FILLCOLOR, &bgRef); + fillColor = QBrush(qRgb(GetRValue(bgRef), GetGValue(bgRef), GetBValue(bgRef))); + } + } + painter->fillRect(option->rect, fillColor); + } + } + if (panel->lineWidth > 0) + proxy()->drawPrimitive(PE_FrameLineEdit, panel, painter, widget); + return; + } + break; + + case PE_FrameLineEdit: + if (QWindowsVistaAnimation *anim = qobject_cast(d->animation(styleObject(option)))) { + anim->paint(painter, option); + } else { + QPainter *p = painter; + if (QWindowsXPStylePrivate::isItemViewDelegateLineEdit(widget)) { + // we try to check if this lineedit is a delegate on a QAbstractItemView-derived class. + QPen oldPen = p->pen(); + // Inner white border + p->setPen(QPen(option->palette.base().color(), 1)); + p->drawRect(option->rect.adjusted(1, 1, -2, -2)); + // Outer dark border + p->setPen(QPen(option->palette.shadow().color(), 1)); + p->drawRect(option->rect.adjusted(0, 0, -1, -1)); + p->setPen(oldPen); + return; + } + int stateId = ETS_NORMAL; + if (!(state & State_Enabled)) + stateId = ETS_DISABLED; + else if (state & State_ReadOnly) + stateId = ETS_READONLY; + else if (state & State_MouseOver) + stateId = ETS_HOT; + else if (state & State_HasFocus) + stateId = ETS_SELECTED; + XPThemeData theme(widget, painter, + QWindowsXPStylePrivate::EditTheme, + EP_EDITBORDER_NOSCROLL, stateId, option->rect); + theme.noContent = true; + painter->save(); + QRegion clipRegion = option->rect; + clipRegion -= option->rect.adjusted(2, 2, -2, -2); + painter->setClipRegion(clipRegion); + d->drawBackground(theme); + painter->restore(); + } + break; + + case PE_IndicatorToolBarHandle: + { + XPThemeData theme; + QRect rect; + if (option->state & State_Horizontal) { + theme = XPThemeData(widget, painter, + QWindowsXPStylePrivate::RebarTheme, + RP_GRIPPER, ETS_NORMAL, option->rect.adjusted(0, 1, -2, -2)); + rect = option->rect.adjusted(0, 1, 0, -2); + rect.setWidth(4); + } else { + theme = XPThemeData(widget, painter, QWindowsXPStylePrivate::RebarTheme, + RP_GRIPPERVERT, ETS_NORMAL, option->rect.adjusted(0, 1, -2, -2)); + rect = option->rect.adjusted(1, 0, -1, 0); + rect.setHeight(4); + } + theme.rect = rect; + d->drawBackground(theme); + } + break; + + case PE_IndicatorToolBarSeparator: + { + QPen pen = painter->pen(); + int margin = 3; + painter->setPen(option->palette.window().color().darker(114)); + if (option->state & State_Horizontal) { + int x1 = option->rect.center().x(); + painter->drawLine(QPoint(x1, option->rect.top() + margin), QPoint(x1, option->rect.bottom() - margin)); + } else { + int y1 = option->rect.center().y(); + painter->drawLine(QPoint(option->rect.left() + margin, y1), QPoint(option->rect.right() - margin, y1)); + } + painter->setPen(pen); + } + break; + + case PE_PanelTipLabel: { + XPThemeData theme(widget, painter, + QWindowsXPStylePrivate::ToolTipTheme, + TTP_STANDARD, TTSS_NORMAL, option->rect); + d->drawBackground(theme); + break; + } + + case PE_PanelItemViewItem: + { + const QStyleOptionViewItem *vopt; + bool newStyle = true; + QAbstractItemView::SelectionBehavior selectionBehavior = QAbstractItemView::SelectRows; + QAbstractItemView::SelectionMode selectionMode = QAbstractItemView::NoSelection; + if (const QAbstractItemView *view = qobject_cast(widget)) { + newStyle = !qobject_cast(view); + selectionBehavior = view->selectionBehavior(); + selectionMode = view->selectionMode(); +#ifndef QT_NO_ACCESSIBILITY + } else if (!widget) { + newStyle = !QStyleHelper::hasAncestor(option->styleObject, QAccessible::MenuItem) ; +#endif + } + + if (newStyle && (vopt = qstyleoption_cast(option))) { + bool selected = vopt->state & QStyle::State_Selected; + const bool hover = selectionMode != QAbstractItemView::NoSelection && (vopt->state & QStyle::State_MouseOver); + bool active = vopt->state & QStyle::State_Active; + + if (vopt->features & QStyleOptionViewItem::Alternate) + painter->fillRect(vopt->rect, vopt->palette.alternateBase()); + + QPalette::ColorGroup cg = vopt->state & QStyle::State_Enabled + ? QPalette::Normal : QPalette::Disabled; + if (cg == QPalette::Normal && !(vopt->state & QStyle::State_Active)) + cg = QPalette::Inactive; + + QRect itemRect = subElementRect(QStyle::SE_ItemViewItemFocusRect, option, widget).adjusted(-1, 0, 1, 0); + itemRect.setTop(vopt->rect.top()); + itemRect.setBottom(vopt->rect.bottom()); + + QSize sectionSize = itemRect.size(); + if (vopt->showDecorationSelected) + sectionSize = vopt->rect.size(); + + if (selectionBehavior == QAbstractItemView::SelectRows) + sectionSize.setWidth(vopt->rect.width()); + QPixmap pixmap; + + if (vopt->backgroundBrush.style() != Qt::NoBrush) { + const QPointF oldBrushOrigin = painter->brushOrigin(); + painter->setBrushOrigin(vopt->rect.topLeft()); + painter->fillRect(vopt->rect, vopt->backgroundBrush); + painter->setBrushOrigin(oldBrushOrigin); + } + + if (hover || selected) { + if (sectionSize.width() > 0 && sectionSize.height() > 0) { + QString key = QString::fromLatin1("qvdelegate-%1-%2-%3-%4-%5").arg(sectionSize.width()) + .arg(sectionSize.height()).arg(selected).arg(active).arg(hover); + if (!QPixmapCache::find(key, &pixmap)) { + pixmap = QPixmap(sectionSize); + pixmap.fill(Qt::transparent); + + int state; + if (selected && hover) + state = LISS_HOTSELECTED; + else if (selected && !active) + state = LISS_SELECTEDNOTFOCUS; + else if (selected) + state = LISS_SELECTED; + else + state = LISS_HOT; + + QPainter pixmapPainter(&pixmap); + XPThemeData theme(widget, &pixmapPainter, + QWindowsXPStylePrivate::VistaTreeViewTheme, + LVP_LISTITEM, state, QRect(0, 0, sectionSize.width(), sectionSize.height())); + if (theme.isValid()) { + d->drawBackground(theme); + } else { + QWindowsXPStyle::drawPrimitive(PE_PanelItemViewItem, option, painter, widget); + break; + } + QPixmapCache::insert(key, pixmap); + } + } + + if (vopt->showDecorationSelected) { + const int frame = 2; //Assumes a 2 pixel pixmap border + QRect srcRect = QRect(0, 0, sectionSize.width(), sectionSize.height()); + QRect pixmapRect = vopt->rect; + bool reverse = vopt->direction == Qt::RightToLeft; + bool leftSection = vopt->viewItemPosition == QStyleOptionViewItem::Beginning; + bool rightSection = vopt->viewItemPosition == QStyleOptionViewItem::End; + if (vopt->viewItemPosition == QStyleOptionViewItem::OnlyOne + || vopt->viewItemPosition == QStyleOptionViewItem::Invalid) + painter->drawPixmap(pixmapRect.topLeft(), pixmap); + else if (reverse ? rightSection : leftSection){ + painter->drawPixmap(QRect(pixmapRect.topLeft(), + QSize(frame, pixmapRect.height())), pixmap, + QRect(QPoint(0, 0), QSize(frame, pixmapRect.height()))); + painter->drawPixmap(pixmapRect.adjusted(frame, 0, 0, 0), + pixmap, srcRect.adjusted(frame, 0, -frame, 0)); + } else if (reverse ? leftSection : rightSection) { + painter->drawPixmap(QRect(pixmapRect.topRight() - QPoint(frame - 1, 0), + QSize(frame, pixmapRect.height())), pixmap, + QRect(QPoint(pixmapRect.width() - frame, 0), + QSize(frame, pixmapRect.height()))); + painter->drawPixmap(pixmapRect.adjusted(0, 0, -frame, 0), + pixmap, srcRect.adjusted(frame, 0, -frame, 0)); + } else if (vopt->viewItemPosition == QStyleOptionViewItem::Middle) + painter->drawPixmap(pixmapRect, pixmap, + srcRect.adjusted(frame, 0, -frame, 0)); + } else { + if (vopt->text.isEmpty() && vopt->icon.isNull()) + break; + painter->drawPixmap(itemRect.topLeft(), pixmap); + } + } + } else { + QWindowsXPStyle::drawPrimitive(element, option, painter, widget); + } + break; + } + case PE_Widget: + { +#if QT_CONFIG(dialogbuttonbox) + const QDialogButtonBox *buttonBox = nullptr; + + if (qobject_cast (widget)) + buttonBox = widget->findChild(QLatin1String("qt_msgbox_buttonbox")); +#if QT_CONFIG(inputdialog) + else if (qobject_cast (widget)) + buttonBox = widget->findChild(QLatin1String("qt_inputdlg_buttonbox")); +#endif // QT_CONFIG(inputdialog) + + if (buttonBox) { + //draw white panel part + XPThemeData theme(widget, painter, + QWindowsXPStylePrivate::TaskDialogTheme, + TDLG_PRIMARYPANEL, 0, option->rect); + QRect toprect = option->rect; + toprect.setBottom(buttonBox->geometry().top()); + theme.rect = toprect; + d->drawBackground(theme); + + //draw bottom panel part + QRect buttonRect = option->rect; + buttonRect.setTop(buttonBox->geometry().top()); + theme.rect = buttonRect; + theme.partId = TDLG_SECONDARYPANEL; + d->drawBackground(theme); + } +#endif + } + break; + default: + QWindowsXPStyle::drawPrimitive(element, option, painter, widget); + break; + } +} + + +/*! + \internal + + see drawPrimitive for comments on the animation support + */ +void QWindowsVistaStyle::drawControl(ControlElement element, const QStyleOption *option, + QPainter *painter, const QWidget *widget) const +{ + QWindowsVistaStylePrivate *d = const_cast(d_func()); + + if (!QWindowsVistaStylePrivate::useVista()) { + QWindowsStyle::drawControl(element, option, painter, widget); + return; + } + + bool selected = option->state & State_Selected; + bool pressed = option->state & State_Sunken; + bool disabled = !(option->state & State_Enabled); + + int state = option->state; + int themeNumber = -1; + + QRect rect(option->rect); + State flags = option->state; + int partId = 0; + int stateId = 0; + + if (d->transitionsEnabled() && canAnimate(option)) + { + if (element == CE_PushButtonBevel) { + QRect oldRect; + QRect newRect; + + QObject *styleObject = option->styleObject; + + int oldState = styleObject->property("_q_stylestate").toInt(); + oldRect = styleObject->property("_q_stylerect").toRect(); + newRect = option->rect; + styleObject->setProperty("_q_stylestate", int(option->state)); + styleObject->setProperty("_q_stylerect", option->rect); + + bool wasDefault = false; + bool isDefault = false; + if (const QStyleOptionButton *button = qstyleoption_cast(option)) { + wasDefault = styleObject->property("_q_isdefault").toBool(); + isDefault = button->features & QStyleOptionButton::DefaultButton; + styleObject->setProperty("_q_isdefault", isDefault); + } + + bool doTransition = ((state & State_Sunken) != (oldState & State_Sunken) || + (state & State_On) != (oldState & State_On) || + (state & State_MouseOver) != (oldState & State_MouseOver)); + + if (oldRect != newRect || (wasDefault && !isDefault)) { + doTransition = false; + d->stopAnimation(styleObject); + } + + if (doTransition) { + styleObject->setProperty("_q_no_animation", true); + + QWindowsVistaTransition *t = new QWindowsVistaTransition(styleObject); + QWindowsVistaAnimation *anim = qobject_cast(d->animation(styleObject)); + QStyleOption *styleOption = clonedAnimationStyleOption(option); + styleOption->state = QStyle::State(oldState); + + QImage startImage = createAnimationBuffer(option, widget); + QPainter startPainter(&startImage); + + // Use current state of existing animation if already one is running + if (!anim) { + proxy()->drawControl(element, styleOption, &startPainter, widget); + } else { + anim->paint(&startPainter, styleOption); + d->stopAnimation(styleObject); + } + + t->setStartImage(startImage); + QImage endImage = createAnimationBuffer(option, widget); + QPainter endPainter(&endImage); + styleOption->state = option->state; + proxy()->drawControl(element, styleOption, &endPainter, widget); + t->setEndImage(endImage); + + + DWORD duration = 0; + const HTHEME theme = OpenThemeData(nullptr, L"Button"); + + int fromState = buttonStateId(oldState, BP_PUSHBUTTON); + int toState = buttonStateId(option->state, BP_PUSHBUTTON); + if (GetThemeTransitionDuration(theme, BP_PUSHBUTTON, fromState, toState, TMT_TRANSITIONDURATIONS, &duration) == S_OK) + t->setDuration(int(duration)); + else + t->setDuration(0); + t->setStartTime(QTime::currentTime()); + styleObject->setProperty("_q_no_animation", false); + + deleteClonedAnimationStyleOption(styleOption); + d->startAnimation(t); + } + + QWindowsVistaAnimation *anim = qobject_cast(d->animation(styleObject)); + if (anim) { + anim->paint(painter, option); + return; + } + + } + } + switch (element) { + case CE_PushButtonBevel: + if (const QStyleOptionButton *btn = qstyleoption_cast(option)) + { + themeNumber = QWindowsXPStylePrivate::ButtonTheme; + partId = BP_PUSHBUTTON; + if (btn->features & QStyleOptionButton::CommandLinkButton) + partId = BP_COMMANDLINK; + bool justFlat = (btn->features & QStyleOptionButton::Flat) && !(flags & (State_On|State_Sunken)); + if (!(flags & State_Enabled) && !(btn->features & QStyleOptionButton::Flat)) + stateId = PBS_DISABLED; + else if (justFlat) + ; + else if (flags & (State_Sunken | State_On)) + stateId = PBS_PRESSED; + else if (flags & State_MouseOver) + stateId = PBS_HOT; + else if (btn->features & QStyleOptionButton::DefaultButton && (state & State_Active)) + stateId = PBS_DEFAULTED; + else + stateId = PBS_NORMAL; + + if (!justFlat) { + + if (d->transitionsEnabled() && (btn->features & QStyleOptionButton::DefaultButton) && + !(state & (State_Sunken | State_On)) && !(state & State_MouseOver) && + (state & State_Enabled) && (state & State_Active)) + { + QWindowsVistaAnimation *anim = qobject_cast(d->animation(styleObject(option))); + + if (!anim) { + QImage startImage = createAnimationBuffer(option, widget); + QImage alternateImage = createAnimationBuffer(option, widget); + + QWindowsVistaPulse *pulse = new QWindowsVistaPulse(styleObject(option)); + + QPainter startPainter(&startImage); + stateId = PBS_DEFAULTED; + XPThemeData theme(widget, &startPainter, themeNumber, partId, stateId, rect); + d->drawBackground(theme); + + QPainter alternatePainter(&alternateImage); + theme.stateId = PBS_DEFAULTED_ANIMATING; + theme.painter = &alternatePainter; + d->drawBackground(theme); + pulse->setStartImage(startImage); + pulse->setEndImage(alternateImage); + pulse->setStartTime(QTime::currentTime()); + pulse->setDuration(2000); + d->startAnimation(pulse); + anim = pulse; + } + + if (anim) + anim->paint(painter, option); + else { + XPThemeData theme(widget, painter, themeNumber, partId, stateId, rect); + d->drawBackground(theme); + } + } + else { + XPThemeData theme(widget, painter, themeNumber, partId, stateId, rect); + d->drawBackground(theme); + } + } + + if (btn->features & QStyleOptionButton::HasMenu) { + int mbiw = 0, mbih = 0; + XPThemeData theme(widget, nullptr, QWindowsXPStylePrivate::ToolBarTheme, + TP_DROPDOWNBUTTON); + if (theme.isValid()) { + const QSizeF size = theme.size() * QStyleHelper::dpiScaled(1, option); + if (!size.isEmpty()) { + mbiw = qRound(size.width()); + mbih = qRound(size.height()); + } + } + QRect ir = subElementRect(SE_PushButtonContents, option, nullptr); + QStyleOptionButton newBtn = *btn; + newBtn.rect = QStyle::visualRect(option->direction, option->rect, + QRect(ir.right() - mbiw - 2, + option->rect.top() + (option->rect.height()/2) - (mbih/2), + mbiw + 1, mbih + 1)); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &newBtn, painter, widget); + } + return; + } + break; + + case CE_ProgressBarContents: + if (const QStyleOptionProgressBar *bar + = qstyleoption_cast(option)) { + bool isIndeterminate = (bar->minimum == 0 && bar->maximum == 0); + const bool vertical = bar->orientation == Qt::Vertical; + const bool inverted = bar->invertedAppearance; + + if (isIndeterminate || (bar->progress > 0 && (bar->progress < bar->maximum) && d->transitionsEnabled())) { + if (!d->animation(styleObject(option))) + d->startAnimation(new QProgressStyleAnimation(d->animationFps, styleObject(option))); + } else { + d->stopAnimation(styleObject(option)); + } + + XPThemeData theme(widget, painter, + QWindowsXPStylePrivate::ProgressTheme, + vertical ? PP_FILLVERT : PP_FILL); + theme.rect = option->rect; + bool reverse = (bar->direction == Qt::LeftToRight && inverted) || (bar->direction == Qt::RightToLeft && !inverted); + QTime current = QTime::currentTime(); + + if (isIndeterminate) { + if (QProgressStyleAnimation *a = qobject_cast(d->animation(styleObject(option)))) { + int glowSize = 120; + int animationWidth = glowSize * 2 + (vertical ? theme.rect.height() : theme.rect.width()); + int animOffset = a->startTime().msecsTo(current) / 4; + if (animOffset > animationWidth) + a->setStartTime(QTime::currentTime()); + painter->save(); + painter->setClipRect(theme.rect); + QRect animRect; + QSize pixmapSize(14, 14); + if (vertical) { + animRect = QRect(theme.rect.left(), + inverted ? rect.top() - glowSize + animOffset : + rect.bottom() + glowSize - animOffset, + rect.width(), glowSize); + pixmapSize.setHeight(animRect.height()); + } else { + animRect = QRect(rect.left() - glowSize + animOffset, + rect.top(), glowSize, rect.height()); + animRect = QStyle::visualRect(reverse ? Qt::RightToLeft : Qt::LeftToRight, + option->rect, animRect); + pixmapSize.setWidth(animRect.width()); + } + QString name = QString::fromLatin1("qiprogress-%1-%2").arg(pixmapSize.width()).arg(pixmapSize.height()); + QPixmap pixmap; + if (!QPixmapCache::find(name, &pixmap)) { + QImage image(pixmapSize, QImage::Format_ARGB32); + image.fill(Qt::transparent); + QPainter imagePainter(&image); + theme.painter = &imagePainter; + theme.partId = vertical ? PP_FILLVERT : PP_FILL; + theme.rect = QRect(QPoint(0,0), animRect.size()); + QLinearGradient alphaGradient(0, 0, vertical ? 0 : image.width(), + vertical ? image.height() : 0); + alphaGradient.setColorAt(0, QColor(0, 0, 0, 0)); + alphaGradient.setColorAt(0.5, QColor(0, 0, 0, 220)); + alphaGradient.setColorAt(1, QColor(0, 0, 0, 0)); + imagePainter.fillRect(image.rect(), alphaGradient); + imagePainter.setCompositionMode(QPainter::CompositionMode_SourceIn); + d->drawBackground(theme); + imagePainter.end(); + pixmap = QPixmap::fromImage(image); + QPixmapCache::insert(name, pixmap); + } + painter->drawPixmap(animRect, pixmap); + painter->restore(); + } + } + else { + qint64 progress = qMax(bar->progress, bar->minimum); // workaround for bug in QProgressBar + + if (vertical) { + int maxHeight = option->rect.height(); + int minHeight = 0; + double vc6_workaround = ((progress - qint64(bar->minimum)) / qMax(double(1.0), double(qint64(bar->maximum) - qint64(bar->minimum))) * maxHeight); + int height = isIndeterminate ? maxHeight: qMax(int(vc6_workaround), minHeight); + theme.rect.setHeight(height); + if (!inverted) + theme.rect.moveTop(rect.height() - theme.rect.height()); + } else { + int maxWidth = option->rect.width(); + int minWidth = 0; + double vc6_workaround = ((progress - qint64(bar->minimum)) / qMax(double(1.0), double(qint64(bar->maximum) - qint64(bar->minimum))) * maxWidth); + int width = isIndeterminate ? maxWidth : qMax(int(vc6_workaround), minWidth); + theme.rect.setWidth(width); + theme.rect = QStyle::visualRect(reverse ? Qt::RightToLeft : Qt::LeftToRight, + option->rect, theme.rect); + } + d->drawBackground(theme); + + if (QProgressStyleAnimation *a = qobject_cast(d->animation(styleObject(option)))) { + int glowSize = 140; + int animationWidth = glowSize * 2 + (vertical ? theme.rect.height() : theme.rect.width()); + int animOffset = a->startTime().msecsTo(current) / 4; + theme.partId = vertical ? PP_MOVEOVERLAYVERT : PP_MOVEOVERLAY; + if (animOffset > animationWidth) { + if (bar->progress < bar->maximum) + a->setStartTime(QTime::currentTime()); + else + d->stopAnimation(styleObject(option)); //we stop the glow motion only after it has + //moved out of view + } + painter->save(); + painter->setClipRect(theme.rect); + if (vertical) { + theme.rect = QRect(theme.rect.left(), + inverted ? rect.top() - glowSize + animOffset : + rect.bottom() + glowSize - animOffset, + rect.width(), glowSize); + } else { + theme.rect = QRect(rect.left() - glowSize + animOffset,rect.top(), glowSize, rect.height()); + theme.rect = QStyle::visualRect(reverse ? Qt::RightToLeft : Qt::LeftToRight, option->rect, theme.rect); + } + d->drawBackground(theme); + painter->restore(); + } + } + } + break; + + case CE_MenuBarItem: + { + + if (const QStyleOptionMenuItem *mbi = qstyleoption_cast(option)) + { + if (mbi->menuItemType == QStyleOptionMenuItem::DefaultItem) + break; + + QPalette::ColorRole textRole = disabled ? QPalette::Text : QPalette::ButtonText; + QPixmap pix = mbi->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option, widget), QIcon::Normal); + + int alignment = Qt::AlignCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine; + if (!proxy()->styleHint(SH_UnderlineShortcut, mbi, widget)) + alignment |= Qt::TextHideMnemonic; + + if (widget && mbi->palette.color(QPalette::Window) != Qt::transparent) { // Not needed for QtQuick Controls + //The rect adjustment is a workaround for the menu not really filling its background. + XPThemeData theme(widget, painter, + QWindowsXPStylePrivate::MenuTheme, + MENU_BARBACKGROUND, 0, option->rect.adjusted(-1, 0, 2, 1)); + d->drawBackground(theme); + } + + int stateId = MBI_NORMAL; + if (disabled) + stateId = MBI_DISABLED; + else if (pressed) + stateId = MBI_PUSHED; + else if (selected) + stateId = MBI_HOT; + + XPThemeData theme2(widget, painter, + QWindowsXPStylePrivate::MenuTheme, + MENU_BARITEM, stateId, option->rect); + d->drawBackground(theme2); + + if (!pix.isNull()) + drawItemPixmap(painter, mbi->rect, alignment, pix); + else + drawItemText(painter, mbi->rect, alignment, mbi->palette, mbi->state & State_Enabled, mbi->text, textRole); + } + } + break; +#if QT_CONFIG(menu) + case CE_MenuItem: + if (const QStyleOptionMenuItem *menuitem = qstyleoption_cast(option)) { + // windows always has a check column, regardless whether we have an icon or not + const qreal factor = QWindowsXPStylePrivate::nativeMetricScaleFactor(widget); + int checkcol = qRound(qreal(25) * factor); + const int gutterWidth = qRound(qreal(3) * factor); + { + XPThemeData theme(widget, nullptr, QWindowsXPStylePrivate::MenuTheme, + MENU_POPUPCHECKBACKGROUND, MBI_HOT); + XPThemeData themeSize = theme; + themeSize.partId = MENU_POPUPCHECK; + themeSize.stateId = 0; + const QSizeF size = themeSize.size() * QWindowsStylePrivate::nativeMetricScaleFactor(widget); + const QMarginsF margins = themeSize.margins() * QWindowsStylePrivate::nativeMetricScaleFactor(widget); + checkcol = qMax(menuitem->maxIconWidth, qRound(gutterWidth + size.width() + margins.left() + margins.right())); + } + QRect rect = option->rect; + + //draw vertical menu line + if (option->direction == Qt::LeftToRight) + checkcol += rect.x(); + QPoint p1 = QStyle::visualPos(option->direction, menuitem->rect, QPoint(checkcol, rect.top())); + QPoint p2 = QStyle::visualPos(option->direction, menuitem->rect, QPoint(checkcol, rect.bottom())); + QRect gutterRect(p1.x(), p1.y(), gutterWidth, p2.y() - p1.y() + 1); + XPThemeData theme2(widget, painter, QWindowsXPStylePrivate::MenuTheme, + MENU_POPUPGUTTER, stateId, gutterRect); + d->drawBackground(theme2); + + int x, y, w, h; + menuitem->rect.getRect(&x, &y, &w, &h); + int tab = menuitem->tabWidth; + bool dis = !(menuitem->state & State_Enabled); + bool checked = menuitem->checkType != QStyleOptionMenuItem::NotCheckable + ? menuitem->checked : false; + bool act = menuitem->state & State_Selected; + + if (menuitem->menuItemType == QStyleOptionMenuItem::Separator) { + int yoff = y-2 + h / 2; + const int separatorSize = qRound(qreal(6) * QWindowsStylePrivate::nativeMetricScaleFactor(widget)); + QPoint p1 = QPoint(x + checkcol, yoff); + QPoint p2 = QPoint(x + w + separatorSize, yoff); + stateId = MBI_HOT; + QRect subRect(p1.x() + (gutterWidth - menuitem->rect.x()), p1.y(), + p2.x() - p1.x(), separatorSize); + subRect = QStyle::visualRect(option->direction, option->rect, subRect ); + XPThemeData theme2(widget, painter, + QWindowsXPStylePrivate::MenuTheme, + MENU_POPUPSEPARATOR, stateId, subRect); + d->drawBackground(theme2); + return; + } + + QRect vCheckRect = visualRect(option->direction, menuitem->rect, QRect(menuitem->rect.x(), + menuitem->rect.y(), checkcol - (gutterWidth + menuitem->rect.x()), menuitem->rect.height())); + + if (act) { + stateId = dis ? MBI_DISABLED : MBI_HOT; + XPThemeData theme2(widget, painter, + QWindowsXPStylePrivate::MenuTheme, + MENU_POPUPITEM, stateId, option->rect); + d->drawBackground(theme2); + } + + if (checked) { + XPThemeData theme(widget, painter, + QWindowsXPStylePrivate::MenuTheme, + MENU_POPUPCHECKBACKGROUND, + menuitem->icon.isNull() ? MBI_HOT : MBI_PUSHED, vCheckRect); + XPThemeData themeSize = theme; + themeSize.partId = MENU_POPUPCHECK; + themeSize.stateId = 0; + const QSizeF size = themeSize.size() * QWindowsStylePrivate::nativeMetricScaleFactor(widget); + const QMarginsF margins = themeSize.margins() * QWindowsStylePrivate::nativeMetricScaleFactor(widget); + QRect checkRect(0, 0, qRound(size.width() + margins.left() + margins.right()), + qRound(size.height() + margins.bottom() + margins.top())); + checkRect.moveCenter(vCheckRect.center()); + theme.rect = checkRect; + + d->drawBackground(theme); + + if (menuitem->icon.isNull()) { + checkRect = QRect(QPoint(0, 0), size.toSize()); + checkRect.moveCenter(theme.rect.center()); + theme.rect = checkRect; + + theme.partId = MENU_POPUPCHECK; + bool bullet = menuitem->checkType & QStyleOptionMenuItem::Exclusive; + if (dis) + theme.stateId = bullet ? MC_BULLETDISABLED: MC_CHECKMARKDISABLED; + else + theme.stateId = bullet ? MC_BULLETNORMAL: MC_CHECKMARKNORMAL; + d->drawBackground(theme); + } + } + + if (!menuitem->icon.isNull()) { + QIcon::Mode mode = dis ? QIcon::Disabled : QIcon::Normal; + if (act && !dis) + mode = QIcon::Active; + QPixmap pixmap; + if (checked) + pixmap = menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option, widget), mode, QIcon::On); + else + pixmap = menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option, widget), mode); + const int pixw = pixmap.width() / pixmap.devicePixelRatio(); + const int pixh = pixmap.height() / pixmap.devicePixelRatio(); + QRect pmr(0, 0, pixw, pixh); + pmr.moveCenter(vCheckRect.center()); + painter->setPen(menuitem->palette.text().color()); + painter->drawPixmap(pmr.topLeft(), pixmap); + } + + painter->setPen(menuitem->palette.buttonText().color()); + + const QColor textColor = menuitem->palette.text().color(); + if (dis) + painter->setPen(textColor); + + int xm = windowsItemFrame + checkcol + windowsItemHMargin + (gutterWidth - menuitem->rect.x()) - 1; + int xpos = menuitem->rect.x() + xm; + QRect textRect(xpos, y + windowsItemVMargin, w - xm - windowsRightBorder - tab + 1, h - 2 * windowsItemVMargin); + QRect vTextRect = visualRect(option->direction, menuitem->rect, textRect); + QString s = menuitem->text; + if (!s.isEmpty()) { // draw text + painter->save(); + int t = s.indexOf(QLatin1Char('\t')); + int text_flags = Qt::AlignVCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine; + if (!proxy()->styleHint(SH_UnderlineShortcut, menuitem, widget)) + text_flags |= Qt::TextHideMnemonic; + text_flags |= Qt::AlignLeft; + if (t >= 0) { + QRect vShortcutRect = visualRect(option->direction, menuitem->rect, + QRect(textRect.topRight(), QPoint(menuitem->rect.right(), textRect.bottom()))); + painter->drawText(vShortcutRect, text_flags, s.mid(t + 1)); + s = s.left(t); + } + QFont font = menuitem->font; + if (menuitem->menuItemType == QStyleOptionMenuItem::DefaultItem) + font.setBold(true); + painter->setFont(font); + painter->setPen(textColor); + painter->drawText(vTextRect, text_flags, s.left(t)); + painter->restore(); + } + if (menuitem->menuItemType == QStyleOptionMenuItem::SubMenu) {// draw sub menu arrow + int dim = (h - 2 * windowsItemFrame) / 2; + PrimitiveElement arrow; + arrow = (option->direction == Qt::RightToLeft) ? PE_IndicatorArrowLeft : PE_IndicatorArrowRight; + xpos = x + w - windowsArrowHMargin - windowsItemFrame - dim; + QRect vSubMenuRect = visualRect(option->direction, menuitem->rect, QRect(xpos, y + h / 2 - dim / 2, dim, dim)); + QStyleOptionMenuItem newMI = *menuitem; + newMI.rect = vSubMenuRect; + newMI.state = dis ? State_None : State_Enabled; + proxy()->drawPrimitive(arrow, &newMI, painter, widget); + } + } + break; +#endif // QT_CONFIG(menu) + case CE_HeaderSection: + if (const QStyleOptionHeader *header = qstyleoption_cast(option)) { + partId = HP_HEADERITEM; + if (flags & State_Sunken) + stateId = HIS_PRESSED; + else if (flags & State_MouseOver) + stateId = HIS_HOT; + else + stateId = HIS_NORMAL; + + if (header->sortIndicator != QStyleOptionHeader::None) + stateId += 3; + + XPThemeData theme(widget, painter, + QWindowsXPStylePrivate::HeaderTheme, + partId, stateId, option->rect); + d->drawBackground(theme); + } + break; + case CE_MenuBarEmptyArea: + { + stateId = MBI_NORMAL; + if (!(state & State_Enabled)) + stateId = MBI_DISABLED; + XPThemeData theme(widget, painter, + QWindowsXPStylePrivate::MenuTheme, + MENU_BARBACKGROUND, stateId, option->rect); + d->drawBackground(theme); + } + break; + case CE_ToolBar: + if (const QStyleOptionToolBar *toolbar = qstyleoption_cast(option)) { + QPalette pal = option->palette; + pal.setColor(QPalette::Dark, option->palette.window().color().darker(130)); + QStyleOptionToolBar copyOpt = *toolbar; + copyOpt.palette = pal; + QWindowsStyle::drawControl(element, ©Opt, painter, widget); + } + break; +#if QT_CONFIG(dockwidget) + case CE_DockWidgetTitle: + if (const QStyleOptionDockWidget *dwOpt = qstyleoption_cast(option)) { + const QDockWidget *dockWidget = qobject_cast(widget); + QRect rect = option->rect; + if (dockWidget && dockWidget->isFloating()) { + QWindowsXPStyle::drawControl(element, option, painter, widget); + break; //otherwise fall through + } + + const bool verticalTitleBar = dwOpt->verticalTitleBar; + + if (verticalTitleBar) { + rect = rect.transposed(); + + painter->translate(rect.left() - 1, rect.top() + rect.width()); + painter->rotate(-90); + painter->translate(-rect.left() + 1, -rect.top()); + } + + painter->setBrush(option->palette.window().color().darker(110)); + painter->setPen(option->palette.window().color().darker(130)); + painter->drawRect(rect.adjusted(0, 1, -1, -3)); + + int buttonMargin = 4; + int mw = proxy()->pixelMetric(QStyle::PM_DockWidgetTitleMargin, dwOpt, widget); + int fw = proxy()->pixelMetric(PM_DockWidgetFrameWidth, dwOpt, widget); + const QDockWidget *dw = qobject_cast(widget); + bool isFloating = dw && dw->isFloating(); + + QRect r = option->rect.adjusted(0, 2, -1, -3); + QRect titleRect = r; + + if (dwOpt->closable) { + QSize sz = proxy()->standardIcon(QStyle::SP_TitleBarCloseButton, dwOpt, widget).actualSize(QSize(10, 10)); + titleRect.adjust(0, 0, -sz.width() - mw - buttonMargin, 0); + } + + if (dwOpt->floatable) { + QSize sz = proxy()->standardIcon(QStyle::SP_TitleBarMaxButton, dwOpt, widget).actualSize(QSize(10, 10)); + titleRect.adjust(0, 0, -sz.width() - mw - buttonMargin, 0); + } + + if (isFloating) { + titleRect.adjust(0, -fw, 0, 0); + if (widget && widget->windowIcon().cacheKey() != QApplication::windowIcon().cacheKey()) + titleRect.adjust(titleRect.height() + mw, 0, 0, 0); + } else { + titleRect.adjust(mw, 0, 0, 0); + if (!dwOpt->floatable && !dwOpt->closable) + titleRect.adjust(0, 0, -mw, 0); + } + if (!verticalTitleBar) + titleRect = visualRect(dwOpt->direction, r, titleRect); + + if (!dwOpt->title.isEmpty()) { + QString titleText = painter->fontMetrics().elidedText(dwOpt->title, Qt::ElideRight, + verticalTitleBar ? titleRect.height() : titleRect.width()); + const int indent = 4; + drawItemText(painter, rect.adjusted(indent + 1, 1, -indent - 1, -1), + Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic, + dwOpt->palette, + dwOpt->state & State_Enabled, titleText, + QPalette::WindowText); + } + } + break; +#endif // QT_CONFIG(dockwidget) +#if QT_CONFIG(itemviews) + case CE_ItemViewItem: + { + const QStyleOptionViewItem *vopt; + + const QAbstractItemView *view = qobject_cast(widget); + bool newStyle = true; + + if (qobject_cast(widget)) + newStyle = false; + + if (newStyle && view && (vopt = qstyleoption_cast(option))) { + /* + // We cannot currently get the correct selection color for "explorer style" views + COLORREF cref = 0; + XPThemeData theme(d->treeViewHelper(), 0, QLatin1String("LISTVIEW"), 0, 0); + unsigned int res = GetThemeColor(theme.handle(), LVP_LISTITEM, LISS_SELECTED, TMT_TEXTCOLOR, &cref); + QColor textColor(GetRValue(cref), GetGValue(cref), GetBValue(cref)); + */ + QPalette palette = vopt->palette; + palette.setColor(QPalette::All, QPalette::HighlightedText, palette.color(QPalette::Active, QPalette::Text)); + // Note that setting a saturated color here results in ugly XOR colors in the focus rect + palette.setColor(QPalette::All, QPalette::Highlight, palette.base().color().darker(108)); + QStyleOptionViewItem adjustedOption = *vopt; + adjustedOption.palette = palette; + // We hide the focusrect in singleselection as it is not required + if ((view->selectionMode() == QAbstractItemView::SingleSelection) + && !(vopt->state & State_KeyboardFocusChange)) + adjustedOption.state &= ~State_HasFocus; + QWindowsXPStyle::drawControl(element, &adjustedOption, painter, widget); + } else { + QWindowsXPStyle::drawControl(element, option, painter, widget); + } + break; + } +#endif // QT_CONFIG(itemviews) +#if QT_CONFIG(combobox) + case CE_ComboBoxLabel: + QCommonStyle::drawControl(element, option, painter, widget); + break; +#endif // QT_CONFIG(combobox) + default: + QWindowsXPStyle::drawControl(element, option, painter, widget); + break; + } +} + +/*! + \internal + + see drawPrimitive for comments on the animation support + + */ +void QWindowsVistaStyle::drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, + QPainter *painter, const QWidget *widget) const +{ + QWindowsVistaStylePrivate *d = const_cast(d_func()); + if (!QWindowsVistaStylePrivate::useVista()) { + QWindowsStyle::drawComplexControl(control, option, painter, widget); + return; + } + + State state = option->state; + SubControls sub = option->subControls; + QRect r = option->rect; + + int partId = 0; + int stateId = 0; + + State flags = option->state; + if (widget && widget->testAttribute(Qt::WA_UnderMouse) && widget->isActiveWindow()) + flags |= State_MouseOver; + + if (d->transitionsEnabled() && canAnimate(option)) + { + + if (control == CC_ScrollBar || control == CC_SpinBox || control == CC_ComboBox) { + + QObject *styleObject = option->styleObject; // Can be widget or qquickitem + + int oldState = styleObject->property("_q_stylestate").toInt(); + int oldActiveControls = styleObject->property("_q_stylecontrols").toInt(); + + QRect oldRect = styleObject->property("_q_stylerect").toRect(); + styleObject->setProperty("_q_stylestate", int(option->state)); + styleObject->setProperty("_q_stylecontrols", int(option->activeSubControls)); + styleObject->setProperty("_q_stylerect", option->rect); + + bool doTransition = ((state & State_Sunken) != (oldState & State_Sunken) || + (state & State_On) != (oldState & State_On) || + (state & State_MouseOver) != (oldState & State_MouseOver) || + oldActiveControls != int(option->activeSubControls)); + + if (qstyleoption_cast(option)) { + QRect oldSliderPos = styleObject->property("_q_stylesliderpos").toRect(); + QRect currentPos = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget); + styleObject->setProperty("_q_stylesliderpos", currentPos); + if (oldSliderPos != currentPos) { + doTransition = false; + d->stopAnimation(styleObject); + } + } else if (control == CC_SpinBox) { + //spinboxes have a transition when focus changes + if (!doTransition) + doTransition = (state & State_HasFocus) != (oldState & State_HasFocus); + } + + if (oldRect != option->rect) { + doTransition = false; + d->stopAnimation(styleObject); + } + + if (doTransition) { + QImage startImage = createAnimationBuffer(option, widget); + QPainter startPainter(&startImage); + + QImage endImage = createAnimationBuffer(option, widget); + QPainter endPainter(&endImage); + + QWindowsVistaAnimation *anim = qobject_cast(d->animation(styleObject)); + QWindowsVistaTransition *t = new QWindowsVistaTransition(styleObject); + + // Draw the image that ends the animation by using the current styleoption + QStyleOptionComplex *styleOption = qstyleoption_cast(clonedAnimationStyleOption(option)); + + styleObject->setProperty("_q_no_animation", true); + + // Draw transition source + if (!anim) { + styleOption->state = QStyle::State(oldState); + styleOption->activeSubControls = QStyle::SubControl(oldActiveControls); + proxy()->drawComplexControl(control, styleOption, &startPainter, widget); + } else { + anim->paint(&startPainter, option); + } + t->setStartImage(startImage); + + // Draw transition target + styleOption->state = option->state; + styleOption->activeSubControls = option->activeSubControls; + proxy()->drawComplexControl(control, styleOption, &endPainter, widget); + + styleObject->setProperty("_q_no_animation", false); + + t->setEndImage(endImage); + t->setStartTime(QTime::currentTime()); + + if (option->state & State_MouseOver || option->state & State_Sunken) + t->setDuration(150); + else + t->setDuration(500); + + deleteClonedAnimationStyleOption(styleOption); + d->startAnimation(t); + } + if (QWindowsVistaAnimation *anim = qobject_cast(d->animation(styleObject))) { + anim->paint(painter, option); + return; + } + } + } + + switch (control) { + case CC_ComboBox: + if (const QStyleOptionComboBox *cmb = qstyleoption_cast(option)) + { + if (cmb->editable) { + if (sub & SC_ComboBoxEditField) { + partId = EP_EDITBORDER_NOSCROLL; + if (!(flags & State_Enabled)) + stateId = ETS_DISABLED; + else if (flags & State_MouseOver) + stateId = ETS_HOT; + else if (flags & State_HasFocus) + stateId = ETS_FOCUSED; + else + stateId = ETS_NORMAL; + + XPThemeData theme(widget, painter, + QWindowsXPStylePrivate::EditTheme, + partId, stateId, r); + + d->drawBackground(theme); + } + if (sub & SC_ComboBoxArrow) { + QRect subRect = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxArrow, widget); + XPThemeData theme(widget, painter, QWindowsXPStylePrivate::ComboboxTheme); + theme.rect = subRect; + partId = option->direction == Qt::RightToLeft ? CP_DROPDOWNBUTTONLEFT : CP_DROPDOWNBUTTONRIGHT; + + if (!(cmb->state & State_Enabled)) + stateId = CBXS_DISABLED; + else if (cmb->state & State_Sunken || cmb->state & State_On) + stateId = CBXS_PRESSED; + else if (cmb->state & State_MouseOver && option->activeSubControls & SC_ComboBoxArrow) + stateId = CBXS_HOT; + else + stateId = CBXS_NORMAL; + + theme.partId = partId; + theme.stateId = stateId; + d->drawBackground(theme); + } + + } else { + if (sub & SC_ComboBoxFrame) { + XPThemeData theme(widget, painter, QWindowsXPStylePrivate::ComboboxTheme); + theme.rect = option->rect; + theme.partId = CP_READONLY; + if (!(cmb->state & State_Enabled)) + theme.stateId = CBXS_DISABLED; + else if (cmb->state & State_Sunken || cmb->state & State_On) + theme.stateId = CBXS_PRESSED; + else if (cmb->state & State_MouseOver) + theme.stateId = CBXS_HOT; + else + theme.stateId = CBXS_NORMAL; + d->drawBackground(theme); + } + if (sub & SC_ComboBoxArrow) { + XPThemeData theme(widget, painter, QWindowsXPStylePrivate::ComboboxTheme); + theme.rect = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxArrow, widget); + theme.partId = option->direction == Qt::RightToLeft ? CP_DROPDOWNBUTTONLEFT : CP_DROPDOWNBUTTONRIGHT; + if (!(cmb->state & State_Enabled)) + theme.stateId = CBXS_DISABLED; + else + theme.stateId = CBXS_NORMAL; + d->drawBackground(theme); + } + if ((sub & SC_ComboBoxEditField) && (flags & State_HasFocus)) { + QStyleOptionFocusRect fropt; + fropt.QStyleOption::operator=(*cmb); + fropt.rect = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxEditField, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, painter, widget); + } + } + } + break; + case CC_ScrollBar: + if (const QStyleOptionSlider *scrollbar = qstyleoption_cast(option)) + { + XPThemeData theme(widget, painter, QWindowsXPStylePrivate::ScrollBarTheme); + bool maxedOut = (scrollbar->maximum == scrollbar->minimum); + if (maxedOut) + flags &= ~State_Enabled; + + bool isHorz = flags & State_Horizontal; + bool isRTL = option->direction == Qt::RightToLeft; + if (sub & SC_ScrollBarAddLine) { + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarAddLine, widget); + partId = SBP_ARROWBTN; + if (!(flags & State_Enabled)) + stateId = (isHorz ? (isRTL ? ABS_LEFTDISABLED : ABS_RIGHTDISABLED) : ABS_DOWNDISABLED); + else if (scrollbar->activeSubControls & SC_ScrollBarAddLine && (scrollbar->state & State_Sunken)) + stateId = (isHorz ? (isRTL ? ABS_LEFTPRESSED : ABS_RIGHTPRESSED) : ABS_DOWNPRESSED); + else if (scrollbar->activeSubControls & SC_ScrollBarAddLine && (scrollbar->state & State_MouseOver)) + stateId = (isHorz ? (isRTL ? ABS_LEFTHOT : ABS_RIGHTHOT) : ABS_DOWNHOT); + else if (scrollbar->state & State_MouseOver) + stateId = (isHorz ? (isRTL ? ABS_LEFTHOVER : ABS_RIGHTHOVER) : ABS_DOWNHOVER); + else + stateId = (isHorz ? (isRTL ? ABS_LEFTNORMAL : ABS_RIGHTNORMAL) : ABS_DOWNNORMAL); + theme.partId = partId; + theme.stateId = stateId; + d->drawBackground(theme); + } + if (sub & SC_ScrollBarSubLine) { + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSubLine, widget); + partId = SBP_ARROWBTN; + if (!(flags & State_Enabled)) + stateId = (isHorz ? (isRTL ? ABS_RIGHTDISABLED : ABS_LEFTDISABLED) : ABS_UPDISABLED); + else if (scrollbar->activeSubControls & SC_ScrollBarSubLine && (scrollbar->state & State_Sunken)) + stateId = (isHorz ? (isRTL ? ABS_RIGHTPRESSED : ABS_LEFTPRESSED) : ABS_UPPRESSED); + else if (scrollbar->activeSubControls & SC_ScrollBarSubLine && (scrollbar->state & State_MouseOver)) + stateId = (isHorz ? (isRTL ? ABS_RIGHTHOT : ABS_LEFTHOT) : ABS_UPHOT); + else if (scrollbar->state & State_MouseOver) + stateId = (isHorz ? (isRTL ? ABS_RIGHTHOVER : ABS_LEFTHOVER) : ABS_UPHOVER); + else + stateId = (isHorz ? (isRTL ? ABS_RIGHTNORMAL : ABS_LEFTNORMAL) : ABS_UPNORMAL); + theme.partId = partId; + theme.stateId = stateId; + d->drawBackground(theme); + } + if (maxedOut) { + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget); + theme.rect = theme.rect.united(proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSubPage, widget)); + theme.rect = theme.rect.united(proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarAddPage, widget)); + partId = flags & State_Horizontal ? SBP_LOWERTRACKHORZ : SBP_LOWERTRACKVERT; + stateId = SCRBS_DISABLED; + theme.partId = partId; + theme.stateId = stateId; + d->drawBackground(theme); + } else { + if (sub & SC_ScrollBarSubPage) { + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSubPage, widget); + partId = flags & State_Horizontal ? SBP_UPPERTRACKHORZ : SBP_UPPERTRACKVERT; + if (!(flags & State_Enabled)) + stateId = SCRBS_DISABLED; + else if (scrollbar->activeSubControls & SC_ScrollBarSubPage && (scrollbar->state & State_Sunken)) + stateId = SCRBS_PRESSED; + else if (scrollbar->activeSubControls & SC_ScrollBarSubPage && (scrollbar->state & State_MouseOver)) + stateId = SCRBS_HOT; + else + stateId = SCRBS_NORMAL; + theme.partId = partId; + theme.stateId = stateId; + d->drawBackground(theme); + } + if (sub & SC_ScrollBarAddPage) { + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarAddPage, widget); + partId = flags & State_Horizontal ? SBP_LOWERTRACKHORZ : SBP_LOWERTRACKVERT; + if (!(flags & State_Enabled)) + stateId = SCRBS_DISABLED; + else if (scrollbar->activeSubControls & SC_ScrollBarAddPage && (scrollbar->state & State_Sunken)) + stateId = SCRBS_PRESSED; + else if (scrollbar->activeSubControls & SC_ScrollBarAddPage && (scrollbar->state & State_MouseOver)) + stateId = SCRBS_HOT; + else + stateId = SCRBS_NORMAL; + theme.partId = partId; + theme.stateId = stateId; + d->drawBackground(theme); + } + if (sub & SC_ScrollBarSlider) { + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget); + if (!(flags & State_Enabled)) + stateId = SCRBS_DISABLED; + else if (scrollbar->activeSubControls & SC_ScrollBarSlider && (scrollbar->state & State_Sunken)) + stateId = SCRBS_PRESSED; + else if (scrollbar->activeSubControls & SC_ScrollBarSlider && (scrollbar->state & State_MouseOver)) + stateId = SCRBS_HOT; + else if (option->state & State_MouseOver) + stateId = SCRBS_HOVER; + else + stateId = SCRBS_NORMAL; + + // Draw handle + theme.partId = flags & State_Horizontal ? SBP_THUMBBTNHORZ : SBP_THUMBBTNVERT; + theme.stateId = stateId; + d->drawBackground(theme); + + if (QOperatingSystemVersion::current() < QOperatingSystemVersion::Windows8) { + const QRect gripperBounds = QWindowsXPStylePrivate::scrollBarGripperBounds(flags, widget, &theme); + // Draw gripper if there is enough space + if (!gripperBounds.isEmpty() && flags & State_Enabled) { + painter->save(); + XPThemeData grippBackground = theme; + grippBackground.partId = flags & State_Horizontal ? SBP_LOWERTRACKHORZ : SBP_LOWERTRACKVERT; + theme.rect = gripperBounds; + painter->setClipRegion(d->region(theme));// Only change inside the region of the gripper + d->drawBackground(grippBackground);// The gutter is the grippers background + d->drawBackground(theme); // Transparent gripper ontop of background + painter->restore(); + } + } + } + } + } + break; +#if QT_CONFIG(spinbox) + case CC_SpinBox: + if (const QStyleOptionSpinBox *sb = qstyleoption_cast(option)) + { + XPThemeData theme(widget, painter, QWindowsXPStylePrivate::SpinTheme); + if (sb->frame && (sub & SC_SpinBoxFrame)) { + partId = EP_EDITBORDER_NOSCROLL; + if (!(flags & State_Enabled)) + stateId = ETS_DISABLED; + else if (flags & State_MouseOver) + stateId = ETS_HOT; + else if (flags & State_HasFocus) + stateId = ETS_SELECTED; + else + stateId = ETS_NORMAL; + + XPThemeData ftheme(widget, painter, + QWindowsXPStylePrivate::EditTheme, + partId, stateId, r); + // The spinbox in Windows QStyle is drawn with frameless QLineEdit inside it + // That however breaks with QtQuickControls where this results in transparent + // spinbox background, so if there's no "widget" passed (QtQuickControls case), + // let ftheme.noContent be false, which fixes the spinbox rendering in QQC + ftheme.noContent = (widget != nullptr); + d->drawBackground(ftheme); + } + if (sub & SC_SpinBoxUp) { + theme.rect = proxy()->subControlRect(CC_SpinBox, option, SC_SpinBoxUp, widget).adjusted(0, 0, 0, 1); + partId = SPNP_UP; + if (!(sb->stepEnabled & QAbstractSpinBox::StepUpEnabled) || !(flags & State_Enabled)) + stateId = UPS_DISABLED; + else if (sb->activeSubControls == SC_SpinBoxUp && (sb->state & State_Sunken)) + stateId = UPS_PRESSED; + else if (sb->activeSubControls == SC_SpinBoxUp && (sb->state & State_MouseOver)) + stateId = UPS_HOT; + else + stateId = UPS_NORMAL; + theme.partId = partId; + theme.stateId = stateId; + d->drawBackground(theme); + } + if (sub & SC_SpinBoxDown) { + theme.rect = proxy()->subControlRect(CC_SpinBox, option, SC_SpinBoxDown, widget); + partId = SPNP_DOWN; + if (!(sb->stepEnabled & QAbstractSpinBox::StepDownEnabled) || !(flags & State_Enabled)) + stateId = DNS_DISABLED; + else if (sb->activeSubControls == SC_SpinBoxDown && (sb->state & State_Sunken)) + stateId = DNS_PRESSED; + else if (sb->activeSubControls == SC_SpinBoxDown && (sb->state & State_MouseOver)) + stateId = DNS_HOT; + else + stateId = DNS_NORMAL; + theme.partId = partId; + theme.stateId = stateId; + d->drawBackground(theme); + } + } + break; +#endif // QT_CONFIG(spinbox) + default: + QWindowsXPStyle::drawComplexControl(control, option, painter, widget); + break; + } +} + +/*! + \internal + */ +QSize QWindowsVistaStyle::sizeFromContents(ContentsType type, const QStyleOption *option, + const QSize &size, const QWidget *widget) const +{ + if (!QWindowsVistaStylePrivate::useVista()) + return QWindowsStyle::sizeFromContents(type, option, size, widget); + + QSize sz(size); + switch (type) { + case CT_MenuItem: + sz = QWindowsXPStyle::sizeFromContents(type, option, size, widget); + int minimumHeight; + { + XPThemeData theme(widget, nullptr, + QWindowsXPStylePrivate::MenuTheme, + MENU_POPUPCHECKBACKGROUND, MBI_HOT); + XPThemeData themeSize = theme; + themeSize.partId = MENU_POPUPCHECK; + themeSize.stateId = 0; + const QSizeF size = themeSize.size() * QWindowsStylePrivate::nativeMetricScaleFactor(widget); + const QMarginsF margins = themeSize.margins() * QWindowsStylePrivate::nativeMetricScaleFactor(widget); + minimumHeight = qMax(qRound(size.height() + margins.bottom() + margins.top()), sz.height()); + sz.rwidth() += qRound(size.width() + margins.left() + margins.right()); + } + + if (const QStyleOptionMenuItem *menuitem = qstyleoption_cast(option)) { + if (menuitem->menuItemType != QStyleOptionMenuItem::Separator) + sz.setHeight(minimumHeight); + } + return sz; +#if QT_CONFIG(menubar) + case CT_MenuBarItem: + if (!sz.isEmpty()) + sz += QSize(windowsItemHMargin * 5 + 1, 5); + return sz; +#endif + case CT_ItemViewItem: + sz = QWindowsXPStyle::sizeFromContents(type, option, size, widget); + sz.rheight() += 2; + return sz; + case CT_SpinBox: + { + //Spinbox adds frame twice + sz = QWindowsStyle::sizeFromContents(type, option, size, widget); + int border = proxy()->pixelMetric(PM_SpinBoxFrameWidth, option, widget); + sz -= QSize(2*border, 2*border); + } + return sz; + case CT_HeaderSection: + { + // When there is a sort indicator it adds to the width but it is shown + // above the text natively and not on the side + if (QStyleOptionHeader *hdr = qstyleoption_cast(const_cast(option))) { + QStyleOptionHeader::SortIndicator sortInd = hdr->sortIndicator; + hdr->sortIndicator = QStyleOptionHeader::None; + sz = QWindowsXPStyle::sizeFromContents(type, hdr, size, widget); + hdr->sortIndicator = sortInd; + return sz; + } + break; + } + default: + break; + } + return QWindowsXPStyle::sizeFromContents(type, option, size, widget); +} + +/*! + \internal + */ +QRect QWindowsVistaStyle::subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const +{ + if (!QWindowsVistaStylePrivate::useVista()) + return QWindowsStyle::subElementRect(element, option, widget); + + QRect rect = QWindowsXPStyle::subElementRect(element, option, widget); + switch (element) { + + case SE_PushButtonContents: + if (const QStyleOptionButton *btn = qstyleoption_cast(option)) { + MARGINS borderSize; + const HTHEME theme = OpenThemeData(widget ? QWindowsVistaStylePrivate::winId(widget) : nullptr, L"Button"); + if (theme) { + int stateId = PBS_NORMAL; + if (!(option->state & State_Enabled)) + stateId = PBS_DISABLED; + else if (option->state & State_Sunken) + stateId = PBS_PRESSED; + else if (option->state & State_MouseOver) + stateId = PBS_HOT; + else if (btn->features & QStyleOptionButton::DefaultButton) + stateId = PBS_DEFAULTED; + + int border = proxy()->pixelMetric(PM_DefaultFrameWidth, btn, widget); + rect = option->rect.adjusted(border, border, -border, -border); + + if (SUCCEEDED(GetThemeMargins(theme, nullptr, BP_PUSHBUTTON, stateId, TMT_CONTENTMARGINS, nullptr, &borderSize))) { + rect.adjust(borderSize.cxLeftWidth, borderSize.cyTopHeight, + -borderSize.cxRightWidth, -borderSize.cyBottomHeight); + rect = visualRect(option->direction, option->rect, rect); + } + } + } + break; + + case SE_HeaderArrow: + { + QRect r = rect; + int h = option->rect.height(); + int w = option->rect.width(); + int x = option->rect.x(); + int y = option->rect.y(); + int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, option, widget); + + XPThemeData theme(widget, nullptr, + QWindowsXPStylePrivate::HeaderTheme, + HP_HEADERSORTARROW, HSAS_SORTEDDOWN, option->rect); + + int arrowWidth = 13; + int arrowHeight = 5; + if (theme.isValid()) { + const QSizeF size = theme.size() * QWindowsStylePrivate::nativeMetricScaleFactor(widget); + if (!size.isEmpty()) { + arrowWidth = qRound(size.width()); + arrowHeight = qRound(size.height()); + } + } + if (option->state & State_Horizontal) { + r.setRect(x + w/2 - arrowWidth/2, y , arrowWidth, arrowHeight); + } else { + int vert_size = w / 2; + r.setRect(x + 5, y + h - margin * 2 - vert_size, + w - margin * 2 - 5, vert_size); + } + rect = visualRect(option->direction, option->rect, r); + } + break; + + case SE_HeaderLabel: + { + int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, option, widget); + QRect r = option->rect; + r.setRect(option->rect.x() + margin, option->rect.y() + margin, + option->rect.width() - margin * 2, option->rect.height() - margin * 2); + if (const QStyleOptionHeader *header = qstyleoption_cast(option)) { + // Subtract width needed for arrow, if there is one + if (header->sortIndicator != QStyleOptionHeader::None) { + if (!(option->state & State_Horizontal)) //horizontal arrows are positioned on top + r.setHeight(r.height() - (option->rect.width() / 2) - (margin * 2)); + } + } + rect = visualRect(option->direction, option->rect, r); + } + break; + case SE_ProgressBarContents: + rect = QCommonStyle::subElementRect(SE_ProgressBarGroove, option, widget); + break; + case SE_ItemViewItemDecoration: + if (qstyleoption_cast(option)) + rect.adjust(-2, 0, 2, 0); + break; + case SE_ItemViewItemFocusRect: + if (const QStyleOptionViewItem *vopt = qstyleoption_cast(option)) { + QRect textRect = subElementRect(QStyle::SE_ItemViewItemText, option, widget); + QRect displayRect = subElementRect(QStyle::SE_ItemViewItemDecoration, option, widget); + if (!vopt->icon.isNull()) + rect = textRect.united(displayRect); + else + rect = textRect; + rect = rect.adjusted(1, 0, -1, 0); + } + break; + default: + break; + } + return rect; +} + + +/* + This function is used by subControlRect to check if a button + should be drawn for the given subControl given a set of window flags. +*/ +static bool buttonVisible(const QStyle::SubControl sc, const QStyleOptionTitleBar *tb){ + + bool isMinimized = tb->titleBarState & Qt::WindowMinimized; + bool isMaximized = tb->titleBarState & Qt::WindowMaximized; + const auto flags = tb->titleBarFlags; + bool retVal = false; + switch (sc) { + case QStyle::SC_TitleBarContextHelpButton: + if (flags & Qt::WindowContextHelpButtonHint) + retVal = true; + break; + case QStyle::SC_TitleBarMinButton: + if (!isMinimized && (flags & Qt::WindowMinimizeButtonHint)) + retVal = true; + break; + case QStyle::SC_TitleBarNormalButton: + if (isMinimized && (flags & Qt::WindowMinimizeButtonHint)) + retVal = true; + else if (isMaximized && (flags & Qt::WindowMaximizeButtonHint)) + retVal = true; + break; + case QStyle::SC_TitleBarMaxButton: + if (!isMaximized && (flags & Qt::WindowMaximizeButtonHint)) + retVal = true; + break; + case QStyle::SC_TitleBarShadeButton: + if (!isMinimized && flags & Qt::WindowShadeButtonHint) + retVal = true; + break; + case QStyle::SC_TitleBarUnshadeButton: + if (isMinimized && flags & Qt::WindowShadeButtonHint) + retVal = true; + break; + case QStyle::SC_TitleBarCloseButton: + if (flags & Qt::WindowSystemMenuHint) + retVal = true; + break; + case QStyle::SC_TitleBarSysMenu: + if (flags & Qt::WindowSystemMenuHint) + retVal = true; + break; + default : + retVal = true; + } + return retVal; +} + + +/*! \internal */ +int QWindowsVistaStyle::styleHint(StyleHint hint, const QStyleOption *option, const QWidget *widget, + QStyleHintReturn *returnData) const +{ + QWindowsVistaStylePrivate *d = const_cast(d_func()); + int ret = 0; + switch (hint) { + case SH_MessageBox_CenterButtons: + ret = false; + break; + case SH_ToolTip_Mask: + if (option) { + if (QStyleHintReturnMask *mask = qstyleoption_cast(returnData)) { + ret = true; + XPThemeData themeData(widget, nullptr, + QWindowsXPStylePrivate::ToolTipTheme, + TTP_STANDARD, TTSS_NORMAL, option->rect); + mask->region = d->region(themeData); + } + } + break; + case SH_Table_GridLineColor: + if (option) + ret = int(option->palette.color(QPalette::Base).darker(118).rgba()); + else + ret = -1; + break; + case SH_Header_ArrowAlignment: + ret = Qt::AlignTop | Qt::AlignHCenter; + break; + default: + ret = QWindowsXPStyle::styleHint(hint, option, widget, returnData); + break; + } + return ret; +} + + +/*! + \internal + */ +QRect QWindowsVistaStyle::subControlRect(ComplexControl control, const QStyleOptionComplex *option, + SubControl subControl, const QWidget *widget) const +{ + if (!QWindowsVistaStylePrivate::useVista()) + return QWindowsStyle::subControlRect(control, option, subControl, widget); + + QRect rect = QWindowsXPStyle::subControlRect(control, option, subControl, widget); + switch (control) { +#if QT_CONFIG(combobox) + case CC_ComboBox: + if (const QStyleOptionComboBox *cb = qstyleoption_cast(option)) { + const int x = cb->rect.x(), y = cb->rect.y(), wi = cb->rect.width(), he = cb->rect.height(); + const int margin = cb->frame ? 3 : 0; + const int bmarg = cb->frame ? 2 : 0; + const int arrowWidth = qRound(QStyleHelper::dpiScaled(16, option)); + const int arrowButtonWidth = bmarg + arrowWidth; + const int xpos = x + wi - arrowButtonWidth; + + switch (subControl) { + case SC_ComboBoxFrame: + rect = cb->rect; + break; + case SC_ComboBoxArrow: + rect.setRect(xpos, y , arrowButtonWidth, he); + break; + case SC_ComboBoxEditField: + rect.setRect(x + margin, y + margin, wi - 2 * margin - arrowWidth, he - 2 * margin); + break; + case SC_ComboBoxListBoxPopup: + rect = cb->rect; + break; + default: + break; + } + rect = visualRect(cb->direction, cb->rect, rect); + return rect; + } + break; +#endif // QT_CONFIG(combobox) + case CC_TitleBar: + if (const QStyleOptionTitleBar *tb = qstyleoption_cast(option)) { + if (!buttonVisible(subControl, tb)) + return rect; + const qreal factor = QWindowsStylePrivate::nativeMetricScaleFactor(widget); + const bool isToolTitle = false; + const int height = tb->rect.height(); + const int width = tb->rect.width(); + const int buttonWidth = + qRound(qreal(GetSystemMetrics(SM_CXSIZE)) * factor - QStyleHelper::dpiScaled(4, option)); + + const int frameWidth = proxy()->pixelMetric(PM_MdiSubWindowFrameWidth, option, widget); + const bool sysmenuHint = (tb->titleBarFlags & Qt::WindowSystemMenuHint) != 0; + const bool minimizeHint = (tb->titleBarFlags & Qt::WindowMinimizeButtonHint) != 0; + const bool maximizeHint = (tb->titleBarFlags & Qt::WindowMaximizeButtonHint) != 0; + const bool contextHint = (tb->titleBarFlags & Qt::WindowContextHelpButtonHint) != 0; + const bool shadeHint = (tb->titleBarFlags & Qt::WindowShadeButtonHint) != 0; + + switch (subControl) { + case SC_TitleBarLabel: + rect = QRect(frameWidth, 0, width - (buttonWidth + frameWidth + 10), height); + if (isToolTitle) { + if (sysmenuHint) { + rect.adjust(0, 0, int(-buttonWidth - 3 * factor), 0); + } + if (minimizeHint || maximizeHint) + rect.adjust(0, 0, int(-buttonWidth - 2 * factor), 0); + } else { + if (sysmenuHint) { + const int leftOffset = int(height - 8 * factor); + rect.adjust(leftOffset, 0, 0, int(4 * factor)); + } + if (minimizeHint) + rect.adjust(0, 0, int(-buttonWidth - 2 * factor), 0); + if (maximizeHint) + rect.adjust(0, 0, int(-buttonWidth - 2 * factor), 0); + if (contextHint) + rect.adjust(0, 0, int(-buttonWidth - 2 * factor), 0); + if (shadeHint) + rect.adjust(0, 0, int(-buttonWidth - 2 * factor), 0); + } + rect.translate(0, int(2 * factor)); + rect = visualRect(option->direction, option->rect, rect); + break; + case SC_TitleBarSysMenu: + { + const int controlTop = int(6 * factor); + const int controlHeight = int(height - controlTop - 3 * factor); + int iconExtent = proxy()->pixelMetric(PM_SmallIconSize, option); + QSize iconSize = tb->icon.actualSize(QSize(iconExtent, iconExtent)); + if (tb->icon.isNull()) + iconSize = QSize(controlHeight, controlHeight); + int hPad = (controlHeight - iconSize.height())/2; + int vPad = (controlHeight - iconSize.width())/2; + rect = QRect(frameWidth + hPad, controlTop + vPad, iconSize.width(), iconSize.height()); + rect.translate(0, int(3 * factor)); + rect = visualRect(option->direction, option->rect, rect); + } + break; + default: + break; + } + } + break; + default: + break; + } + return rect; +} + +/*! + \internal + */ +QStyle::SubControl QWindowsVistaStyle::hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option, + const QPoint &pos, const QWidget *widget) const +{ + if (!QWindowsVistaStylePrivate::useVista()) { + return QWindowsStyle::hitTestComplexControl(control, option, pos, widget); + } + return QWindowsXPStyle::hitTestComplexControl(control, option, pos, widget); +} + +int QWindowsVistaStylePrivate::fixedPixelMetric(QStyle::PixelMetric pm) +{ + switch (pm) { + case QStyle::PM_DockWidgetTitleBarButtonMargin: + return 5; + case QStyle::PM_ScrollBarSliderMin: + return 18; + case QStyle::PM_MenuHMargin: + case QStyle::PM_MenuVMargin: + return 0; + case QStyle::PM_MenuPanelWidth: + return 3; + default: + break; + } + return QWindowsVistaStylePrivate::InvalidMetric; +} + +/*! + \internal + */ +int QWindowsVistaStyle::pixelMetric(PixelMetric metric, const QStyleOption *option, const QWidget *widget) const +{ + if (!QWindowsVistaStylePrivate::useVista()) + return QWindowsStyle::pixelMetric(metric, option, widget); + + int ret = QWindowsVistaStylePrivate::fixedPixelMetric(metric); + if (ret != QWindowsStylePrivate::InvalidMetric) + return int(QStyleHelper::dpiScaled(ret, option)); + + return QWindowsXPStyle::pixelMetric(metric, option, widget); +} + +/*! + \internal + */ +QPalette QWindowsVistaStyle::standardPalette() const +{ + return QWindowsXPStyle::standardPalette(); +} + +/*! + \internal + */ +void QWindowsVistaStyle::polish(QApplication *app) +{ + QWindowsXPStyle::polish(app); +} + +/*! + \internal + */ +void QWindowsVistaStyle::polish(QWidget *widget) +{ + QWindowsXPStyle::polish(widget); +#if QT_CONFIG(lineedit) + if (qobject_cast(widget)) + widget->setAttribute(Qt::WA_Hover); + else +#endif // QT_CONFIG(lineedit) + if (qobject_cast(widget)) + widget->setAttribute(Qt::WA_Hover); +#if QT_CONFIG(commandlinkbutton) + else if (qobject_cast(widget)) { + QFont buttonFont = widget->font(); + buttonFont.setFamilies(QStringList{QLatin1String("Segoe UI")}); + widget->setFont(buttonFont); + } +#endif // QT_CONFIG(commandlinkbutton) + else if (widget->inherits("QTipLabel")){ + //note that since tooltips are not reused + //we do not have to care about unpolishing + widget->setContentsMargins(3, 0, 4, 0); + COLORREF bgRef; + HTHEME theme = OpenThemeData(widget ? QWindowsVistaStylePrivate::winId(widget) : nullptr, L"TOOLTIP"); + if (theme && SUCCEEDED(GetThemeColor(theme, TTP_STANDARD, TTSS_NORMAL, TMT_TEXTCOLOR, &bgRef))) { + QColor textColor = QColor::fromRgb(bgRef); + QPalette pal; + pal.setColor(QPalette::All, QPalette::ToolTipText, textColor); + widget->setPalette(pal); + } + } else if (qobject_cast (widget)) { + widget->setAttribute(Qt::WA_StyledBackground); +#if QT_CONFIG(dialogbuttonbox) + QDialogButtonBox *buttonBox = widget->findChild(QLatin1String("qt_msgbox_buttonbox")); + if (buttonBox) + buttonBox->setContentsMargins(0, 9, 0, 0); +#endif + } +#if QT_CONFIG(inputdialog) + else if (qobject_cast (widget)) { + widget->setAttribute(Qt::WA_StyledBackground); +#if QT_CONFIG(dialogbuttonbox) + QDialogButtonBox *buttonBox = widget->findChild(QLatin1String("qt_inputdlg_buttonbox")); + if (buttonBox) + buttonBox->setContentsMargins(0, 9, 0, 0); +#endif + } +#endif // QT_CONFIG(inputdialog) + else if (QTreeView *tree = qobject_cast (widget)) { + tree->viewport()->setAttribute(Qt::WA_Hover); + } + else if (QListView *list = qobject_cast (widget)) { + list->viewport()->setAttribute(Qt::WA_Hover); + } +} + +/*! + \internal + */ +void QWindowsVistaStyle::unpolish(QWidget *widget) +{ + QWindowsXPStyle::unpolish(widget); + + QWindowsVistaStylePrivate *d = d_func(); + + d->stopAnimation(widget); + +#if QT_CONFIG(lineedit) + if (qobject_cast(widget)) + widget->setAttribute(Qt::WA_Hover, false); + else +#endif // QT_CONFIG(lineedit) + if (qobject_cast(widget)) + widget->setAttribute(Qt::WA_Hover, false); + else if (qobject_cast (widget)) { + widget->setAttribute(Qt::WA_StyledBackground, false); +#if QT_CONFIG(dialogbuttonbox) + QDialogButtonBox *buttonBox = widget->findChild(QLatin1String("qt_msgbox_buttonbox")); + if (buttonBox) + buttonBox->setContentsMargins(0, 0, 0, 0); +#endif + } +#if QT_CONFIG(inputdialog) + else if (qobject_cast (widget)) { + widget->setAttribute(Qt::WA_StyledBackground, false); +#if QT_CONFIG(dialogbuttonbox) + QDialogButtonBox *buttonBox = widget->findChild(QLatin1String("qt_inputdlg_buttonbox")); + if (buttonBox) + buttonBox->setContentsMargins(0, 0, 0, 0); +#endif + } +#endif // QT_CONFIG(inputdialog) + else if (QTreeView *tree = qobject_cast (widget)) { + tree->viewport()->setAttribute(Qt::WA_Hover, false); + } +#if QT_CONFIG(commandlinkbutton) + else if (qobject_cast(widget)) { + QFont font = QApplication::font("QCommandLinkButton"); + QFont widgetFont = widget->font(); + widgetFont.setFamilies(font.families()); //Only family set by polish + widget->setFont(widgetFont); + } +#endif // QT_CONFIG(commandlinkbutton) +} + + +/*! + \internal + */ +void QWindowsVistaStyle::unpolish(QApplication *app) +{ + QWindowsXPStyle::unpolish(app); +} + +/*! + \internal + */ +void QWindowsVistaStyle::polish(QPalette &pal) +{ + QWindowsStyle::polish(pal); + pal.setBrush(QPalette::AlternateBase, pal.base().color().darker(104)); +} + +/*! + \internal + */ +QPixmap QWindowsVistaStyle::standardPixmap(StandardPixmap standardPixmap, const QStyleOption *option, + const QWidget *widget) const +{ + if (!QWindowsVistaStylePrivate::useVista()) { + return QWindowsStyle::standardPixmap(standardPixmap, option, widget); + } + return QWindowsXPStyle::standardPixmap(standardPixmap, option, widget); +} + +QWindowsVistaStylePrivate::QWindowsVistaStylePrivate() : + QWindowsXPStylePrivate() +{ +} + +bool QWindowsVistaStylePrivate::transitionsEnabled() const +{ + BOOL animEnabled = false; + if (SystemParametersInfo(SPI_GETCLIENTAREAANIMATION, 0, &animEnabled, 0)) + { + if (animEnabled) + return true; + } + return false; +} + +/*! +\reimp +*/ +QIcon QWindowsVistaStyle::standardIcon(StandardPixmap standardIcon, + const QStyleOption *option, + const QWidget *widget) const +{ + if (!QWindowsVistaStylePrivate::useVista()) { + return QWindowsStyle::standardIcon(standardIcon, option, widget); + } + + QWindowsVistaStylePrivate *d = const_cast(d_func()); + switch (standardIcon) { + case SP_CommandLink: + { + XPThemeData theme(nullptr, nullptr, + QWindowsXPStylePrivate::ButtonTheme, + BP_COMMANDLINKGLYPH, CMDLGS_NORMAL); + if (theme.isValid()) { + const QSize size = (theme.size() * QWindowsStylePrivate::nativeMetricScaleFactor(widget)).toSize(); + QIcon linkGlyph; + QPixmap pm(size); + pm.fill(Qt::transparent); + QPainter p(&pm); + theme.painter = &p; + theme.rect = QRect(QPoint(0, 0), size); + d->drawBackground(theme); + linkGlyph.addPixmap(pm, QIcon::Normal, QIcon::Off); // Normal + pm.fill(Qt::transparent); + + theme.stateId = CMDLGS_PRESSED; + d->drawBackground(theme); + linkGlyph.addPixmap(pm, QIcon::Normal, QIcon::On); // Pressed + pm.fill(Qt::transparent); + + theme.stateId = CMDLGS_HOT; + d->drawBackground(theme); + linkGlyph.addPixmap(pm, QIcon::Active, QIcon::Off); // Hover + pm.fill(Qt::transparent); + + theme.stateId = CMDLGS_DISABLED; + d->drawBackground(theme); + linkGlyph.addPixmap(pm, QIcon::Disabled, QIcon::Off); // Disabled + return linkGlyph; + } + } + break; + default: + break; + } + return QWindowsXPStyle::standardIcon(standardIcon, option, widget); +} + +QT_END_NAMESPACE diff --git a/src/quicknativestyle/qstyle/windows/qquickwindowsvistastyle_p.h b/src/quicknativestyle/qstyle/windows/qquickwindowsvistastyle_p.h new file mode 100644 index 00000000..07cd2b8a --- /dev/null +++ b/src/quicknativestyle/qstyle/windows/qquickwindowsvistastyle_p.h @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWidgets module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSVISTASTYLE_P_H +#define QWINDOWSVISTASTYLE_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 +#include "qquickwindowsxpstyle_p.h" + +QT_BEGIN_NAMESPACE + +class QWindowsVistaStylePrivate; +class QWindowsVistaStyle : public QWindowsXPStyle +{ + Q_OBJECT +public: + QWindowsVistaStyle(); + ~QWindowsVistaStyle() override; + + void drawPrimitive(PrimitiveElement element, const QStyleOption *option, + QPainter *painter, + const QWidget *widget = nullptr) const override; + void drawControl(ControlElement element, const QStyleOption *option, + QPainter *painter, const QWidget *widget) const override; + void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, + QPainter *painter, const QWidget *widget) const override; + QSize sizeFromContents(ContentsType type, const QStyleOption *option, + const QSize &size, const QWidget *widget) const override; + + QRect subElementRect(SubElement element, const QStyleOption *option, + const QWidget *widget) const override; + QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, + SubControl sc, const QWidget *widget) const override; + + SubControl hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option, + const QPoint &pos, const QWidget *widget = nullptr) const override; + + QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = nullptr, + const QWidget *widget = nullptr) const override; + QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt, + const QWidget *widget = nullptr) const override; + int pixelMetric(PixelMetric metric, const QStyleOption *option = nullptr, + const QWidget *widget = nullptr) const override; + int styleHint(StyleHint hint, const QStyleOption *opt = nullptr, + const QWidget *widget = nullptr, QStyleHintReturn *returnData = nullptr) const override; + + void polish(QWidget *widget) override; + void unpolish(QWidget *widget) override; + void polish(QPalette &pal) override; + void polish(QApplication *app) override; + void unpolish(QApplication *app) override; + QPalette standardPalette() const override; + +private: + Q_DISABLE_COPY_MOVE(QWindowsVistaStyle) + Q_DECLARE_PRIVATE(QWindowsVistaStyle) + friend class QStyleFactory; +}; + +QT_END_NAMESPACE + +#endif // QWINDOWSVISTASTYLE_P_H diff --git a/src/quicknativestyle/qstyle/windows/qquickwindowsvistastyle_p_p.h b/src/quicknativestyle/qstyle/windows/qquickwindowsvistastyle_p_p.h new file mode 100644 index 00000000..a5383175 --- /dev/null +++ b/src/quicknativestyle/qstyle/windows/qquickwindowsvistastyle_p_p.h @@ -0,0 +1,204 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWidgets module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSVISTASTYLE_P_P_H +#define QWINDOWSVISTASTYLE_P_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of qapplication_*.cpp, qwidget*.cpp and qfiledialog.cpp. This header +// file may change from version to version without notice, or even be removed. +// +// We mean it. +// + +#include +#include "qquickwindowsvistastyle_p.h" +#include "qquickwindowsxpstyle_p_p.h" +#include +#include +#include +#include +#include +#include +#include +#if QT_CONFIG(pushbutton) +#include +#endif +#include +#if QT_CONFIG(lineedit) +#include +#endif +#include +#if QT_CONFIG(toolbutton) +#include +#endif +#if QT_CONFIG(spinbox) +#include +#endif +#if QT_CONFIG(toolbar) +#include +#endif +#if QT_CONFIG(combobox) +#include +#endif +#if QT_CONFIG(scrollbar) +#include +#endif +#if QT_CONFIG(progressbar) +#include +#endif +#if QT_CONFIG(dockwidget) +#include +#endif +#if QT_CONFIG(listview) +#include +#endif +#if QT_CONFIG(treeview) +#include +#endif +#include +#include +#if QT_CONFIG(dialogbuttonbox) +#include +#endif +#include +#if QT_CONFIG(tableview) +#include +#endif +#include +#if QT_CONFIG(commandlinkbutton) +#include +#endif + +QT_BEGIN_NAMESPACE + +#if !defined(SCHEMA_VERIFY_VSSYM32) +#define TMT_ANIMATIONDURATION 5006 +#define TMT_TRANSITIONDURATIONS 6000 +#define EP_EDITBORDER_NOSCROLL 6 +#define EP_EDITBORDER_HVSCROLL 9 +#define EP_BACKGROUND 3 +#define EBS_NORMAL 1 +#define EBS_HOT 2 +#define EBS_DISABLED 3 +#define EBS_READONLY 5 +#define PBS_DEFAULTED_ANIMATING 6 +#define MBI_NORMAL 1 +#define MBI_HOT 2 +#define MBI_PUSHED 3 +#define MBI_DISABLED 4 +#define MB_ACTIVE 1 +#define MB_INACTIVE 2 +#define PP_FILL 5 +#define PP_FILLVERT 6 +#define PP_MOVEOVERLAY 8 +#define PP_MOVEOVERLAYVERT 10 +#define MENU_BARBACKGROUND 7 +#define MENU_BARITEM 8 +#define MENU_POPUPCHECK 11 +#define MENU_POPUPCHECKBACKGROUND 12 +#define MENU_POPUPGUTTER 13 +#define MENU_POPUPITEM 14 +#define MENU_POPUPBORDERS 10 +#define MENU_POPUPSEPARATOR 15 +#define MC_CHECKMARKNORMAL 1 +#define MC_CHECKMARKDISABLED 2 +#define MC_BULLETNORMAL 3 +#define MC_BULLETDISABLED 4 +#define ABS_UPHOVER 17 +#define ABS_DOWNHOVER 18 +#define ABS_LEFTHOVER 19 +#define ABS_RIGHTHOVER 20 +#define CP_DROPDOWNBUTTONRIGHT 6 +#define CP_DROPDOWNBUTTONLEFT 7 +#define SCRBS_HOVER 5 +#define TVP_HOTGLYPH 4 +#define SPI_GETCLIENTAREAANIMATION 0x1042 +#define TDLG_PRIMARYPANEL 1 +#define TDLG_SECONDARYPANEL 8 +#endif + +class QWindowsVistaAnimation : public QBlendStyleAnimation +{ + Q_OBJECT +public: + QWindowsVistaAnimation(Type type, QObject *target) : QBlendStyleAnimation(type, target) { } + + bool isUpdateNeeded() const override; + void paint(QPainter *painter, const QStyleOption *option); +}; + + +// Handles state transition animations +class QWindowsVistaTransition : public QWindowsVistaAnimation +{ + Q_OBJECT +public: + QWindowsVistaTransition(QObject *target) : QWindowsVistaAnimation(Transition, target) {} +}; + + +// Handles pulse animations (default buttons) +class QWindowsVistaPulse: public QWindowsVistaAnimation +{ + Q_OBJECT +public: + QWindowsVistaPulse(QObject *target) : QWindowsVistaAnimation(Pulse, target) {} +}; + + +class QWindowsVistaStylePrivate : public QWindowsXPStylePrivate +{ + Q_DECLARE_PUBLIC(QWindowsVistaStyle) + +public: + QWindowsVistaStylePrivate(); + + static int fixedPixelMetric(QStyle::PixelMetric pm); + static inline bool useVista(); + bool transitionsEnabled() const; +}; + +QT_END_NAMESPACE + +#endif // QWINDOWSVISTASTYLE_P_P_H diff --git a/src/quicknativestyle/qstyle/windows/qquickwindowsxpstyle.cpp b/src/quicknativestyle/qstyle/windows/qquickwindowsxpstyle.cpp new file mode 100644 index 00000000..a3e8ef20 --- /dev/null +++ b/src/quicknativestyle/qstyle/windows/qquickwindowsxpstyle.cpp @@ -0,0 +1,4149 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWidgets module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "qquickstylehelper_p.h" +#include "qquickwindowsxpstyle_p.h" +#include "qquickwindowsxpstyle_p_p.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +namespace QQC2 { + +// General const values +static const int windowsItemFrame = 2; // menu item frame width +static const int windowsItemHMargin = 3; // menu item hor text margin +static const int windowsItemVMargin = 0; // menu item ver text margin +static const int windowsArrowHMargin = 6; // arrow horizontal margin +static const int windowsRightBorder = 12; // right border on windows + +// Theme names matching the QWindowsXPStylePrivate::Theme enumeration. +static const wchar_t *themeNames[QWindowsXPStylePrivate::NThemes] = +{ + L"BUTTON", L"COMBOBOX", L"EDIT", L"HEADER", L"LISTVIEW", + L"MENU", L"PROGRESS", L"REBAR", L"SCROLLBAR", L"SPIN", + L"TAB", L"TASKDIALOG", L"TOOLBAR", L"TOOLTIP", L"TRACKBAR", + L"TREEVIEW", L"WINDOW", L"STATUS", L"TREEVIEW" +}; + +// Theme data helper ------------------------------------------------------------------------------ +/* \internal + Returns \c true if the themedata is valid for use. +*/ +bool XPThemeData::isValid() +{ + return QWindowsXPStylePrivate::useXP() && theme >= 0 && handle(); +} + + +/* \internal + Returns the theme engine handle to the specific class. + If the handle hasn't been opened before, it opens the data, and + adds it to a static map, for caching. +*/ +HTHEME XPThemeData::handle() +{ + if (!QWindowsXPStylePrivate::useXP()) + return nullptr; + + if (!htheme) + htheme = QWindowsXPStylePrivate::createTheme(theme, QWindowsXPStylePrivate::winId(window)); + return htheme; +} + +/* \internal + Converts a QRect to the native RECT structure. +*/ +RECT XPThemeData::toRECT(const QRect &qr) +{ + RECT r; + r.left = qr.x(); + r.right = qr.x() + qr.width(); + r.top = qr.y(); + r.bottom = qr.y() + qr.height(); + return r; +} + +/* \internal + Returns the native region of a part, if the part is considered + transparent. The region is scaled to the parts size (rect). +*/ + +// QWindowsXPStylePrivate ------------------------------------------------------------------------- +// Static initializations +HWND QWindowsXPStylePrivate::m_vistaTreeViewHelper = nullptr; +HTHEME QWindowsXPStylePrivate::m_themes[NThemes]; +bool QWindowsXPStylePrivate::use_xp = false; +QBasicAtomicInt QWindowsXPStylePrivate::ref = Q_BASIC_ATOMIC_INITIALIZER(-1); // -1 based refcounting + +static void qt_add_rect(HRGN &winRegion, QRect r) +{ + HRGN rgn = CreateRectRgn(r.left(), r.top(), r.x() + r.width(), r.y() + r.height()); + if (rgn) { + HRGN dest = CreateRectRgn(0,0,0,0); + int result = CombineRgn(dest, winRegion, rgn, RGN_OR); + if (result) { + DeleteObject(winRegion); + winRegion = dest; + } + DeleteObject(rgn); + } +} + +static HRGN qt_hrgn_from_qregion(const QRegion ®ion) +{ + HRGN hRegion = CreateRectRgn(0,0,0,0); + if (region.rectCount() == 1) { + qt_add_rect(hRegion, region.boundingRect()); + return hRegion; + } + for (const QRect &rect : region) + qt_add_rect(hRegion, rect); + return hRegion; +} + +/* \internal + Checks if the theme engine can/should be used, or if we should + fall back to Windows style. +*/ +bool QWindowsXPStylePrivate::useXP(bool update) +{ + if (update) { + use_xp = IsThemeActive() && (IsAppThemed() || !QCoreApplication::instance()) + && !QWindowsStylePrivate::isDarkMode(); + } + return use_xp; +} + +/* \internal + Handles refcounting, and queries the theme engine for usage. +*/ +void QWindowsXPStylePrivate::init(bool force) +{ + if (ref.ref() && !force) + return; + if (!force) // -1 based atomic refcounting + ref.ref(); + + useXP(true); + std::fill(m_themes, m_themes + NThemes, nullptr); +} + +/* \internal + Cleans up all static data. +*/ +void QWindowsXPStylePrivate::cleanup(bool force) +{ + if (bufferBitmap) { + if (bufferDC && nullBitmap) + SelectObject(bufferDC, nullBitmap); + DeleteObject(bufferBitmap); + bufferBitmap = nullptr; + } + + if (bufferDC) + DeleteDC(bufferDC); + bufferDC = nullptr; + + if (ref.deref() && !force) + return; + if (!force) // -1 based atomic refcounting + ref.deref(); + + use_xp = false; + cleanupHandleMap(); +} + +/* In order to obtain the correct VistaTreeViewTheme (arrows for PE_IndicatorBranch), + * we need to set the windows "explorer" theme explicitly on a native + * window and open the "TREEVIEW" theme handle passing its window handle + * in order to get Vista-style item view themes (particulary drawBackground() + * for selected items needs this). + * We invoke a service of the native Windows interface to create + * a non-visible window handle, open the theme on it and insert it into + * the cache so that it is found by XPThemeData::handle() first. + */ + +static inline HWND createTreeViewHelperWindow() +{ + if (QPlatformNativeInterface *ni = QGuiApplication::platformNativeInterface()) { + void *hwnd = nullptr; + void *wndProc = reinterpret_cast(DefWindowProc); + if (QMetaObject::invokeMethod(ni, "createMessageWindow", Qt::DirectConnection, + Q_RETURN_ARG(void*, hwnd), + Q_ARG(QString, QStringLiteral("QTreeViewThemeHelperWindowClass")), + Q_ARG(QString, QStringLiteral("QTreeViewThemeHelperWindow")), + Q_ARG(void*, wndProc)) && hwnd) { + return reinterpret_cast(hwnd); + } + } + return nullptr; +} + +bool QWindowsXPStylePrivate::initVistaTreeViewTheming() +{ + if (m_vistaTreeViewHelper) + return true; + + m_vistaTreeViewHelper = createTreeViewHelperWindow(); + if (!m_vistaTreeViewHelper) { + qWarning("Unable to create the treeview helper window."); + return false; + } + if (FAILED(SetWindowTheme(m_vistaTreeViewHelper, L"explorer", nullptr))) { + qErrnoWarning("SetWindowTheme() failed."); + cleanupVistaTreeViewTheming(); + return false; + } + return true; +} + +void QWindowsXPStylePrivate::cleanupVistaTreeViewTheming() +{ + if (m_vistaTreeViewHelper) { + DestroyWindow(m_vistaTreeViewHelper); + m_vistaTreeViewHelper = nullptr; + } +} + +/* \internal + Closes all open theme data handles to ensure that we don't leak + resources, and that we don't refere to old handles when for + example the user changes the theme style. +*/ +void QWindowsXPStylePrivate::cleanupHandleMap() +{ + for (auto &theme : m_themes) { + if (theme) { + CloseThemeData(theme); + theme = nullptr; + } + } + QWindowsXPStylePrivate::cleanupVistaTreeViewTheming(); +} + +HTHEME QWindowsXPStylePrivate::createTheme(int theme, HWND hwnd) +{ + if (Q_UNLIKELY(theme < 0 || theme >= NThemes || !hwnd)) { + qWarning("Invalid parameters #%d, %p", theme, hwnd); + return nullptr; + } + if (!m_themes[theme]) { + const wchar_t *name = themeNames[theme]; + if (theme == VistaTreeViewTheme && QWindowsXPStylePrivate::initVistaTreeViewTheming()) + hwnd = QWindowsXPStylePrivate::m_vistaTreeViewHelper; + m_themes[theme] = OpenThemeData(hwnd, name); + if (Q_UNLIKELY(!m_themes[theme])) + qErrnoWarning("OpenThemeData() failed for theme %d (%s).", + theme, qPrintable(themeName(theme))); + } + return m_themes[theme]; +} + +QString QWindowsXPStylePrivate::themeName(int theme) +{ + return theme >= 0 && theme < NThemes ? + QString::fromWCharArray(themeNames[theme]) : + QString(); +} + +/* +bool QWindowsXPStylePrivate::isItemViewDelegateLineEdit(const QWidget *widget) +{ + if (!widget) + return false; + const QWidget *parent1 = widget->parentWidget(); + // Exlude dialogs or other toplevels parented on item views. + if (!parent1 || parent1->isWindow()) + return false; + const QWidget *parent2 = parent1->parentWidget(); + return parent2 && widget->inherits("QLineEdit") + && parent2->inherits("QAbstractItemView"); +} +*/ + +/* +// Returns whether base color is set for this widget +bool QWindowsXPStylePrivate::isLineEditBaseColorSet(const QStyleOption *option, const QWidget *widget) +{ + uint resolveMask = option->palette.resolve(); + if (widget) { + // Since spin box includes a line edit we need to resolve the palette mask also from + // the parent, as while the color is always correct on the palette supplied by panel, + // the mask can still be empty. If either mask specifies custom base color, use that. +#if QT_CONFIG(spinbox) + if (const QAbstractSpinBox *spinbox = qobject_cast(widget->parentWidget())) + resolveMask |= spinbox->palette().resolve(); +#endif // QT_CONFIG(spinbox) + } + return (resolveMask & (1 << QPalette::Base)) != 0; +} +*/ + +/*! \internal + This function will always return a valid window handle, and might + create a limbo widget to do so. + We often need a window handle to for example open theme data, so + this function ensures that we get one. +*/ +HWND QWindowsXPStylePrivate::winId(const QWindow *window) +{ + if (window) + if (const HWND hwnd = reinterpret_cast(window->winId())) + return hwnd; + + // Find top level with native window (there might be dialogs that do not have one). + const auto allWindows = QGuiApplication::allWindows(); + for (const QWindow *window : allWindows) { + if (window->isTopLevel() && window->type() != Qt::Desktop && window->handle() != nullptr) + return reinterpret_cast(window->winId()); + } + + return GetDesktopWindow(); +} + +/*! \internal + Returns a native buffer (DIB section) of at least the size of + ( \a x , \a y ). The buffer has a 32 bit depth, to not lose + the alpha values on proper alpha-pixmaps. +*/ +HBITMAP QWindowsXPStylePrivate::buffer(int w, int h) +{ + // If we already have a HBITMAP which is of adequate size, just return that + if (bufferBitmap) { + if (bufferW >= w && bufferH >= h) + return bufferBitmap; + // Not big enough, discard the old one + if (bufferDC && nullBitmap) + SelectObject(bufferDC, nullBitmap); + DeleteObject(bufferBitmap); + bufferBitmap = nullptr; + } + + w = qMax(bufferW, w); + h = qMax(bufferH, h); + + if (!bufferDC) { + HDC displayDC = GetDC(nullptr); + bufferDC = CreateCompatibleDC(displayDC); + ReleaseDC(nullptr, displayDC); + } + + // Define the header + BITMAPINFO bmi; + memset(&bmi, 0, sizeof(bmi)); + bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + bmi.bmiHeader.biWidth = w; + bmi.bmiHeader.biHeight = -h; + bmi.bmiHeader.biPlanes = 1; + bmi.bmiHeader.biBitCount = 32; + bmi.bmiHeader.biCompression = BI_RGB; + + // Create the pixmap + bufferPixels = nullptr; + bufferBitmap = CreateDIBSection(bufferDC, &bmi, DIB_RGB_COLORS, reinterpret_cast(&bufferPixels), nullptr, 0); + GdiFlush(); + nullBitmap = static_cast(SelectObject(bufferDC, bufferBitmap)); + + if (Q_UNLIKELY(!bufferBitmap)) { + qErrnoWarning("QWindowsXPStylePrivate::buffer(%dx%d), CreateDIBSection() failed.", w, h); + bufferW = 0; + bufferH = 0; + return nullptr; + } + if (Q_UNLIKELY(!bufferPixels)) { + qErrnoWarning("QWindowsXPStylePrivate::buffer(%dx%d), CreateDIBSection() did not allocate pixel data.", w, h); + bufferW = 0; + bufferH = 0; + return nullptr; + } + bufferW = w; + bufferH = h; +#ifdef DEBUG_XP_STYLE + qDebug("Creating new dib section (%d, %d)", w, h); +#endif + return bufferBitmap; +} + +/*! \internal + Returns \c true if the part contains any transparency at all. This does + not indicate what kind of transparency we're dealing with. It can be + - Alpha transparency + - Masked transparency +*/ +bool QWindowsXPStylePrivate::isTransparent(XPThemeData &themeData) +{ + return IsThemeBackgroundPartiallyTransparent(themeData.handle(), themeData.partId, + themeData.stateId); +} + + +/*! \internal + Returns a QRegion of the region of the part +*/ +QRegion QWindowsXPStylePrivate::region(XPThemeData &themeData) +{ + HRGN hRgn = nullptr; + const qreal factor = QWindowsStylePrivate::nativeMetricScaleFactor(themeData.window); + RECT rect = themeData.toRECT(QRect(themeData.rect.topLeft() / factor, themeData.rect.size() / factor)); + if (!SUCCEEDED(GetThemeBackgroundRegion(themeData.handle(), bufferHDC(), themeData.partId, + themeData.stateId, &rect, &hRgn))) { + return QRegion(); + } + + HRGN dest = CreateRectRgn(0, 0, 0, 0); + const bool success = CombineRgn(dest, hRgn, nullptr, RGN_COPY) != ERROR; + + QRegion region; + + if (success) { + const auto numBytes = GetRegionData(dest, 0, nullptr); + if (numBytes == 0) + return QRegion(); + + char *buf = new (std::nothrow) char[numBytes]; + if (!buf) + return QRegion(); + + RGNDATA *rd = reinterpret_cast(buf); + if (GetRegionData(dest, numBytes, rd) == 0) { + delete [] buf; + return QRegion(); + } + + RECT *r = reinterpret_cast(rd->Buffer); + for (uint i = 0; i < rd->rdh.nCount; ++i) { + QRect rect; + rect.setCoords(int(r->left * factor), int(r->top * factor), int((r->right - 1) * factor), int((r->bottom - 1) * factor)); + ++r; + region |= rect; + } + + delete [] buf; + } + + DeleteObject(hRgn); + DeleteObject(dest); + + return region; +} + +/*! \internal + Returns \c true if the native doublebuffer contains pixels with + varying alpha value. +*/ +bool QWindowsXPStylePrivate::hasAlphaChannel(const QRect &rect) +{ + const int startX = rect.left(); + const int startY = rect.top(); + const int w = rect.width(); + const int h = rect.height(); + + int firstAlpha = -1; + for (int y = startY; y < h/2; ++y) { + auto buffer = reinterpret_cast(bufferPixels) + (y * bufferW); + for (int x = startX; x < w; ++x, ++buffer) { + int alpha = (*buffer) >> 24; + if (firstAlpha == -1) + firstAlpha = alpha; + else if (alpha != firstAlpha) + return true; + } + } + return false; +} + +/*! \internal + When the theme engine paints both a true alpha pixmap and a glyph + into our buffer, the glyph might not contain a proper alpha value. + The rule of thumb for premultiplied pixmaps is that the color + values of a pixel can never be higher than the alpha values, so + we use this to our advantage here, and fix all instances where + this occures. +*/ +bool QWindowsXPStylePrivate::fixAlphaChannel(const QRect &rect) +{ + const int startX = rect.left(); + const int startY = rect.top(); + const int w = rect.width(); + const int h = rect.height(); + bool hasFixedAlphaValue = false; + + for (int y = startY; y < h; ++y) { + auto buffer = reinterpret_cast(bufferPixels) + (y * bufferW); + for (int x = startX; x < w; ++x, ++buffer) { + uint pixel = *buffer; + int alpha = qAlpha(pixel); + if (qRed(pixel) > alpha || qGreen(pixel) > alpha || qBlue(pixel) > alpha) { + *buffer |= 0xff000000; + hasFixedAlphaValue = true; + } + } + } + return hasFixedAlphaValue; +} + +/*! \internal + Swaps the alpha values on certain pixels: + 0xFF?????? -> 0x00?????? + 0x00?????? -> 0xFF?????? + Used to determin the mask of a non-alpha transparent pixmap in + the native doublebuffer, and swap the alphas so we may paint + the image as a Premultiplied QImage with drawImage(), and obtain + the mask transparency. +*/ +bool QWindowsXPStylePrivate::swapAlphaChannel(const QRect &rect, bool allPixels) +{ + const int startX = rect.left(); + const int startY = rect.top(); + const int w = rect.width(); + const int h = rect.height(); + bool valueChange = false; + + // Flip the alphas, so that 255-alpha pixels are 0, and 0-alpha are 255. + for (int y = startY; y < h; ++y) { + auto buffer = reinterpret_cast(bufferPixels) + (y * bufferW); + for (int x = startX; x < w; ++x, ++buffer) { + if (allPixels) { + *buffer |= 0xFF000000; + continue; + } + unsigned int alphaValue = (*buffer) & 0xFF000000; + if (alphaValue == 0xFF000000) { + *buffer = 0; + valueChange = true; + } else if (alphaValue == 0) { + *buffer |= 0xFF000000; + valueChange = true; + } + } + } + return valueChange; +} + +enum TransformType { SimpleTransform, HighDpiScalingTransform, ComplexTransform }; + +static inline TransformType transformType(const QTransform &transform, qreal devicePixelRatio) +{ + if (transform.type() <= QTransform::TxTranslate) + return SimpleTransform; + if (transform.type() > QTransform::TxScale) + return ComplexTransform; + return qFuzzyCompare(transform.m11(), devicePixelRatio) + && qFuzzyCompare(transform.m22(), devicePixelRatio) + ? HighDpiScalingTransform : ComplexTransform; +} + +// QTBUG-60571: Exclude known fully opaque theme parts which produce values +// invalid in ARGB32_Premultiplied (for example, 0x00ffffff). +static inline bool isFullyOpaque(const XPThemeData &themeData) +{ + return themeData.theme == QWindowsXPStylePrivate::TaskDialogTheme && themeData.partId == TDLG_PRIMARYPANEL; +} + +/*! \internal + Main theme drawing function. + Determines the correct lowlevel drawing method depending on several + factors. + Use drawBackgroundThruNativeBuffer() if: + - Painter does not have an HDC + - Theme part is flipped (mirrored horizontally) + else use drawBackgroundDirectly(). + \note drawBackgroundThruNativeBuffer() can return false for large + sizes due to buffer()/CreateDIBSection() failing. +*/ +bool QWindowsXPStylePrivate::drawBackground(XPThemeData &themeData, qreal correctionFactor) +{ + if (themeData.rect.isEmpty()) + return true; + + QPainter *painter = themeData.painter; + Q_ASSERT_X(painter != nullptr, "QWindowsXPStylePrivate::drawBackground()", "Trying to draw a theme part without a painter"); + if (!painter || !painter->isActive()) + return false; + + painter->save(); + + // Access paintDevice via engine since the painter may + // return the clip device which can still be a widget device in case of grabWidget(). + + //bool translucentToplevel = false; + //const QPaintDevice *paintDevice = painter->device(); + const qreal additionalDevicePixelRatio = themeData.window ? themeData.window->devicePixelRatio() : qreal(1); + Q_ASSERT(painter->device()->devType() != QInternal::Widget); +/* + if (paintDevice->devType() == QInternal::Widget) { + const QWidget *window = static_cast(paintDevice)->window(); + translucentToplevel = window->testAttribute(Qt::WA_TranslucentBackground); + } + + const TransformType tt = transformType(painter->deviceTransform(), aditionalDevicePixelRatio); + + bool canDrawDirectly = false; + if (themeData.widget && painter->opacity() == 1.0 && !themeData.rotate + && !isFullyOpaque(themeData) + && tt != ComplexTransform && !themeData.mirrorVertically + && !translucentToplevel) { + // Draw on backing store DC only for real widgets or backing store images. + const QPaintDevice *enginePaintDevice = painter->paintEngine()->paintDevice(); + switch (enginePaintDevice->devType()) { + case QInternal::Widget: + canDrawDirectly = true; + break; + case QInternal::Image: + // Ensure the backing store has received as resize and is initialized. + if (QBackingStore *bs = backingStoreForWidget(themeData.widget)) + if (bs->size().isValid() && bs->paintDevice() == enginePaintDevice) + canDrawDirectly = true; + } + } + + const HDC dc = canDrawDirectly ? hdcForWidgetBackingStore(themeData.widget) : nullptr; + const bool result = dc && qFuzzyCompare(correctionFactor, qreal(1)) + ? drawBackgroundDirectly(dc, themeData, aditionalDevicePixelRatio) + : drawBackgroundThruNativeBuffer(themeData, aditionalDevicePixelRatio, correctionFactor); + */ + const bool result = drawBackgroundThruNativeBuffer(themeData, additionalDevicePixelRatio, correctionFactor); + painter->restore(); + return result; +} + +static inline QRectF scaleRect(const QRectF &r, qreal factor) +{ + return r.isValid() && factor > 1 + ? QRectF(r.topLeft() * factor, r.size() * factor) + : r; +} + +static QRegion scaleRegion(const QRegion ®ion, qreal factor) +{ + if (region.isEmpty() || qFuzzyCompare(factor, qreal(1))) + return region; + QRegion result; + for (const QRect &rect : region) + result += QRectF(QPointF(rect.topLeft()) * factor, QSizeF(rect.size() * factor)).toRect(); + return result; +} + +/*! \internal + This function draws the theme parts directly to the paintengines HDC. + Do not use this if you need to perform other transformations on the + resulting data. +*/ +bool QWindowsXPStylePrivate::drawBackgroundDirectly(HDC dc, XPThemeData &themeData, qreal additionalDevicePixelRatio) +{ + QPainter *painter = themeData.painter; + + const auto &deviceTransform = painter->deviceTransform(); + const QPointF redirectionDelta(deviceTransform.dx(), deviceTransform.dy()); + const QRect area = scaleRect(QRectF(themeData.rect), additionalDevicePixelRatio).translated(redirectionDelta).toRect(); + + QRegion sysRgn = painter->paintEngine()->systemClip(); + if (sysRgn.isEmpty()) + sysRgn = area; + else + sysRgn &= area; + if (painter->hasClipping()) + sysRgn &= scaleRegion(painter->clipRegion(), additionalDevicePixelRatio).translated(redirectionDelta.toPoint()); + HRGN hrgn = qt_hrgn_from_qregion(sysRgn); + SelectClipRgn(dc, hrgn); + +#ifdef DEBUG_XP_STYLE + printf("---[ DIRECT PAINTING ]------------------> Name(%-10s) Part(%d) State(%d)\n", + qPrintable(themeData.name), themeData.partId, themeData.stateId); + showProperties(themeData); +#endif + + RECT drawRECT = themeData.toRECT(area); + DTBGOPTS drawOptions; + memset(&drawOptions, 0, sizeof(drawOptions)); + drawOptions.dwSize = sizeof(drawOptions); + drawOptions.rcClip = themeData.toRECT(sysRgn.boundingRect()); + drawOptions.dwFlags = DTBG_CLIPRECT + | (themeData.noBorder ? DTBG_OMITBORDER : 0) + | (themeData.noContent ? DTBG_OMITCONTENT : 0) + | (themeData.mirrorHorizontally ? DTBG_MIRRORDC : 0); + + const HRESULT result = DrawThemeBackgroundEx(themeData.handle(), dc, themeData.partId, themeData.stateId, &(drawRECT), &drawOptions); + SelectClipRgn(dc, nullptr); + DeleteObject(hrgn); + return SUCCEEDED(result); +} + +/*! \internal + This function uses a secondary Native doublebuffer for painting parts. + It should only be used when the painteengine doesn't provide a proper + HDC for direct painting (e.g. when doing a grabWidget(), painting to + other pixmaps etc), or when special transformations are needed (e.g. + flips (horizonal mirroring only, vertical are handled by the theme + engine). + + \a correctionFactor is an additional factor used to scale up controls + that are too small on High DPI screens, as has been observed for + WP_MDICLOSEBUTTON, WP_MDIRESTOREBUTTON, WP_MDIMINBUTTON (QTBUG-75927). +*/ +bool QWindowsXPStylePrivate::drawBackgroundThruNativeBuffer(XPThemeData &themeData, + qreal additionalDevicePixelRatio, + qreal correctionFactor) +{ + QPainter *painter = themeData.painter; + QRectF rectF = scaleRect(QRectF(themeData.rect), additionalDevicePixelRatio); + + if ((themeData.rotate + 90) % 180 == 0) { // Catch 90,270,etc.. degree flips. + rectF = QRectF(0, 0, rectF.height(), rectF.width()); + } + rectF.moveTo(0, 0); + + const bool hasCorrectionFactor = !qFuzzyCompare(correctionFactor, qreal(1)); + QRect rect = rectF.toRect(); + QRect drawRect = hasCorrectionFactor + ? QRectF(rectF.topLeft() / correctionFactor, rectF.size() / correctionFactor).toRect() : rect; + int partId = themeData.partId; + int stateId = themeData.stateId; + int w = rect.width(); + int h = rect.height(); + + // Values initialized later, either from cached values, or from function calls + AlphaChannelType alphaType = UnknownAlpha; + bool stateHasData = true; // We assume so; + bool hasAlpha = false; + bool partIsTransparent; + bool potentialInvalidAlpha; + + QString pixmapCacheKey = QStringLiteral("$qt_xp_"); + pixmapCacheKey.append(themeName(themeData.theme)); + pixmapCacheKey.append(QLatin1Char('p')); + pixmapCacheKey.append(QString::number(partId)); + pixmapCacheKey.append(QLatin1Char('s')); + pixmapCacheKey.append(QString::number(stateId)); + pixmapCacheKey.append(QLatin1Char('s')); + pixmapCacheKey.append(themeData.noBorder ? QLatin1Char('0') : QLatin1Char('1')); + pixmapCacheKey.append(QLatin1Char('b')); + pixmapCacheKey.append(themeData.noContent ? QLatin1Char('0') : QLatin1Char('1')); + pixmapCacheKey.append(QString::number(w)); + pixmapCacheKey.append(QLatin1Char('w')); + pixmapCacheKey.append(QString::number(h)); + pixmapCacheKey.append(QLatin1Char('h')); + pixmapCacheKey.append(QString::number(additionalDevicePixelRatio)); + pixmapCacheKey.append(QLatin1Char('d')); + if (hasCorrectionFactor) { + pixmapCacheKey.append(QLatin1Char('c')); + pixmapCacheKey.append(QString::number(correctionFactor)); + } + + QPixmap cachedPixmap; + ThemeMapKey key(themeData); + ThemeMapData data = alphaCache.value(key); + + bool haveCachedPixmap = false; + bool isCached = data.dataValid; + if (isCached) { + partIsTransparent = data.partIsTransparent; + hasAlpha = data.hasAlphaChannel; + alphaType = data.alphaType; + potentialInvalidAlpha = data.hadInvalidAlpha; + + haveCachedPixmap = QPixmapCache::find(pixmapCacheKey, &cachedPixmap); + +#ifdef DEBUG_XP_STYLE + char buf[25]; + ::sprintf(buf, "+ Pixmap(%3d, %3d) ]", w, h); + printf("---[ CACHED %s--------> Name(%-10s) Part(%d) State(%d)\n", + haveCachedPixmap ? buf : "]-------------------", + qPrintable(themeData.name), themeData.partId, themeData.stateId); +#endif + } else { + // Not cached, so get values from Theme Engine + BOOL tmt_borderonly = false; + COLORREF tmt_transparentcolor = 0x0; + PROPERTYORIGIN proporigin = PO_NOTFOUND; + GetThemeBool(themeData.handle(), themeData.partId, themeData.stateId, TMT_BORDERONLY, &tmt_borderonly); + GetThemeColor(themeData.handle(), themeData.partId, themeData.stateId, TMT_TRANSPARENTCOLOR, &tmt_transparentcolor); + GetThemePropertyOrigin(themeData.handle(), themeData.partId, themeData.stateId, TMT_CAPTIONMARGINS, &proporigin); + + partIsTransparent = isTransparent(themeData); + + potentialInvalidAlpha = false; + GetThemePropertyOrigin(themeData.handle(), themeData.partId, themeData.stateId, TMT_GLYPHTYPE, &proporigin); + if (proporigin == PO_PART || proporigin == PO_STATE) { + int tmt_glyphtype = GT_NONE; + GetThemeEnumValue(themeData.handle(), themeData.partId, themeData.stateId, TMT_GLYPHTYPE, &tmt_glyphtype); + potentialInvalidAlpha = partIsTransparent && tmt_glyphtype == GT_IMAGEGLYPH; + } + +#ifdef DEBUG_XP_STYLE + printf("---[ NOT CACHED ]-----------------------> Name(%-10s) Part(%d) State(%d)\n", + qPrintable(themeData.name), themeData.partId, themeData.stateId); + printf("-->partIsTransparen = %d\n", partIsTransparent); + printf("-->potentialInvalidAlpha = %d\n", potentialInvalidAlpha); + showProperties(themeData); +#endif + } + bool wasAlphaSwapped = false; + bool wasAlphaFixed = false; + + // OLD PSDK Workaround ------------------------------------------------------------------------ + // See if we need extra clipping for the older PSDK, which does + // not have a DrawThemeBackgroundEx function for DTGB_OMITBORDER + // and DTGB_OMITCONTENT + bool addBorderContentClipping = false; + QRegion extraClip; + QRect area = drawRect; + if (themeData.noBorder || themeData.noContent) { + extraClip = area; + // We are running on a system where the uxtheme.dll does not have + // the DrawThemeBackgroundEx function, so we need to clip away + // borders or contents manually. + + int borderSize = 0; + PROPERTYORIGIN origin = PO_NOTFOUND; + GetThemePropertyOrigin(themeData.handle(), themeData.partId, themeData.stateId, TMT_BORDERSIZE, &origin); + GetThemeInt(themeData.handle(), themeData.partId, themeData.stateId, TMT_BORDERSIZE, &borderSize); + borderSize *= additionalDevicePixelRatio; + + // Clip away border region + if ((origin == PO_CLASS || origin == PO_PART || origin == PO_STATE) && borderSize > 0) { + if (themeData.noBorder) { + extraClip &= area; + area = area.adjusted(-borderSize, -borderSize, borderSize, borderSize); + } + + // Clip away content region + if (themeData.noContent) { + QRegion content = area.adjusted(borderSize, borderSize, -borderSize, -borderSize); + extraClip ^= content; + } + } + addBorderContentClipping = (themeData.noBorder | themeData.noContent); + } + + QImage img; + if (!haveCachedPixmap) { // If the pixmap is not cached, generate it! ------------------------- + if (!buffer(drawRect.width(), drawRect.height())) // Ensure a buffer of at least (w, h) in size + return false; + HDC dc = bufferHDC(); + + // Clear the buffer + if (alphaType != NoAlpha) { + // Consider have separate "memset" function for small chunks for more speedup + memset(bufferPixels, 0x00, bufferW * drawRect.height() * 4); + } + + // Difference between area and rect + int dx = area.x() - drawRect.x(); + int dy = area.y() - drawRect.y(); + + // Adjust so painting rect starts from Origo + rect.moveTo(0,0); + area.moveTo(dx,dy); + DTBGOPTS drawOptions; + drawOptions.dwSize = sizeof(drawOptions); + drawOptions.rcClip = themeData.toRECT(rect); + drawOptions.dwFlags = DTBG_CLIPRECT + | (themeData.noBorder ? DTBG_OMITBORDER : 0) + | (themeData.noContent ? DTBG_OMITCONTENT : 0); + + // Drawing the part into the backing store + RECT wRect(themeData.toRECT(area)); + DrawThemeBackgroundEx(themeData.handle(), dc, themeData.partId, themeData.stateId, &wRect, &drawOptions); + + // If not cached, analyze the buffer data to figure + // out alpha type, and if it contains data + if (!isCached) { + // SHORTCUT: If the part's state has no data, cache it for NOOP later + if (!stateHasData) { + memset(static_cast(&data), 0, sizeof(data)); + data.dataValid = true; + alphaCache.insert(key, data); + return true; + } + hasAlpha = hasAlphaChannel(rect); + if (!hasAlpha && partIsTransparent) + potentialInvalidAlpha = true; +#if defined(DEBUG_XP_STYLE) && 1 + dumpNativeDIB(drawRect.width(), drawRect.height()); +#endif + } + + // Fix alpha values, if needed + if (potentialInvalidAlpha) + wasAlphaFixed = fixAlphaChannel(drawRect); + + QImage::Format format; + if ((partIsTransparent && !wasAlphaSwapped) || (!partIsTransparent && hasAlpha)) { + format = QImage::Format_ARGB32_Premultiplied; + alphaType = RealAlpha; + } else if (wasAlphaSwapped) { + format = QImage::Format_ARGB32_Premultiplied; + alphaType = MaskAlpha; + } else { + format = QImage::Format_RGB32; + // The image data we got from the theme engine does not have any transparency, + // thus the alpha channel is set to 0. + // However, Format_RGB32 requires the alpha part to be set to 0xff, thus + // we must flip it from 0x00 to 0xff + swapAlphaChannel(rect, true); + alphaType = NoAlpha; + } +#if defined(DEBUG_XP_STYLE) && 1 + printf("Image format is: %s\n", alphaType == RealAlpha ? "Real Alpha" : alphaType == MaskAlpha ? "Masked Alpha" : "No Alpha"); +#endif + img = QImage(bufferPixels, bufferW, bufferH, format); + if (hasCorrectionFactor) + img = img.scaled(w, h, Qt::KeepAspectRatio, Qt::SmoothTransformation); + img.setDevicePixelRatio(additionalDevicePixelRatio); + } + + // Blitting backing store + bool useRegion = partIsTransparent && !hasAlpha && !wasAlphaSwapped; + + QRegion newRegion; + QRegion oldRegion; + if (useRegion) { + newRegion = region(themeData); + oldRegion = painter->clipRegion(); + painter->setClipRegion(newRegion); +#if defined(DEBUG_XP_STYLE) && 0 + printf("Using region:\n"); + for (const QRect &r : newRegion) + printf(" (%d, %d, %d, %d)\n", r.x(), r.y(), r.right(), r.bottom()); +#endif + } + + if (addBorderContentClipping) + painter->setClipRegion(scaleRegion(extraClip, 1.0 / additionalDevicePixelRatio), Qt::IntersectClip); + + if (!themeData.mirrorHorizontally && !themeData.mirrorVertically && !themeData.rotate) { + if (!haveCachedPixmap) + painter->drawImage(themeData.rect, img, rect); + else + painter->drawPixmap(themeData.rect, cachedPixmap); + } else { + // This is _slow_! + // Make a copy containing only the necessary data, and mirror + // on all wanted axes. Then draw the copy. + // If cached, the normal pixmap is cached, instead of caching + // all possible orientations for each part and state. + QImage imgCopy; + if (!haveCachedPixmap) + imgCopy = img.copy(rect); + else + imgCopy = cachedPixmap.toImage(); + + if (themeData.rotate) { + QTransform rotMatrix; + rotMatrix.rotate(themeData.rotate); + imgCopy = imgCopy.transformed(rotMatrix); + } + if (themeData.mirrorHorizontally || themeData.mirrorVertically) { + imgCopy = imgCopy.mirrored(themeData.mirrorHorizontally, themeData.mirrorVertically); + } + painter->drawImage(themeData.rect, + imgCopy); + } + + if (useRegion || addBorderContentClipping) { + if (oldRegion.isEmpty()) + painter->setClipping(false); + else + painter->setClipRegion(oldRegion); + } + + // Cache the pixmap to avoid expensive swapAlphaChannel() calls + if (!haveCachedPixmap && w && h) { + QPixmap pix = QPixmap::fromImage(img).copy(rect); + QPixmapCache::insert(pixmapCacheKey, pix); +#ifdef DEBUG_XP_STYLE + printf("+++Adding pixmap to cache, size(%d, %d), wasAlphaSwapped(%d), wasAlphaFixed(%d), name(%s)\n", + w, h, wasAlphaSwapped, wasAlphaFixed, qPrintable(pixmapCacheKey)); +#endif + } + + // Add to theme part cache + if (!isCached) { + memset(static_cast(&data), 0, sizeof(data)); + data.dataValid = true; + data.partIsTransparent = partIsTransparent; + data.alphaType = alphaType; + data.hasAlphaChannel = hasAlpha; + data.wasAlphaSwapped = wasAlphaSwapped; + data.hadInvalidAlpha = wasAlphaFixed; + alphaCache.insert(key, data); + } + return true; +} + + +// ------------------------------------------------------------------------------------------------ + +/*! + \class QWindowsXPStyle + \brief The QWindowsXPStyle class provides a Microsoft Windows XP-like look and feel. + + \ingroup appearance + \inmodule QtWidgets + \internal + + \warning This style is only available on the Windows XP platform + because it makes use of Windows XP's style engine. + + Most of the functions are documented in the base classes + QWindowsStyle, QCommonStyle, and QStyle, but the + QWindowsXPStyle overloads of drawComplexControl(), drawControl(), + drawControlMask(), drawPrimitive(), proxy()->subControlRect(), and + sizeFromContents(), are documented here. + + \image qwindowsxpstyle.png + \sa QMacStyle, QWindowsStyle, QFusionStyle +*/ + +/*! + Constructs a QWindowsStyle +*/ +QWindowsXPStyle::QWindowsXPStyle() + : QWindowsStyle(*new QWindowsXPStylePrivate) +{ +} + +/*! + Destroys the style. +*/ +QWindowsXPStyle::~QWindowsXPStyle() = default; + +/*! \reimp */ +QRect QWindowsXPStyle::subElementRect(SubElement sr, const QStyleOption *option) const +{ + if (!QWindowsXPStylePrivate::useXP()) { + return QWindowsStyle::subElementRect(sr, option); + } + + QRect rect(option->rect); + switch (sr) { + case SE_DockWidgetCloseButton: + case SE_DockWidgetFloatButton: + rect = QWindowsStyle::subElementRect(sr, option); + return rect.translated(0, 1); + break; +#if 0 + case SE_TabWidgetTabContents: + if (qstyleoption_cast(option)) + { + rect = QWindowsStyle::subElementRect(sr, option); + if (sr == SE_TabWidgetTabContents) { + if (const QTabWidget *tabWidget = qobject_cast(widget)) { + if (tabWidget->documentMode()) + break; + } + + rect.adjust(0, 0, -2, -2); + } + } + break; + case SE_TabWidgetTabBar: { + rect = QWindowsStyle::subElementRect(sr, option); + const QStyleOptionTabWidgetFrame *twfOption = + qstyleoption_cast(option); + if (twfOption && twfOption->direction == Qt::RightToLeft + && (twfOption->shape == QTabBar::RoundedNorth + || twfOption->shape == QTabBar::RoundedSouth)) + { + QStyleOptionTab otherOption; + otherOption.shape = (twfOption->shape == QTabBar::RoundedNorth + ? QTabBar::RoundedEast : QTabBar::RoundedSouth); + int overlap = proxy()->pixelMetric(PM_TabBarBaseOverlap, &otherOption); + int borderThickness = proxy()->pixelMetric(PM_DefaultFrameWidth, option); + rect.adjust(-overlap + borderThickness, 0, -overlap + borderThickness, 0); + } + break;} +#endif + case SE_PushButtonContents: + if (const QStyleOptionButton *btn = qstyleoption_cast(option)) { + MARGINS borderSize; + if (option->window) { + XPThemeData buttontheme(option->window, nullptr, QWindowsXPStylePrivate::ButtonTheme); + HTHEME theme = buttontheme.handle(); + if (theme) { + int stateId; + if (!(option->state & State_Enabled)) + stateId = PBS_DISABLED; + else if (option->state & State_Sunken) + stateId = PBS_PRESSED; + else if (option->state & State_MouseOver) + stateId = PBS_HOT; + else if (btn->features & QStyleOptionButton::DefaultButton) + stateId = PBS_DEFAULTED; + else + stateId = PBS_NORMAL; + + int border = proxy()->pixelMetric(PM_DefaultFrameWidth, btn); + rect = option->rect.adjusted(border, border, -border, -border); + + if (SUCCEEDED(GetThemeMargins(theme, nullptr, BP_PUSHBUTTON, stateId, TMT_CONTENTMARGINS, nullptr, &borderSize))) { + rect.adjust(borderSize.cxLeftWidth, borderSize.cyTopHeight, + -borderSize.cxRightWidth, -borderSize.cyBottomHeight); + rect = visualRect(option->direction, option->rect, rect); + } + } + } + } + break; + case SE_ProgressBarContents: + rect = QCommonStyle::subElementRect(SE_ProgressBarGroove, option); + if (option->state & QStyle::State_Horizontal) + rect.adjust(4, 3, -4, -3); + else + rect.adjust(3, 2, -3, -2); + break; + default: + rect = QWindowsStyle::subElementRect(sr, option); + } + return rect; +} + +/*! + \reimp +*/ +void QWindowsXPStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *option, QPainter *p) const +{ + QWindowsXPStylePrivate *d = const_cast(d_func()); + + if (!QWindowsXPStylePrivate::useXP()) { + QWindowsStyle::drawPrimitive(pe, option, p); + return; + } + + int themeNumber = -1; + int partId = 0; + int stateId = 0; + QRect rect = option->rect; + State flags = option->state; + bool hMirrored = false; + bool vMirrored = false; + bool noBorder = false; + bool noContent = false; + int rotate = 0; + + switch (pe) { +#if 0 + case PE_FrameTabBarBase: + if (const QStyleOptionTabBarBase *tbb + = qstyleoption_cast(option)) { + p->save(); + switch (tbb->shape) { + case QTabBar::RoundedNorth: + p->setPen(QPen(tbb->palette.dark(), 0)); + p->drawLine(tbb->rect.topLeft(), tbb->rect.topRight()); + break; + case QTabBar::RoundedWest: + p->setPen(QPen(tbb->palette.dark(), 0)); + p->drawLine(tbb->rect.left(), tbb->rect.top(), tbb->rect.left(), tbb->rect.bottom()); + break; + case QTabBar::RoundedSouth: + p->setPen(QPen(tbb->palette.dark(), 0)); + p->drawLine(tbb->rect.left(), tbb->rect.top(), + tbb->rect.right(), tbb->rect.top()); + break; + case QTabBar::RoundedEast: + p->setPen(QPen(tbb->palette.dark(), 0)); + p->drawLine(tbb->rect.topLeft(), tbb->rect.bottomLeft()); + break; + case QTabBar::TriangularNorth: + case QTabBar::TriangularEast: + case QTabBar::TriangularWest: + case QTabBar::TriangularSouth: + p->restore(); + QWindowsStyle::drawPrimitive(pe, option, p); + return; + } + p->restore(); + } + return; +#endif + case PE_PanelButtonBevel: + themeNumber = QWindowsXPStylePrivate::ButtonTheme; + partId = BP_PUSHBUTTON; + if (!(flags & State_Enabled)) + stateId = PBS_DISABLED; + else if ((flags & State_Sunken) || (flags & State_On)) + stateId = PBS_PRESSED; + else if (flags & State_MouseOver) + stateId = PBS_HOT; + //else if (flags & State_ButtonDefault) + // stateId = PBS_DEFAULTED; + else + stateId = PBS_NORMAL; + break; + + case PE_PanelButtonTool: +// if (widget && widget->inherits("QDockWidgetTitleButton")) { +// if (const QWidget *dw = widget->parentWidget()) +// if (dw->isWindow()) +// return; +// } + themeNumber = QWindowsXPStylePrivate::ToolBarTheme; + partId = TP_BUTTON; + if (!(flags & State_Enabled)) + stateId = TS_DISABLED; + else if (flags & State_Sunken) + stateId = TS_PRESSED; + else if (flags & State_MouseOver) + stateId = flags & State_On ? TS_HOTCHECKED : TS_HOT; + else if (flags & State_On) + stateId = TS_CHECKED; + else if (!(flags & State_AutoRaise)) + stateId = TS_HOT; + else + stateId = TS_NORMAL; + break; + + case PE_IndicatorButtonDropDown: + themeNumber = QWindowsXPStylePrivate::ToolBarTheme; + partId = TP_SPLITBUTTONDROPDOWN; + if (!(flags & State_Enabled)) + stateId = TS_DISABLED; + else if (flags & State_Sunken) + stateId = TS_PRESSED; + else if (flags & State_MouseOver) + stateId = flags & State_On ? TS_HOTCHECKED : TS_HOT; + else if (flags & State_On) + stateId = TS_CHECKED; + else if (!(flags & State_AutoRaise)) + stateId = TS_HOT; + else + stateId = TS_NORMAL; + if (option->direction == Qt::RightToLeft) + hMirrored = true; + break; + + case PE_IndicatorCheckBox: + themeNumber = QWindowsXPStylePrivate::ButtonTheme; + partId = BP_CHECKBOX; + if (!(flags & State_Enabled)) + stateId = CBS_UNCHECKEDDISABLED; + else if (flags & State_Sunken) + stateId = CBS_UNCHECKEDPRESSED; + else if (flags & State_MouseOver) + stateId = CBS_UNCHECKEDHOT; + else + stateId = CBS_UNCHECKEDNORMAL; + + if (flags & State_On) + stateId += CBS_CHECKEDNORMAL-1; + else if (flags & State_NoChange) + stateId += CBS_MIXEDNORMAL-1; + + break; + + case PE_IndicatorRadioButton: + themeNumber = QWindowsXPStylePrivate::ButtonTheme; + partId = BP_RADIOBUTTON; + if (!(flags & State_Enabled)) + stateId = RBS_UNCHECKEDDISABLED; + else if (flags & State_Sunken) + stateId = RBS_UNCHECKEDPRESSED; + else if (flags & State_MouseOver) + stateId = RBS_UNCHECKEDHOT; + else + stateId = RBS_UNCHECKEDNORMAL; + + if (flags & State_On) + stateId += RBS_CHECKEDNORMAL-1; + break; + + case PE_IndicatorDockWidgetResizeHandle: + return; + +case PE_Frame: + { + if (flags & State_Raised) + return; + themeNumber = QWindowsXPStylePrivate::ListViewTheme; + partId = LVP_LISTGROUP; + XPThemeData theme(option->window, nullptr, themeNumber, partId); + + if (!(flags & State_Enabled)) + stateId = ETS_DISABLED; + else + stateId = ETS_NORMAL; + int fillType; + if (GetThemeEnumValue(theme.handle(), partId, stateId, TMT_BGTYPE, &fillType) == S_OK) { + if (fillType == BT_BORDERFILL) { + COLORREF bcRef; + GetThemeColor(theme.handle(), partId, stateId, TMT_BORDERCOLOR, &bcRef); + QColor bordercolor(qRgb(GetRValue(bcRef), GetGValue(bcRef), GetBValue(bcRef))); + QPen oldPen = p->pen(); + // int borderSize = 1; + // GetThemeInt(theme.handle(), partId, stateId, TMT_BORDERCOLOR, &borderSize); + + // Inner white border + p->setPen(QPen(option->palette.base().color(), 0)); + const qreal dpi = QStyleHelper::dpi(option); + const auto topLevelAdjustment = QStyleHelper::dpiScaled(0.5, dpi); + const auto bottomRightAdjustment = QStyleHelper::dpiScaled(-1, dpi); + p->drawRect(QRectF(option->rect).adjusted(topLevelAdjustment, topLevelAdjustment, + bottomRightAdjustment, bottomRightAdjustment)); + // Outer dark border + p->setPen(QPen(bordercolor, 0)); + p->drawRect(QRectF(option->rect).adjusted(0, 0, -topLevelAdjustment, -topLevelAdjustment)); + p->setPen(oldPen); + return; + } + if (fillType == BT_NONE) + return; + } + break; + } + case PE_FrameLineEdit: { + // we try to check if this lineedit is a delegate on a QAbstractItemView-derived class. + /* + if (QWindowsXPStylePrivate::isItemViewDelegateLineEdit(widget)) { + QPen oldPen = p->pen(); + // Inner white border + p->setPen(QPen(option->palette.base().color(), 1)); + p->drawRect(option->rect.adjusted(1, 1, -2, -2)); + // Outer dark border + p->setPen(QPen(option->palette.shadow().color(), 1)); + p->drawRect(option->rect.adjusted(0, 0, -1, -1)); + p->setPen(oldPen); + return; + } + */ + if (qstyleoption_cast(option)) { + themeNumber = QWindowsXPStylePrivate::EditTheme; + partId = EP_EDITTEXT; + noContent = true; + if (!(flags & State_Enabled)) + stateId = ETS_DISABLED; + else + stateId = ETS_NORMAL; + } + break; + } + + case PE_PanelLineEdit: + if (const QStyleOptionFrame *panel = qstyleoption_cast(option)) { + themeNumber = QWindowsXPStylePrivate::EditTheme; + partId = EP_EDITTEXT; + noBorder = true; + bool isEnabled = flags & State_Enabled; + + stateId = isEnabled ? ETS_NORMAL : ETS_DISABLED; + + /*if (QWindowsXPStylePrivate::isLineEditBaseColorSet(option, widget)) { + p->fillRect(panel->rect, panel->palette.brush(QPalette::Base)); + } else*/ { + XPThemeData theme(nullptr, p, themeNumber, partId, stateId, rect); + if (!theme.isValid()) { + QWindowsStyle::drawPrimitive(pe, option, p); + return; + } + int bgType; + GetThemeEnumValue(theme.handle(), partId, stateId, TMT_BGTYPE, &bgType); + if ( bgType == BT_IMAGEFILE ) { + theme.mirrorHorizontally = hMirrored; + theme.mirrorVertically = vMirrored; + theme.noBorder = noBorder; + theme.noContent = noContent; + theme.rotate = rotate; + d->drawBackground(theme); + } else { + QBrush fillColor = option->palette.brush(QPalette::Base); + + if (!isEnabled) { + PROPERTYORIGIN origin = PO_NOTFOUND; + GetThemePropertyOrigin(theme.handle(), theme.partId, theme.stateId, TMT_FILLCOLOR, &origin); + // Use only if the fill property comes from our part + if ((origin == PO_PART || origin == PO_STATE)) { + COLORREF bgRef; + GetThemeColor(theme.handle(), partId, stateId, TMT_FILLCOLOR, &bgRef); + fillColor = QBrush(qRgb(GetRValue(bgRef), GetGValue(bgRef), GetBValue(bgRef))); + } + } + p->fillRect(option->rect, fillColor); + } + } + + if (panel->lineWidth > 0) + proxy()->drawPrimitive(PE_FrameLineEdit, panel, p); + return; + } + break; +#if 0 + case PE_FrameTabWidget: + if (const QStyleOptionTabWidgetFrame *tab = qstyleoption_cast(option)) + { + themeNumber = QWindowsXPStylePrivate::TabTheme; + partId = TABP_PANE; + + if (option->window) { + bool useGradient = true; + const int maxlength = 256; + wchar_t themeFileName[maxlength]; + wchar_t themeColor[maxlength]; + // Due to a a scaling issue with the XP Silver theme, tab gradients are not used with it + if (GetCurrentThemeName(themeFileName, maxlength, themeColor, maxlength, nullptr, 0) == S_OK) { + wchar_t *offset = nullptr; + if ((offset = wcsrchr(themeFileName, QChar(QLatin1Char('\\')).unicode())) != nullptr) { + offset++; + if (!lstrcmp(offset, L"Luna.msstyles") && !lstrcmp(offset, L"Metallic")) { + useGradient = false; + } + } + } + // This should work, but currently there's an error in the ::drawBackgroundDirectly() + // code, when using the HDC directly.. + if (useGradient) { + QStyleOptionTabWidgetFrame frameOpt = *tab; + //frameOpt.rect = widget->rect(); + + QRect contentsRect = subElementRect(SE_TabWidgetTabContents, &frameOpt); + QRegion reg = option->rect; + reg -= contentsRect; + p->setClipRegion(reg); + XPThemeData theme(option->window, p, themeNumber, partId, stateId, rect); + theme.mirrorHorizontally = hMirrored; + theme.mirrorVertically = vMirrored; + d->drawBackground(theme); + p->setClipRect(contentsRect); + partId = TABP_BODY; + } + } + switch (tab->shape) { + case QTabBar::RoundedNorth: + case QTabBar::TriangularNorth: + break; + case QTabBar::RoundedSouth: + case QTabBar::TriangularSouth: + vMirrored = true; + break; + case QTabBar::RoundedEast: + case QTabBar::TriangularEast: + rotate = 90; + break; + case QTabBar::RoundedWest: + case QTabBar::TriangularWest: + rotate = 90; + hMirrored = true; + break; + default: + break; + } + } + break; +#endif + case PE_FrameMenu: + p->save(); + p->setPen(option->palette.dark().color()); + p->drawRect(rect.adjusted(0, 0, -1, -1)); + p->restore(); + return; + + case PE_PanelMenuBar: + break; + + case PE_FrameDockWidget: + if (const QStyleOptionFrame *frm = qstyleoption_cast(option)) + { + themeNumber = QWindowsXPStylePrivate::WindowTheme; + if (flags & State_Active) + stateId = FS_ACTIVE; + else + stateId = FS_INACTIVE; + + int fwidth = proxy()->pixelMetric(PM_DockWidgetFrameWidth, frm); + + XPThemeData theme(option->window, p, themeNumber, 0, stateId); + if (!theme.isValid()) + break; + theme.rect = QRect(frm->rect.x(), frm->rect.y(), frm->rect.x()+fwidth, frm->rect.height()-fwidth); theme.partId = WP_SMALLFRAMELEFT; + d->drawBackground(theme); + theme.rect = QRect(frm->rect.width()-fwidth, frm->rect.y(), fwidth, frm->rect.height()-fwidth); + theme.partId = WP_SMALLFRAMERIGHT; + d->drawBackground(theme); + theme.rect = QRect(frm->rect.x(), frm->rect.bottom()-fwidth+1, frm->rect.width(), fwidth); + theme.partId = WP_SMALLFRAMEBOTTOM; + d->drawBackground(theme); + return; + } + break; + + case PE_IndicatorHeaderArrow: + { +#if 0 // XP theme engine doesn't know about this :( + name = QWindowsXPStylePrivate::HeaderTheme; + partId = HP_HEADERSORTARROW; + if (flags & State_Down) + stateId = HSAS_SORTEDDOWN; + else + stateId = HSAS_SORTEDUP; +#else + if (const QStyleOptionHeader *header = qstyleoption_cast(option)) { + p->save(); + p->setPen(option->palette.dark().color()); + p->translate(0, option->rect.height()/2 - 4); + if (header->sortIndicator & QStyleOptionHeader::SortUp) { // invert logic to follow Windows style guide + p->drawLine(option->rect.x(), option->rect.y(), option->rect.x()+8, option->rect.y()); + p->drawLine(option->rect.x()+1, option->rect.y()+1, option->rect.x()+7, option->rect.y()+1); + p->drawLine(option->rect.x()+2, option->rect.y()+2, option->rect.x()+6, option->rect.y()+2); + p->drawLine(option->rect.x()+3, option->rect.y()+3, option->rect.x()+5, option->rect.y()+3); + p->drawPoint(option->rect.x()+4, option->rect.y()+4); + } else if (header->sortIndicator & QStyleOptionHeader::SortDown) { + p->drawLine(option->rect.x(), option->rect.y()+4, option->rect.x()+8, option->rect.y()+4); + p->drawLine(option->rect.x()+1, option->rect.y()+3, option->rect.x()+7, option->rect.y()+3); + p->drawLine(option->rect.x()+2, option->rect.y()+2, option->rect.x()+6, option->rect.y()+2); + p->drawLine(option->rect.x()+3, option->rect.y()+1, option->rect.x()+5, option->rect.y()+1); + p->drawPoint(option->rect.x()+4, option->rect.y()); + } + p->restore(); + return; + } +#endif + } + break; + + case PE_FrameStatusBarItem: + themeNumber = QWindowsXPStylePrivate::StatusTheme; + partId = SP_PANE; + break; + + case PE_FrameGroupBox: + themeNumber = QWindowsXPStylePrivate::ButtonTheme; + partId = BP_GROUPBOX; + if (!(flags & State_Enabled)) + stateId = GBS_DISABLED; + else + stateId = GBS_NORMAL; + if (const QStyleOptionFrame *frame = qstyleoption_cast(option)) { + if (frame->features & QStyleOptionFrame::Flat) { + // Windows XP does not have a theme part for a flat GroupBox, paint it with the windows style + QRect fr = frame->rect; + QPoint p1(fr.x(), fr.y() + 1); + QPoint p2(fr.x() + fr.width(), p1.y() + 1); + rect = QRect(p1, p2); + themeNumber = -1; + } + } + break; + + case PE_IndicatorProgressChunk: + { + Qt::Orientation orient = Qt::Horizontal; + bool inverted = false; + if (const QStyleOptionProgressBar *pb = qstyleoption_cast(option)) { + orient = pb->state & QStyle::State_Horizontal ? Qt::Horizontal : Qt::Vertical; + inverted = pb->invertedAppearance; + } + if (orient == Qt::Horizontal) { + partId = PP_CHUNK; + rect = QRect(option->rect.x(), option->rect.y(), option->rect.width(), option->rect.height() ); + if (inverted && option->direction == Qt::LeftToRight) + hMirrored = true; + } else { + partId = PP_CHUNKVERT; + rect = QRect(option->rect.x(), option->rect.y(), option->rect.width(), option->rect.height()); + } + themeNumber = QWindowsXPStylePrivate::ProgressTheme; + stateId = 1; + } + break; + + case PE_FrameWindow: + if (const QStyleOptionFrame *frm = qstyleoption_cast(option)) + { + themeNumber = QWindowsXPStylePrivate::WindowTheme; + if (flags & State_Active) + stateId = FS_ACTIVE; + else + stateId = FS_INACTIVE; + + int fwidth = int((frm->lineWidth + frm->midLineWidth) / QWindowsStylePrivate::nativeMetricScaleFactor(option)); + + XPThemeData theme(option->window, p, themeNumber, 0, stateId); + if (!theme.isValid()) + break; + + // May fail due to too-large buffers for large widgets, fall back to Windows style. + theme.rect = QRect(option->rect.x(), option->rect.y()+fwidth, option->rect.x()+fwidth, option->rect.height()-fwidth); + theme.partId = WP_FRAMELEFT; + if (!d->drawBackground(theme)) { + QWindowsStyle::drawPrimitive(pe, option, p); + return; + } + theme.rect = QRect(option->rect.width()-fwidth, option->rect.y()+fwidth, fwidth, option->rect.height()-fwidth); + theme.partId = WP_FRAMERIGHT; + if (!d->drawBackground(theme)) { + QWindowsStyle::drawPrimitive(pe, option, p); + return; + } + theme.rect = QRect(option->rect.x(), option->rect.height()-fwidth, option->rect.width(), fwidth); + theme.partId = WP_FRAMEBOTTOM; + if (!d->drawBackground(theme)) { + QWindowsStyle::drawPrimitive(pe, option, p); + return; + } + theme.rect = QRect(option->rect.x(), option->rect.y(), option->rect.width(), option->rect.y()+fwidth); + theme.partId = WP_CAPTION; + if (!d->drawBackground(theme)) + QWindowsStyle::drawPrimitive(pe, option, p); + return; + } + break; + + case PE_IndicatorBranch: + { + static const int decoration_size = 9; + int mid_h = option->rect.x() + option->rect.width() / 2; + int mid_v = option->rect.y() + option->rect.height() / 2; + int bef_h = mid_h; + int bef_v = mid_v; + int aft_h = mid_h; + int aft_v = mid_v; + QBrush brush(option->palette.dark().color(), Qt::Dense4Pattern); + if (option->state & State_Item) { + if (option->direction == Qt::RightToLeft) + p->fillRect(option->rect.left(), mid_v, bef_h - option->rect.left(), 1, brush); + else + p->fillRect(aft_h, mid_v, option->rect.right() - aft_h + 1, 1, brush); + } + if (option->state & State_Sibling) + p->fillRect(mid_h, aft_v, 1, option->rect.bottom() - aft_v + 1, brush); + if (option->state & (State_Open | State_Children | State_Item | State_Sibling)) + p->fillRect(mid_h, option->rect.y(), 1, bef_v - option->rect.y(), brush); + if (option->state & State_Children) { + int delta = decoration_size / 2; + bef_h -= delta; + bef_v -= delta; + aft_h += delta; + aft_v += delta; + XPThemeData theme(nullptr, p, QWindowsXPStylePrivate::XpTreeViewTheme); + theme.rect = QRect(bef_h, bef_v, decoration_size, decoration_size); + theme.partId = TVP_GLYPH; + theme.stateId = flags & QStyle::State_Open ? GLPS_OPENED : GLPS_CLOSED; + d->drawBackground(theme); + } + } + return; + + case PE_IndicatorToolBarSeparator: + if (option->rect.height() < 3) { + // XP style requires a few pixels for the separator + // to be visible. + QWindowsStyle::drawPrimitive(pe, option, p); + return; + } + themeNumber = QWindowsXPStylePrivate::ToolBarTheme; + partId = TP_SEPARATOR; + + if (option->state & State_Horizontal) + partId = TP_SEPARATOR; + else + partId = TP_SEPARATORVERT; + + break; + + case PE_IndicatorToolBarHandle: + + themeNumber = QWindowsXPStylePrivate::RebarTheme; + partId = RP_GRIPPER; + if (option->state & State_Horizontal) { + partId = RP_GRIPPER; + rect.adjust(0, 0, -2, 0); + } + else { + partId = RP_GRIPPERVERT; + rect.adjust(0, 0, 0, -2); + } + break; + + case PE_IndicatorItemViewItemCheck: { + QStyleOptionButton button; + button.QStyleOption::operator=(*option); + button.state &= ~State_MouseOver; + proxy()->drawPrimitive(PE_IndicatorCheckBox, &button, p); + return; + } + + default: + break; + } + + XPThemeData theme(option->window, p, themeNumber, partId, stateId, rect); + if (!theme.isValid()) { + QWindowsStyle::drawPrimitive(pe, option, p); + return; + } + theme.mirrorHorizontally = hMirrored; + theme.mirrorVertically = vMirrored; + theme.noBorder = noBorder; + theme.noContent = noContent; + theme.rotate = rotate; + d->drawBackground(theme); +} + +/*! + \reimp +*/ +void QWindowsXPStyle::drawControl(ControlElement element, const QStyleOption *option, QPainter *p) const +{ + QWindowsXPStylePrivate *d = const_cast(d_func()); + if (!QWindowsXPStylePrivate::useXP()) { + QWindowsStyle::drawControl(element, option, p); + return; + } + + QRect rect(option->rect); + State flags = option->state; + + int rotate = 0; + bool hMirrored = false; + bool vMirrored = false; + + int themeNumber = -1; + int partId = 0; + int stateId = 0; + switch (element) { + case CE_SizeGrip: + { + themeNumber = QWindowsXPStylePrivate::StatusTheme; + partId = SP_GRIPPER; + XPThemeData theme(nullptr, p, themeNumber, partId); + QSize size = (theme.size() * QWindowsStylePrivate::nativeMetricScaleFactor(option)).toSize(); + size.rheight()--; + if (const QStyleOptionSizeGrip *sg = qstyleoption_cast(option)) { + switch (sg->corner) { + case Qt::BottomRightCorner: + rect = QRect(QPoint(rect.right() - size.width(), rect.bottom() - size.height()), size); + break; + case Qt::BottomLeftCorner: + rect = QRect(QPoint(rect.left() + 1, rect.bottom() - size.height()), size); + hMirrored = true; + break; + case Qt::TopRightCorner: + rect = QRect(QPoint(rect.right() - size.width(), rect.top() + 1), size); + vMirrored = true; + break; + case Qt::TopLeftCorner: + rect = QRect(rect.topLeft() + QPoint(1, 1), size); + hMirrored = vMirrored = true; + } + } + } + break; + + case CE_HeaderSection: + themeNumber = QWindowsXPStylePrivate::HeaderTheme; + partId = HP_HEADERITEM; + if (flags & State_Sunken) + stateId = HIS_PRESSED; + else if (flags & State_MouseOver) + stateId = HIS_HOT; + else + stateId = HIS_NORMAL; + break; + + case CE_Splitter: + p->eraseRect(option->rect); + return; + + case CE_PushButtonBevel: + if (const QStyleOptionButton *btn = qstyleoption_cast(option)) + { + themeNumber = QWindowsXPStylePrivate::ButtonTheme; + partId = BP_PUSHBUTTON; + bool justFlat = ((btn->features & QStyleOptionButton::Flat) && !(flags & (State_On|State_Sunken))) + || ((btn->features & QStyleOptionButton::CommandLinkButton) + && !(flags & State_MouseOver) + && !(btn->features & QStyleOptionButton::DefaultButton)); + if (!(flags & State_Enabled) && !(btn->features & QStyleOptionButton::Flat)) + stateId = PBS_DISABLED; + else if (justFlat) + ; + else if (flags & (State_Sunken | State_On)) + stateId = PBS_PRESSED; + else if (flags & State_MouseOver) + stateId = PBS_HOT; + else if (btn->features & QStyleOptionButton::DefaultButton) + stateId = PBS_DEFAULTED; + else + stateId = PBS_NORMAL; + + if (!justFlat) { + XPThemeData theme(option->window, p, themeNumber, partId, stateId, rect); + d->drawBackground(theme); + } + + if (btn->features & QStyleOptionButton::HasMenu) { + int mbiw = 0, mbih = 0; + XPThemeData theme(option->window, nullptr, + QWindowsXPStylePrivate::ToolBarTheme, + TP_SPLITBUTTONDROPDOWN); + if (theme.isValid()) { + const QSize size = (theme.size() * QWindowsStylePrivate::nativeMetricScaleFactor(option)).toSize(); + mbiw = size.width(); + mbih = size.height(); + } + + QRect ir = btn->rect; + QStyleOptionButton newBtn = *btn; + newBtn.rect = QRect(ir.right() - mbiw - 1, 1 + (ir.height()/2) - (mbih/2), mbiw, mbih); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &newBtn, p); + } + return; + } + break; + case CE_TabBarTab: + if (const QStyleOptionTab *tab = qstyleoption_cast(option)) + { + stateId = tab->state & State_Enabled ? TIS_NORMAL : TIS_DISABLED; + } + break; +#if 0 + case CE_TabBarTabShape: + if (const QStyleOptionTab *tab = qstyleoption_cast(option)) + { + themeNumber = QWindowsXPStylePrivate::TabTheme; + bool isDisabled = !(tab->state & State_Enabled); + bool hasFocus = tab->state & State_HasFocus; + bool isHot = tab->state & State_MouseOver; + bool selected = tab->state & State_Selected; + bool lastTab = tab->position == QStyleOptionTab::End; + bool firstTab = tab->position == QStyleOptionTab::Beginning; + bool onlyOne = tab->position == QStyleOptionTab::OnlyOneTab; + bool leftAligned = proxy()->styleHint(SH_TabBar_Alignment, tab) == Qt::AlignLeft; + bool centerAligned = proxy()->styleHint(SH_TabBar_Alignment, tab) == Qt::AlignCenter; + int borderThickness = proxy()->pixelMetric(PM_DefaultFrameWidth, option); + int tabOverlap = proxy()->pixelMetric(PM_TabBarTabOverlap, option); + + if (isDisabled) + stateId = TIS_DISABLED; + else if (selected) + stateId = TIS_SELECTED; + else if (hasFocus) + stateId = TIS_FOCUSED; + else if (isHot) + stateId = TIS_HOT; + else + stateId = TIS_NORMAL; + + // Selecting proper part depending on position + if (firstTab || onlyOne) { + if (leftAligned) { + partId = TABP_TABITEMLEFTEDGE; + } else if (centerAligned) { + partId = TABP_TABITEM; + } else { // rightAligned + partId = TABP_TABITEMRIGHTEDGE; + } + } else { + partId = TABP_TABITEM; + } + + if (tab->direction == Qt::RightToLeft + && (tab->shape == QTabBar::RoundedNorth + || tab->shape == QTabBar::RoundedSouth)) { + bool temp = firstTab; + firstTab = lastTab; + lastTab = temp; + } + bool begin = firstTab || onlyOne; + bool end = lastTab || onlyOne; + switch (tab->shape) { + case QTabBar::RoundedNorth: + if (selected) + rect.adjust(begin ? 0 : -tabOverlap, 0, end ? 0 : tabOverlap, borderThickness); + else + rect.adjust(begin? tabOverlap : 0, tabOverlap, end ? -tabOverlap : 0, 0); + break; + case QTabBar::RoundedSouth: + //vMirrored = true; + rotate = 180; // Not 100% correct, but works + if (selected) + rect.adjust(begin ? 0 : -tabOverlap , -borderThickness, end ? 0 : tabOverlap, 0); + else + rect.adjust(begin ? tabOverlap : 0, 0, end ? -tabOverlap : 0 , -tabOverlap); + break; + case QTabBar::RoundedEast: + rotate = 90; + if (selected) { + rect.adjust(-borderThickness, begin ? 0 : -tabOverlap, 0, end ? 0 : tabOverlap); + }else{ + rect.adjust(0, begin ? tabOverlap : 0, -tabOverlap, end ? -tabOverlap : 0); + } + break; + case QTabBar::RoundedWest: + hMirrored = true; + rotate = 90; + if (selected) { + rect.adjust(0, begin ? 0 : -tabOverlap, borderThickness, end ? 0 : tabOverlap); + }else{ + rect.adjust(tabOverlap, begin ? tabOverlap : 0, 0, end ? -tabOverlap : 0); + } + break; + default: + themeNumber = -1; // Do our own painting for triangular + break; + } + + if (!selected) { + switch (tab->shape) { + case QTabBar::RoundedNorth: + rect.adjust(0,0, 0,-1); + break; + case QTabBar::RoundedSouth: + rect.adjust(0,1, 0,0); + break; + case QTabBar::RoundedEast: + rect.adjust( 1,0, 0,0); + break; + case QTabBar::RoundedWest: + rect.adjust(0,0, -1,0); + break; + default: + break; + } + } + } + break; +#endif + case CE_ProgressBarGroove: + { + Qt::Orientation orient = Qt::Horizontal; + if (const QStyleOptionProgressBar *pb = qstyleoption_cast(option)) + orient = pb->state & QStyle::State_Horizontal ? Qt::Horizontal : Qt::Vertical; + partId = (orient == Qt::Horizontal) ? PP_BAR : PP_BARVERT; + themeNumber = QWindowsXPStylePrivate::ProgressTheme; + stateId = 1; + } + break; + + case CE_MenuEmptyArea: + case CE_MenuItem: + if (const QStyleOptionMenuItem *menuitem = qstyleoption_cast(option)) + { + int tab = menuitem->tabWidth; + bool dis = !(menuitem->state & State_Enabled); + bool act = menuitem->state & State_Selected; + bool checkable = menuitem->menuHasCheckableItems; + bool checked = checkable ? menuitem->checked : false; + + // windows always has a check column, regardless whether we have an icon or not + int checkcol = qMax(menuitem->maxIconWidth, 12); + + int x, y, w, h; + rect.getRect(&x, &y, &w, &h); + + QBrush fill = menuitem->palette.brush(act ? QPalette::Highlight : QPalette::Button); + p->fillRect(rect, fill); + + if (element == CE_MenuEmptyArea) + break; + + // draw separator ------------------------------------------------- + if (menuitem->menuItemType == QStyleOptionMenuItem::Separator) { + int yoff = y-1 + h / 2; + p->setPen(menuitem->palette.dark().color()); + p->drawLine(x, yoff, x+w, yoff); + ++yoff; + p->setPen(menuitem->palette.light().color()); + p->drawLine(x, yoff, x+w, yoff); + return; + } + + int xpos = x; + + // draw icon ------------------------------------------------------ + if (!menuitem->icon.isNull()) { + QIcon::Mode mode = dis ? QIcon::Disabled : QIcon::Normal; + if (act && !dis) + mode = QIcon::Active; + QPixmap pixmap = checked ? + menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option), mode, QIcon::On) : + menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option), mode); + const int pixw = pixmap.width() / pixmap.devicePixelRatio(); + const int pixh = pixmap.height() / pixmap.devicePixelRatio(); + QRect iconRect(0, 0, pixw, pixh); + iconRect.moveCenter(QRect(xpos, y, checkcol, h).center()); + QRect vIconRect = visualRect(option->direction, option->rect, iconRect); + p->setPen(menuitem->palette.text().color()); + p->setBrush(Qt::NoBrush); + if (checked) + p->drawRect(vIconRect.adjusted(-1, -1, 0, 0)); + p->drawPixmap(vIconRect.topLeft(), pixmap); + + // draw checkmark ------------------------------------------------- + } else if (checked) { + QStyleOptionMenuItem newMi = *menuitem; + newMi.state = State_None; + if (!dis) + newMi.state |= State_Enabled; + if (act) + newMi.state |= State_On; + + QRect checkMarkRect = QRect(menuitem->rect.x() + windowsItemFrame, + menuitem->rect.y() + windowsItemFrame, + checkcol - 2 * windowsItemFrame, + menuitem->rect.height() - 2*windowsItemFrame); + newMi.rect = visualRect(option->direction, option->rect, checkMarkRect); + proxy()->drawPrimitive(PE_IndicatorMenuCheckMark, &newMi, p); + } + + QColor textColor = dis ? menuitem->palette.text().color() : + act ? menuitem->palette.highlightedText().color() : menuitem->palette.buttonText().color(); + p->setPen(textColor); + + // draw text ------------------------------------------------------ + int xm = windowsItemFrame + checkcol + windowsItemHMargin; + xpos = menuitem->rect.x() + xm; + QRect textRect(xpos, y + windowsItemVMargin, w - xm - windowsRightBorder - tab + 1, h - 2 * windowsItemVMargin); + QRect vTextRect = visualRect(option->direction, option->rect, textRect); + QString s = menuitem->text; + if (!s.isEmpty()) { + p->save(); + int t = s.indexOf(QLatin1Char('\t')); + int text_flags = Qt::AlignVCenter|Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine | Qt::AlignLeft; + if (!proxy()->styleHint(SH_UnderlineShortcut, menuitem)) + text_flags |= Qt::TextHideMnemonic; + // draw tab text ---------------- + if (t >= 0) { + QRect vShortcutRect = visualRect(option->direction, option->rect, QRect(textRect.topRight(), menuitem->rect.bottomRight())); + if (dis && !act && proxy()->styleHint(SH_EtchDisabledText, option)) { + p->setPen(menuitem->palette.light().color()); + p->drawText(vShortcutRect.adjusted(1,1,1,1), text_flags, s.mid(t + 1)); + p->setPen(textColor); + } + p->drawText(vShortcutRect, text_flags, s.mid(t + 1)); + s = s.left(t); + } + QFont font = menuitem->font; + if (menuitem->menuItemType == QStyleOptionMenuItem::DefaultItem) + font.setBold(true); + p->setFont(font); + if (dis && !act && proxy()->styleHint(SH_EtchDisabledText, option)) { + p->setPen(menuitem->palette.light().color()); + p->drawText(vTextRect.adjusted(1,1,1,1), text_flags, s.left(t)); + p->setPen(textColor); + } + p->drawText(vTextRect, text_flags, s); + p->restore(); + } + + // draw sub menu arrow -------------------------------------------- + if (menuitem->menuItemType == QStyleOptionMenuItem::SubMenu) { + int dim = (h - 2) / 2; + PrimitiveElement arrow; + arrow = (option->direction == Qt::RightToLeft) ? PE_IndicatorArrowLeft : PE_IndicatorArrowRight; + xpos = x + w - windowsArrowHMargin - windowsItemFrame - dim; + QRect vSubMenuRect = visualRect(option->direction, option->rect, QRect(xpos, y + h / 2 - dim / 2, dim, dim)); + QStyleOptionMenuItem newMI = *menuitem; + newMI.rect = vSubMenuRect; + newMI.state = dis ? State_None : State_Enabled; + if (act) + newMI.palette.setColor(QPalette::ButtonText, newMI.palette.highlightedText().color()); + proxy()->drawPrimitive(arrow, &newMI, p); + } + } + return; + + case CE_MenuBarItem: + if (const QStyleOptionMenuItem *mbi = qstyleoption_cast(option)) + { + if (mbi->menuItemType == QStyleOptionMenuItem::DefaultItem) + break; + + bool act = mbi->state & State_Selected; + bool dis = !(mbi->state & State_Enabled); + + QBrush fill = mbi->palette.brush(act ? QPalette::Highlight : QPalette::Button); + QPalette::ColorRole textRole = dis ? QPalette::Text: + act ? QPalette::HighlightedText : QPalette::ButtonText; + QPixmap pix = mbi->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option), QIcon::Normal); + + uint alignment = Qt::AlignCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine; + if (!proxy()->styleHint(SH_UnderlineShortcut, mbi)) + alignment |= Qt::TextHideMnemonic; + + p->fillRect(rect, fill); + if (!pix.isNull()) + drawItemPixmap(p, mbi->rect, alignment, pix); + else + drawItemText(p, mbi->rect, alignment, mbi->palette, mbi->state & State_Enabled, mbi->text, textRole); + } + return; +#if 0 && QT_CONFIG(dockwidget) + case CE_DockWidgetTitle: + if (const QStyleOptionDockWidget *dwOpt = qstyleoption_cast(option)) + { + int buttonMargin = 4; + int mw = proxy()->pixelMetric(QStyle::PM_DockWidgetTitleMargin, dwOpt); + int fw = proxy()->pixelMetric(PM_DockWidgetFrameWidth, dwOpt); + bool isFloating = false; // widget && widget->isWindow(); + bool isActive = dwOpt->state & State_Active; + + const bool verticalTitleBar = dwOpt->verticalTitleBar; + + if (verticalTitleBar) { + rect = rect.transposed(); + + p->translate(rect.left() - 1, rect.top() + rect.width()); + p->rotate(-90); + p->translate(-rect.left() + 1, -rect.top()); + } + QRect r = rect.adjusted(0, 2, -1, -3); + QRect titleRect = r; + + if (dwOpt->closable) { + QSize sz = proxy()->standardIcon(QStyle::SP_TitleBarCloseButton, dwOpt).actualSize(QSize(10, 10)); + titleRect.adjust(0, 0, -sz.width() - mw - buttonMargin, 0); + } + + if (dwOpt->floatable) { + QSize sz = proxy()->standardIcon(QStyle::SP_TitleBarMaxButton, dwOpt).actualSize(QSize(10, 10)); + titleRect.adjust(0, 0, -sz.width() - mw - buttonMargin, 0); + } + + if (isFloating) { + titleRect.adjust(0, -fw, 0, 0); + if (option->window && option->window->icon().cacheKey() != QApplication::windowIcon().cacheKey()) + titleRect.adjust(titleRect.height() + mw, 0, 0, 0); + } else { + titleRect.adjust(mw, 0, 0, 0); + if (!dwOpt->floatable && !dwOpt->closable) + titleRect.adjust(0, 0, -mw, 0); + } + + if (!verticalTitleBar) + titleRect = visualRect(dwOpt->direction, r, titleRect); + + if (!isFloating) { + QPen oldPen = p->pen(); + QString titleText = p->fontMetrics().elidedText(dwOpt->title, Qt::ElideRight, titleRect.width()); + p->setPen(dwOpt->palette.color(QPalette::Dark)); + p->drawRect(r); + + if (!titleText.isEmpty()) { + drawItemText(p, titleRect, + Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic, dwOpt->palette, + dwOpt->state & State_Enabled, titleText, + QPalette::WindowText); + } + + p->setPen(oldPen); + } else { + themeNumber = QWindowsXPStylePrivate::WindowTheme; + if (isActive) + stateId = CS_ACTIVE; + else + stateId = CS_INACTIVE; + + int titleHeight = rect.height() - 2; + rect = rect.adjusted(-fw, -fw, fw, 0); + + XPThemeData theme(option->window, p, themeNumber, 0, stateId); + if (!theme.isValid()) + break; + + // Draw small type title bar + theme.rect = rect; + theme.partId = WP_SMALLCAPTION; + d->drawBackground(theme); + + // Figure out maximal button space on title bar + + QIcon ico = option->window->icon(); + bool hasIcon = (ico.cacheKey() != QApplication::windowIcon().cacheKey()); + if (hasIcon) { + QPixmap pxIco = ico.pixmap(titleHeight); + if (!verticalTitleBar && dwOpt->direction == Qt::RightToLeft) + p->drawPixmap(rect.width() - titleHeight - pxIco.width(), rect.bottom() - titleHeight - 2, pxIco); + else + p->drawPixmap(fw, rect.bottom() - titleHeight - 2, pxIco); + } + if (!dwOpt->title.isEmpty()) { + QPen oldPen = p->pen(); + QFont oldFont = p->font(); + QFont titleFont = oldFont; + titleFont.setBold(true); + p->setFont(titleFont); + QString titleText + = p->fontMetrics().elidedText(dwOpt->title, Qt::ElideRight, titleRect.width()); + + int result = TST_NONE; + GetThemeEnumValue(theme.handle(), WP_SMALLCAPTION, isActive ? CS_ACTIVE : CS_INACTIVE, TMT_TEXTSHADOWTYPE, &result); + if (result != TST_NONE) { + COLORREF textShadowRef; + GetThemeColor(theme.handle(), WP_SMALLCAPTION, isActive ? CS_ACTIVE : CS_INACTIVE, TMT_TEXTSHADOWCOLOR, &textShadowRef); + QColor textShadow = qRgb(GetRValue(textShadowRef), GetGValue(textShadowRef), GetBValue(textShadowRef)); + p->setPen(textShadow); + drawItemText(p, titleRect.adjusted(1, 1, 1, 1), + Qt::AlignLeft | Qt::AlignBottom, dwOpt->palette, + dwOpt->state & State_Enabled, titleText); + } + + COLORREF captionText = GetSysColor(isActive ? COLOR_CAPTIONTEXT : COLOR_INACTIVECAPTIONTEXT); + QColor textColor = qRgb(GetRValue(captionText), GetGValue(captionText), GetBValue(captionText)); + p->setPen(textColor); + drawItemText(p, titleRect, + Qt::AlignLeft | Qt::AlignBottom, dwOpt->palette, + dwOpt->state & State_Enabled, titleText); + p->setFont(oldFont); + p->setPen(oldPen); + } + + } + + return; + } + break; +#endif // QT_CONFIG(dockwidget) +#if 0 && QT_CONFIG(rubberband) + case CE_RubberBand: + if (qstyleoption_cast(option)) { + QColor highlight = option->palette.color(QPalette::Active, QPalette::Highlight); + p->save(); + p->setPen(highlight.darker(120)); + QColor dimHighlight(qMin(highlight.red()/2 + 110, 255), + qMin(highlight.green()/2 + 110, 255), + qMin(highlight.blue()/2 + 110, 255), + 127); + //(widget && widget->isTopLevel())? 255 : 127); + p->setBrush(dimHighlight); + p->drawRect(option->rect.adjusted(0, 0, -1, -1)); + p->restore(); + return; + } + break; +#endif // QT_CONFIG(rubberband) + case CE_HeaderEmptyArea: + if (option->state & State_Horizontal) + { + themeNumber = QWindowsXPStylePrivate::HeaderTheme; + stateId = HIS_NORMAL; + } + else { + QWindowsStyle::drawControl(CE_HeaderEmptyArea, option, p); + return; + } + break; + default: + break; + } + + XPThemeData theme(option->window, p, themeNumber, partId, stateId, rect); + if (!theme.isValid()) { + QWindowsStyle::drawControl(element, option, p); + return; + } + + theme.rotate = rotate; + theme.mirrorHorizontally = hMirrored; + theme.mirrorVertically = vMirrored; + d->drawBackground(theme); +} + +QRect QWindowsXPStylePrivate::scrollBarGripperBounds(QStyle::State flags, XPThemeData *theme) +{ + const bool horizontal = flags & QStyle::State_Horizontal; + const qreal factor = QWindowsStylePrivate::nativeMetricScaleFactor(theme->window); + const QMargins contentsMargin = + (theme->margins(theme->rect, TMT_SIZINGMARGINS) * factor).toMargins(); + theme->partId = horizontal ? SBP_GRIPPERHORZ : SBP_GRIPPERVERT; + const QSize size = (theme->size() * factor).toSize(); + + const int hSpace = theme->rect.width() - size.width(); + const int vSpace = theme->rect.height() - size.height(); + const bool sufficientSpace = (horizontal && hSpace > (contentsMargin.left() + contentsMargin.right())) + || vSpace > contentsMargin.top() + contentsMargin.bottom(); + return sufficientSpace ? QRect(theme->rect.topLeft() + QPoint(hSpace, vSpace) / 2, size) : QRect(); +} + +#if 0 && QT_CONFIG(mdiarea) +// Helper for drawing MDI buttons into the corner widget of QMenuBar in case a +// QMdiSubWindow is maximized. +static void populateMdiButtonTheme(const QStyle *proxy, + const QStyleOptionComplex *option, + QStyle::SubControl subControl, int part, + XPThemeData *theme) +{ + theme->partId = part; + theme->rect = proxy->subControlRect(QStyle::CC_MdiControls, option, subControl); + if (!option->state.testFlag(QStyle::State_Enabled)) + theme->stateId = CBS_INACTIVE; + else if (option->state.testFlag(QStyle::State_Sunken) && option->activeSubControls.testFlag(subControl)) + theme->stateId = CBS_PUSHED; + else if (option->state.testFlag(QStyle::State_MouseOver) && option->activeSubControls.testFlag(subControl)) + theme->stateId = CBS_HOT; + else + theme->stateId = CBS_NORMAL; +} + +// Calculate an small (max 2), empirical correction factor for scaling up +// WP_MDICLOSEBUTTON, WP_MDIRESTOREBUTTON, WP_MDIMINBUTTON, which are too +// small on High DPI screens (QTBUG-75927). +qreal mdiButtonCorrectionFactor(XPThemeData &theme, const QPaintDevice *pd = nullptr) +{ + const auto dpr = pd ? pd->devicePixelRatioF() : qApp->devicePixelRatio(); + const QSizeF nativeSize = QSizeF(theme.size()) / dpr; + const QSizeF requestedSize(theme.rect.size()); + const auto rawFactor = qMin(requestedSize.width() / nativeSize.width(), + requestedSize.height() / nativeSize.height()); + const auto factor = rawFactor >= qreal(2) ? qreal(2) : qreal(1); + return factor; +} +#endif // QT_CONFIG(mdiarea) + +static void populateTitleBarButtonTheme(const QStyle *proxy, + const QStyleOptionComplex *option, + QStyle::SubControl subControl, + bool isTitleBarActive, int part, + XPThemeData *theme) +{ + theme->rect = proxy->subControlRect(QStyle::CC_TitleBar, option, subControl); + theme->partId = part; + if (!(option->state & QStyle::State_Enabled)) + theme->stateId = RBS_DISABLED; + else if (option->activeSubControls == subControl && option->state.testFlag(QStyle::State_Sunken)) + theme->stateId = RBS_PUSHED; + else if (option->activeSubControls == subControl && option->state.testFlag(QStyle::State_MouseOver)) + theme->stateId = RBS_HOT; + else if (!isTitleBarActive) + theme->stateId = RBS_INACTIVE; + else + theme->stateId = RBS_NORMAL; +} + +/*! + \reimp +*/ +void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex *option, + QPainter *p) const +{ + QWindowsXPStylePrivate *d = const_cast(d_func()); + + if (!QWindowsXPStylePrivate::useXP()) { + QWindowsStyle::drawComplexControl(cc, option, p); + return; + } + + State flags = option->state; + SubControls sub = option->subControls; + QRect r = option->rect; + + int partId = 0; + int stateId = 0; + if (option->window && option->window->isActive()) + flags |= State_MouseOver; + + switch (cc) { +//#if QT_CONFIG(spinbox) + case CC_SpinBox: + if (const QStyleOptionSpinBox *sb = qstyleoption_cast(option)) + { + XPThemeData theme(option->window, p, QWindowsXPStylePrivate::SpinTheme); + + if (sb->frame && (sub & SC_SpinBoxFrame)) { + partId = EP_EDITTEXT; + if (!(flags & State_Enabled)) + stateId = ETS_DISABLED; + else if (flags & State_HasFocus) + stateId = ETS_FOCUSED; + else + stateId = ETS_NORMAL; + + XPThemeData ftheme(option->window, p, QWindowsXPStylePrivate::EditTheme, + partId, stateId, r); + ftheme.noContent = true; + d->drawBackground(ftheme); + } + if (sub & SC_SpinBoxUp) { + theme.rect = proxy()->subControlRect(CC_SpinBox, option, SC_SpinBoxUp); + partId = SPNP_UP; + if (!(sb->stepEnabled & QStyleOptionSpinBox::StepUpEnabled) || !(flags & State_Enabled)) + stateId = UPS_DISABLED; + else if (sb->activeSubControls == SC_SpinBoxUp && (sb->state & State_Sunken)) + stateId = UPS_PRESSED; + else if (sb->activeSubControls == SC_SpinBoxUp && (sb->state & State_MouseOver)) + stateId = UPS_HOT; + else + stateId = UPS_NORMAL; + theme.partId = partId; + theme.stateId = stateId; + d->drawBackground(theme); + } + if (sub & SC_SpinBoxDown) { + theme.rect = proxy()->subControlRect(CC_SpinBox, option, SC_SpinBoxDown); + partId = SPNP_DOWN; + if (!(sb->stepEnabled & QStyleOptionSpinBox::StepDownEnabled) || !(flags & State_Enabled)) + stateId = DNS_DISABLED; + else if (sb->activeSubControls == SC_SpinBoxDown && (sb->state & State_Sunken)) + stateId = DNS_PRESSED; + else if (sb->activeSubControls == SC_SpinBoxDown && (sb->state & State_MouseOver)) + stateId = DNS_HOT; + else + stateId = DNS_NORMAL; + theme.partId = partId; + theme.stateId = stateId; + d->drawBackground(theme); + } + } + break; +//#endif // QT_CONFIG(spinbox) +//#if QT_CONFIG(combobox) + case CC_ComboBox: + if (const QStyleOptionComboBox *cmb = qstyleoption_cast(option)) + { + if (cmb->editable) { + if (sub & SC_ComboBoxEditField) { + partId = EP_EDITBORDER_NOSCROLL; + if (!(flags & State_Enabled)) + stateId = ETS_DISABLED; + else if (flags & State_MouseOver) + stateId = ETS_HOT; + else if (flags & State_HasFocus) + stateId = ETS_FOCUSED; + else + stateId = ETS_NORMAL; + + XPThemeData theme(option->window, p, + QWindowsXPStylePrivate::EditTheme, + partId, stateId, r); + + d->drawBackground(theme); + } + if (sub & SC_ComboBoxArrow) { + QRect subRect = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxArrow); + XPThemeData theme(option->window, p, QWindowsXPStylePrivate::ComboboxTheme); + theme.rect = subRect; + partId = option->direction == Qt::RightToLeft ? CP_DROPDOWNBUTTONLEFT : CP_DROPDOWNBUTTONRIGHT; + + if (!(cmb->state & State_Enabled)) + stateId = CBXS_DISABLED; + else if (cmb->state & State_Sunken || cmb->state & State_On) + stateId = CBXS_PRESSED; + else if (cmb->state & State_MouseOver && option->activeSubControls & SC_ComboBoxArrow) + stateId = CBXS_HOT; + else + stateId = CBXS_NORMAL; + + theme.partId = partId; + theme.stateId = stateId; + d->drawBackground(theme); + } + + } else { + if (sub & SC_ComboBoxFrame) { + XPThemeData theme(option->window, p, QWindowsXPStylePrivate::ComboboxTheme); + theme.rect = option->rect; + theme.partId = CP_READONLY; + if (!(cmb->state & State_Enabled)) + theme.stateId = CBXS_DISABLED; + else if (cmb->state & State_Sunken || cmb->state & State_On) + theme.stateId = CBXS_PRESSED; + else if (cmb->state & State_MouseOver) + theme.stateId = CBXS_HOT; + else + theme.stateId = CBXS_NORMAL; + d->drawBackground(theme); + } + if (sub & SC_ComboBoxArrow) { + XPThemeData theme(option->window, p, QWindowsXPStylePrivate::ComboboxTheme); + theme.rect = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxArrow); + theme.partId = option->direction == Qt::RightToLeft ? CP_DROPDOWNBUTTONLEFT : CP_DROPDOWNBUTTONRIGHT; + if (!(cmb->state & State_Enabled)) + theme.stateId = CBXS_DISABLED; + else + theme.stateId = CBXS_NORMAL; + d->drawBackground(theme); + } + if ((sub & SC_ComboBoxEditField) && (flags & State_HasFocus)) { + QStyleOptionFocusRect fropt; + fropt.QStyleOption::operator=(*cmb); + fropt.rect = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxEditField); + proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, p); + } + } + } + break; +//#endif // QT_CONFIG(combobox) + case CC_ScrollBar: + if (const QStyleOptionSlider *scrollbar = qstyleoption_cast(option)) + { + XPThemeData theme(option->window, p, QWindowsXPStylePrivate::ScrollBarTheme); + bool maxedOut = (scrollbar->maximum == scrollbar->minimum); + if (maxedOut) + flags &= ~State_Enabled; + + bool isHorz = flags & State_Horizontal; + bool isRTL = option->direction == Qt::RightToLeft; + if (sub & SC_ScrollBarAddLine) { + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarAddLine); + partId = SBP_ARROWBTN; + if (!(flags & State_Enabled)) + stateId = (isHorz ? (isRTL ? ABS_LEFTDISABLED : ABS_RIGHTDISABLED) : ABS_DOWNDISABLED); + else if (scrollbar->activeSubControls & SC_ScrollBarAddLine && (scrollbar->state & State_Sunken)) + stateId = (isHorz ? (isRTL ? ABS_LEFTPRESSED : ABS_RIGHTPRESSED) : ABS_DOWNPRESSED); + else if (scrollbar->activeSubControls & SC_ScrollBarAddLine && (scrollbar->state & State_MouseOver)) + stateId = (isHorz ? (isRTL ? ABS_LEFTHOT : ABS_RIGHTHOT) : ABS_DOWNHOT); + else + stateId = (isHorz ? (isRTL ? ABS_LEFTNORMAL : ABS_RIGHTNORMAL) : ABS_DOWNNORMAL); + theme.partId = partId; + theme.stateId = stateId; + d->drawBackground(theme); + } + if (sub & SC_ScrollBarSubLine) { + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSubLine); + partId = SBP_ARROWBTN; + if (!(flags & State_Enabled)) + stateId = (isHorz ? (isRTL ? ABS_RIGHTDISABLED : ABS_LEFTDISABLED) : ABS_UPDISABLED); + else if (scrollbar->activeSubControls & SC_ScrollBarSubLine && (scrollbar->state & State_Sunken)) + stateId = (isHorz ? (isRTL ? ABS_RIGHTPRESSED : ABS_LEFTPRESSED) : ABS_UPPRESSED); + else if (scrollbar->activeSubControls & SC_ScrollBarSubLine && (scrollbar->state & State_MouseOver)) + stateId = (isHorz ? (isRTL ? ABS_RIGHTHOT : ABS_LEFTHOT) : ABS_UPHOT); + else + stateId = (isHorz ? (isRTL ? ABS_RIGHTNORMAL : ABS_LEFTNORMAL) : ABS_UPNORMAL); + theme.partId = partId; + theme.stateId = stateId; + d->drawBackground(theme); + } + if (maxedOut) { + if (sub & SC_ScrollBarSlider) { + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider); + theme.rect = theme.rect.united(proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSubPage)); + theme.rect = theme.rect.united(proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarAddPage)); + partId = scrollbar->orientation == Qt::Horizontal ? SBP_LOWERTRACKHORZ : SBP_LOWERTRACKVERT; + stateId = SCRBS_DISABLED; + theme.partId = partId; + theme.stateId = stateId; + d->drawBackground(theme); + } + } else { + if (sub & SC_ScrollBarSubPage) { + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSubPage); + partId = flags & State_Horizontal ? SBP_UPPERTRACKHORZ : SBP_UPPERTRACKVERT; + if (!(flags & State_Enabled)) + stateId = SCRBS_DISABLED; + else if (scrollbar->activeSubControls & SC_ScrollBarSubPage && (scrollbar->state & State_Sunken)) + stateId = SCRBS_PRESSED; + else if (scrollbar->activeSubControls & SC_ScrollBarSubPage && (scrollbar->state & State_MouseOver)) + stateId = SCRBS_HOT; + else + stateId = SCRBS_NORMAL; + theme.partId = partId; + theme.stateId = stateId; + d->drawBackground(theme); + } + if (sub & SC_ScrollBarAddPage) { + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarAddPage); + partId = flags & State_Horizontal ? SBP_LOWERTRACKHORZ : SBP_LOWERTRACKVERT; + if (!(flags & State_Enabled)) + stateId = SCRBS_DISABLED; + else if (scrollbar->activeSubControls & SC_ScrollBarAddPage && (scrollbar->state & State_Sunken)) + stateId = SCRBS_PRESSED; + else if (scrollbar->activeSubControls & SC_ScrollBarAddPage && (scrollbar->state & State_MouseOver)) + stateId = SCRBS_HOT; + else + stateId = SCRBS_NORMAL; + theme.partId = partId; + theme.stateId = stateId; + d->drawBackground(theme); + } + if (sub & SC_ScrollBarSlider) { + QRect rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider); + // The style paint the slider handle so that it is surrounded by transparent areas + // on each side. These areas have the same size as the Left/Right (or Top/Left) buttons. + // This is probaly done in order for the handle to travel all along the geometry + // of the slider, while the handle still not occluding the buttons. + // We do not want those transparent areas, so we clip them off here. + const QSize handleSize = proxy()->subControlRect(QStyle::CC_ScrollBar, scrollbar, QStyle::SC_ScrollBarAddLine).size(); + + if (scrollbar->orientation == Qt::Vertical) { + const int handleHeight = handleSize.height(); + rect.setBottom(rect.bottom() + 2 * handleHeight); + p->setClipRect(r.adjusted(0, 0, 0, handleHeight)); + p->translate(0, -handleHeight); + } else { + const int handleWidth = handleSize.width(); + rect.setRight(rect.right() + 2 * handleWidth); + p->setClipRect(r.adjusted(0, 0, handleWidth, 0)); + p->translate(-handleWidth, 0); + } + + theme.rect = rect; + if (!(flags & State_Enabled)) + stateId = SCRBS_DISABLED; + else if (scrollbar->activeSubControls & SC_ScrollBarSlider && (scrollbar->state & State_Sunken)) + stateId = SCRBS_PRESSED; + else if (scrollbar->activeSubControls & SC_ScrollBarSlider && (scrollbar->state & State_MouseOver)) + stateId = SCRBS_HOT; + else + stateId = SCRBS_NORMAL; + + // Draw handle + theme.partId = flags & State_Horizontal ? SBP_THUMBBTNHORZ : SBP_THUMBBTNVERT; + theme.stateId = stateId; + d->drawBackground(theme); + + const QRect gripperBounds = QWindowsXPStylePrivate::scrollBarGripperBounds(flags, &theme); + // Draw gripper if there is enough space + if (!gripperBounds.isEmpty()) { + p->save(); + theme.rect = gripperBounds; + p->setClipRegion(d->region(theme));// Only change inside the region of the gripper + d->drawBackground(theme); // Transparent gripper ontop of background + p->restore(); + } + } + } + } + break; + +//#if QT_CONFIG(slider) + case CC_Slider: + if (const QStyleOptionSlider *slider = qstyleoption_cast(option)) + { + XPThemeData theme(option->window, p, QWindowsXPStylePrivate::TrackBarTheme); + QRect slrect = slider->rect; + QRegion tickreg = slrect; + if (sub & SC_SliderGroove) { + theme.rect = proxy()->subControlRect(CC_Slider, option, SC_SliderGroove); + if (slider->orientation == Qt::Horizontal) { + partId = TKP_TRACK; + stateId = TRS_NORMAL; + theme.rect = QRect(slrect.left(), theme.rect.center().y() - 2, slrect.width(), 4); + } else { + partId = TKP_TRACKVERT; + stateId = TRVS_NORMAL; + theme.rect = QRect(theme.rect.center().x() - 2, slrect.top(), 4, slrect.height()); + } + theme.partId = partId; + theme.stateId = stateId; + d->drawBackground(theme); + tickreg -= theme.rect; + } + if (sub & SC_SliderTickmarks) { + int tickOffset = proxy()->pixelMetric(PM_SliderTickmarkOffset, slider); + int ticks = slider->tickPosition; + int thickness = proxy()->pixelMetric(PM_SliderControlThickness, slider); + int len = proxy()->pixelMetric(PM_SliderLength, slider); + int available = proxy()->pixelMetric(PM_SliderSpaceAvailable, slider); + int interval = slider->tickInterval; + if (interval <= 0) { + interval = slider->singleStep; + if (QStyle::sliderPositionFromValue(slider->minimum, slider->maximum, interval, + available) + - QStyle::sliderPositionFromValue(slider->minimum, slider->maximum, + 0, available) < 3) + interval = slider->pageStep; + } + if (!interval) + interval = 1; + int fudge = len / 2; + int pos; + int bothOffset = (ticks & QStyleOptionSlider::TicksAbove && ticks & QStyleOptionSlider::TicksBelow) ? 1 : 0; + p->setPen(d->sliderTickColor); + QVarLengthArray lines; + int v = slider->minimum; + while (v <= slider->maximum + 1) { + if (v == slider->maximum + 1 && interval == 1) + break; + const int v_ = qMin(v, slider->maximum); + int tickLength = (v_ == slider->minimum || v_ >= slider->maximum) ? 4 : 3; + pos = QStyle::sliderPositionFromValue(slider->minimum, slider->maximum, + v_, available) + fudge; + if (slider->orientation == Qt::Horizontal) { + if (ticks & QStyleOptionSlider::TicksAbove) + lines.append(QLine(pos, tickOffset - 1 - bothOffset, + pos, tickOffset - 1 - bothOffset - tickLength)); + + if (ticks & QStyleOptionSlider::TicksBelow) + lines.append(QLine(pos, tickOffset + thickness + bothOffset, + pos, tickOffset + thickness + bothOffset + tickLength)); + } else { + if (ticks & QStyleOptionSlider::TicksAbove) + lines.append(QLine(tickOffset - 1 - bothOffset, pos, + tickOffset - 1 - bothOffset - tickLength, pos)); + + if (ticks & QStyleOptionSlider::TicksBelow) + lines.append(QLine(tickOffset + thickness + bothOffset, pos, + tickOffset + thickness + bothOffset + tickLength, pos)); + } + // in the case where maximum is max int + int nextInterval = v + interval; + if (nextInterval < v) + break; + v = nextInterval; + } + if (!lines.isEmpty()) { + p->save(); + p->translate(slrect.topLeft()); + p->drawLines(lines.constData(), lines.size()); + p->restore(); + } + } + if (sub & SC_SliderHandle) { + theme.rect = proxy()->subControlRect(CC_Slider, option, SC_SliderHandle); + if (slider->orientation == Qt::Horizontal) { + if (slider->tickPosition == QStyleOptionSlider::TicksAbove) + partId = TKP_THUMBTOP; + else if (slider->tickPosition == QStyleOptionSlider::TicksBelow) + partId = TKP_THUMBBOTTOM; + else + partId = TKP_THUMB; + + if (!(slider->state & State_Enabled)) + stateId = TUS_DISABLED; + else if (slider->activeSubControls & SC_SliderHandle && (slider->state & State_Sunken)) + stateId = TUS_PRESSED; + else if (slider->activeSubControls & SC_SliderHandle && (slider->state & State_MouseOver)) + stateId = TUS_HOT; + else if (flags & State_HasFocus) + stateId = TUS_FOCUSED; + else + stateId = TUS_NORMAL; + } else { + if (slider->tickPosition == QStyleOptionSlider::TicksLeft) + partId = TKP_THUMBLEFT; + else if (slider->tickPosition == QStyleOptionSlider::TicksRight) + partId = TKP_THUMBRIGHT; + else + partId = TKP_THUMBVERT; + + if (!(slider->state & State_Enabled)) + stateId = TUVS_DISABLED; + else if (slider->activeSubControls & SC_SliderHandle && (slider->state & State_Sunken)) + stateId = TUVS_PRESSED; + else if (slider->activeSubControls & SC_SliderHandle && (slider->state & State_MouseOver)) + stateId = TUVS_HOT; + else if (flags & State_HasFocus) + stateId = TUVS_FOCUSED; + else + stateId = TUVS_NORMAL; + } + theme.partId = partId; + theme.stateId = stateId; + d->drawBackground(theme); + } + if (sub & SC_SliderGroove && slider->state & State_HasFocus) { + QStyleOptionFocusRect fropt; + fropt.QStyleOption::operator=(*slider); + fropt.rect = subElementRect(SE_SliderFocusRect, slider); + proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, p); + } + } + break; +//#endif +#if 0 && QT_CONFIG(toolbutton) + case CC_ToolButton: + if (const QStyleOptionToolButton *toolbutton + = qstyleoption_cast(option)) { + QRect button, menuarea; + button = proxy()->subControlRect(cc, toolbutton, SC_ToolButton); + menuarea = proxy()->subControlRect(cc, toolbutton, SC_ToolButtonMenu); + + State bflags = toolbutton->state & ~State_Sunken; + State mflags = bflags; + bool autoRaise = flags & State_AutoRaise; + if (autoRaise) { + if (!(bflags & State_MouseOver) || !(bflags & State_Enabled)) { + bflags &= ~State_Raised; + } + } + + if (toolbutton->state & State_Sunken) { + if (toolbutton->activeSubControls & SC_ToolButton) { + bflags |= State_Sunken; + mflags |= State_MouseOver | State_Sunken; + } else if (toolbutton->activeSubControls & SC_ToolButtonMenu) { + mflags |= State_Sunken; + bflags |= State_MouseOver; + } + } + + QStyleOption tool = *toolbutton; + if (toolbutton->subControls & SC_ToolButton) { + if (flags & (State_Sunken | State_On | State_Raised) || !autoRaise) { + if (toolbutton->features & QStyleOptionToolButton::MenuButtonPopup && autoRaise) { + XPThemeData theme(option->window, p, QWindowsXPStylePrivate::ToolBarTheme); + theme.partId = TP_SPLITBUTTON; + theme.rect = button; + if (!(bflags & State_Enabled)) + stateId = TS_DISABLED; + else if (bflags & State_Sunken) + stateId = TS_PRESSED; + else if (bflags & State_MouseOver || !(flags & State_AutoRaise)) + stateId = flags & State_On ? TS_HOTCHECKED : TS_HOT; + else if (bflags & State_On) + stateId = TS_CHECKED; + else + stateId = TS_NORMAL; + if (option->direction == Qt::RightToLeft) + theme.mirrorHorizontally = true; + theme.stateId = stateId; + d->drawBackground(theme); + } else { + tool.rect = option->rect; + tool.state = bflags; + if (autoRaise) // for tool bars + proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p); + else + proxy()->drawPrimitive(PE_PanelButtonBevel, &tool, p); + } + } + } + + if (toolbutton->state & State_HasFocus) { + QStyleOptionFocusRect fr; + fr.QStyleOption::operator=(*toolbutton); + fr.rect.adjust(3, 3, -3, -3); + if (toolbutton->features & QStyleOptionToolButton::MenuButtonPopup) + fr.rect.adjust(0, 0, -proxy()->pixelMetric(QStyle::PM_MenuButtonIndicator, + toolbutton), 0); + proxy()->drawPrimitive(PE_FrameFocusRect, &fr, p); + } + QStyleOptionToolButton label = *toolbutton; + label.state = bflags; + int fw = 2; + if (!autoRaise) + label.state &= ~State_Sunken; + label.rect = button.adjusted(fw, fw, -fw, -fw); + proxy()->drawControl(CE_ToolButtonLabel, &label, p); + + if (toolbutton->subControls & SC_ToolButtonMenu) { + tool.rect = menuarea; + tool.state = mflags; + if (autoRaise) { + proxy()->drawPrimitive(PE_IndicatorButtonDropDown, &tool, p); + } else { + tool.state = mflags; + menuarea.adjust(-2, 0, 0, 0); + // Draw menu button + if ((bflags & State_Sunken) != (mflags & State_Sunken)){ + p->save(); + p->setClipRect(menuarea); + tool.rect = option->rect; + proxy()->drawPrimitive(PE_PanelButtonBevel, &tool, p); + p->restore(); + } + // Draw arrow + p->save(); + p->setPen(option->palette.dark().color()); + p->drawLine(menuarea.left(), menuarea.top() + 3, + menuarea.left(), menuarea.bottom() - 3); + p->setPen(option->palette.light().color()); + p->drawLine(menuarea.left() - 1, menuarea.top() + 3, + menuarea.left() - 1, menuarea.bottom() - 3); + + tool.rect = menuarea.adjusted(2, 3, -2, -1); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &tool, p); + p->restore(); + } + } else if (toolbutton->features & QStyleOptionToolButton::HasMenu) { + int mbi = proxy()->pixelMetric(PM_MenuButtonIndicator, toolbutton); + QRect ir = toolbutton->rect; + QStyleOptionToolButton newBtn = *toolbutton; + newBtn.rect = QRect(ir.right() + 4 - mbi, ir.height() - mbi + 4, mbi - 5, mbi - 5); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &newBtn, p); + } + } + break; +#endif // QT_CONFIG(toolbutton) + + case CC_TitleBar: + { + if (const QStyleOptionTitleBar *tb = qstyleoption_cast(option)) + { + const qreal factor = QWindowsStylePrivate::nativeMetricScaleFactor(option); + bool isActive = tb->titleBarState & QStyle::State_Active; + XPThemeData theme(option->window, p, QWindowsXPStylePrivate::WindowTheme); + if (sub & SC_TitleBarLabel) { + + partId = (tb->titleBarState & Qt::WindowMinimized) ? WP_MINCAPTION : WP_CAPTION; + theme.rect = option->rect; + if (!(option->state & QStyle::State_Enabled)) + stateId = CS_DISABLED; + else if (isActive) + stateId = CS_ACTIVE; + else + stateId = CS_INACTIVE; + + theme.partId = partId; + theme.stateId = stateId; + d->drawBackground(theme); + + QRect ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarLabel); + + int result = TST_NONE; + GetThemeEnumValue(theme.handle(), WP_CAPTION, isActive ? CS_ACTIVE : CS_INACTIVE, TMT_TEXTSHADOWTYPE, &result); + if (result != TST_NONE) { + COLORREF textShadowRef; + GetThemeColor(theme.handle(), WP_CAPTION, isActive ? CS_ACTIVE : CS_INACTIVE, TMT_TEXTSHADOWCOLOR, &textShadowRef); + QColor textShadow = qRgb(GetRValue(textShadowRef), GetGValue(textShadowRef), GetBValue(textShadowRef)); + p->setPen(textShadow); + p->drawText(int(ir.x() + 3 * factor), int(ir.y() + 2 * factor), + int(ir.width() - 1 * factor), ir.height(), + Qt::AlignLeft | Qt::AlignVCenter | Qt::TextSingleLine, tb->text); + } + COLORREF captionText = GetSysColor(isActive ? COLOR_CAPTIONTEXT : COLOR_INACTIVECAPTIONTEXT); + QColor textColor = qRgb(GetRValue(captionText), GetGValue(captionText), GetBValue(captionText)); + p->setPen(textColor); + p->drawText(int(ir.x() + 2 * factor), int(ir.y() + 1 * factor), + int(ir.width() - 2 * factor), ir.height(), + Qt::AlignLeft | Qt::AlignVCenter | Qt::TextSingleLine, tb->text); + } + if (sub & SC_TitleBarSysMenu && tb->titleBarFlags & Qt::WindowSystemMenuHint) { + theme.rect = proxy()->subControlRect(CC_TitleBar, option, SC_TitleBarSysMenu); + partId = WP_SYSBUTTON; + if (!(option->state & QStyle::State_Enabled) || !isActive) + stateId = SBS_DISABLED; + else if (option->activeSubControls == SC_TitleBarSysMenu && (option->state & State_Sunken)) + stateId = SBS_PUSHED; + else if (option->activeSubControls == SC_TitleBarSysMenu && (option->state & State_MouseOver)) + stateId = SBS_HOT; + else + stateId = SBS_NORMAL; + if (!tb->icon.isNull()) { + tb->icon.paint(p, theme.rect); + } else { + theme.partId = partId; + theme.stateId = stateId; + if (theme.size().isEmpty()) { + int iconSize = proxy()->pixelMetric(PM_SmallIconSize, tb); + QPixmap pm = proxy()->standardIcon(SP_TitleBarMenuButton, tb).pixmap(iconSize, iconSize); + p->save(); + drawItemPixmap(p, theme.rect, Qt::AlignCenter, pm); + p->restore(); + } else { + d->drawBackground(theme); + } + } + } + + if (sub & SC_TitleBarMinButton && tb->titleBarFlags & Qt::WindowMinimizeButtonHint + && !(tb->titleBarState & Qt::WindowMinimized)) { + populateTitleBarButtonTheme(proxy(), option, SC_TitleBarMinButton, isActive, WP_MINBUTTON, &theme); + d->drawBackground(theme); + } + if (sub & SC_TitleBarMaxButton && tb->titleBarFlags & Qt::WindowMaximizeButtonHint + && !(tb->titleBarState & Qt::WindowMaximized)) { + populateTitleBarButtonTheme(proxy(), option, SC_TitleBarMaxButton, isActive, WP_MAXBUTTON, &theme); + d->drawBackground(theme); + } + if (sub & SC_TitleBarContextHelpButton + && tb->titleBarFlags & Qt::WindowContextHelpButtonHint) { + populateTitleBarButtonTheme(proxy(), option, SC_TitleBarContextHelpButton, isActive, WP_HELPBUTTON, &theme); + d->drawBackground(theme); + } + bool drawNormalButton = (sub & SC_TitleBarNormalButton) + && (((tb->titleBarFlags & Qt::WindowMinimizeButtonHint) + && (tb->titleBarState & Qt::WindowMinimized)) + || ((tb->titleBarFlags & Qt::WindowMaximizeButtonHint) + && (tb->titleBarState & Qt::WindowMaximized))); + if (drawNormalButton) { + populateTitleBarButtonTheme(proxy(), option, SC_TitleBarNormalButton, isActive, WP_RESTOREBUTTON, &theme); + d->drawBackground(theme); + } + if (sub & SC_TitleBarShadeButton && tb->titleBarFlags & Qt::WindowShadeButtonHint + && !(tb->titleBarState & Qt::WindowMinimized)) { + populateTitleBarButtonTheme(proxy(), option, SC_TitleBarShadeButton, isActive, WP_MINBUTTON, &theme); + d->drawBackground(theme); + } + if (sub & SC_TitleBarUnshadeButton && tb->titleBarFlags & Qt::WindowShadeButtonHint + && tb->titleBarState & Qt::WindowMinimized) { + populateTitleBarButtonTheme(proxy(), option, SC_TitleBarUnshadeButton, isActive, WP_RESTOREBUTTON, &theme); + d->drawBackground(theme); + } + if (sub & SC_TitleBarCloseButton && tb->titleBarFlags & Qt::WindowSystemMenuHint) { + populateTitleBarButtonTheme(proxy(), option, SC_TitleBarCloseButton, isActive, WP_CLOSEBUTTON, &theme); + d->drawBackground(theme); + } + } + } + break; + +#if 0 && QT_CONFIG(mdiarea) + case CC_MdiControls: + { + XPThemeData theme(option->window, p, QWindowsXPStylePrivate::WindowTheme, WP_MDICLOSEBUTTON, CBS_NORMAL); + if (Q_UNLIKELY(!theme.isValid())) + return; + + if (option->subControls.testFlag(SC_MdiCloseButton)) { + populateMdiButtonTheme(proxy(), option, SC_MdiCloseButton, WP_MDICLOSEBUTTON, &theme); + d->drawBackground(theme, mdiButtonCorrectionFactor(theme)); + } + if (option->subControls.testFlag(SC_MdiNormalButton)) { + populateMdiButtonTheme(proxy(), option, SC_MdiNormalButton, WP_MDIRESTOREBUTTON, &theme); + d->drawBackground(theme, mdiButtonCorrectionFactor(theme)); + } + if (option->subControls.testFlag(QStyle::SC_MdiMinButton)) { + populateMdiButtonTheme(proxy(), option, SC_MdiMinButton, WP_MDIMINBUTTON, &theme); + d->drawBackground(theme, mdiButtonCorrectionFactor(theme)); + } + } + break; +#endif // QT_CONFIG(mdiarea) +#if 0 && QT_CONFIG(dial) + case CC_Dial: + if (const QStyleOptionSlider *dial = qstyleoption_cast(option)) + QStyleHelper::drawDial(dial, p); + break; +#endif // QT_CONFIG(dial) + default: + QWindowsStyle::drawComplexControl(cc, option, p); + break; + } +} + +static inline Qt::Orientation progressBarOrientation(const QStyleOption *option = nullptr) +{ + if (const QStyleOptionProgressBar *pb = qstyleoption_cast(option)) + return pb->state & QStyle::State_Horizontal ? Qt::Horizontal : Qt::Vertical; + return Qt::Horizontal; +} + +int QWindowsXPStylePrivate::pixelMetricFromSystemDp(QStyle::PixelMetric pm, const QStyleOption *option) +{ + switch (pm) { + case QStyle::PM_IndicatorWidth: + return XPThemeData::themeSize(option->window, nullptr, QWindowsXPStylePrivate::ButtonTheme, BP_CHECKBOX, CBS_UNCHECKEDNORMAL).width(); + case QStyle::PM_IndicatorHeight: + return XPThemeData::themeSize(option->window, nullptr, QWindowsXPStylePrivate::ButtonTheme, BP_CHECKBOX, CBS_UNCHECKEDNORMAL).height(); + case QStyle::PM_ExclusiveIndicatorWidth: + return XPThemeData::themeSize(option->window, nullptr, QWindowsXPStylePrivate::ButtonTheme, BP_RADIOBUTTON, RBS_UNCHECKEDNORMAL).width(); + case QStyle::PM_ExclusiveIndicatorHeight: + return XPThemeData::themeSize(option->window, nullptr, QWindowsXPStylePrivate::ButtonTheme, BP_RADIOBUTTON, RBS_UNCHECKEDNORMAL).height(); + case QStyle::PM_ProgressBarChunkWidth: + return progressBarOrientation(option) == Qt::Horizontal + ? XPThemeData::themeSize(option->window, nullptr, QWindowsXPStylePrivate::ProgressTheme, PP_CHUNK).width() + : XPThemeData::themeSize(option->window, nullptr, QWindowsXPStylePrivate::ProgressTheme, PP_CHUNKVERT).height(); + case QStyle::PM_SliderThickness: + return XPThemeData::themeSize(option->window, nullptr, QWindowsXPStylePrivate::TrackBarTheme, TKP_THUMB).height(); + case QStyle::PM_TitleBarHeight: + return option->window && (option->window->type() == Qt::Tool) + ? GetSystemMetrics(SM_CYSMCAPTION) + GetSystemMetrics(SM_CXSIZEFRAME) + : GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CXSIZEFRAME); + case QStyle::PM_MdiSubWindowFrameWidth: + return XPThemeData::themeSize(option->window, nullptr, QWindowsXPStylePrivate::WindowTheme, WP_FRAMELEFT, FS_ACTIVE).width(); + case QStyle::PM_DockWidgetFrameWidth: + return XPThemeData::themeSize(option->window, nullptr, QWindowsXPStylePrivate::WindowTheme, WP_SMALLFRAMERIGHT, FS_ACTIVE).width(); + default: + break; + } + return QWindowsXPStylePrivate::InvalidMetric; +} + +/*! \reimp */ +int QWindowsXPStyle::pixelMetric(PixelMetric pm, const QStyleOption *option) const +{ + if (!QWindowsXPStylePrivate::useXP()) + return QWindowsStyle::pixelMetric(pm, option); + + int res = QWindowsXPStylePrivate::pixelMetricFromSystemDp(pm, option); + if (res != QWindowsStylePrivate::InvalidMetric) + return qRound(qreal(res) * QWindowsStylePrivate::nativeMetricScaleFactor(option)); + + res = 0; + switch (pm) { + case PM_MenuBarPanelWidth: + case PM_ButtonDefaultIndicator: + res = 0; + break; + + case PM_DefaultFrameWidth: + res = 1; + //res = qobject_cast(widget) ? 2 : 1; + break; + case PM_MenuPanelWidth: + case PM_SpinBoxFrameWidth: + res = 1; + break; + + case PM_TabBarTabOverlap: + case PM_MenuHMargin: + case PM_MenuVMargin: + res = 2; + break; +#if 0 + case PM_TabBarBaseOverlap: + if (const QStyleOptionTab *tab = qstyleoption_cast(option)) { + switch (tab->shape) { + case QTabBar::RoundedNorth: + case QTabBar::TriangularNorth: + case QTabBar::RoundedWest: + case QTabBar::TriangularWest: + res = 1; + break; + case QTabBar::RoundedSouth: + case QTabBar::TriangularSouth: + res = 2; + break; + case QTabBar::RoundedEast: + case QTabBar::TriangularEast: + res = 3; + break; + } + } + break; +#endif + case PM_SplitterWidth: + res = QStyleHelper::dpiScaled(5., option); + break; + + case PM_MdiSubWindowMinimizedWidth: + res = 160; + break; + +#if 0 && QT_CONFIG(toolbar) + case PM_ToolBarHandleExtent: + res = int(QStyleHelper::dpiScaled(8., option)); + break; + +#endif // QT_CONFIG(toolbar) + case PM_DockWidgetSeparatorExtent: + case PM_DockWidgetTitleMargin: + res = int(QStyleHelper::dpiScaled(4., option)); + break; + + case PM_ButtonShiftHorizontal: + case PM_ButtonShiftVertical: + res = qstyleoption_cast(option) ? 1 : 0; + break; + + default: + res = QWindowsStyle::pixelMetric(pm, option); + } + + return res; +} + +/* + This function is used by subControlRect to check if a button + should be drawn for the given subControl given a set of window flags. +*/ +static bool buttonVisible(const QStyle::SubControl sc, const QStyleOptionTitleBar *tb){ + + bool isMinimized = tb->titleBarState & Qt::WindowMinimized; + bool isMaximized = tb->titleBarState & Qt::WindowMaximized; + const uint flags = tb->titleBarFlags; + bool retVal = false; + switch (sc) { + case QStyle::SC_TitleBarContextHelpButton: + if (flags & Qt::WindowContextHelpButtonHint) + retVal = true; + break; + case QStyle::SC_TitleBarMinButton: + if (!isMinimized && (flags & Qt::WindowMinimizeButtonHint)) + retVal = true; + break; + case QStyle::SC_TitleBarNormalButton: + if (isMinimized && (flags & Qt::WindowMinimizeButtonHint)) + retVal = true; + else if (isMaximized && (flags & Qt::WindowMaximizeButtonHint)) + retVal = true; + break; + case QStyle::SC_TitleBarMaxButton: + if (!isMaximized && (flags & Qt::WindowMaximizeButtonHint)) + retVal = true; + break; + case QStyle::SC_TitleBarShadeButton: + if (!isMinimized && flags & Qt::WindowShadeButtonHint) + retVal = true; + break; + case QStyle::SC_TitleBarUnshadeButton: + if (isMinimized && flags & Qt::WindowShadeButtonHint) + retVal = true; + break; + case QStyle::SC_TitleBarCloseButton: + if (flags & Qt::WindowSystemMenuHint) + retVal = true; + break; + case QStyle::SC_TitleBarSysMenu: + if (flags & Qt::WindowSystemMenuHint) + retVal = true; + break; + default : + retVal = true; + } + return retVal; +} + +/*! + \reimp +*/ +QRect QWindowsXPStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *option, + SubControl subControl) const +{ + if (!QWindowsXPStylePrivate::useXP()) + return QWindowsStyle::subControlRect(cc, option, subControl); + + QRect rect; + + switch (cc) { + case CC_GroupBox: + rect = visualRect(option->direction, option->rect, + QWindowsStyle::subControlRect(cc, option, subControl)); + if (subControl == QStyle::SC_GroupBoxContents) { + // This will add the margins that was added by QLayouts in QtWidgets + // (default to 9 for layouts inside a QGroupBox) + rect.adjust(9, 9, -9, -9); + } + break; + case CC_TitleBar: + if (const QStyleOptionTitleBar *tb = qstyleoption_cast(option)) { + if (!buttonVisible(subControl, tb)) + return rect; + const bool isToolTitle = false; + const int height = tb->rect.height(); + const int width = tb->rect.width(); + const int buttonMargin = int(QStyleHelper::dpiScaled(4, option)); + const qreal factor = QWindowsStylePrivate::nativeMetricScaleFactor(option); + int buttonHeight = qRound(qreal(GetSystemMetrics(SM_CYSIZE)) * factor) + - buttonMargin; + int buttonWidth = qRound(qreal(GetSystemMetrics(SM_CXSIZE)) * factor) + - buttonMargin; + const int delta = buttonWidth + 2; + int controlTop = option->rect.bottom() - buttonHeight - 2; + const int frameWidth = proxy()->pixelMetric(PM_MdiSubWindowFrameWidth, option); + const bool sysmenuHint = (tb->titleBarFlags & Qt::WindowSystemMenuHint) != 0; + const bool minimizeHint = (tb->titleBarFlags & Qt::WindowMinimizeButtonHint) != 0; + const bool maximizeHint = (tb->titleBarFlags & Qt::WindowMaximizeButtonHint) != 0; + const bool contextHint = (tb->titleBarFlags & Qt::WindowContextHelpButtonHint) != 0; + const bool shadeHint = (tb->titleBarFlags & Qt::WindowShadeButtonHint) != 0; + bool isMinimized = tb->titleBarState & Qt::WindowMinimized; + bool isMaximized = tb->titleBarState & Qt::WindowMaximized; + int offset = 0; + + switch (subControl) { + case SC_TitleBarLabel: + rect = QRect(frameWidth, 0, width - (buttonWidth + frameWidth + 10), height); + if (isToolTitle) { + if (sysmenuHint) { + rect.adjust(0, 0, -buttonWidth - 3, 0); + } + if (minimizeHint || maximizeHint) + rect.adjust(0, 0, -buttonWidth - 2, 0); + } else { + if (sysmenuHint) { + const int leftOffset = height - 8; + rect.adjust(leftOffset, 0, 0, 0); + } + if (minimizeHint) + rect.adjust(0, 0, -buttonWidth - 2, 0); + if (maximizeHint) + rect.adjust(0, 0, -buttonWidth - 2, 0); + if (contextHint) + rect.adjust(0, 0, -buttonWidth - 2, 0); + if (shadeHint) + rect.adjust(0, 0, -buttonWidth - 2, 0); + } + break; + + case SC_TitleBarContextHelpButton: + if (tb->titleBarFlags & Qt::WindowContextHelpButtonHint) + offset += delta; + Q_FALLTHROUGH(); + case SC_TitleBarMinButton: + if (!isMinimized && (tb->titleBarFlags & Qt::WindowMinimizeButtonHint)) + offset += delta; + else if (subControl == SC_TitleBarMinButton) + break; + Q_FALLTHROUGH(); + case SC_TitleBarNormalButton: + if (isMinimized && (tb->titleBarFlags & Qt::WindowMinimizeButtonHint)) + offset += delta; + else if (isMaximized && (tb->titleBarFlags & Qt::WindowMaximizeButtonHint)) + offset += delta; + else if (subControl == SC_TitleBarNormalButton) + break; + Q_FALLTHROUGH(); + case SC_TitleBarMaxButton: + if (!isMaximized && (tb->titleBarFlags & Qt::WindowMaximizeButtonHint)) + offset += delta; + else if (subControl == SC_TitleBarMaxButton) + break; + Q_FALLTHROUGH(); + case SC_TitleBarShadeButton: + if (!isMinimized && (tb->titleBarFlags & Qt::WindowShadeButtonHint)) + offset += delta; + else if (subControl == SC_TitleBarShadeButton) + break; + Q_FALLTHROUGH(); + case SC_TitleBarUnshadeButton: + if (isMinimized && (tb->titleBarFlags & Qt::WindowShadeButtonHint)) + offset += delta; + else if (subControl == SC_TitleBarUnshadeButton) + break; + Q_FALLTHROUGH(); + case SC_TitleBarCloseButton: + if (tb->titleBarFlags & Qt::WindowSystemMenuHint) + offset += delta; + else if (subControl == SC_TitleBarCloseButton) + break; + + rect.setRect(width - offset - controlTop + 1, controlTop, + buttonWidth, buttonHeight); + break; + + case SC_TitleBarSysMenu: + { + const int controlTop = 6; + const int controlHeight = height - controlTop - 3; + const int iconExtent = proxy()->pixelMetric(PM_SmallIconSize, option); + QSize iconSize = tb->icon.actualSize(QSize(iconExtent, iconExtent)); + if (tb->icon.isNull()) + iconSize = QSize(controlHeight, controlHeight); + int hPad = (controlHeight - iconSize.height())/2; + int vPad = (controlHeight - iconSize.width())/2; + rect = QRect(frameWidth + hPad, controlTop + vPad, iconSize.width(), iconSize.height()); + } + break; + default: + break; + } + } + break; + + case CC_ComboBox: + if (const QStyleOptionComboBox *cmb = qstyleoption_cast(option)) { + const int x = cmb->rect.x(), y = cmb->rect.y(), wi = cmb->rect.width(), he = cmb->rect.height(); + const int xpos = x + wi - qRound(QStyleHelper::dpiScaled(1 + 16, option)); + + switch (subControl) { + case SC_ComboBoxFrame: + rect = cmb->rect; + break; + + case SC_ComboBoxArrow: { + const qreal dpi = QStyleHelper::dpi(option); + rect = QRect(xpos, y + qRound(QStyleHelper::dpiScaled(1, dpi)), + qRound(QStyleHelper::dpiScaled(16, dpi)), + he - qRound(QStyleHelper::dpiScaled(2, dpi))); + } + break; + + case SC_ComboBoxEditField: { + const qreal dpi = QStyleHelper::dpi(option); + const int frame = qRound(QStyleHelper::dpiScaled(2, dpi)); + rect = QRect(x + frame, y + frame, + wi - qRound(QStyleHelper::dpiScaled(3 + 16, dpi)), + he - qRound(QStyleHelper::dpiScaled(4, dpi))); + } + break; + + case SC_ComboBoxListBoxPopup: + rect = cmb->rect; + break; + + default: + break; + } + } + break; +#if 0 && QT_CONFIG(mdiarea) + case CC_MdiControls: + { + int numSubControls = 0; + if (option->subControls & SC_MdiCloseButton) + ++numSubControls; + if (option->subControls & SC_MdiMinButton) + ++numSubControls; + if (option->subControls & SC_MdiNormalButton) + ++numSubControls; + if (numSubControls == 0) + break; + + int buttonWidth = option->rect.width() / numSubControls; + int offset = 0; + switch (subControl) { + case SC_MdiCloseButton: + // Only one sub control, no offset needed. + if (numSubControls == 1) + break; + offset += buttonWidth; + Q_FALLTHROUGH(); + case SC_MdiNormalButton: + // No offset needed if + // 1) There's only one sub control + // 2) We have a close button and a normal button (offset already added in SC_MdiClose) + if (numSubControls == 1 || (numSubControls == 2 && !(option->subControls & SC_MdiMinButton))) + break; + if (option->subControls & SC_MdiNormalButton) + offset += buttonWidth; + break; + default: + break; + } + rect = QRect(offset, 0, buttonWidth, option->rect.height()); + break; + } +#endif // QT_CONFIG(mdiarea) + + default: + rect = visualRect(option->direction, option->rect, + QWindowsStyle::subControlRect(cc, option, subControl)); + break; + } + return visualRect(option->direction, option->rect, rect); +} + +/*! + \reimp +*/ +QSize QWindowsXPStyle::sizeFromContents(ContentsType ct, const QStyleOption *option, + const QSize &contentsSize) const +{ + if (!QWindowsXPStylePrivate::useXP()) + return QWindowsStyle::sizeFromContents(ct, option, contentsSize); + + QSize sz(contentsSize); + switch (ct) { + case CT_LineEdit: + case CT_ComboBox: + { + if (contentsSize.isEmpty()) { + // Minimum size + return QSize(20, 20); + } + XPThemeData buttontheme(option->window, nullptr, QWindowsXPStylePrivate::ButtonTheme, BP_PUSHBUTTON, PBS_NORMAL); + if (buttontheme.isValid()) { + const QMarginsF borderSize = buttontheme.margins(); + if (!borderSize.isNull()) { + const qreal margin = qreal(2); + sz.rwidth() += qRound(borderSize.left() + borderSize.right() - margin); + sz.rheight() += int(borderSize.bottom() + borderSize.top() - margin); + } + const int textMargins = 2*(proxy()->pixelMetric(PM_FocusFrameHMargin, option) + 1); + sz += QSize(qMax(pixelMetric(QStyle::PM_ScrollBarExtent, option) + + textMargins, 23), 0); //arrow button + } + } + break; + case CT_TabWidget: + sz += QSize(6, 6); + break; + case CT_Menu: + sz += QSize(1, 0); + break; +#if 0 && QT_CONFIG(menubar) + case CT_MenuBarItem: + if (!sz.isEmpty()) + sz += QSize(windowsItemHMargin * 5 + 1, 6); + break; +#endif + case CT_MenuItem: + if (const QStyleOptionMenuItem *menuitem = qstyleoption_cast(option)) + { + if (menuitem->menuItemType != QStyleOptionMenuItem::Separator) { + sz = QWindowsStyle::sizeFromContents(ct, option, sz); + sz.setHeight(sz.height() - 2); + return sz; + } + } + sz = QWindowsStyle::sizeFromContents(ct, option, sz); + break; + + case CT_MdiControls: { + sz.setHeight(int(QStyleHelper::dpiScaled(19, option))); + int width = 54; + if (const QStyleOptionComplex *styleOpt = qstyleoption_cast(option)) { + width = 0; + if (styleOpt->subControls & SC_MdiMinButton) + width += 17 + 1; + if (styleOpt->subControls & SC_MdiNormalButton) + width += 17 + 1; + if (styleOpt->subControls & SC_MdiCloseButton) + width += 17 + 1; + } + sz.setWidth(int(QStyleHelper::dpiScaled(width, option))); + } + break; + + case CT_Slider: + if (const QStyleOptionSlider *slider = qstyleoption_cast(option)) { + QStyle::SubControls sub = slider->subControls; + const int TickSpace = 5; + int thick = proxy()->pixelMetric(QStyle::PM_SliderThickness, slider); + + if (slider->tickPosition & QStyleOptionSlider::TicksAbove) + thick += TickSpace; + if (slider->tickPosition & QStyleOptionSlider::TicksBelow) + thick += TickSpace; + sz.setWidth(thick); + + if (sub & SC_SliderGroove) { + const int SliderLength = 84; + sz.setHeight(SliderLength); + } + if (slider->orientation == Qt::Horizontal) + sz.transpose(); + if (sub & SC_SliderHandle) { + const QSize s = proxy()->subControlRect(CC_Slider, slider, SC_SliderHandle).size(); + sz = sz.expandedTo(s); + } + } + break; + case CT_ScrollBar : + // Make sure that the scroll bar is large enough to display the thumb indicator. + if (const QStyleOptionSlider *slider = qstyleoption_cast(option)) { + const int scrollBarHeight = proxy()->pixelMetric(QStyle::PM_ScrollBarExtent, slider); + const int scrollBarSliderMin = proxy()->pixelMetric(QStyle::PM_ScrollBarSliderMin, slider); + int &szw = slider->orientation == Qt::Horizontal ? sz.rwidth() : sz.rheight(); + int &szh = slider->orientation == Qt::Horizontal ? sz.rheight() : sz.rwidth(); + if (slider->subControls & (SC_ScrollBarSlider | SC_ScrollBarGroove)) { + szw = qMax(szw, scrollBarSliderMin + 2 * scrollBarHeight); + szh = scrollBarHeight; + } else if (slider->subControls & (SC_ScrollBarAddLine| SC_ScrollBarSubLine)) { + // Assume that the AddLine and SubLine buttons have the same size, and just query + // for the size of AddLine + const QSize s = proxy()->subControlRect(CC_ScrollBar, slider, SC_ScrollBarAddLine).size(); + szw = qMax(szw, s.width()); + szh = scrollBarHeight; + } + } + break; + default: + sz = QWindowsStyle::sizeFromContents(ct, option, sz); + break; + } + + return sz; +} + + +/*! \reimp */ +int QWindowsXPStyle::styleHint(StyleHint hint, const QStyleOption *option, + QStyleHintReturn *returnData) const +{ + QWindowsXPStylePrivate *d = const_cast(d_func()); + if (!QWindowsXPStylePrivate::useXP()) + return QWindowsStyle::styleHint(hint, option, returnData); + + int res = 0; + switch (hint) { + + case SH_EtchDisabledText: + //res = (qobject_cast(widget) != 0); + res = 0; + break; + + case SH_SpinControls_DisableOnBounds: + res = 0; + break; + + case SH_TitleBar_AutoRaise: + case SH_TitleBar_NoBorder: + res = 1; + break; + + case SH_GroupBox_TextLabelColor: + if (option->state & QStyle::State_Enabled) + res = d->groupBoxTextColor; + else + res = d->groupBoxTextColorDisabled; + break; + + case SH_Table_GridLineColor: + res = 0xC0C0C0; + break; + + case SH_WindowFrame_Mask: + { + res = 1; + QStyleHintReturnMask *mask = qstyleoption_cast(returnData); + const QStyleOptionTitleBar *titlebar = qstyleoption_cast(option); + if (mask && titlebar) { + // Note certain themes will not return the whole window frame but only the titlebar part when + // queried This function needs to return the entire window mask, hence we will only fetch the mask for the + // titlebar itself and add the remaining part of the window rect at the bottom. + int tbHeight = proxy()->pixelMetric(PM_TitleBarHeight, option); + QRect titleBarRect = option->rect; + titleBarRect.setHeight(tbHeight); + XPThemeData themeData; + if (titlebar->titleBarState & Qt::WindowMinimized) { + themeData = XPThemeData(option->window, nullptr, + QWindowsXPStylePrivate::WindowTheme, + WP_MINCAPTION, CS_ACTIVE, titleBarRect); + } else { + themeData = XPThemeData(option->window, nullptr, + QWindowsXPStylePrivate::WindowTheme, + WP_CAPTION, CS_ACTIVE, titleBarRect); + } + mask->region = d->region(themeData) + + QRect(0, tbHeight, option->rect.width(), option->rect.height() - tbHeight); + } + } + break; +#if 0 && QT_CONFIG(rubberband) + case SH_RubberBand_Mask: + if (qstyleoption_cast(option)) + res = 0; + break; +#endif // QT_CONFIG(rubberband) + + case SH_ItemView_DrawDelegateFrame: + res = 1; + break; + + default: + res =QWindowsStyle::styleHint(hint, option, returnData); + } + + return res; +} + +QMargins QWindowsXPStyle::ninePatchMargins(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, const QSize &imageSize) const +{ + QMargins margins; + + switch (cc) { + case CC_ScrollBar: { + margins = QWindowsStyle::ninePatchMargins(cc, opt, imageSize); + if (const auto option = qstyleoption_cast(opt)) { + if (option->orientation == Qt::Horizontal) { + margins.setTop(-1); + margins.setBottom(-1); + } else { + margins.setLeft(-1); + margins.setRight(-1); + } + } + break; } + default: + margins = QWindowsStyle::ninePatchMargins(cc, opt, imageSize); + break; + } + + return margins; +} + + +/*! \reimp */ +QPalette QWindowsXPStyle::standardPalette() const +{ + return QWindowsXPStylePrivate::useXP() ? QPalette() : QWindowsStyle::standardPalette(); +} + +/*! + \reimp +*/ +QPixmap QWindowsXPStyle::standardPixmap(StandardPixmap standardPixmap, const QStyleOption *option) const +{ + if (!QWindowsXPStylePrivate::useXP()) + return QWindowsStyle::standardPixmap(standardPixmap, option); + +#if 0 + switch (standardPixmap) { + case SP_TitleBarMaxButton: + case SP_TitleBarCloseButton: + if (qstyleoption_cast(option)) + { + if (widget && widget->isWindow()) { + XPThemeData theme(widget, nullptr, QWindowsXPStylePrivate::WindowTheme, WP_SMALLCLOSEBUTTON, CBS_NORMAL); + if (theme.isValid()) { + const QSize size = (theme.size() * QWindowsStylePrivate::nativeMetricScaleFactor(option)).toSize(); + return QIcon(QWindowsStyle::standardPixmap(standardPixmap, option, widget)).pixmap(size); + } + } + } + break; + default: + break; + } +#endif + return QWindowsStyle::standardPixmap(standardPixmap, option); +} + +/*! + \reimp +*/ +QIcon QWindowsXPStyle::standardIcon(StandardPixmap standardIcon, + const QStyleOption *option) const +{ + if (!QWindowsXPStylePrivate::useXP()) { + return QWindowsStyle::standardIcon(standardIcon, option); + } +#if 0 + QWindowsXPStylePrivate *d = const_cast(d_func()); + switch (standardIcon) { + case SP_TitleBarMaxButton: + if (qstyleoption_cast(option)) + { + if (d->dockFloat.isNull()) { + XPThemeData themeSize(nullptr, nullptr, QWindowsXPStylePrivate::WindowTheme, + WP_SMALLCLOSEBUTTON, CBS_NORMAL); + XPThemeData theme(nullptr, nullptr, QWindowsXPStylePrivate::WindowTheme, + WP_MAXBUTTON, MAXBS_NORMAL); + if (theme.isValid()) { + const QSize size = (themeSize.size() * QWindowsStylePrivate::nativeMetricScaleFactor(option)).toSize(); + QPixmap pm(size); + pm.fill(Qt::transparent); + QPainter p(&pm); + theme.painter = &p; + theme.rect = QRect(QPoint(0, 0), size); + d->drawBackground(theme); + d->dockFloat.addPixmap(pm, QIcon::Normal, QIcon::Off); // Normal + pm.fill(Qt::transparent); + theme.stateId = MAXBS_PUSHED; + d->drawBackground(theme); + d->dockFloat.addPixmap(pm, QIcon::Normal, QIcon::On); // Pressed + pm.fill(Qt::transparent); + theme.stateId = MAXBS_HOT; + d->drawBackground(theme); + d->dockFloat.addPixmap(pm, QIcon::Active, QIcon::Off); // Hover + pm.fill(Qt::transparent); + theme.stateId = MAXBS_INACTIVE; + d->drawBackground(theme); + d->dockFloat.addPixmap(pm, QIcon::Disabled, QIcon::Off); // Disabled + } + } + if (widget && widget->isWindow()) + return d->dockFloat; + + } + break; + case SP_TitleBarCloseButton: + if (qstyleoption_cast(option)) + { + if (d->dockClose.isNull()) { + XPThemeData theme(nullptr, nullptr, QWindowsXPStylePrivate::WindowTheme, + WP_SMALLCLOSEBUTTON, CBS_NORMAL); + if (theme.isValid()) { + const QSize size = (theme.size() * QWindowsStylePrivate::nativeMetricScaleFactor(option)).toSize(); + QPixmap pm(size); + pm.fill(Qt::transparent); + QPainter p(&pm); + theme.painter = &p; + theme.partId = WP_CLOSEBUTTON; // #### + theme.rect = QRect(QPoint(0, 0), size); + d->drawBackground(theme); + d->dockClose.addPixmap(pm, QIcon::Normal, QIcon::Off); // Normal + pm.fill(Qt::transparent); + theme.stateId = CBS_PUSHED; + d->drawBackground(theme); + d->dockClose.addPixmap(pm, QIcon::Normal, QIcon::On); // Pressed + pm.fill(Qt::transparent); + theme.stateId = CBS_HOT; + d->drawBackground(theme); + d->dockClose.addPixmap(pm, QIcon::Active, QIcon::Off); // Hover + pm.fill(Qt::transparent); + theme.stateId = CBS_INACTIVE; + d->drawBackground(theme); + d->dockClose.addPixmap(pm, QIcon::Disabled, QIcon::Off); // Disabled + } + } + if (widget && widget->isWindow()) + return d->dockClose; + } + break; + case SP_TitleBarNormalButton: + if (qstyleoption_cast(option)) + { + if (d->dockFloat.isNull()) { + XPThemeData themeSize(nullptr, nullptr, QWindowsXPStylePrivate::WindowTheme, + WP_SMALLCLOSEBUTTON, CBS_NORMAL); + XPThemeData theme(nullptr, nullptr, QWindowsXPStylePrivate::WindowTheme, + WP_RESTOREBUTTON, RBS_NORMAL); + if (theme.isValid()) { + const QSize size = (themeSize.size() * QWindowsStylePrivate::nativeMetricScaleFactor(option)).toSize(); + QPixmap pm(size); + pm.fill(Qt::transparent); + QPainter p(&pm); + theme.painter = &p; + theme.rect = QRect(QPoint(0, 0), size); + d->drawBackground(theme); + d->dockFloat.addPixmap(pm, QIcon::Normal, QIcon::Off); // Normal + pm.fill(Qt::transparent); + theme.stateId = RBS_PUSHED; + d->drawBackground(theme); + d->dockFloat.addPixmap(pm, QIcon::Normal, QIcon::On); // Pressed + pm.fill(Qt::transparent); + theme.stateId = RBS_HOT; + d->drawBackground(theme); + d->dockFloat.addPixmap(pm, QIcon::Active, QIcon::Off); // Hover + pm.fill(Qt::transparent); + theme.stateId = RBS_INACTIVE; + d->drawBackground(theme); + d->dockFloat.addPixmap(pm, QIcon::Disabled, QIcon::Off); // Disabled + } + } + if (widget && widget->isWindow()) + return d->dockFloat; + + } + break; + default: + break; + } +#endif + return QWindowsStyle::standardIcon(standardIcon, option); +} + +/*! + \internal + + Constructs a QWindowsXPStyle object. +*/ +QWindowsXPStyle::QWindowsXPStyle(QWindowsXPStylePrivate &dd) : QWindowsStyle(dd) +{ +} + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const XPThemeData &t) +{ + QDebugStateSaver saver(d); + d.nospace(); + d << "XPThemeData(" << t.window << ", theme=#" << t.theme << ", " << t.htheme + << ", partId=" << t.partId << ", stateId=" << t.stateId << ", rect=" << t.rect + << ", mirrorHorizontally=" << t.mirrorHorizontally << ", mirrorVertically=" + << t.mirrorVertically << ", noBorder=" << t.noBorder << ", noContent=" << t.noContent + << ", rotate=" << t.rotate << ')'; + return d; +} + +QDebug operator<<(QDebug d, const ThemeMapKey &k) +{ + QDebugStateSaver saver(d); + d.nospace(); + d << "ThemeMapKey(theme=#" << k.theme + << ", partId=" << k.partId << ", stateId=" << k.stateId + << ", noBorder=" << k.noBorder << ", noContent=" << k.noContent << ')'; + return d; +} + +QDebug operator<<(QDebug d, const ThemeMapData &td) +{ + QDebugStateSaver saver(d); + d.nospace(); + d << "ThemeMapData(alphaType=" << td.alphaType + << ", dataValid=" << td.dataValid << ", partIsTransparent=" << td.partIsTransparent + << ", hasAlphaChannel=" << td.hasAlphaChannel << ", wasAlphaSwapped=" << td.wasAlphaSwapped + << ", hadInvalidAlpha=" << td.hadInvalidAlpha << ')'; + return d; +} +#endif // QT_NO_DEBUG_STREAM + +// Debugging code ---------------------------------------------------------------------[ START ]--- +// The code for this point on is not compiled by default, but only used as assisting +// debugging code when you uncomment the DEBUG_XP_STYLE define at the top of the file. + +#ifdef DEBUG_XP_STYLE +// The schema file expects these to be defined by the user. +#define TMT_ENUMDEF 8 +#define TMT_ENUMVAL TEXT('A') +#define TMT_ENUM TEXT('B') +#define SCHEMA_STRINGS // For 2nd pass on schema file +QT_BEGIN_INCLUDE_NAMESPACE +#include +QT_END_INCLUDE_NAMESPACE + +// A property's value, type and name combo +struct PropPair { + int propValue; + int propType; + LPCWSTR propName; +}; + +// Operator for sorting of PropPairs +bool operator<(PropPair a, PropPair b) { + return wcscmp(a.propName, b.propName) < 0; +} + +// Our list of all possible properties +static QList all_props; + + +/*! \internal + Dumps a portion of the full native DIB section double buffer. + The DIB section double buffer is only used when doing special + transformations to the theme part, or when the real double + buffer in the paintengine does not have an HDC we may use + directly. + Since we cannot rely on the pixel data we get from Microsoft + when drawing into the DIB section, we use this function to + see the actual data we got, and can determin the appropriate + action. +*/ +void QWindowsXPStylePrivate::dumpNativeDIB(int w, int h) +{ + if (w && h) { + static int pCount = 0; + DWORD *bufPix = (DWORD*)bufferPixels; + + char *bufferDump = new char[bufferH * bufferW * 16]; + char *bufferPos = bufferDump; + + memset(bufferDump, 0, sizeof(bufferDump)); + bufferPos += sprintf(bufferPos, "const int pixelBufferW%d = %d;\n", pCount, w); + bufferPos += sprintf(bufferPos, "const int pixelBufferH%d = %d;\n", pCount, h); + bufferPos += sprintf(bufferPos, "const unsigned DWORD pixelBuffer%d[] = {", pCount); + for (int iy = 0; iy < h; ++iy) { + bufferPos += sprintf(bufferPos, "\n "); + bufPix = (DWORD*)(bufferPixels + (iy * bufferW * 4)); + for (int ix = 0; ix < w; ++ix) { + bufferPos += sprintf(bufferPos, "0x%08x, ", *bufPix); + ++bufPix; + } + } + bufferPos += sprintf(bufferPos, "\n};\n\n"); + printf(bufferDump); + + delete[] bufferDump; + ++pCount; + } +} + +/*! \internal + Shows the value of a given property for a part. +*/ +static void showProperty(XPThemeData &themeData, const PropPair &prop) +{ + PROPERTYORIGIN origin = PO_NOTFOUND; + GetThemePropertyOrigin(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, &origin); + const char *originStr; + switch (origin) { + case PO_STATE: + originStr = "State "; + break; + case PO_PART: + originStr = "Part "; + break; + case PO_CLASS: + originStr = "Class "; + break; + case PO_GLOBAL: + originStr = "Globl "; + break; + case PO_NOTFOUND: + default: + originStr = "Unkwn "; + break; + } + + switch (prop.propType) { + case TMT_STRING: + { + wchar_t buffer[512]; + GetThemeString(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, buffer, 512); + printf(" (%sString) %-20S: %S\n", originStr, prop.propName, buffer); + } + break; + case TMT_ENUM: + { + int result = -1; + GetThemeEnumValue(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, &result); + printf(" (%sEnum) %-20S: %d\n", originStr, prop.propName, result); + } + break; + case TMT_INT: + { + int result = -1; + GetThemeInt(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, &result); + printf(" (%sint) %-20S: %d\n", originStr, prop.propName, result); + } + break; + case TMT_BOOL: + { + BOOL result = false; + GetThemeBool(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, &result); + printf(" (%sbool) %-20S: %d\n", originStr, prop.propName, result); + } + break; + case TMT_COLOR: + { + COLORREF result = 0; + GetThemeColor(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, &result); + printf(" (%scolor) %-20S: 0x%08X\n", originStr, prop.propName, result); + } + break; + case TMT_MARGINS: + { + MARGINS result; + memset(&result, 0, sizeof(result)); + GetThemeMargins(themeData.handle(), 0, themeData.partId, themeData.stateId, prop.propValue, 0, &result); + printf(" (%smargins) %-20S: (%d, %d, %d, %d)\n", originStr, + prop.propName, result.cxLeftWidth, result.cyTopHeight, result.cxRightWidth, result.cyBottomHeight); + } + break; + case TMT_FILENAME: + { + wchar_t buffer[512]; + GetThemeFilename(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, buffer, 512); + printf(" (%sfilename)%-20S: %S\n", originStr, prop.propName, buffer); + } + break; + case TMT_SIZE: + { + SIZE result1; + SIZE result2; + SIZE result3; + memset(&result1, 0, sizeof(result1)); + memset(&result2, 0, sizeof(result2)); + memset(&result3, 0, sizeof(result3)); + GetThemePartSize(themeData.handle(), 0, themeData.partId, themeData.stateId, 0, TS_MIN, &result1); + GetThemePartSize(themeData.handle(), 0, themeData.partId, themeData.stateId, 0, TS_TRUE, &result2); + GetThemePartSize(themeData.handle(), 0, themeData.partId, themeData.stateId, 0, TS_DRAW, &result3); + printf(" (%ssize) %-20S: Min (%d, %d), True(%d, %d), Draw(%d, %d)\n", originStr, prop.propName, + result1.cx, result1.cy, result2.cx, result2.cy, result3.cx, result3.cy); + } + break; + case TMT_POSITION: + { + POINT result; + memset(&result, 0, sizeof(result)); + GetThemePosition(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, &result); + printf(" (%sPosition)%-20S: (%d, %d)\n", originStr, prop.propName, result.x, result.y); + } + break; + case TMT_RECT: + { + RECT result; + memset(&result, 0, sizeof(result)); + GetThemeRect(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, &result); + printf(" (%sRect) %-20S: (%d, %d, %d, %d)\n", originStr, prop.propName, result.left, result.top, result.right, result.bottom); + } + break; + case TMT_FONT: + { + LOGFONT result; + memset(&result, 0, sizeof(result)); + GetThemeFont(themeData.handle(), 0, themeData.partId, themeData.stateId, prop.propValue, &result); + printf(" (%sFont) %-20S: %S height(%d) width(%d) weight(%d)\n", originStr, prop.propName, + result.lfFaceName, result.lfHeight, result.lfWidth, result.lfWeight); + } + break; + case TMT_INTLIST: + { + INTLIST result; + memset(&result, 0, sizeof(result)); + GetThemeIntList(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, &result); + printf(" (%sInt list)%-20S: { ", originStr, prop.propName); + for (int i = 0; i < result.iValueCount; ++i) + printf("%d ", result.iValues[i]); + printf("}\n"); + } + break; + default: + printf(" %s%S : Unknown property type (%d)!\n", originStr, prop.propName, prop.propType); + } +} + +/*! \internal + Dump all valid properties for a part. + If it's the first time this function is called, then the name, + enum value and documentation of all properties are shown, as + well as all global properties. +*/ +void QWindowsXPStylePrivate::showProperties(XPThemeData &themeData) +{ + if (!all_props.count()) { + const TMSCHEMAINFO *infoTable = GetSchemaInfo(); + for (int i = 0; i < infoTable->iPropCount; ++i) { + int propType = infoTable->pPropTable[i].bPrimVal; + int propValue = infoTable->pPropTable[i].sEnumVal; + LPCWSTR propName = infoTable->pPropTable[i].pszName; + + switch (propType) { + case TMT_ENUMDEF: + case TMT_ENUMVAL: + continue; + default: + if (propType != propValue) { + PropPair prop; + prop.propValue = propValue; + prop.propName = propName; + prop.propType = propType; + all_props.append(prop); + } + } + } + std::sort(all_props.begin(), all_props.end()); + + {// List all properties + printf("part properties count = %d:\n", all_props.count()); + printf(" Enum Property Name Description\n"); + printf("-----------------------------------------------------------\n"); + wchar_t themeName[256]; + pGetCurrentThemeName(themeName, 256, 0, 0, 0, 0); + for (int j = 0; j < all_props.count(); ++j) { + PropPair prop = all_props.at(j); + wchar_t buf[500]; + GetThemeDocumentationProperty(themeName, prop.propName, buf, 500); + printf("%3d: (%4d) %-20S %S\n", j, prop.propValue, prop.propName, buf); + } + } + + {// Show Global values + printf("Global Properties:\n"); + for (int j = 0; j < all_props.count(); ++j) { + PropPair prop = all_props.at(j); + PROPERTYORIGIN origin = PO_NOTFOUND; + GetThemePropertyOrigin(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, &origin); + if (origin == PO_GLOBAL) { + showProperty(themeData, prop); + } + } + } + } + + for (int j = 0; j < all_props.count(); ++j) { + PropPair prop = all_props.at(j); + PROPERTYORIGIN origin = PO_NOTFOUND; + GetThemePropertyOrigin(themeData.handle(), themeData.partId, themeData.stateId, prop.propValue, &origin); + if (origin != PO_NOTFOUND) + { + showProperty(themeData, prop); + } + } +} +#endif +// Debugging code -----------------------------------------------------------------------[ END ]--- + +} //namespace QQC2 + +QT_END_NAMESPACE diff --git a/src/quicknativestyle/qstyle/windows/qquickwindowsxpstyle_p.h b/src/quicknativestyle/qstyle/windows/qquickwindowsxpstyle_p.h new file mode 100644 index 00000000..5d8d5e20 --- /dev/null +++ b/src/quicknativestyle/qstyle/windows/qquickwindowsxpstyle_p.h @@ -0,0 +1,102 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWidgets module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKWINDOWSXPSTYLE_P_H +#define QQUICKWINDOWSXPSTYLE_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 "qquickwindowsstyle_p.h" + +QT_BEGIN_NAMESPACE + +namespace QQC2 { + +class QWindowsXPStylePrivate; +class QWindowsXPStyle : public QWindowsStyle +{ + Q_OBJECT +public: + QWindowsXPStyle(); + QWindowsXPStyle(QWindowsXPStylePrivate &dd); + ~QWindowsXPStyle() override; + +/* + void polish(QApplication*) override; + void unpolish(QApplication*) override; + void polish(QWidget*) override; + void unpolish(QWidget*) override; + void polish(QPalette&) override; +*/ + void drawPrimitive(PrimitiveElement pe, const QStyleOption *option, QPainter *p) const override; + void drawControl(ControlElement element, const QStyleOption *option, QPainter *p) const override; + QRect subElementRect(SubElement r, const QStyleOption *option) const override; + QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *option, SubControl sc) const override; + void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *option, QPainter *p) const override; + QSize sizeFromContents(ContentsType ct, const QStyleOption *option, const QSize &contentsSize) const override; + int pixelMetric(PixelMetric pm, const QStyleOption *option = nullptr) const override; + int styleHint(StyleHint hint, const QStyleOption *option = nullptr, + QStyleHintReturn *returnData = nullptr) const override; + + QPalette standardPalette() const override; + QPixmap standardPixmap(StandardPixmap standardIcon, const QStyleOption *option) const override; + QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = nullptr) const override; + + QMargins ninePatchMargins(QStyle::ComplexControl cc, const QStyleOptionComplex *opt, const QSize &imageSize) const; + +private: + Q_DISABLE_COPY_MOVE(QWindowsXPStyle) + Q_DECLARE_PRIVATE(QWindowsXPStyle) + friend class QStyleFactory; +}; + +} // namespace QQC2 + +QT_END_NAMESPACE + +#endif // QQUICKWINDOWSXPSTYLE_P_H diff --git a/src/quicknativestyle/qstyle/windows/qquickwindowsxpstyle_p_p.h b/src/quicknativestyle/qstyle/windows/qquickwindowsxpstyle_p_p.h new file mode 100644 index 00000000..a449ecdd --- /dev/null +++ b/src/quicknativestyle/qstyle/windows/qquickwindowsxpstyle_p_p.h @@ -0,0 +1,348 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtWidgets module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKWINDOWSXPSTYLE_P_P_H +#define QQUICKWINDOWSXPSTYLE_P_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 +#include "qquickwindowsxpstyle_p.h" +#include "qquickwindowsstyle_p_p.h" +#include +#include + +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +class QDebug; + +namespace QQC2 { + +// TMT_TEXTSHADOWCOLOR is wrongly defined in mingw +#if TMT_TEXTSHADOWCOLOR != 3818 +#undef TMT_TEXTSHADOWCOLOR +#define TMT_TEXTSHADOWCOLOR 3818 +#endif +#ifndef TST_NONE +# define TST_NONE 0 +#endif + +// These defines are missing from the tmschema, but still exist as +// states for their parts +#ifndef MINBS_INACTIVE +#define MINBS_INACTIVE 5 +#endif +#ifndef MAXBS_INACTIVE +#define MAXBS_INACTIVE 5 +#endif +#ifndef RBS_INACTIVE +#define RBS_INACTIVE 5 +#endif +#ifndef HBS_INACTIVE +#define HBS_INACTIVE 5 +#endif +#ifndef CBS_INACTIVE +#define CBS_INACTIVE 5 +#endif + +// Uncomment define below to build debug assisting code, and output +// #define DEBUG_XP_STYLE + +// Declarations ----------------------------------------------------------------------------------- +class XPThemeData +{ +public: + explicit XPThemeData(const QWindow *w = nullptr, QPainter *p = nullptr, int themeIn = -1, + int part = 0, int state = 0, const QRect &r = QRect()) + : window(w), painter(p), theme(themeIn), partId(part), stateId(state), + mirrorHorizontally(false), mirrorVertically(false), noBorder(false), + noContent(false), rect(r) + {} + + HTHEME handle(); + + static RECT toRECT(const QRect &qr); + bool isValid(); + + QSizeF size(); + QMarginsF margins(const QRect &rect, int propId = TMT_CONTENTMARGINS); + QMarginsF margins(int propId = TMT_CONTENTMARGINS); + + static QSizeF themeSize(const QWindow *w = nullptr, QPainter *p = nullptr, int themeIn = -1, int part = 0, int state = 0); + static QMarginsF themeMargins(const QRect &rect, const QWindow *w = nullptr, QPainter *p = nullptr, int themeIn = -1, + int part = 0, int state = 0, int propId = TMT_CONTENTMARGINS); + static QMarginsF themeMargins(const QWindow *w = nullptr, QPainter *p = nullptr, int themeIn = -1, + int part = 0, int state = 0, int propId = TMT_CONTENTMARGINS); + + const QWindow *window; + QPainter *painter; + + int theme; + HTHEME htheme = nullptr; + int partId; + int stateId; + + uint mirrorHorizontally : 1; + uint mirrorVertically : 1; + uint noBorder : 1; + uint noContent : 1; + uint rotate = 0; + QRect rect; +}; + +struct ThemeMapKey { + int theme = 0; + int partId = -1; + int stateId = -1; + bool noBorder = false; + bool noContent = false; + + ThemeMapKey() = default; + ThemeMapKey(const XPThemeData &data) + : theme(data.theme), partId(data.partId), stateId(data.stateId), + noBorder(data.noBorder), noContent(data.noContent) {} + +}; + +inline size_t qHash(const ThemeMapKey &key) +{ return key.theme ^ key.partId ^ key.stateId; } + +inline bool operator==(const ThemeMapKey &k1, const ThemeMapKey &k2) +{ + return k1.theme == k2.theme + && k1.partId == k2.partId + && k1.stateId == k2.stateId; +} + +enum AlphaChannelType { + UnknownAlpha = -1, // Alpha of part & state not yet known + NoAlpha, // Totally opaque, no need to touch alpha (RGB) + MaskAlpha, // Alpha channel must be fixed (ARGB) + RealAlpha // Proper alpha values from Windows (ARGB_Premultiplied) +}; + +struct ThemeMapData { + AlphaChannelType alphaType = UnknownAlpha; // Which type of alpha on part & state + + bool dataValid : 1; // Only used to detect if hash value is ok + bool partIsTransparent : 1; + bool hasAlphaChannel : 1; // True = part & state has real Alpha + bool wasAlphaSwapped : 1; // True = alpha channel needs to be swapped + bool hadInvalidAlpha : 1; // True = alpha channel contained invalid alpha values + + ThemeMapData() : dataValid(false), partIsTransparent(false), + hasAlphaChannel(false), wasAlphaSwapped(false), hadInvalidAlpha(false) {} +}; + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug d, const XPThemeData &t); +QDebug operator<<(QDebug d, const ThemeMapKey &k); +QDebug operator<<(QDebug d, const ThemeMapData &td); +#endif + +class QWindowsXPStylePrivate : public QWindowsStylePrivate +{ + Q_DECLARE_PUBLIC(QWindowsXPStyle) +public: + enum Theme { + ButtonTheme, + ComboboxTheme, + EditTheme, + HeaderTheme, + ListViewTheme, + MenuTheme, + ProgressTheme, + RebarTheme, + ScrollBarTheme, + SpinTheme, + TabTheme, + TaskDialogTheme, + ToolBarTheme, + ToolTipTheme, + TrackBarTheme, + XpTreeViewTheme, // '+'/'-' shape treeview indicators (XP) + WindowTheme, + StatusTheme, + VistaTreeViewTheme, // arrow shape treeview indicators (Vista) obtained from "explorer" theme. + NThemes + }; + + QWindowsXPStylePrivate() + { init(); } + + ~QWindowsXPStylePrivate() + { cleanup(); } + + static int pixelMetricFromSystemDp(QStyle::PixelMetric pm, const QStyleOption *option = nullptr); + static int fixedPixelMetric(QStyle::PixelMetric pm, const QStyleOption *option = nullptr, const QWidget *widget = nullptr); + + static HWND winId(const QWindow *window); + + void init(bool force = false); + void cleanup(bool force = false); + void cleanupHandleMap(); + + HBITMAP buffer(int w = 0, int h = 0); + HDC bufferHDC() + { return bufferDC;} + + static bool useXP(bool update = false); + static QRect scrollBarGripperBounds(QStyle::State flags, XPThemeData *theme); + + bool isTransparent(XPThemeData &themeData); + QRegion region(XPThemeData &themeData); + + bool drawBackground(XPThemeData &themeData, qreal correctionFactor = 1); + bool drawBackgroundThruNativeBuffer(XPThemeData &themeData, qreal aditionalDevicePixelRatio, qreal correctionFactor); + bool drawBackgroundDirectly(HDC dc, XPThemeData &themeData, qreal aditionalDevicePixelRatio); + + bool hasAlphaChannel(const QRect &rect); + bool fixAlphaChannel(const QRect &rect); + bool swapAlphaChannel(const QRect &rect, bool allPixels = false); + + QRgb groupBoxTextColor = 0; + QRgb groupBoxTextColorDisabled = 0; + QRgb sliderTickColor = 0; + bool hasInitColors = false; + + static HTHEME createTheme(int theme, HWND hwnd); + static QString themeName(int theme); + static inline bool hasTheme(int theme) { return theme >= 0 && theme < NThemes && m_themes[theme]; } + static bool isItemViewDelegateLineEdit(const QWidget *widget); + static bool isLineEditBaseColorSet(const QStyleOption *option, const QWidget *widget); + + QIcon dockFloat, dockClose; + +private: +#ifdef DEBUG_XP_STYLE + void dumpNativeDIB(int w, int h); + void showProperties(XPThemeData &themeData); +#endif + + static bool initVistaTreeViewTheming(); + static void cleanupVistaTreeViewTheming(); + + static QBasicAtomicInt ref; + static bool use_xp; + + QHash alphaCache; + HDC bufferDC = nullptr; + HBITMAP bufferBitmap = nullptr; + HBITMAP nullBitmap = nullptr; + uchar *bufferPixels = nullptr; + int bufferW = 0; + int bufferH = 0; + + static HWND m_vistaTreeViewHelper; + static HTHEME m_themes[NThemes]; +}; + +inline QSizeF XPThemeData::size() +{ + QSizeF result(0, 0); + if (isValid()) { + SIZE size; + if (SUCCEEDED(GetThemePartSize(handle(), nullptr, partId, stateId, nullptr, TS_TRUE, &size))) + result = QSize(size.cx, size.cy); + } + return result; +} + +inline QMarginsF XPThemeData::margins(const QRect &qRect, int propId) +{ + QMarginsF result(0, 0, 0 ,0); + if (isValid()) { + MARGINS margins; + RECT rect = XPThemeData::toRECT(qRect); + if (SUCCEEDED(GetThemeMargins(handle(), nullptr, partId, stateId, propId, &rect, &margins))) + result = QMargins(margins.cxLeftWidth, margins.cyTopHeight, margins.cxRightWidth, margins.cyBottomHeight); + } + return result; +} + +inline QMarginsF XPThemeData::margins(int propId) +{ + QMarginsF result(0, 0, 0 ,0); + if (isValid()) { + MARGINS margins; + if (SUCCEEDED(GetThemeMargins(handle(), nullptr, partId, stateId, propId, nullptr, &margins))) + result = QMargins(margins.cxLeftWidth, margins.cyTopHeight, margins.cxRightWidth, margins.cyBottomHeight); + } + return result; +} + +inline QSizeF XPThemeData::themeSize(const QWindow *w, QPainter *p, int themeIn, int part, int state) +{ + XPThemeData theme(w, p, themeIn, part, state); + return theme.size(); +} + +inline QMarginsF XPThemeData::themeMargins(const QRect &rect, const QWindow *w, QPainter *p, int themeIn, + int part, int state, int propId) +{ + XPThemeData theme(w, p, themeIn, part, state); + return theme.margins(rect, propId); +} + +inline QMarginsF XPThemeData::themeMargins(const QWindow *w, QPainter *p, int themeIn, + int part, int state, int propId) +{ + XPThemeData theme(w, p, themeIn, part, state); + return theme.margins(propId); +} + +} //namespace QQC2 + +QT_END_NAMESPACE + +#endif //QQUICKWINDOWSXPSTYLE_P_P_H diff --git a/src/quicknativestyle/qstyle/windows/windows.pri b/src/quicknativestyle/qstyle/windows/windows.pri new file mode 100644 index 00000000..beb50a5b --- /dev/null +++ b/src/quicknativestyle/qstyle/windows/windows.pri @@ -0,0 +1,18 @@ + +INCLUDEPATH += $$PWD + +HEADERS += \ + $$PWD/qquickwindowsstyle_p.h \ + $$PWD/qquickwindowsstyle_p_p.h \ +# $$PWD/qquickwindowsvistastyle_p.h \ +# $$PWD/qquickwindowsvistastyle_p_p.h \ + $$PWD/qquickwindowsxpstyle_p.h \ + $$PWD/qquickwindowsxpstyle_p_p.h + +SOURCES += \ + $$PWD/qquickwindowsstyle.cpp \ +# $$PWD/qquickwindowsvistastyle.cpp \ + $$PWD/qquickwindowsxpstyle.cpp + +QMAKE_USE_PRIVATE += user32 gdi32 +LIBS_PRIVATE *= -luxtheme diff --git a/src/quicknativestyle/qtquickcontrols2nativestyleplugin.cpp b/src/quicknativestyle/qtquickcontrols2nativestyleplugin.cpp new file mode 100644 index 00000000..7b638704 --- /dev/null +++ b/src/quicknativestyle/qtquickcontrols2nativestyleplugin.cpp @@ -0,0 +1,164 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +#include + +#include "qquicknativestyle.h" +#include "qquickcommonstyle.h" + +#if defined(Q_OS_MACOS) +#include "qquickmacstyle_mac_p.h" +#include "qquickmacfocusframe.h" +#elif defined(Q_OS_WINDOWS) +# include "qquickwindowsxpstyle_p.h" +#endif + +extern void qml_register_types_QtQuick_NativeStyle(); + +QT_BEGIN_NAMESPACE + +using namespace QQC2; + +class QtQuickControls2NativeStylePlugin : public QQuickStylePlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) + +public: + QtQuickControls2NativeStylePlugin(QObject *parent = nullptr); + ~QtQuickControls2NativeStylePlugin() override; + + void initializeEngine(QQmlEngine *engine, const char *uri) override; + void initializeTheme(QQuickTheme *theme) override; + QString name() const override; + +#if defined(Q_OS_MACOS) + QScopedPointer m_focusFrame; +#endif +}; + +static void deleteQStyle() +{ + // When we delete QStyle, it will free up it's own internal resources. Especially + // on macOS, this means releasing a lot of NSViews and NSCells from the QMacStyle + // destructor. If we did this from ~QtQuickControls2NativeStylePlugin, it would + // happen when the plugin was unloaded from a Q_DESTRUCTOR_FUNCTION in QLibrary, + // which is very late in the tear-down process, and after qGuiApp has been set to + // nullptr, NSApplication has stopped running, and perhaps also other static platform + // variables (e.g in AppKit?) has been deleted. And to our best guess, this is also why + // we see a crash in AppKit from the destructor in QMacStyle. So for this reason, we + // delete QStyle from a post routine rather than from the destructor. + QQuickNativeStyle::setStyle(nullptr); +} + +QtQuickControls2NativeStylePlugin::QtQuickControls2NativeStylePlugin(QObject *parent): + QQuickStylePlugin(parent) +{ + volatile auto registration = &qml_register_types_QtQuick_NativeStyle; + Q_UNUSED(registration); +} + +QtQuickControls2NativeStylePlugin::~QtQuickControls2NativeStylePlugin() +{ + if (!qGuiApp) + return; + + // QGuiApplication is still running, so we need to remove the post + // routine to not be called after we have been unloaded. + qRemovePostRoutine(deleteQStyle); + QQuickNativeStyle::setStyle(nullptr); +} + +QString QtQuickControls2NativeStylePlugin::name() const +{ + return QStringLiteral("NativeStyle"); +} + +void QtQuickControls2NativeStylePlugin::initializeEngine(QQmlEngine *engine, const char *uri) +{ + Q_UNUSED(engine); + Q_UNUSED(uri); + // Enable commonstyle as a reference style while + // the native styles are under development. + QStyle *style = nullptr; + if (qEnvironmentVariable("QQC2_COMMONSTYLE") == QStringLiteral("true")) { + style = new QCommonStyle; + } else { + const QString envStyle = qEnvironmentVariable("QQC2_STYLE"); + if (!envStyle.isNull()) { + if (envStyle == QLatin1String("common")) + style = new QCommonStyle; +#if defined(Q_OS_MACOS) + else if (envStyle == QLatin1String("mac")) + style = new QMacStyle; +#endif +#if defined(Q_OS_WINDOWS) + else if (envStyle == QLatin1String("windows")) + style = new QWindowsStyle; + else if (envStyle == QLatin1String("windowsxp")) + style = new QWindowsXPStyle; +#endif + } + if (!style) { +#if defined(Q_OS_MACOS) + style = new QMacStyle; +#elif defined(Q_OS_WINDOWS) + style = new QWindowsXPStyle; +#else + style = new QCommonStyle; +#endif + } + } + +#if defined(Q_OS_MACOS) + m_focusFrame.reset(new QQuickMacFocusFrame()); +#endif + + qAddPostRoutine(deleteQStyle); + QQuickNativeStyle::setStyle(style); +} + +void QtQuickControls2NativeStylePlugin::initializeTheme(QQuickTheme */*theme*/) +{ +} + +QT_END_NAMESPACE + +#include "qtquickcontrols2nativestyleplugin.moc" diff --git a/src/quicknativestyle/util/FocusFrame.qml b/src/quicknativestyle/util/FocusFrame.qml new file mode 100644 index 00000000..b3f3a80e --- /dev/null +++ b/src/quicknativestyle/util/FocusFrame.qml @@ -0,0 +1,118 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts + +Item { + id: root + + // It's important that this item has a zero size. Otherwise, if the parent of the + // targetItem is e.g a layout, we will change the layout if we parent this item inside it. + width: 0 + height: 0 + // Stack on top of all siblings of the targetItem + z: 100 + + function moveToItem(item, margins, radius) { + parent = item.parent + targetItem = item + leftOffset = margins.left + rightOffset = margins.right + topOffset = margins.top + bottomOffset = margins.bottom + frameRadius = radius + animation.restart() + } + + property Item targetItem + property real leftOffset: 0 + property real rightOffset: 0 + property real topOffset: 0 + property real bottomOffset: 0 + property real frameOpacity: 0 + property real frameSize: 0 + property real frameRadius: 0 + + property point targetItemPos: { + if (!targetItem) + return Qt.point(0, 0) + // Force a reevaluation if + // the target item moves + targetItem.x + targetItem.y + mapFromItem(targetItem, Qt.point(0, 0)) + } + + // systemFrameColor is set to NSColor.keyboardFocusIndicatorColor from cpp + property color systemFrameColor + + Rectangle { + id: focusFrame + z: 10 + x: targetItemPos.x + leftOffset - frameSize + y: targetItemPos.y + topOffset - frameSize + width: targetItem ? targetItem.width - leftOffset - rightOffset + (frameSize * 2) : 0 + height: targetItem ? targetItem.height - topOffset - bottomOffset + (frameSize * 2) : 0 + radius: frameRadius + visible: targetItem && targetItem.visible + color: "transparent" + + border.color: systemFrameColor + border.width: frameSize + } + + ParallelAnimation { + id: animation + NumberAnimation { + target: root + property: "frameSize" + duration: 300 + from: 15 + to: 2.5 + easing.type: Easing.OutCubic + } + NumberAnimation { + target: focusFrame + property: "opacity" + duration: 300 + from: 0 + to: 0.55 + easing.type: Easing.OutCubic + } + } +} diff --git a/src/quicknativestyle/util/qquickmacfocusframe.h b/src/quicknativestyle/util/qquickmacfocusframe.h new file mode 100644 index 00000000..425b2a68 --- /dev/null +++ b/src/quicknativestyle/util/qquickmacfocusframe.h @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKMACFOCUSFRAME_H +#define QQUICKMACFOCUSFRAME_H + +#include +#include +#include "qquickstyleitem.h" + +QT_BEGIN_NAMESPACE + +Q_DECLARE_LOGGING_CATEGORY(lcFocusFrame) + +struct QQuickFocusFrameDescription { + QQuickItem *target; + QQuickStyleMargins margins; + const qreal radius = 3; + bool isValid() const { return target != nullptr; } + static QQuickFocusFrameDescription Invalid; +}; + +class QQuickMacFocusFrame : public QObject +{ + Q_OBJECT + +public: + QQuickMacFocusFrame(); + +private: + static QScopedPointer m_focusFrame; + + void createFocusFrame(QQmlContext *context); + void moveToItem(QQuickItem *item); + QQuickFocusFrameDescription getDescriptionForItem(QQuickItem *focusItem) const; +}; + +QT_END_NAMESPACE + +#endif // QQUICKMACFOCUSFRAME_H diff --git a/src/quicknativestyle/util/qquickmacfocusframe.mm b/src/quicknativestyle/util/qquickmacfocusframe.mm new file mode 100644 index 00000000..75ef911b --- /dev/null +++ b/src/quicknativestyle/util/qquickmacfocusframe.mm @@ -0,0 +1,181 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Controls 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickmacfocusframe.h" + +#include + +#include + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "items/qquickstyleitem.h" +#include "qquicknativestyle.h" + +QT_BEGIN_NAMESPACE + +Q_LOGGING_CATEGORY(lcFocusFrame, "qt.quick.controls.focusframe") + +QQuickFocusFrameDescription QQuickFocusFrameDescription::Invalid = { nullptr, QQuickStyleMargins(), 0 }; +QScopedPointer QQuickMacFocusFrame::m_focusFrame; + +QQuickMacFocusFrame::QQuickMacFocusFrame() +{ + connect(qGuiApp, &QGuiApplication::focusObjectChanged, [=]{ + if (auto item = qobject_cast(qGuiApp->focusObject())) + moveToItem(item); + }); +} + +void QQuickMacFocusFrame::moveToItem(QQuickItem *item) +{ + if (!m_focusFrame) { + const auto context = QQmlEngine::contextForObject(item); + if (!context) + return; + createFocusFrame(context); + } + + const QQuickFocusFrameDescription &config = getDescriptionForItem(item); + if (!config.isValid()) { + m_focusFrame->setParentItem(nullptr); + m_focusFrame->setVisible(false); + return; + } + + m_focusFrame->setVisible(true); + QMetaObject::invokeMethod(m_focusFrame.data(), "moveToItem", + Q_ARG(QVariant, QVariant::fromValue(config.target)), + Q_ARG(QVariant, QVariant::fromValue(config.margins)), + Q_ARG(QVariant, QVariant::fromValue(config.radius))); +} + +void QQuickMacFocusFrame::createFocusFrame(QQmlContext *context) +{ + QQmlComponent component( + context->engine(), + QUrl(QStringLiteral( + "qrc:/qt-project.org/imports/QtQuick/NativeStyle/util/FocusFrame.qml"))); + m_focusFrame.reset(qobject_cast(component.create())); + + auto indicatorColor = qt_mac_toQColor(NSColor.keyboardFocusIndicatorColor.CGColor); + indicatorColor.setAlpha(255); + m_focusFrame->setProperty("systemFrameColor", indicatorColor); +} + +QQuickFocusFrameDescription QQuickMacFocusFrame::getDescriptionForItem(QQuickItem *focusItem) const +{ + qCDebug(lcFocusFrame) << "new focusobject:" << focusItem; + const auto parentItem = focusItem->parentItem(); + if (!parentItem) + return QQuickFocusFrameDescription::Invalid; + + // The item that gets active focus can be a child of the control (e.g + // editable ComboBox). In that case, resolve the actual control first. + const auto proxy = focusItem->property("__focusFrameControl").value(); + const auto control = proxy ? proxy : focusItem; + auto target = control->property("__focusFrameTarget").value(); + qCDebug(lcFocusFrame) << "target:" << target; + qCDebug(lcFocusFrame) << "control:" << control; + + if (!target) { + // __focusFrameTarget points to the item in the control that should + // get the focus frame. This is usually the control itself, but can + // sometimes be a child (CheckBox). We anyway require + // this property to be set if we are to show the focus frame around + // the control in the first place. So for controls that don't want + // a frame (ProgressBar), we simply skip setting it. + // Also, we should never show a focus frame around custom controls. + // None of the built-in styles do that, so to be consistent, we + // shouldn't either. Besides, drawing a focus frame around an unknown + // item without any way to turn it off can easily be unwanted. A better + // way for custom controls to get a native focus frame is for us to offer + // a FocusFrame control (QTBUG-86818). + return QQuickFocusFrameDescription::Invalid; + } + + // If the control gives us a QQuickStyleItem, we use that to configure the focus frame. + // By default we assume that the background delegate is a QQuickStyleItem, but the + // control can override this by setting __focusFrameStyleItem. + const auto styleItemProperty = control->property("__focusFrameStyleItem"); + auto item = styleItemProperty.value(); + if (!item) { + const auto styleItemProperty = control->property("background"); + item = styleItemProperty.value(); + } + qCDebug(lcFocusFrame) << "styleItem:" << item; + if (!item) + return QQuickFocusFrameDescription::Invalid; + if (QQuickStyleItem *styleItem = qobject_cast(item)) + return { target, QQuickStyleMargins(styleItem->layoutMargins()), styleItem->focusFrameRadius() }; + + // Some controls don't have a QQuickStyleItem. But if the __focusFrameStyleItem + // has a "__isDefaultDelegate" property set, we show a default focus frame instead. + if (item->property("__isDefaultDelegate").toBool() == true) { + qCDebug(lcFocusFrame) << "'__isDefaultDelegate' property found, showing a default focus frame"; + const QStyleOption opt; + const qreal radius = QQuickNativeStyle::style()->pixelMetric(QStyle::PM_TextFieldFocusFrameRadius, &opt); + return { target, QQuickStyleMargins(), radius }; + } + + // The application has set a custom delegate on the control. In that + // case, it's the delegates responsibility to draw a focus frame. + qCDebug(lcFocusFrame) << "custom delegates in use, skip showing focus frame"; + return QQuickFocusFrameDescription::Invalid; +} + +QT_END_NAMESPACE diff --git a/src/quicknativestyle/util/util.pri b/src/quicknativestyle/util/util.pri new file mode 100644 index 00000000..96786eac --- /dev/null +++ b/src/quicknativestyle/util/util.pri @@ -0,0 +1,11 @@ +INCLUDEPATH += $$PWD + +macos { + HEADERS += \ + $$PWD/qquickmacfocusframe.h \ + + SOURCES += \ + $$PWD/qquickmacfocusframe.mm \ + + RESOURCES += $$PWD/FocusFrame.qml +} diff --git a/src/quicktemplates2/CMakeLists.txt b/src/quicktemplates2/CMakeLists.txt index 4f4bf552..b326e467 100644 --- a/src/quicktemplates2/CMakeLists.txt +++ b/src/quicktemplates2/CMakeLists.txt @@ -1,10 +1,16 @@ -# Generated from quicktemplates2.pro. - ##################################################################### ## QuickTemplates2 Module: ##################################################################### -qt_internal_add_module(QuickTemplates2 +qt_internal_add_qml_module(QuickTemplates2 + URI "QtQuick.Templates" + VERSION "${PROJECT_VERSION}" + CLASSNAME QtQuickTemplates2Plugin + DEPENDENCIES + QtQuick/auto + PLUGIN_TARGET qtquicktemplates2plugin + NO_PLUGIN_OPTIONAL + NO_GENERATE_PLUGIN_SOURCE SOURCES accessible/qaccessiblequickpage.cpp accessible/qaccessiblequickpage_p.h qquickabstractbutton.cpp qquickabstractbutton_p.h @@ -131,16 +137,6 @@ qt_internal_add_module(QuickTemplates2 Qt::Quick ) -#### Keys ignored in scope 1:.:.:quicktemplates2.pro:: -# MODULE = "quicktemplates2" -# QMLTYPES_FILENAME = "plugins.qmltypes" -# QMLTYPES_INSTALL_DIR = "$$[QT_INSTALL_QML]/QtQuick/Templates" -# QML_IMPORT_NAME = "QtQuick.Templates" -# QML_IMPORT_VERSION = "$$QT_VERSION" - -## Scopes: -##################################################################### - qt_internal_extend_target(QuickTemplates2 CONDITION TARGET Qt::QmlModels LIBRARIES Qt::QmlModelsPrivate @@ -156,12 +152,9 @@ qt_internal_extend_target(QuickTemplates2 CONDITION QT_FEATURE_quick_listview AN qquicktumbler_p_p.h ) -set_target_properties(QuickTemplates2 PROPERTIES - QT_QML_MODULE_INSTALL_QMLTYPES TRUE - QT_QML_MODULE_VERSION ${PROJECT_VERSION} - QT_QML_MODULE_URI QtQuick.Templates - QT_QMLTYPES_FILENAME plugins.qmltypes - QT_QML_MODULE_INSTALL_DIR "${INSTALL_QMLDIR}/QtQuick/Templates" +qt_internal_extend_Target(qtquicktemplates2plugin + SOURCES + qtquicktemplates2plugin.cpp + LIBRARIES + Qt::QuickTemplates2Private ) - -qt6_qml_type_registration(QuickTemplates2) diff --git a/src/quicktemplates2/doc/src/qtquicktemplates2-index.qdoc b/src/quicktemplates2/doc/src/qtquicktemplates2-index.qdoc new file mode 100644 index 00000000..c7e25548 --- /dev/null +++ b/src/quicktemplates2/doc/src/qtquicktemplates2-index.qdoc @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtquicktemplates2-index.html + \title Qt Quick Templates 2 + \brief A set of templates to create user interface controls in Qt Quick + + Qt Quick Templates are the foundations of \l {Qt Quick Controls}. Templates + are non-visual implementations of controls' logic and behavior. They offer + an interface to visualize the controls in QML using \l {Qt Quick}. + + Even though the templates aim to be as style-agnostic as possible, in some + cases they have to make certain assumptions about the visual structure of + a control. For example, a spinbox has buttons that increment and decrement + the value of the spinbox. In order to implement the behavior of a spinbox, + the spinbox template needs to know if the user is interacting with the up + or down button. A visual implementation of the spinbox template merely needs + to position the up and down buttons and visualize them in normal, pressed, + and disabled states. Any input event handling and state processing is taken + care of by the underlying template. + + \section1 Module Evolution + \l{Changes to Qt Quick Controls} lists important changes in the + module API and functionality that were done for the Qt 6 series of Qt. + + \section1 Related Information + + \list + \li \l{Qt Quick} + \li \l{Qt Quick Controls} + \li \l{Qt Quick Templates 2 QML Types} + \endlist +*/ diff --git a/src/quicktemplates2/doc/src/qtquicktemplates2-qmltypes.qdoc b/src/quicktemplates2/doc/src/qtquicktemplates2-qmltypes.qdoc new file mode 100644 index 00000000..396dbdc5 --- /dev/null +++ b/src/quicktemplates2/doc/src/qtquicktemplates2-qmltypes.qdoc @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Free Documentation License Usage +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. Please review the following information to ensure +** the GNU Free Documentation License version 1.3 requirements +** will be met: https://www.gnu.org/licenses/fdl-1.3.html. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \qmlmodule QtQuick.Templates 2.\QtMinorVersion + \title Qt Quick Templates 2 QML Types + \ingroup qmlmodules + \brief Provides QML types for templates (Qt Quick Templates). + + The \l {Qt Quick Templates 2} module provides a set of non-visual templates + that can be used to build user interface controls in QML using \l {Qt Quick}. + + The QML types can be imported using the following import statement in your + \c .qml file: + + \qml + import QtQuick.Templates as T + \endqml + + For the sake of clarity, there is a one-to-one mapping between the types + provided by the \c QtQuick.Templates and \c QtQuick.Controls imports. For + every type available in the \c QtQuick.Controls import, a non-visual template + type by the same name exists in the \c QtQuick.Templates import. + + \note It is recommended to use a namespace for the templates import to avoid + overlap with the types provided by the \c QtQuick.Controls import. + + \section1 QML Types + + \generatelist {qmltypesbymodule QtQuick.Controls} + + \section1 Related Information + + \list + \li \l {Qt Quick Controls QML Types} + \li \l {Using Qt Quick Controls types in property declarations} + \endlist + + \noautolist +*/ diff --git a/src/quicktemplates2/qtquicktemplates2plugin.cpp b/src/quicktemplates2/qtquicktemplates2plugin.cpp new file mode 100644 index 00000000..da89601d --- /dev/null +++ b/src/quicktemplates2/qtquicktemplates2plugin.cpp @@ -0,0 +1,106 @@ +/**************************************************************************** +** +** Copyright (C) 2020 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the Qt Quick Templates 2 module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL3$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +#if QT_CONFIG(shortcut) +#include + +// qtdeclarative/src/quick/util/qquickshortcut.cpp +typedef bool (*ShortcutContextMatcher)(QObject *, Qt::ShortcutContext); +extern ShortcutContextMatcher qt_quick_shortcut_context_matcher(); +extern void qt_quick_set_shortcut_context_matcher(ShortcutContextMatcher matcher); +#endif + +QT_BEGIN_NAMESPACE + +class QtQuickTemplates2Plugin : public QQmlExtensionPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) + +public: + QtQuickTemplates2Plugin(QObject *parent = nullptr); + ~QtQuickTemplates2Plugin(); + + void registerTypes(const char *uri) override; + void unregisterTypes() override; + +private: + bool registered; +#if QT_CONFIG(shortcut) + ShortcutContextMatcher originalContextMatcher; +#endif +}; + +QtQuickTemplates2Plugin::QtQuickTemplates2Plugin(QObject *parent) + : QQmlExtensionPlugin(parent), registered(false) +{ + volatile auto registration = &qml_register_types_QtQuick_Templates; + volatile auto initialization = &QQuickTemplates_initializeModule; + + Q_UNUSED(registration) + Q_UNUSED(initialization) +} + +QtQuickTemplates2Plugin::~QtQuickTemplates2Plugin() +{ + // Intentionally empty: we use register/unregisterTypes() to do + // initialization and cleanup, as plugins are not unloaded on macOS. +} + +void QtQuickTemplates2Plugin::registerTypes(const char */*uri*/) +{ +#if QT_CONFIG(shortcut) + originalContextMatcher = qt_quick_shortcut_context_matcher(); + qt_quick_set_shortcut_context_matcher(QQuickShortcutContext::matcher); +#endif + + registered = true; +} + +void QtQuickTemplates2Plugin::unregisterTypes() +{ +#if QT_CONFIG(shortcut) + qt_quick_set_shortcut_context_matcher(originalContextMatcher); +#endif +} + +QT_END_NAMESPACE + +#include "qtquicktemplates2plugin.moc" diff --git a/tests/auto/accessibility/CMakeLists.txt b/tests/auto/accessibility/CMakeLists.txt index 3286653f..596bf3b9 100644 --- a/tests/auto/accessibility/CMakeLists.txt +++ b/tests/auto/accessibility/CMakeLists.txt @@ -21,7 +21,7 @@ qt_internal_add_test(tst_accessibility ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_accessibility.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/auto/cursor/CMakeLists.txt b/tests/auto/cursor/CMakeLists.txt index a04e9b44..5f02758c 100644 --- a/tests/auto/cursor/CMakeLists.txt +++ b/tests/auto/cursor/CMakeLists.txt @@ -17,7 +17,7 @@ qt_internal_add_test(tst_cursor ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_cursor.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/auto/customization/CMakeLists.txt b/tests/auto/customization/CMakeLists.txt index 341e6415..54e689f4 100644 --- a/tests/auto/customization/CMakeLists.txt +++ b/tests/auto/customization/CMakeLists.txt @@ -17,7 +17,7 @@ qt_internal_add_test(tst_customization ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_customization.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/auto/dialogs/qquickfiledialogimpl/CMakeLists.txt b/tests/auto/dialogs/qquickfiledialogimpl/CMakeLists.txt index 631cb9e8..22e64546 100644 --- a/tests/auto/dialogs/qquickfiledialogimpl/CMakeLists.txt +++ b/tests/auto/dialogs/qquickfiledialogimpl/CMakeLists.txt @@ -11,7 +11,7 @@ qt_internal_add_test(tst_qquickfiledialogimpl ../../shared/visualtestutil.cpp ../../shared/visualtestutil.h tst_qquickfiledialogimpl.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/auto/focus/CMakeLists.txt b/tests/auto/focus/CMakeLists.txt index 1d15e0fb..b9932df1 100644 --- a/tests/auto/focus/CMakeLists.txt +++ b/tests/auto/focus/CMakeLists.txt @@ -17,7 +17,7 @@ qt_internal_add_test(tst_focus ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_focus.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/auto/font/CMakeLists.txt b/tests/auto/font/CMakeLists.txt index a9904abc..2f356eee 100644 --- a/tests/auto/font/CMakeLists.txt +++ b/tests/auto/font/CMakeLists.txt @@ -17,7 +17,7 @@ qt_internal_add_test(tst_font ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_font.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/auto/palette/CMakeLists.txt b/tests/auto/palette/CMakeLists.txt index d281db94..a924fd16 100644 --- a/tests/auto/palette/CMakeLists.txt +++ b/tests/auto/palette/CMakeLists.txt @@ -17,7 +17,7 @@ qt_internal_add_test(tst_palette ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_palette.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/auto/qquickapplicationwindow/CMakeLists.txt b/tests/auto/qquickapplicationwindow/CMakeLists.txt index 4d4c91ef..1c346d15 100644 --- a/tests/auto/qquickapplicationwindow/CMakeLists.txt +++ b/tests/auto/qquickapplicationwindow/CMakeLists.txt @@ -17,7 +17,7 @@ qt_internal_add_test(tst_qquickapplicationwindow ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_qquickapplicationwindow.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/auto/qquickcontrol/CMakeLists.txt b/tests/auto/qquickcontrol/CMakeLists.txt index 2a580031..3448a8c7 100644 --- a/tests/auto/qquickcontrol/CMakeLists.txt +++ b/tests/auto/qquickcontrol/CMakeLists.txt @@ -17,7 +17,7 @@ qt_internal_add_test(tst_qquickcontrol ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_qquickcontrol.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/auto/qquickdrawer/CMakeLists.txt b/tests/auto/qquickdrawer/CMakeLists.txt index 9e1057d4..812e4d20 100644 --- a/tests/auto/qquickdrawer/CMakeLists.txt +++ b/tests/auto/qquickdrawer/CMakeLists.txt @@ -17,7 +17,7 @@ qt_internal_add_test(tst_qquickdrawer ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_qquickdrawer.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/auto/qquickheaderview/CMakeLists.txt b/tests/auto/qquickheaderview/CMakeLists.txt index 62b0211e..9f428a48 100644 --- a/tests/auto/qquickheaderview/CMakeLists.txt +++ b/tests/auto/qquickheaderview/CMakeLists.txt @@ -17,7 +17,7 @@ qt_internal_add_test(tst_qquickheaderview ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_qquickheaderview.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/auto/qquickiconimage/CMakeLists.txt b/tests/auto/qquickiconimage/CMakeLists.txt index d5d9b5a1..dbe810ac 100644 --- a/tests/auto/qquickiconimage/CMakeLists.txt +++ b/tests/auto/qquickiconimage/CMakeLists.txt @@ -21,7 +21,7 @@ qt_internal_add_test(tst_qquickiconimage ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_qquickiconimage.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" LIBRARIES Qt::QuickControls2ImplPrivate Qt::QuickPrivate diff --git a/tests/auto/qquickiconlabel/CMakeLists.txt b/tests/auto/qquickiconlabel/CMakeLists.txt index ef7ba099..a26abc48 100644 --- a/tests/auto/qquickiconlabel/CMakeLists.txt +++ b/tests/auto/qquickiconlabel/CMakeLists.txt @@ -17,7 +17,7 @@ qt_internal_add_test(tst_qquickiconlabel ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_qquickiconlabel.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" LIBRARIES Qt::QuickControls2ImplPrivate Qt::QuickPrivate diff --git a/tests/auto/qquickmaterialstyleconf/CMakeLists.txt b/tests/auto/qquickmaterialstyleconf/CMakeLists.txt index 670d1bb6..72d848dc 100644 --- a/tests/auto/qquickmaterialstyleconf/CMakeLists.txt +++ b/tests/auto/qquickmaterialstyleconf/CMakeLists.txt @@ -17,7 +17,7 @@ qt_internal_add_test(tst_qquickmaterialstyleconf ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_qquickmaterialstyleconf.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/auto/qquickmenu/CMakeLists.txt b/tests/auto/qquickmenu/CMakeLists.txt index 4a409a61..10c28116 100644 --- a/tests/auto/qquickmenu/CMakeLists.txt +++ b/tests/auto/qquickmenu/CMakeLists.txt @@ -17,7 +17,7 @@ qt_internal_add_test(tst_qquickmenu ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_qquickmenu.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/auto/qquickmenubar/CMakeLists.txt b/tests/auto/qquickmenubar/CMakeLists.txt index c960f855..97575129 100644 --- a/tests/auto/qquickmenubar/CMakeLists.txt +++ b/tests/auto/qquickmenubar/CMakeLists.txt @@ -17,7 +17,7 @@ qt_internal_add_test(tst_qquickmenubar ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_qquickmenubar.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/auto/qquickninepatchimage/CMakeLists.txt b/tests/auto/qquickninepatchimage/CMakeLists.txt index 7e98f012..9d041643 100644 --- a/tests/auto/qquickninepatchimage/CMakeLists.txt +++ b/tests/auto/qquickninepatchimage/CMakeLists.txt @@ -21,7 +21,7 @@ qt_internal_add_test(tst_qquickninepatchimage ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_qquickninepatchimage.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" LIBRARIES Qt::GuiPrivate Qt::QuickControls2Private diff --git a/tests/auto/qquickpopup/CMakeLists.txt b/tests/auto/qquickpopup/CMakeLists.txt index 20adc5db..6fb43676 100644 --- a/tests/auto/qquickpopup/CMakeLists.txt +++ b/tests/auto/qquickpopup/CMakeLists.txt @@ -17,7 +17,7 @@ qt_internal_add_test(tst_qquickpopup ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_qquickpopup.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/auto/qquickstyle/CMakeLists.txt b/tests/auto/qquickstyle/CMakeLists.txt index 258db4cc..93b63a19 100644 --- a/tests/auto/qquickstyle/CMakeLists.txt +++ b/tests/auto/qquickstyle/CMakeLists.txt @@ -17,7 +17,7 @@ qt_internal_add_test(tst_qquickstyle ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_qquickstyle.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" LIBRARIES Qt::CorePrivate Qt::GuiPrivate diff --git a/tests/auto/qquickuniversalstyleconf/CMakeLists.txt b/tests/auto/qquickuniversalstyleconf/CMakeLists.txt index eaa7b473..6aeeaa32 100644 --- a/tests/auto/qquickuniversalstyleconf/CMakeLists.txt +++ b/tests/auto/qquickuniversalstyleconf/CMakeLists.txt @@ -17,7 +17,7 @@ qt_internal_add_test(tst_qquickuniversalstyleconf ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_qquickuniversalstyleconf.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/auto/sanity/CMakeLists.txt b/tests/auto/sanity/CMakeLists.txt index 85c3bc06..804640b7 100644 --- a/tests/auto/sanity/CMakeLists.txt +++ b/tests/auto/sanity/CMakeLists.txt @@ -11,7 +11,7 @@ qt_internal_add_test(tst_sanity ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_sanity.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/auto/sanity/tst_sanity.cpp b/tests/auto/sanity/tst_sanity.cpp index 8ec590e5..a19319b3 100644 --- a/tests/auto/sanity/tst_sanity.cpp +++ b/tests/auto/sanity/tst_sanity.cpp @@ -171,10 +171,10 @@ void tst_Sanity::initTestCase() // Then, collect the files from each installed style directory. const QVector> styleRelativePaths = { - { "controls/basic", "QtQuick/Controls/Basic" }, - { "controls/fusion", "QtQuick/Controls/Fusion" }, - { "controls/material", "QtQuick/Controls/Material" }, - { "controls/universal", "QtQuick/Controls/Universal" }, + { "quickcontrols2/basic", "QtQuick/Controls/Basic" }, + { "quickcontrols2/fusion", "QtQuick/Controls/Fusion" }, + { "quickcontrols2/material", "QtQuick/Controls/Material" }, + { "quickcontrols2/universal", "QtQuick/Controls/Universal" }, }; for (const auto &stylePathPair : styleRelativePaths) { forEachControl(&engine, stylePathPair.first, stylePathPair.second, QStringList(), diff --git a/tests/auto/shared/util.pri b/tests/auto/shared/util.pri index 3e270f06..6366776b 100644 --- a/tests/auto/shared/util.pri +++ b/tests/auto/shared/util.pri @@ -11,4 +11,4 @@ android|ios { } else { DEFINES += QT_QMLTEST_DATADIR=\\\"$${_PRO_FILE_PWD_}/data\\\" } -DEFINES += QQC2_IMPORT_PATH=\\\"$$QQC2_SOURCE_TREE/src/imports\\\" +DEFINES += QQC2_IMPORT_PATH=\\\"$$QQC2_SOURCE_TREE/src\\\" diff --git a/tests/auto/shared/visualtestutil.h b/tests/auto/shared/visualtestutil.h index 76c44821..4fdab95d 100644 --- a/tests/auto/shared/visualtestutil.h +++ b/tests/auto/shared/visualtestutil.h @@ -154,6 +154,7 @@ namespace QQuickVisualTestUtil QQmlComponent component(&engine); component.loadUrl(testCase->testFileUrl(testFilePath)); + QVERIFY2(component.isReady(), qPrintable(component.errorString())); QObject *rootObject = component.createWithInitialProperties(initialProperties); cleanup.reset(rootObject); if (component.isError() || !rootObject) { diff --git a/tests/auto/snippets/CMakeLists.txt b/tests/auto/snippets/CMakeLists.txt index cecbbc79..a8d02b7d 100644 --- a/tests/auto/snippets/CMakeLists.txt +++ b/tests/auto/snippets/CMakeLists.txt @@ -14,7 +14,7 @@ qt_internal_add_test(tst_snippets SOURCES tst_snippets.cpp DEFINES - QQC2_SNIPPETS_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports/controls/doc/snippets\\\" + QQC2_SNIPPETS_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/quickcontrols2/doc/snippets\\\" PUBLIC_LIBRARIES Qt::Gui Qt::Quick diff --git a/tests/auto/styleimports/CMakeLists.txt b/tests/auto/styleimports/CMakeLists.txt index fb15608e..ee626ac5 100644 --- a/tests/auto/styleimports/CMakeLists.txt +++ b/tests/auto/styleimports/CMakeLists.txt @@ -17,7 +17,7 @@ qt_internal_add_test(tst_styleimports ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_styleimports.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/auto/styleimportscompiletimematerial/CMakeLists.txt b/tests/auto/styleimportscompiletimematerial/CMakeLists.txt index 207f4091..8ea0508b 100644 --- a/tests/auto/styleimportscompiletimematerial/CMakeLists.txt +++ b/tests/auto/styleimportscompiletimematerial/CMakeLists.txt @@ -17,7 +17,7 @@ qt_internal_add_test(tst_styleimportscompiletimematerial ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_styleimportscompiletimematerial.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/auto/styleimportscompiletimeqmlonly/CMakeLists.txt b/tests/auto/styleimportscompiletimeqmlonly/CMakeLists.txt index cdbbf9e8..40dc8dca 100644 --- a/tests/auto/styleimportscompiletimeqmlonly/CMakeLists.txt +++ b/tests/auto/styleimportscompiletimeqmlonly/CMakeLists.txt @@ -17,7 +17,7 @@ qt_internal_add_test(tst_styleimportscompiletimeqmlonly ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_styleimportscompiletimeqmlonly.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/auto/translation/CMakeLists.txt b/tests/auto/translation/CMakeLists.txt index 783a5072..9a2a1bf1 100644 --- a/tests/auto/translation/CMakeLists.txt +++ b/tests/auto/translation/CMakeLists.txt @@ -17,7 +17,7 @@ qt_internal_add_test(tst_translation ../shared/visualtestutil.cpp ../shared/visualtestutil.h tst_translation.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/benchmarks/creationtime/CMakeLists.txt b/tests/benchmarks/creationtime/CMakeLists.txt index 02452b54..51880533 100644 --- a/tests/benchmarks/creationtime/CMakeLists.txt +++ b/tests/benchmarks/creationtime/CMakeLists.txt @@ -11,7 +11,7 @@ qt_internal_add_test(tst_creationtime ../../auto/shared/visualtestutil.cpp ../../auto/shared/visualtestutil.h tst_creationtime.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/benchmarks/creationtime/tst_creationtime.cpp b/tests/benchmarks/creationtime/tst_creationtime.cpp index 87869bca..f5383716 100644 --- a/tests/benchmarks/creationtime/tst_creationtime.cpp +++ b/tests/benchmarks/creationtime/tst_creationtime.cpp @@ -111,7 +111,7 @@ void tst_CreationTime::basicStyle() void tst_CreationTime::basicStyle_data() { QTest::addColumn("url"); - addTestRowForEachControl(styleHelper.engine.data(), "controls/basic", "QtQuick/Controls/Basic", QStringList() << "ApplicationWindow"); + addTestRowForEachControl(styleHelper.engine.data(), "quickcontrols2/basic", "QtQuick/Controls/Basic", QStringList() << "ApplicationWindow"); } void tst_CreationTime::fusion() @@ -123,7 +123,7 @@ void tst_CreationTime::fusion() void tst_CreationTime::fusion_data() { QTest::addColumn("url"); - addTestRowForEachControl(styleHelper.engine.data(), "controls/fusion", "QtQuick/Controls/Fusion", QStringList() << "ApplicationWindow" << "ButtonPanel" << "CheckIndicator" << "RadioIndicator" << "SliderGroove" << "SliderHandle" << "SwitchIndicator"); + addTestRowForEachControl(styleHelper.engine.data(), "quickcontrols2/fusion", "QtQuick/Controls/Fusion", QStringList() << "ApplicationWindow" << "ButtonPanel" << "CheckIndicator" << "RadioIndicator" << "SliderGroove" << "SliderHandle" << "SwitchIndicator"); } void tst_CreationTime::imagine() @@ -135,7 +135,7 @@ void tst_CreationTime::imagine() void tst_CreationTime::imagine_data() { QTest::addColumn("url"); - addTestRowForEachControl(styleHelper.engine.data(), "controls/imagine", "QtQuick/Controls/Imagine", QStringList() << "ApplicationWindow"); + addTestRowForEachControl(styleHelper.engine.data(), "quickcontrols2/imagine", "QtQuick/Controls/Imagine", QStringList() << "ApplicationWindow"); } void tst_CreationTime::material() @@ -147,7 +147,7 @@ void tst_CreationTime::material() void tst_CreationTime::material_data() { QTest::addColumn("url"); - addTestRowForEachControl(styleHelper.engine.data(), "controls/material", "QtQuick/Controls/Material", QStringList() << "ApplicationWindow" << "Ripple" << "SliderHandle" << "CheckIndicator" << "RadioIndicator" << "SwitchIndicator" << "BoxShadow" << "ElevationEffect" << "CursorDelegate"); + addTestRowForEachControl(styleHelper.engine.data(), "quickcontrols2/material", "QtQuick/Controls/Material", QStringList() << "ApplicationWindow" << "Ripple" << "SliderHandle" << "CheckIndicator" << "RadioIndicator" << "SwitchIndicator" << "BoxShadow" << "ElevationEffect" << "CursorDelegate"); } void tst_CreationTime::universal() @@ -159,7 +159,7 @@ void tst_CreationTime::universal() void tst_CreationTime::universal_data() { QTest::addColumn("url"); - addTestRowForEachControl(styleHelper.engine.data(), "controls/universal", "QtQuick/Controls/Universal", QStringList() << "ApplicationWindow" << "CheckIndicator" << "RadioIndicator" << "SwitchIndicator"); + addTestRowForEachControl(styleHelper.engine.data(), "quickcontrols2/universal", "QtQuick/Controls/Universal", QStringList() << "ApplicationWindow" << "CheckIndicator" << "RadioIndicator" << "SwitchIndicator"); } QTEST_MAIN(tst_CreationTime) diff --git a/tests/benchmarks/objectcount/CMakeLists.txt b/tests/benchmarks/objectcount/CMakeLists.txt index bcd0a2ed..122842cd 100644 --- a/tests/benchmarks/objectcount/CMakeLists.txt +++ b/tests/benchmarks/objectcount/CMakeLists.txt @@ -11,7 +11,7 @@ qt_internal_add_test(tst_objectcount ../../auto/shared/visualtestutil.cpp ../../auto/shared/visualtestutil.h tst_objectcount.cpp DEFINES - QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src/imports\\\" + QQC2_IMPORT_PATH=\\\"${CMAKE_CURRENT_SOURCE_DIR}/../../../src\\\" PUBLIC_LIBRARIES Qt::CorePrivate Qt::Gui diff --git a/tests/benchmarks/objectcount/tst_objectcount.cpp b/tests/benchmarks/objectcount/tst_objectcount.cpp index cd8b4aee..c8d29486 100644 --- a/tests/benchmarks/objectcount/tst_objectcount.cpp +++ b/tests/benchmarks/objectcount/tst_objectcount.cpp @@ -93,11 +93,11 @@ void tst_ObjectCount::cleanup() static void initTestRows(QQmlEngine *engine) { - addTestRowForEachControl(engine, "controls/basic", "QtQuick/Controls/Basic"); - addTestRowForEachControl(engine, "controls/fusion", "QtQuick/Controls/Fusion", QStringList() << "ButtonPanel" << "CheckIndicator" << "RadioIndicator" << "SliderGroove" << "SliderHandle" << "SwitchIndicator"); - addTestRowForEachControl(engine, "controls/imagine", "QtQuick/Controls/Imagine"); - addTestRowForEachControl(engine, "controls/material", "QtQuick/Controls/Material", QStringList() << "Ripple" << "SliderHandle" << "CheckIndicator" << "RadioIndicator" << "SwitchIndicator" << "BoxShadow" << "ElevationEffect" << "CursorDelegate"); - addTestRowForEachControl(engine, "controls/universal", "QtQuick/Controls/Universal", QStringList() << "CheckIndicator" << "RadioIndicator" << "SwitchIndicator"); + addTestRowForEachControl(engine, "quickcontrols2/basic", "QtQuick/Controls/Basic"); + addTestRowForEachControl(engine, "quickcontrols2/fusion", "QtQuick/Controls/Fusion", QStringList() << "ButtonPanel" << "CheckIndicator" << "RadioIndicator" << "SliderGroove" << "SliderHandle" << "SwitchIndicator"); + addTestRowForEachControl(engine, "quickcontrols2/imagine", "QtQuick/Controls/Imagine"); + addTestRowForEachControl(engine, "quickcontrols2/material", "QtQuick/Controls/Material", QStringList() << "Ripple" << "SliderHandle" << "CheckIndicator" << "RadioIndicator" << "SwitchIndicator" << "BoxShadow" << "ElevationEffect" << "CursorDelegate"); + addTestRowForEachControl(engine, "quickcontrols2/universal", "QtQuick/Controls/Universal", QStringList() << "CheckIndicator" << "RadioIndicator" << "SwitchIndicator"); } template -- cgit v1.2.3